@excalidraw/excalidraw 0.17.1-d9bbf1e → 0.17.1-e63dd02

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 (416) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/browser/dev/excalidraw-assets-dev/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
  3. package/dist/browser/dev/excalidraw-assets-dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  4. package/dist/browser/dev/excalidraw-assets-dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  5. package/dist/browser/dev/excalidraw-assets-dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  6. package/dist/browser/dev/excalidraw-assets-dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  7. package/dist/browser/dev/excalidraw-assets-dev/{chunk-XOM7LNOU.js → chunk-IT7T3AIK.js} +49 -8
  8. package/dist/browser/dev/excalidraw-assets-dev/chunk-IT7T3AIK.js.map +7 -0
  9. package/dist/browser/dev/excalidraw-assets-dev/{chunk-BLEB3M62.js → chunk-RNHSD5AR.js} +7668 -2142
  10. package/dist/browser/dev/excalidraw-assets-dev/chunk-RNHSD5AR.js.map +7 -0
  11. package/dist/browser/dev/excalidraw-assets-dev/{dist-ITJNUBZF.js → dist-DNSPZDOZ.js} +66 -32
  12. package/dist/browser/dev/excalidraw-assets-dev/dist-DNSPZDOZ.js.map +7 -0
  13. package/dist/browser/dev/excalidraw-assets-dev/{en-TR4QLF5E.js → en-XV7OZCPP.js} +8 -2
  14. package/dist/browser/dev/excalidraw-assets-dev/{image-ZGDDRBEN.js → image-77HZYGLG.js} +2 -2
  15. package/dist/browser/dev/excalidraw-assets-dev/{image-O66MQ7WQ.css → image-WDHYGKKP.css} +1 -1
  16. package/dist/browser/dev/excalidraw-assets-dev/{image-O66MQ7WQ.css.map → image-WDHYGKKP.css.map} +2 -2
  17. package/dist/browser/dev/index.css +610 -180
  18. package/dist/browser/dev/index.css.map +3 -3
  19. package/dist/browser/dev/index.js +13306 -8006
  20. package/dist/browser/dev/index.js.map +4 -4
  21. package/dist/browser/prod/excalidraw-assets/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
  22. package/dist/browser/prod/excalidraw-assets/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  23. package/dist/browser/prod/excalidraw-assets/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  24. package/dist/browser/prod/excalidraw-assets/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  25. package/dist/browser/prod/excalidraw-assets/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  26. package/dist/browser/prod/excalidraw-assets/chunk-OYEADJSR.js +63 -0
  27. package/dist/browser/prod/excalidraw-assets/{chunk-5SYIAZGL.js → chunk-PDYFZJMS.js} +5 -5
  28. package/dist/browser/prod/excalidraw-assets/dist-NLUQPPQQ.js +7 -0
  29. package/dist/browser/prod/excalidraw-assets/en-YVAVVILW.js +1 -0
  30. package/dist/browser/prod/excalidraw-assets/image-X3GFZHNN.js +1 -0
  31. package/dist/browser/prod/index.css +1 -1
  32. package/dist/browser/prod/index.js +70 -51
  33. package/dist/dev/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
  34. package/dist/dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  35. package/dist/dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  36. package/dist/dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  37. package/dist/dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  38. package/dist/dev/{en-XW4JO6VX.json → en-YNVBSAIL.json} +42 -7
  39. package/dist/dev/index.css +610 -180
  40. package/dist/dev/index.css.map +3 -3
  41. package/dist/dev/index.js +22165 -16833
  42. package/dist/dev/index.js.map +4 -4
  43. package/dist/excalidraw/actions/actionAddToLibrary.d.ts +24 -9
  44. package/dist/excalidraw/actions/actionAlign.d.ts +8 -8
  45. package/dist/excalidraw/actions/actionBoundText.d.ts +20 -10
  46. package/dist/excalidraw/actions/actionBoundText.js +3 -1
  47. package/dist/excalidraw/actions/actionCanvas.d.ts +100 -40
  48. package/dist/excalidraw/actions/actionCanvas.js +1 -1
  49. package/dist/excalidraw/actions/actionClipboard.d.ts +62 -26
  50. package/dist/excalidraw/actions/actionDeleteSelected.d.ts +28 -12
  51. package/dist/excalidraw/actions/actionDeleteSelected.js +24 -5
  52. package/dist/excalidraw/actions/actionDistribute.d.ts +4 -4
  53. package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +3 -3
  54. package/dist/excalidraw/actions/actionDuplicateSelection.js +1 -2
  55. package/dist/excalidraw/actions/actionElementLock.d.ts +17 -7
  56. package/dist/excalidraw/actions/actionExport.d.ts +75 -30
  57. package/dist/excalidraw/actions/actionFinalize.d.ts +17 -7
  58. package/dist/excalidraw/actions/actionFinalize.js +2 -2
  59. package/dist/excalidraw/actions/actionFlip.d.ts +4 -4
  60. package/dist/excalidraw/actions/actionFlip.js +2 -2
  61. package/dist/excalidraw/actions/actionFrame.d.ts +338 -10
  62. package/dist/excalidraw/actions/actionGroup.d.ts +324 -4
  63. package/dist/excalidraw/actions/actionHistory.d.ts +3 -3
  64. package/dist/excalidraw/actions/actionHistory.js +8 -8
  65. package/dist/excalidraw/actions/actionLinearEditor.d.ts +12 -5
  66. package/dist/excalidraw/actions/actionLinearEditor.js +21 -5
  67. package/dist/excalidraw/actions/actionLink.d.ts +8 -3
  68. package/dist/excalidraw/actions/actionMenu.d.ts +24 -9
  69. package/dist/excalidraw/actions/actionNavigate.d.ts +17 -7
  70. package/dist/excalidraw/actions/actionProperties.d.ts +476 -82
  71. package/dist/excalidraw/actions/actionProperties.js +384 -59
  72. package/dist/excalidraw/actions/actionSelectAll.d.ts +9 -4
  73. package/dist/excalidraw/actions/actionStyles.d.ts +12 -4
  74. package/dist/excalidraw/actions/actionStyles.js +3 -2
  75. package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
  76. package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
  77. package/dist/excalidraw/actions/actionToggleGridMode.d.ts +9 -4
  78. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +8 -3
  79. package/dist/excalidraw/actions/actionToggleStats.d.ts +9 -3
  80. package/dist/excalidraw/actions/actionToggleStats.js +4 -3
  81. package/dist/excalidraw/actions/actionToggleViewMode.d.ts +8 -3
  82. package/dist/excalidraw/actions/actionToggleZenMode.d.ts +8 -3
  83. package/dist/excalidraw/actions/actionZindex.d.ts +8 -4
  84. package/dist/excalidraw/actions/actionZindex.js +4 -0
  85. package/dist/excalidraw/actions/manager.d.ts +3 -3
  86. package/dist/excalidraw/actions/register.d.ts +1 -1
  87. package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
  88. package/dist/excalidraw/actions/types.d.ts +6 -6
  89. package/dist/excalidraw/align.d.ts +1 -1
  90. package/dist/excalidraw/analytics.js +9 -7
  91. package/dist/excalidraw/animated-trail.d.ts +2 -2
  92. package/dist/excalidraw/appState.d.ts +6 -2
  93. package/dist/excalidraw/appState.js +14 -3
  94. package/dist/excalidraw/binaryheap.d.ts +12 -0
  95. package/dist/excalidraw/binaryheap.js +93 -0
  96. package/dist/excalidraw/change.d.ts +6 -5
  97. package/dist/excalidraw/change.js +20 -11
  98. package/dist/excalidraw/charts.d.ts +1 -1
  99. package/dist/excalidraw/charts.js +0 -10
  100. package/dist/excalidraw/clients.d.ts +2 -2
  101. package/dist/excalidraw/clients.js +1 -1
  102. package/dist/excalidraw/clipboard.d.ts +3 -3
  103. package/dist/excalidraw/colors.d.ts +1 -1
  104. package/dist/excalidraw/components/Actions.d.ts +3 -3
  105. package/dist/excalidraw/components/Actions.js +14 -9
  106. package/dist/excalidraw/components/App.d.ts +14 -17
  107. package/dist/excalidraw/components/App.js +356 -217
  108. package/dist/excalidraw/components/ButtonIcon.d.ts +15 -0
  109. package/dist/excalidraw/components/ButtonIcon.js +8 -0
  110. package/dist/excalidraw/components/ButtonIconSelect.js +2 -3
  111. package/dist/excalidraw/components/ButtonSeparator.d.ts +2 -0
  112. package/dist/excalidraw/components/ButtonSeparator.js +7 -0
  113. package/dist/excalidraw/components/CheckboxItem.js +1 -1
  114. package/dist/excalidraw/components/ColorPicker/ColorInput.d.ts +1 -1
  115. package/dist/excalidraw/components/ColorPicker/ColorInput.js +1 -1
  116. package/dist/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
  117. package/dist/excalidraw/components/ColorPicker/ColorPicker.js +48 -80
  118. package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
  119. package/dist/excalidraw/components/ColorPicker/Picker.js +1 -1
  120. package/dist/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
  121. package/dist/excalidraw/components/ColorPicker/PickerHeading.d.ts +1 -1
  122. package/dist/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
  123. package/dist/excalidraw/components/ColorPicker/TopPicks.d.ts +1 -1
  124. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +2 -2
  125. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
  126. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
  127. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.js +1 -1
  128. package/dist/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
  129. package/dist/excalidraw/components/CommandPalette/CommandPalette.js +5 -5
  130. package/dist/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -1
  131. package/dist/excalidraw/components/CommandPalette/types.d.ts +3 -3
  132. package/dist/excalidraw/components/ConfirmDialog.d.ts +1 -1
  133. package/dist/excalidraw/components/ContextMenu.d.ts +2 -2
  134. package/dist/excalidraw/components/ContextMenu.js +2 -2
  135. package/dist/excalidraw/components/DarkModeToggle.d.ts +1 -1
  136. package/dist/excalidraw/components/DefaultSidebar.d.ts +2 -2
  137. package/dist/excalidraw/components/Dialog.js +1 -1
  138. package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
  139. package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
  140. package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
  141. package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
  142. package/dist/excalidraw/components/FontPicker/FontPicker.d.ts +21 -0
  143. package/dist/excalidraw/components/FontPicker/FontPicker.js +49 -0
  144. package/dist/excalidraw/components/FontPicker/FontPickerList.d.ts +25 -0
  145. package/dist/excalidraw/components/FontPicker/FontPickerList.js +119 -0
  146. package/dist/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +7 -0
  147. package/dist/excalidraw/components/FontPicker/FontPickerTrigger.js +13 -0
  148. package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +14 -0
  149. package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.js +38 -0
  150. package/dist/excalidraw/components/HelpDialog.js +2 -2
  151. package/dist/excalidraw/components/HintViewer.d.ts +1 -1
  152. package/dist/excalidraw/components/HintViewer.js +6 -3
  153. package/dist/excalidraw/components/IconPicker.js +2 -2
  154. package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
  155. package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
  156. package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
  157. package/dist/excalidraw/components/LayerUI.d.ts +4 -4
  158. package/dist/excalidraw/components/LayerUI.js +10 -7
  159. package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
  160. package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
  161. package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  162. package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
  163. package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
  164. package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
  165. package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
  166. package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
  167. package/dist/excalidraw/components/MagicSettings.js +2 -2
  168. package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
  169. package/dist/excalidraw/components/MobileMenu.js +2 -6
  170. package/dist/excalidraw/components/Modal.d.ts +1 -1
  171. package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  172. package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
  173. package/dist/excalidraw/components/PasteChartDialog.js +1 -1
  174. package/dist/excalidraw/components/PropertiesPopover.d.ts +15 -0
  175. package/dist/excalidraw/components/PropertiesPopover.js +31 -0
  176. package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
  177. package/dist/excalidraw/components/QuickSearch.d.ts +9 -0
  178. package/dist/excalidraw/components/QuickSearch.js +8 -0
  179. package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
  180. package/dist/excalidraw/components/ScrollableList.d.ts +9 -0
  181. package/dist/excalidraw/components/ScrollableList.js +8 -0
  182. package/dist/excalidraw/components/Sidebar/Sidebar.js +1 -1
  183. package/dist/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -1
  184. package/dist/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -1
  185. package/dist/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
  186. package/dist/excalidraw/components/Sidebar/common.d.ts +1 -1
  187. package/dist/excalidraw/components/Stats/Angle.d.ts +12 -0
  188. package/dist/excalidraw/components/Stats/Angle.js +53 -0
  189. package/dist/excalidraw/components/Stats/Collapsible.d.ts +9 -0
  190. package/dist/excalidraw/components/Stats/Collapsible.js +12 -0
  191. package/dist/excalidraw/components/Stats/Dimension.d.ts +12 -0
  192. package/dist/excalidraw/components/Stats/Dimension.js +68 -0
  193. package/dist/excalidraw/components/Stats/DragInput.d.ts +32 -0
  194. package/dist/excalidraw/components/Stats/DragInput.js +174 -0
  195. package/dist/excalidraw/components/Stats/FontSize.d.ts +12 -0
  196. package/dist/excalidraw/components/Stats/FontSize.js +50 -0
  197. package/dist/excalidraw/components/Stats/MultiAngle.d.ts +12 -0
  198. package/dist/excalidraw/components/Stats/MultiAngle.js +66 -0
  199. package/dist/excalidraw/components/Stats/MultiDimension.d.ts +15 -0
  200. package/dist/excalidraw/components/Stats/MultiDimension.js +199 -0
  201. package/dist/excalidraw/components/Stats/MultiFontSize.d.ts +13 -0
  202. package/dist/excalidraw/components/Stats/MultiFontSize.js +72 -0
  203. package/dist/excalidraw/components/Stats/MultiPosition.d.ts +15 -0
  204. package/dist/excalidraw/components/Stats/MultiPosition.js +101 -0
  205. package/dist/excalidraw/components/Stats/Position.d.ts +13 -0
  206. package/dist/excalidraw/components/Stats/Position.js +40 -0
  207. package/dist/excalidraw/components/Stats/index.d.ts +16 -0
  208. package/dist/excalidraw/components/Stats/index.js +79 -0
  209. package/dist/excalidraw/components/Stats/utils.d.ts +26 -0
  210. package/dist/excalidraw/components/Stats/utils.js +162 -0
  211. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
  212. package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
  213. package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
  214. package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
  215. package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
  216. package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
  217. package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
  218. package/dist/excalidraw/components/TTDDialog/common.d.ts +5 -5
  219. package/dist/excalidraw/components/TTDDialog/common.js +3 -7
  220. package/dist/excalidraw/components/TextField.d.ts +1 -1
  221. package/dist/excalidraw/components/Toast.d.ts +1 -1
  222. package/dist/excalidraw/components/ToolButton.d.ts +3 -2
  223. package/dist/excalidraw/components/Trans.d.ts +1 -1
  224. package/dist/excalidraw/components/UserList.d.ts +1 -1
  225. package/dist/excalidraw/components/UserList.js +22 -22
  226. package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +3 -2
  227. package/dist/excalidraw/components/canvases/InteractiveCanvas.js +4 -2
  228. package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
  229. package/dist/excalidraw/components/canvases/StaticCanvas.js +3 -2
  230. package/dist/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +12 -3
  231. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +24 -4
  232. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +55 -14
  233. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +2 -1
  234. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.js +2 -2
  235. package/dist/excalidraw/components/dropdownMenu/common.d.ts +1 -1
  236. package/dist/excalidraw/components/dropdownMenu/common.js +3 -2
  237. package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
  238. package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
  239. package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  240. package/dist/excalidraw/components/icons.d.ts +10 -2
  241. package/dist/excalidraw/components/icons.js +29 -6
  242. package/dist/excalidraw/components/main-menu/MainMenu.d.ts +12 -3
  243. package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Center.js +2 -2
  244. package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Hints.js +3 -3
  245. package/dist/excalidraw/constants.d.ts +24 -3
  246. package/dist/excalidraw/constants.js +28 -4
  247. package/dist/excalidraw/context/ui-appState.d.ts +1 -1
  248. package/dist/excalidraw/cursor.d.ts +1 -1
  249. package/dist/excalidraw/data/EditorLocalStorage.d.ts +2 -2
  250. package/dist/excalidraw/data/blob.d.ts +5 -5
  251. package/dist/excalidraw/data/filesystem.d.ts +2 -1
  252. package/dist/excalidraw/data/index.d.ts +4 -4
  253. package/dist/excalidraw/data/json.d.ts +3 -3
  254. package/dist/excalidraw/data/library.d.ts +3 -3
  255. package/dist/excalidraw/data/magic.d.ts +3 -3
  256. package/dist/excalidraw/data/reconcile.d.ts +3 -3
  257. package/dist/excalidraw/data/reconcile.js +18 -1
  258. package/dist/excalidraw/data/resave.d.ts +2 -2
  259. package/dist/excalidraw/data/restore.d.ts +3 -3
  260. package/dist/excalidraw/data/restore.js +58 -9
  261. package/dist/excalidraw/data/transform.d.ts +3 -3
  262. package/dist/excalidraw/data/transform.js +8 -5
  263. package/dist/excalidraw/data/types.d.ts +3 -3
  264. package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
  265. package/dist/excalidraw/element/binding.d.ts +29 -10
  266. package/dist/excalidraw/element/binding.js +303 -71
  267. package/dist/excalidraw/element/bounds.d.ts +3 -3
  268. package/dist/excalidraw/element/collision.d.ts +4 -4
  269. package/dist/excalidraw/element/collision.js +5 -2
  270. package/dist/excalidraw/element/containerCache.d.ts +1 -1
  271. package/dist/excalidraw/element/dragElements.d.ts +6 -6
  272. package/dist/excalidraw/element/dragElements.js +39 -5
  273. package/dist/excalidraw/element/embeddable.d.ts +11 -6
  274. package/dist/excalidraw/element/heading.d.ts +11 -0
  275. package/dist/excalidraw/element/heading.js +81 -0
  276. package/dist/excalidraw/element/image.d.ts +2 -2
  277. package/dist/excalidraw/element/index.d.ts +2 -2
  278. package/dist/excalidraw/element/index.js +1 -1
  279. package/dist/excalidraw/element/linearElementEditor.d.ts +27 -16
  280. package/dist/excalidraw/element/linearElementEditor.js +133 -56
  281. package/dist/excalidraw/element/mutateElement.d.ts +3 -3
  282. package/dist/excalidraw/element/mutateElement.js +5 -3
  283. package/dist/excalidraw/element/newElement.d.ts +12 -10
  284. package/dist/excalidraw/element/newElement.js +31 -16
  285. package/dist/excalidraw/element/resizeElements.d.ts +15 -6
  286. package/dist/excalidraw/element/resizeElements.js +122 -46
  287. package/dist/excalidraw/element/resizeTest.d.ts +4 -4
  288. package/dist/excalidraw/element/resizeTest.js +2 -4
  289. package/dist/excalidraw/element/routing.d.ts +13 -0
  290. package/dist/excalidraw/element/routing.js +641 -0
  291. package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
  292. package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
  293. package/dist/excalidraw/element/sortElements.d.ts +1 -1
  294. package/dist/excalidraw/element/textElement.d.ts +6 -28
  295. package/dist/excalidraw/element/textElement.js +64 -112
  296. package/dist/excalidraw/element/textWysiwyg.d.ts +12 -6
  297. package/dist/excalidraw/element/textWysiwyg.js +75 -62
  298. package/dist/excalidraw/element/transformHandles.d.ts +3 -3
  299. package/dist/excalidraw/element/transformHandles.js +7 -12
  300. package/dist/excalidraw/element/typeChecks.d.ts +7 -4
  301. package/dist/excalidraw/element/typeChecks.js +17 -0
  302. package/dist/excalidraw/element/types.d.ts +22 -4
  303. package/dist/excalidraw/emitter.d.ts +1 -1
  304. package/dist/excalidraw/fonts/ExcalidrawFont.d.ts +21 -0
  305. package/dist/excalidraw/fonts/ExcalidrawFont.js +112 -0
  306. package/dist/excalidraw/fonts/index.d.ts +58 -0
  307. package/dist/excalidraw/fonts/index.js +240 -0
  308. package/dist/excalidraw/fonts/metadata.d.ts +36 -0
  309. package/dist/excalidraw/fonts/metadata.js +91 -0
  310. package/dist/excalidraw/fractionalIndex.d.ts +12 -5
  311. package/dist/excalidraw/fractionalIndex.js +40 -10
  312. package/dist/excalidraw/frame.d.ts +4 -4
  313. package/dist/excalidraw/frame.js +3 -3
  314. package/dist/excalidraw/gatransforms.d.ts +1 -1
  315. package/dist/excalidraw/gesture.d.ts +1 -1
  316. package/dist/excalidraw/groups.d.ts +4 -4
  317. package/dist/excalidraw/history.d.ts +8 -7
  318. package/dist/excalidraw/history.js +8 -8
  319. package/dist/excalidraw/hooks/useEmitter.d.ts +1 -1
  320. package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  321. package/dist/excalidraw/i18n.d.ts +1 -1
  322. package/dist/excalidraw/index.d.ts +2 -2
  323. package/dist/excalidraw/index.js +3 -3
  324. package/dist/excalidraw/jotai.d.ts +1 -1
  325. package/dist/excalidraw/laser-trails.d.ts +3 -2
  326. package/dist/excalidraw/locales/en.json +42 -7
  327. package/dist/excalidraw/math.d.ts +47 -2
  328. package/dist/excalidraw/math.js +116 -0
  329. package/dist/excalidraw/mermaid.d.ts +2 -0
  330. package/dist/excalidraw/mermaid.js +29 -0
  331. package/dist/excalidraw/points.d.ts +1 -1
  332. package/dist/excalidraw/queue.d.ts +1 -1
  333. package/dist/excalidraw/renderer/helpers.d.ts +2 -2
  334. package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
  335. package/dist/excalidraw/renderer/interactiveScene.js +64 -22
  336. package/dist/excalidraw/renderer/renderElement.d.ts +6 -4
  337. package/dist/excalidraw/renderer/renderElement.js +78 -58
  338. package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
  339. package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
  340. package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
  341. package/dist/excalidraw/renderer/staticSvgScene.js +2 -1
  342. package/dist/excalidraw/scene/Renderer.d.ts +4 -4
  343. package/dist/excalidraw/scene/Renderer.js +2 -3
  344. package/dist/excalidraw/scene/Scene.d.ts +16 -7
  345. package/dist/excalidraw/scene/Scene.js +26 -11
  346. package/dist/excalidraw/scene/Shape.d.ts +1 -1
  347. package/dist/excalidraw/scene/Shape.js +56 -5
  348. package/dist/excalidraw/scene/ShapeCache.d.ts +4 -4
  349. package/dist/excalidraw/scene/comparisons.d.ts +3 -2
  350. package/dist/excalidraw/scene/comparisons.js +1 -1
  351. package/dist/excalidraw/scene/export.d.ts +4 -3
  352. package/dist/excalidraw/scene/export.js +34 -36
  353. package/dist/excalidraw/scene/scroll.d.ts +2 -2
  354. package/dist/excalidraw/scene/scrollbars.d.ts +3 -3
  355. package/dist/excalidraw/scene/selection.d.ts +2 -2
  356. package/dist/excalidraw/scene/types.d.ts +6 -8
  357. package/dist/excalidraw/scene/zoom.d.ts +1 -1
  358. package/dist/excalidraw/shapes.d.ts +8 -0
  359. package/dist/excalidraw/shapes.js +57 -0
  360. package/dist/excalidraw/snapping.d.ts +4 -4
  361. package/dist/excalidraw/snapping.js +2 -1
  362. package/dist/excalidraw/store.d.ts +34 -4
  363. package/dist/excalidraw/store.js +27 -0
  364. package/dist/excalidraw/types.d.ts +32 -21
  365. package/dist/excalidraw/utils.d.ts +15 -5
  366. package/dist/excalidraw/utils.js +22 -0
  367. package/dist/excalidraw/zindex.d.ts +2 -2
  368. package/dist/prod/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
  369. package/dist/prod/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  370. package/dist/prod/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  371. package/dist/prod/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  372. package/dist/prod/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  373. package/dist/prod/{en-XW4JO6VX.json → en-YNVBSAIL.json} +42 -7
  374. package/dist/prod/index.css +1 -1
  375. package/dist/prod/index.js +49 -53
  376. package/dist/utils/bbox.d.ts +2 -2
  377. package/dist/utils/collision.d.ts +1 -1
  378. package/dist/utils/export.d.ts +4 -3
  379. package/dist/utils/export.js +2 -1
  380. package/dist/utils/geometry/geometry.d.ts +3 -2
  381. package/dist/utils/geometry/geometry.js +5 -1
  382. package/dist/utils/geometry/shape.d.ts +1 -1
  383. package/dist/utils/index.d.ts +1 -0
  384. package/dist/utils/index.js +1 -0
  385. package/dist/utils/withinBounds.d.ts +1 -1
  386. package/history.ts +13 -6
  387. package/package.json +2 -2
  388. package/dist/browser/dev/Cascadia-CYPE3OJC.woff2 +0 -0
  389. package/dist/browser/dev/Virgil-UZN6MUT6.woff2 +0 -0
  390. package/dist/browser/dev/excalidraw-assets-dev/chunk-BLEB3M62.js.map +0 -7
  391. package/dist/browser/dev/excalidraw-assets-dev/chunk-XOM7LNOU.js.map +0 -7
  392. package/dist/browser/dev/excalidraw-assets-dev/dist-ITJNUBZF.js.map +0 -7
  393. package/dist/browser/prod/Cascadia-CYPE3OJC.woff2 +0 -0
  394. package/dist/browser/prod/Virgil-UZN6MUT6.woff2 +0 -0
  395. package/dist/browser/prod/excalidraw-assets/chunk-UWBW5SR2.js +0 -55
  396. package/dist/browser/prod/excalidraw-assets/dist-54276HPL.js +0 -6
  397. package/dist/browser/prod/excalidraw-assets/en-7GPZE2Y2.js +0 -1
  398. package/dist/browser/prod/excalidraw-assets/image-35KQQ5EN.js +0 -1
  399. package/dist/dev/Cascadia-CYPE3OJC.woff2 +0 -0
  400. package/dist/dev/Virgil-UZN6MUT6.woff2 +0 -0
  401. package/dist/excalidraw/components/Stats.d.ts +0 -11
  402. package/dist/excalidraw/components/Stats.js +0 -13
  403. package/dist/excalidraw/scene/Fonts.d.ts +0 -21
  404. package/dist/excalidraw/scene/Fonts.js +0 -72
  405. package/dist/prod/Cascadia-CYPE3OJC.woff2 +0 -0
  406. package/dist/prod/Virgil-UZN6MUT6.woff2 +0 -0
  407. /package/dist/browser/dev/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets-dev/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
  408. /package/dist/browser/dev/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets-dev/Assistant-Medium-DZ25RZU3.woff2} +0 -0
  409. /package/dist/browser/dev/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets-dev/Assistant-Regular-PLF2XOGW.woff2} +0 -0
  410. /package/dist/browser/dev/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets-dev/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
  411. /package/dist/browser/dev/excalidraw-assets-dev/{en-TR4QLF5E.js.map → en-XV7OZCPP.js.map} +0 -0
  412. /package/dist/browser/dev/excalidraw-assets-dev/{image-ZGDDRBEN.js.map → image-77HZYGLG.js.map} +0 -0
  413. /package/dist/browser/prod/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
  414. /package/dist/browser/prod/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets/Assistant-Medium-DZ25RZU3.woff2} +0 -0
  415. /package/dist/browser/prod/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets/Assistant-Regular-PLF2XOGW.woff2} +0 -0
  416. /package/dist/browser/prod/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
@@ -0,0 +1,641 @@
1
+ import { cross } from "../../utils/geometry/geometry";
2
+ import BinaryHeap from "../binaryheap";
3
+ import { aabbForElement, arePointsEqual, pointInsideBounds, pointToVector, scalePointFromOrigin, scaleVector, translatePoint, } from "../math";
4
+ import { getSizeFromPoints } from "../points";
5
+ import { isAnyTrue, toBrandedType, tupleToCoors } from "../utils";
6
+ import { bindPointToSnapToElementOutline, distanceToBindableElement, avoidRectangularCorner, getHoveredElementForBinding, FIXED_BINDING_DISTANCE, getHeadingForElbowArrowSnap, getGlobalFixedPointForBindableElement, snapToMid, } from "./binding";
7
+ import { HEADING_DOWN, HEADING_LEFT, HEADING_RIGHT, HEADING_UP, vectorToHeading, } from "./heading";
8
+ import { mutateElement } from "./mutateElement";
9
+ import { isBindableElement, isRectanguloidElement } from "./typeChecks";
10
+ const BASE_PADDING = 40;
11
+ export const mutateElbowArrow = (arrow, scene, nextPoints, offset, otherUpdates, options) => {
12
+ const elements = getAllElements(scene, options?.changedElements);
13
+ const elementsMap = getAllElementsMap(scene, options?.changedElements);
14
+ const origStartGlobalPoint = translatePoint(nextPoints[0], [
15
+ arrow.x + (offset ? offset[0] : 0),
16
+ arrow.y + (offset ? offset[1] : 0),
17
+ ]);
18
+ const origEndGlobalPoint = translatePoint(nextPoints[nextPoints.length - 1], [
19
+ arrow.x + (offset ? offset[0] : 0),
20
+ arrow.y + (offset ? offset[1] : 0),
21
+ ]);
22
+ const startElement = arrow.startBinding &&
23
+ getBindableElementForId(arrow.startBinding.elementId, elementsMap);
24
+ const endElement = arrow.endBinding &&
25
+ getBindableElementForId(arrow.endBinding.elementId, elementsMap);
26
+ const hoveredStartElement = options?.isDragging
27
+ ? getHoveredElementForBinding(tupleToCoors(origStartGlobalPoint), elements, elementsMap, true)
28
+ : startElement;
29
+ const hoveredEndElement = options?.isDragging
30
+ ? getHoveredElementForBinding(tupleToCoors(origEndGlobalPoint), elements, elementsMap, true)
31
+ : endElement;
32
+ const startGlobalPoint = getGlobalPoint(arrow.startBinding?.fixedPoint, origStartGlobalPoint, origEndGlobalPoint, elementsMap, startElement, hoveredStartElement, options?.isDragging);
33
+ const endGlobalPoint = getGlobalPoint(arrow.endBinding?.fixedPoint, origEndGlobalPoint, origStartGlobalPoint, elementsMap, endElement, hoveredEndElement, options?.isDragging);
34
+ const startHeading = getBindPointHeading(startGlobalPoint, endGlobalPoint, elementsMap, hoveredStartElement, origStartGlobalPoint);
35
+ const endHeading = getBindPointHeading(endGlobalPoint, startGlobalPoint, elementsMap, hoveredEndElement, origEndGlobalPoint);
36
+ const startPointBounds = [
37
+ startGlobalPoint[0] - 2,
38
+ startGlobalPoint[1] - 2,
39
+ startGlobalPoint[0] + 2,
40
+ startGlobalPoint[1] + 2,
41
+ ];
42
+ const endPointBounds = [
43
+ endGlobalPoint[0] - 2,
44
+ endGlobalPoint[1] - 2,
45
+ endGlobalPoint[0] + 2,
46
+ endGlobalPoint[1] + 2,
47
+ ];
48
+ const startElementBounds = hoveredStartElement
49
+ ? aabbForElement(hoveredStartElement, offsetFromHeading(startHeading, arrow.startArrowhead
50
+ ? FIXED_BINDING_DISTANCE * 6
51
+ : FIXED_BINDING_DISTANCE * 2, 1))
52
+ : startPointBounds;
53
+ const endElementBounds = hoveredEndElement
54
+ ? aabbForElement(hoveredEndElement, offsetFromHeading(endHeading, arrow.endArrowhead
55
+ ? FIXED_BINDING_DISTANCE * 6
56
+ : FIXED_BINDING_DISTANCE * 2, 1))
57
+ : endPointBounds;
58
+ const boundsOverlap = pointInsideBounds(startGlobalPoint, hoveredEndElement
59
+ ? aabbForElement(hoveredEndElement, offsetFromHeading(endHeading, BASE_PADDING, BASE_PADDING))
60
+ : endPointBounds) ||
61
+ pointInsideBounds(endGlobalPoint, hoveredStartElement
62
+ ? aabbForElement(hoveredStartElement, offsetFromHeading(startHeading, BASE_PADDING, BASE_PADDING))
63
+ : startPointBounds);
64
+ const commonBounds = commonAABB(boundsOverlap
65
+ ? [startPointBounds, endPointBounds]
66
+ : [startElementBounds, endElementBounds]);
67
+ const dynamicAABBs = generateDynamicAABBs(boundsOverlap ? startPointBounds : startElementBounds, boundsOverlap ? endPointBounds : endElementBounds, commonBounds, boundsOverlap
68
+ ? offsetFromHeading(startHeading, !hoveredStartElement && !hoveredEndElement ? 0 : BASE_PADDING, 0)
69
+ : offsetFromHeading(startHeading, !hoveredStartElement && !hoveredEndElement
70
+ ? 0
71
+ : BASE_PADDING -
72
+ (arrow.startArrowhead
73
+ ? FIXED_BINDING_DISTANCE * 6
74
+ : FIXED_BINDING_DISTANCE * 2), BASE_PADDING), boundsOverlap
75
+ ? offsetFromHeading(endHeading, !hoveredStartElement && !hoveredEndElement ? 0 : BASE_PADDING, 0)
76
+ : offsetFromHeading(endHeading, !hoveredStartElement && !hoveredEndElement
77
+ ? 0
78
+ : BASE_PADDING -
79
+ (arrow.endArrowhead
80
+ ? FIXED_BINDING_DISTANCE * 6
81
+ : FIXED_BINDING_DISTANCE * 2), BASE_PADDING), boundsOverlap);
82
+ const startDonglePosition = getDonglePosition(dynamicAABBs[0], startHeading, startGlobalPoint);
83
+ const endDonglePosition = getDonglePosition(dynamicAABBs[1], endHeading, endGlobalPoint);
84
+ // Canculate Grid positions
85
+ const grid = calculateGrid(dynamicAABBs, startDonglePosition ? startDonglePosition : startGlobalPoint, startHeading, endDonglePosition ? endDonglePosition : endGlobalPoint, endHeading, commonBounds);
86
+ const startDongle = startDonglePosition && pointToGridNode(startDonglePosition, grid);
87
+ const endDongle = endDonglePosition && pointToGridNode(endDonglePosition, grid);
88
+ // Do not allow stepping on the true end or true start points
89
+ const endNode = pointToGridNode(endGlobalPoint, grid);
90
+ if (endNode && hoveredEndElement) {
91
+ endNode.closed = true;
92
+ }
93
+ const startNode = pointToGridNode(startGlobalPoint, grid);
94
+ if (startNode && arrow.startBinding) {
95
+ startNode.closed = true;
96
+ }
97
+ const dongleOverlap = startDongle &&
98
+ endDongle &&
99
+ (pointInsideBounds(startDongle.pos, dynamicAABBs[1]) ||
100
+ pointInsideBounds(endDongle.pos, dynamicAABBs[0]));
101
+ // Create path to end dongle from start dongle
102
+ const path = astar(startDongle ? startDongle : startNode, endDongle ? endDongle : endNode, grid, startHeading ? startHeading : HEADING_RIGHT, endHeading ? endHeading : HEADING_RIGHT, dongleOverlap ? [] : dynamicAABBs);
103
+ if (path) {
104
+ const points = path.map((node) => [node.pos[0], node.pos[1]]);
105
+ startDongle && points.unshift(startGlobalPoint);
106
+ endDongle && points.push(endGlobalPoint);
107
+ mutateElement(arrow, {
108
+ ...otherUpdates,
109
+ ...normalizedArrowElementUpdate(simplifyElbowArrowPoints(points), 0, 0),
110
+ angle: 0,
111
+ }, options?.informMutation);
112
+ }
113
+ else {
114
+ console.error("Elbow arrow cannot find a route");
115
+ }
116
+ };
117
+ const offsetFromHeading = (heading, head, side) => {
118
+ switch (heading) {
119
+ case HEADING_UP:
120
+ return [head, side, side, side];
121
+ case HEADING_RIGHT:
122
+ return [side, head, side, side];
123
+ case HEADING_DOWN:
124
+ return [side, side, head, side];
125
+ }
126
+ return [side, side, side, head];
127
+ };
128
+ /**
129
+ * Routing algorithm based on the A* path search algorithm.
130
+ * @see https://www.geeksforgeeks.org/a-search-algorithm/
131
+ *
132
+ * Binary heap is used to optimize node lookup.
133
+ * See {@link calculateGrid} for the grid calculation details.
134
+ *
135
+ * Additional modifications added due to aesthetic route reasons:
136
+ * 1) Arrow segment direction change is penalized by specific linear constant (bendMultiplier)
137
+ * 2) Arrow segments are not allowed to go "backwards", overlapping with the previous segment
138
+ */
139
+ const astar = (start, end, grid, startHeading, endHeading, aabbs) => {
140
+ const bendMultiplier = m_dist(start.pos, end.pos);
141
+ const open = new BinaryHeap((node) => node.f);
142
+ open.push(start);
143
+ while (open.size() > 0) {
144
+ // Grab the lowest f(x) to process next. Heap keeps this sorted for us.
145
+ const current = open.pop();
146
+ if (!current || current.closed) {
147
+ // Current is not passable, continue with next element
148
+ continue;
149
+ }
150
+ // End case -- result has been found, return the traced path.
151
+ if (current === end) {
152
+ return pathTo(start, current);
153
+ }
154
+ // Normal case -- move current from open to closed, process each of its neighbors.
155
+ current.closed = true;
156
+ // Find all neighbors for the current node.
157
+ const neighbors = getNeighbors(current.addr, grid);
158
+ for (let i = 0; i < 4; i++) {
159
+ const neighbor = neighbors[i];
160
+ if (!neighbor || neighbor.closed) {
161
+ // Not a valid node to process, skip to next neighbor.
162
+ continue;
163
+ }
164
+ // Intersect
165
+ const neighborHalfPoint = scalePointFromOrigin(neighbor.pos, current.pos, 0.5);
166
+ if (isAnyTrue(...aabbs.map((aabb) => pointInsideBounds(neighborHalfPoint, aabb)))) {
167
+ continue;
168
+ }
169
+ // The g score is the shortest distance from start to current node.
170
+ // We need to check if the path we have arrived at this neighbor is the shortest one we have seen yet.
171
+ const neighborHeading = neighborIndexToHeading(i);
172
+ const previousDirection = current.parent
173
+ ? vectorToHeading(pointToVector(current.pos, current.parent.pos))
174
+ : startHeading;
175
+ // Do not allow going in reverse
176
+ const reverseHeading = scaleVector(previousDirection, -1);
177
+ const neighborIsReverseRoute = arePointsEqual(reverseHeading, neighborHeading) ||
178
+ (arePointsEqual(start.addr, neighbor.addr) &&
179
+ arePointsEqual(neighborHeading, startHeading)) ||
180
+ (arePointsEqual(end.addr, neighbor.addr) &&
181
+ arePointsEqual(neighborHeading, endHeading));
182
+ if (neighborIsReverseRoute) {
183
+ continue;
184
+ }
185
+ const directionChange = previousDirection !== neighborHeading;
186
+ const gScore = current.g +
187
+ m_dist(neighbor.pos, current.pos) +
188
+ (directionChange ? Math.pow(bendMultiplier, 3) : 0);
189
+ const beenVisited = neighbor.visited;
190
+ if (!beenVisited || gScore < neighbor.g) {
191
+ const estBendCount = estimateSegmentCount(neighbor, end, neighborHeading, endHeading);
192
+ // Found an optimal (so far) path to this node. Take score for node to see how good it is.
193
+ neighbor.visited = true;
194
+ neighbor.parent = current;
195
+ neighbor.h =
196
+ m_dist(end.pos, neighbor.pos) +
197
+ estBendCount * Math.pow(bendMultiplier, 2);
198
+ neighbor.g = gScore;
199
+ neighbor.f = neighbor.g + neighbor.h;
200
+ if (!beenVisited) {
201
+ // Pushing to heap will put it in proper place based on the 'f' value.
202
+ open.push(neighbor);
203
+ }
204
+ else {
205
+ // Already seen the node, but since it has been rescored we need to reorder it in the heap
206
+ open.rescoreElement(neighbor);
207
+ }
208
+ }
209
+ }
210
+ }
211
+ return null;
212
+ };
213
+ const pathTo = (start, node) => {
214
+ let curr = node;
215
+ const path = [];
216
+ while (curr.parent) {
217
+ path.unshift(curr);
218
+ curr = curr.parent;
219
+ }
220
+ path.unshift(start);
221
+ return path;
222
+ };
223
+ const m_dist = (a, b) => Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);
224
+ /**
225
+ * Create dynamically resizing, always touching
226
+ * bounding boxes having a minimum extent represented
227
+ * by the given static bounds.
228
+ */
229
+ const generateDynamicAABBs = (a, b, common, startDifference, endDifference, disableSideHack) => {
230
+ const [startUp, startRight, startDown, startLeft] = startDifference ?? [
231
+ 0, 0, 0, 0,
232
+ ];
233
+ const [endUp, endRight, endDown, endLeft] = endDifference ?? [0, 0, 0, 0];
234
+ const first = [
235
+ a[0] > b[2]
236
+ ? a[1] > b[3] || a[3] < b[1]
237
+ ? Math.min((a[0] + b[2]) / 2, a[0] - startLeft)
238
+ : (a[0] + b[2]) / 2
239
+ : a[0] > b[0]
240
+ ? a[0] - startLeft
241
+ : common[0] - startLeft,
242
+ a[1] > b[3]
243
+ ? a[0] > b[2] || a[2] < b[0]
244
+ ? Math.min((a[1] + b[3]) / 2, a[1] - startUp)
245
+ : (a[1] + b[3]) / 2
246
+ : a[1] > b[1]
247
+ ? a[1] - startUp
248
+ : common[1] - startUp,
249
+ a[2] < b[0]
250
+ ? a[1] > b[3] || a[3] < b[1]
251
+ ? Math.max((a[2] + b[0]) / 2, a[2] + startRight)
252
+ : (a[2] + b[0]) / 2
253
+ : a[2] < b[2]
254
+ ? a[2] + startRight
255
+ : common[2] + startRight,
256
+ a[3] < b[1]
257
+ ? a[0] > b[2] || a[2] < b[0]
258
+ ? Math.max((a[3] + b[1]) / 2, a[3] + startDown)
259
+ : (a[3] + b[1]) / 2
260
+ : a[3] < b[3]
261
+ ? a[3] + startDown
262
+ : common[3] + startDown,
263
+ ];
264
+ const second = [
265
+ b[0] > a[2]
266
+ ? b[1] > a[3] || b[3] < a[1]
267
+ ? Math.min((b[0] + a[2]) / 2, b[0] - endLeft)
268
+ : (b[0] + a[2]) / 2
269
+ : b[0] > a[0]
270
+ ? b[0] - endLeft
271
+ : common[0] - endLeft,
272
+ b[1] > a[3]
273
+ ? b[0] > a[2] || b[2] < a[0]
274
+ ? Math.min((b[1] + a[3]) / 2, b[1] - endUp)
275
+ : (b[1] + a[3]) / 2
276
+ : b[1] > a[1]
277
+ ? b[1] - endUp
278
+ : common[1] - endUp,
279
+ b[2] < a[0]
280
+ ? b[1] > a[3] || b[3] < a[1]
281
+ ? Math.max((b[2] + a[0]) / 2, b[2] + endRight)
282
+ : (b[2] + a[0]) / 2
283
+ : b[2] < a[2]
284
+ ? b[2] + endRight
285
+ : common[2] + endRight,
286
+ b[3] < a[1]
287
+ ? b[0] > a[2] || b[2] < a[0]
288
+ ? Math.max((b[3] + a[1]) / 2, b[3] + endDown)
289
+ : (b[3] + a[1]) / 2
290
+ : b[3] < a[3]
291
+ ? b[3] + endDown
292
+ : common[3] + endDown,
293
+ ];
294
+ const c = commonAABB([first, second]);
295
+ if (!disableSideHack &&
296
+ first[2] - first[0] + second[2] - second[0] > c[2] - c[0] + 0.00000000001 &&
297
+ first[3] - first[1] + second[3] - second[1] > c[3] - c[1] + 0.00000000001) {
298
+ const [endCenterX, endCenterY] = [
299
+ (second[0] + second[2]) / 2,
300
+ (second[1] + second[3]) / 2,
301
+ ];
302
+ if (b[0] > a[2] && a[1] > b[3]) {
303
+ // BOTTOM LEFT
304
+ const cX = first[2] + (second[0] - first[2]) / 2;
305
+ const cY = second[3] + (first[1] - second[3]) / 2;
306
+ if (cross([a[2], a[1]], [a[0], a[3]], [endCenterX, endCenterY]) > 0) {
307
+ return [
308
+ [first[0], first[1], cX, first[3]],
309
+ [cX, second[1], second[2], second[3]],
310
+ ];
311
+ }
312
+ return [
313
+ [first[0], cY, first[2], first[3]],
314
+ [second[0], second[1], second[2], cY],
315
+ ];
316
+ }
317
+ else if (a[2] < b[0] && a[3] < b[1]) {
318
+ // TOP LEFT
319
+ const cX = first[2] + (second[0] - first[2]) / 2;
320
+ const cY = first[3] + (second[1] - first[3]) / 2;
321
+ if (cross([a[0], a[1]], [a[2], a[3]], [endCenterX, endCenterY]) > 0) {
322
+ return [
323
+ [first[0], first[1], first[2], cY],
324
+ [second[0], cY, second[2], second[3]],
325
+ ];
326
+ }
327
+ return [
328
+ [first[0], first[1], cX, first[3]],
329
+ [cX, second[1], second[2], second[3]],
330
+ ];
331
+ }
332
+ else if (a[0] > b[2] && a[3] < b[1]) {
333
+ // TOP RIGHT
334
+ const cX = second[2] + (first[0] - second[2]) / 2;
335
+ const cY = first[3] + (second[1] - first[3]) / 2;
336
+ if (cross([a[2], a[1]], [a[0], a[3]], [endCenterX, endCenterY]) > 0) {
337
+ return [
338
+ [cX, first[1], first[2], first[3]],
339
+ [second[0], second[1], cX, second[3]],
340
+ ];
341
+ }
342
+ return [
343
+ [first[0], first[1], first[2], cY],
344
+ [second[0], cY, second[2], second[3]],
345
+ ];
346
+ }
347
+ else if (a[0] > b[2] && a[1] > b[3]) {
348
+ // BOTTOM RIGHT
349
+ const cX = second[2] + (first[0] - second[2]) / 2;
350
+ const cY = second[3] + (first[1] - second[3]) / 2;
351
+ if (cross([a[0], a[1]], [a[2], a[3]], [endCenterX, endCenterY]) > 0) {
352
+ return [
353
+ [cX, first[1], first[2], first[3]],
354
+ [second[0], second[1], cX, second[3]],
355
+ ];
356
+ }
357
+ return [
358
+ [first[0], cY, first[2], first[3]],
359
+ [second[0], second[1], second[2], cY],
360
+ ];
361
+ }
362
+ }
363
+ return [first, second];
364
+ };
365
+ /**
366
+ * Calculates the grid which is used as nodes at
367
+ * the grid line intersections by the A* algorithm.
368
+ *
369
+ * NOTE: This is not a uniform grid. It is built at
370
+ * various intersections of bounding boxes.
371
+ */
372
+ const calculateGrid = (aabbs, start, startHeading, end, endHeading, common) => {
373
+ const horizontal = new Set();
374
+ const vertical = new Set();
375
+ if (startHeading === HEADING_LEFT || startHeading === HEADING_RIGHT) {
376
+ vertical.add(start[1]);
377
+ }
378
+ else {
379
+ horizontal.add(start[0]);
380
+ }
381
+ if (endHeading === HEADING_LEFT || endHeading === HEADING_RIGHT) {
382
+ vertical.add(end[1]);
383
+ }
384
+ else {
385
+ horizontal.add(end[0]);
386
+ }
387
+ aabbs.forEach((aabb) => {
388
+ horizontal.add(aabb[0]);
389
+ horizontal.add(aabb[2]);
390
+ vertical.add(aabb[1]);
391
+ vertical.add(aabb[3]);
392
+ });
393
+ horizontal.add(common[0]);
394
+ horizontal.add(common[2]);
395
+ vertical.add(common[1]);
396
+ vertical.add(common[3]);
397
+ const _vertical = Array.from(vertical).sort((a, b) => a - b);
398
+ const _horizontal = Array.from(horizontal).sort((a, b) => a - b);
399
+ return {
400
+ row: _vertical.length,
401
+ col: _horizontal.length,
402
+ data: _vertical.flatMap((y, row) => _horizontal.map((x, col) => ({
403
+ f: 0,
404
+ g: 0,
405
+ h: 0,
406
+ closed: false,
407
+ visited: false,
408
+ parent: null,
409
+ addr: [col, row],
410
+ pos: [x, y],
411
+ }))),
412
+ };
413
+ };
414
+ const getDonglePosition = (bounds, heading, point) => {
415
+ switch (heading) {
416
+ case HEADING_UP:
417
+ return [point[0], bounds[1]];
418
+ case HEADING_RIGHT:
419
+ return [bounds[2], point[1]];
420
+ case HEADING_DOWN:
421
+ return [point[0], bounds[3]];
422
+ }
423
+ return [bounds[0], point[1]];
424
+ };
425
+ const estimateSegmentCount = (start, end, startHeading, endHeading) => {
426
+ if (endHeading === HEADING_RIGHT) {
427
+ switch (startHeading) {
428
+ case HEADING_RIGHT: {
429
+ if (start.pos[0] >= end.pos[0]) {
430
+ return 4;
431
+ }
432
+ if (start.pos[1] === end.pos[1]) {
433
+ return 0;
434
+ }
435
+ return 2;
436
+ }
437
+ case HEADING_UP:
438
+ if (start.pos[1] > end.pos[1] && start.pos[0] < end.pos[0]) {
439
+ return 1;
440
+ }
441
+ return 3;
442
+ case HEADING_DOWN:
443
+ if (start.pos[1] < end.pos[1] && start.pos[0] < end.pos[0]) {
444
+ return 1;
445
+ }
446
+ return 3;
447
+ case HEADING_LEFT:
448
+ if (start.pos[1] === end.pos[1]) {
449
+ return 4;
450
+ }
451
+ return 2;
452
+ }
453
+ }
454
+ else if (endHeading === HEADING_LEFT) {
455
+ switch (startHeading) {
456
+ case HEADING_RIGHT:
457
+ if (start.pos[1] === end.pos[1]) {
458
+ return 4;
459
+ }
460
+ return 2;
461
+ case HEADING_UP:
462
+ if (start.pos[1] > end.pos[1] && start.pos[0] > end.pos[0]) {
463
+ return 1;
464
+ }
465
+ return 3;
466
+ case HEADING_DOWN:
467
+ if (start.pos[1] < end.pos[1] && start.pos[0] > end.pos[0]) {
468
+ return 1;
469
+ }
470
+ return 3;
471
+ case HEADING_LEFT:
472
+ if (start.pos[0] <= end.pos[0]) {
473
+ return 4;
474
+ }
475
+ if (start.pos[1] === end.pos[1]) {
476
+ return 0;
477
+ }
478
+ return 2;
479
+ }
480
+ }
481
+ else if (endHeading === HEADING_UP) {
482
+ switch (startHeading) {
483
+ case HEADING_RIGHT:
484
+ if (start.pos[1] > end.pos[1] && start.pos[0] < end.pos[0]) {
485
+ return 1;
486
+ }
487
+ return 3;
488
+ case HEADING_UP:
489
+ if (start.pos[1] >= end.pos[1]) {
490
+ return 4;
491
+ }
492
+ if (start.pos[0] === end.pos[0]) {
493
+ return 0;
494
+ }
495
+ return 2;
496
+ case HEADING_DOWN:
497
+ if (start.pos[0] === end.pos[0]) {
498
+ return 4;
499
+ }
500
+ return 2;
501
+ case HEADING_LEFT:
502
+ if (start.pos[1] > end.pos[1] && start.pos[0] > end.pos[0]) {
503
+ return 1;
504
+ }
505
+ return 3;
506
+ }
507
+ }
508
+ else if (endHeading === HEADING_DOWN) {
509
+ switch (startHeading) {
510
+ case HEADING_RIGHT:
511
+ if (start.pos[1] < end.pos[1] && start.pos[0] < end.pos[0]) {
512
+ return 1;
513
+ }
514
+ return 3;
515
+ case HEADING_UP:
516
+ if (start.pos[0] === end.pos[0]) {
517
+ return 4;
518
+ }
519
+ return 2;
520
+ case HEADING_DOWN:
521
+ if (start.pos[1] <= end.pos[1]) {
522
+ return 4;
523
+ }
524
+ if (start.pos[0] === end.pos[0]) {
525
+ return 0;
526
+ }
527
+ return 2;
528
+ case HEADING_LEFT:
529
+ if (start.pos[1] < end.pos[1] && start.pos[0] > end.pos[0]) {
530
+ return 1;
531
+ }
532
+ return 3;
533
+ }
534
+ }
535
+ return 0;
536
+ };
537
+ /**
538
+ * Get neighboring points for a gived grid address
539
+ */
540
+ const getNeighbors = ([col, row], grid) => [
541
+ gridNodeFromAddr([col, row - 1], grid),
542
+ gridNodeFromAddr([col + 1, row], grid),
543
+ gridNodeFromAddr([col, row + 1], grid),
544
+ gridNodeFromAddr([col - 1, row], grid),
545
+ ];
546
+ const gridNodeFromAddr = ([col, row], grid) => {
547
+ if (col < 0 || col >= grid.col || row < 0 || row >= grid.row) {
548
+ return null;
549
+ }
550
+ return grid.data[row * grid.col + col] ?? null;
551
+ };
552
+ /**
553
+ * Get node for global point on canvas (if exists)
554
+ */
555
+ const pointToGridNode = (point, grid) => {
556
+ for (let col = 0; col < grid.col; col++) {
557
+ for (let row = 0; row < grid.row; row++) {
558
+ const candidate = gridNodeFromAddr([col, row], grid);
559
+ if (candidate &&
560
+ point[0] === candidate.pos[0] &&
561
+ point[1] === candidate.pos[1]) {
562
+ return candidate;
563
+ }
564
+ }
565
+ }
566
+ return null;
567
+ };
568
+ const commonAABB = (aabbs) => [
569
+ Math.min(...aabbs.map((aabb) => aabb[0])),
570
+ Math.min(...aabbs.map((aabb) => aabb[1])),
571
+ Math.max(...aabbs.map((aabb) => aabb[2])),
572
+ Math.max(...aabbs.map((aabb) => aabb[3])),
573
+ ];
574
+ /// #region Utils
575
+ const getBindableElementForId = (id, elementsMap) => {
576
+ const element = elementsMap.get(id);
577
+ if (element && isBindableElement(element)) {
578
+ return element;
579
+ }
580
+ return null;
581
+ };
582
+ const normalizedArrowElementUpdate = (global, externalOffsetX, externalOffsetY) => {
583
+ const offsetX = global[0][0];
584
+ const offsetY = global[0][1];
585
+ const points = global.map((point, _idx) => [point[0] - offsetX, point[1] - offsetY]);
586
+ return {
587
+ points,
588
+ x: offsetX + (externalOffsetX ?? 0),
589
+ y: offsetY + (externalOffsetY ?? 0),
590
+ ...getSizeFromPoints(points),
591
+ };
592
+ };
593
+ /// If last and current segments have the same heading, skip the middle point
594
+ const simplifyElbowArrowPoints = (points) => points
595
+ .slice(2)
596
+ .reduce((result, point) => arePointsEqual(vectorToHeading(pointToVector(result[result.length - 1], result[result.length - 2])), vectorToHeading(pointToVector(point, result[result.length - 1])))
597
+ ? [...result.slice(0, -1), point]
598
+ : [...result, point], [points[0] ?? [0, 0], points[1] ?? [1, 0]]);
599
+ const neighborIndexToHeading = (idx) => {
600
+ switch (idx) {
601
+ case 0:
602
+ return HEADING_UP;
603
+ case 1:
604
+ return HEADING_RIGHT;
605
+ case 2:
606
+ return HEADING_DOWN;
607
+ }
608
+ return HEADING_LEFT;
609
+ };
610
+ const getAllElementsMap = (scene, changedElements) => changedElements
611
+ ? toBrandedType(new Map([...scene.getNonDeletedElementsMap(), ...changedElements]))
612
+ : scene.getNonDeletedElementsMap();
613
+ const getAllElements = (scene, changedElements) => changedElements
614
+ ? [
615
+ ...scene.getNonDeletedElements(),
616
+ ...[...changedElements].map(([_, value]) => value),
617
+ ]
618
+ : scene.getNonDeletedElements();
619
+ const getGlobalPoint = (fixedPointRatio, initialPoint, otherPoint, elementsMap, boundElement, hoveredElement, isDragging) => {
620
+ if (isDragging) {
621
+ if (hoveredElement) {
622
+ const snapPoint = getSnapPoint(initialPoint, otherPoint, hoveredElement, elementsMap);
623
+ return snapToMid(hoveredElement, snapPoint);
624
+ }
625
+ return initialPoint;
626
+ }
627
+ if (boundElement) {
628
+ const fixedGlobalPoint = getGlobalFixedPointForBindableElement(fixedPointRatio || [0, 0], boundElement);
629
+ // NOTE: Resize scales the binding position point too, so we need to update it
630
+ return Math.abs(distanceToBindableElement(boundElement, fixedGlobalPoint, elementsMap) -
631
+ FIXED_BINDING_DISTANCE) > 0.01
632
+ ? getSnapPoint(initialPoint, otherPoint, boundElement, elementsMap)
633
+ : fixedGlobalPoint;
634
+ }
635
+ return initialPoint;
636
+ };
637
+ const getSnapPoint = (point, otherPoint, element, elementsMap) => bindPointToSnapToElementOutline(isRectanguloidElement(element)
638
+ ? avoidRectangularCorner(element, point)
639
+ : point, otherPoint, element, elementsMap);
640
+ const getBindPointHeading = (point, otherPoint, elementsMap, hoveredElement, origPoint) => getHeadingForElbowArrowSnap(point, otherPoint, hoveredElement, hoveredElement &&
641
+ aabbForElement(hoveredElement, Array(4).fill(distanceToBindableElement(hoveredElement, point, elementsMap))), elementsMap, origPoint);
@@ -1,3 +1,3 @@
1
- import { NonDeletedExcalidrawElement } from "./types";
2
- import { UIAppState } from "../types";
1
+ import type { NonDeletedExcalidrawElement } from "./types";
2
+ import type { UIAppState } from "../types";
3
3
  export declare const showSelectedShapeActions: (appState: UIAppState, elements: readonly NonDeletedExcalidrawElement[]) => boolean;
@@ -1,5 +1,5 @@
1
- import { ElementsMap, ExcalidrawElement } from "./types";
2
- import { AppState, Zoom } from "../types";
1
+ import type { ElementsMap, ExcalidrawElement } from "./types";
2
+ import type { AppState, Zoom } from "../types";
3
3
  export declare const isInvisiblySmallElement: (element: ExcalidrawElement) => boolean;
4
4
  export declare const isElementInViewport: (element: ExcalidrawElement, width: number, height: number, viewTransformations: {
5
5
  zoom: Zoom;
@@ -1,2 +1,2 @@
1
- import { ExcalidrawElement } from "./types";
1
+ import type { ExcalidrawElement } from "./types";
2
2
  export declare const normalizeElementOrder: (elements: readonly ExcalidrawElement[]) => readonly ExcalidrawElement[];