@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
@@ -4,11 +4,12 @@ import { getCurvePathOps, getElementPointsCoords, getMinMaxXYFromCurvePathOps, }
4
4
  import { mutateElement } from "./mutateElement";
5
5
  import { bindOrUnbindLinearElement, getHoveredElementForBinding, isBindingEnabled, } from "./binding";
6
6
  import { tupleToCoors } from "../utils";
7
- import { isBindingElement } from "./typeChecks";
7
+ import { isBindingElement, isElbowArrow, isFixedPointBinding, } from "./typeChecks";
8
8
  import { KEYS, shouldRotateWithDiscreteAngle } from "../keys";
9
9
  import { getBoundTextElement, handleBindTextResize } from "./textElement";
10
10
  import { DRAGGING_THRESHOLD } from "../constants";
11
11
  import { ShapeCache } from "../scene/ShapeCache";
12
+ import { mutateElbowArrow } from "./routing";
12
13
  const editorMidPointsCache = { version: null, points: [], zoom: null };
13
14
  export class LinearElementEditor {
14
15
  elementId;
@@ -25,7 +26,9 @@ export class LinearElementEditor {
25
26
  segmentMidPointHoveredCoords;
26
27
  constructor(element) {
27
28
  this.elementId = element.id;
28
- LinearElementEditor.normalizePoints(element);
29
+ if (!arePointsEqual(element.points[0], [0, 0])) {
30
+ console.error("Linear element is not normalized", Error().stack);
31
+ }
29
32
  this.selectedPointsIndices = null;
30
33
  this.lastUncommittedPoint = null;
31
34
  this.isDragging = false;
@@ -35,6 +38,7 @@ export class LinearElementEditor {
35
38
  this.pointerDownState = {
36
39
  prevSelectedPointsIndices: null,
37
40
  lastClickedPoint: -1,
41
+ lastClickedIsEndPoint: false,
38
42
  origin: null,
39
43
  segmentMidpoint: {
40
44
  value: null,
@@ -73,7 +77,8 @@ export class LinearElementEditor {
73
77
  }
74
78
  const [selectionX1, selectionY1, selectionX2, selectionY2] = getElementAbsoluteCoords(appState.draggingElement, elementsMap);
75
79
  const pointsSceneCoords = LinearElementEditor.getPointsGlobalCoordinates(element, elementsMap);
76
- const nextSelectedPoints = pointsSceneCoords.reduce((acc, point, index) => {
80
+ const nextSelectedPoints = pointsSceneCoords
81
+ .reduce((acc, point, index) => {
77
82
  if ((point[0] >= selectionX1 &&
78
83
  point[0] <= selectionX2 &&
79
84
  point[1] >= selectionY1 &&
@@ -82,7 +87,15 @@ export class LinearElementEditor {
82
87
  acc.push(index);
83
88
  }
84
89
  return acc;
85
- }, []);
90
+ }, [])
91
+ .filter((index) => {
92
+ if (isElbowArrow(element) &&
93
+ index !== 0 &&
94
+ index !== element.points.length - 1) {
95
+ return false;
96
+ }
97
+ return true;
98
+ });
86
99
  setState({
87
100
  editingLinearElement: {
88
101
  ...editingLinearElement,
@@ -93,17 +106,35 @@ export class LinearElementEditor {
93
106
  });
94
107
  }
95
108
  /** @returns whether point was dragged */
96
- static handlePointDragging(event, appState, scenePointerX, scenePointerY, maybeSuggestBinding, linearElementEditor, elementsMap) {
109
+ static handlePointDragging(event, appState, scenePointerX, scenePointerY, maybeSuggestBinding, linearElementEditor, scene) {
97
110
  if (!linearElementEditor) {
98
111
  return false;
99
112
  }
100
- const { selectedPointsIndices, elementId } = linearElementEditor;
113
+ const { elementId } = linearElementEditor;
114
+ const elementsMap = scene.getNonDeletedElementsMap();
101
115
  const element = LinearElementEditor.getElement(elementId, elementsMap);
102
116
  if (!element) {
103
117
  return false;
104
118
  }
119
+ if (isElbowArrow(element) &&
120
+ !linearElementEditor.pointerDownState.lastClickedIsEndPoint &&
121
+ linearElementEditor.pointerDownState.lastClickedPoint !== 0) {
122
+ return false;
123
+ }
124
+ const selectedPointsIndices = isElbowArrow(element)
125
+ ? linearElementEditor.selectedPointsIndices
126
+ ?.reduce((startEnd, index) => (index === 0
127
+ ? [0, startEnd[1]]
128
+ : [startEnd[0], element.points.length - 1]), [false, false])
129
+ .filter((idx) => typeof idx === "number")
130
+ : linearElementEditor.selectedPointsIndices;
131
+ const lastClickedPoint = isElbowArrow(element)
132
+ ? linearElementEditor.pointerDownState.lastClickedPoint > 0
133
+ ? element.points.length - 1
134
+ : 0
135
+ : linearElementEditor.pointerDownState.lastClickedPoint;
105
136
  // point that's being dragged (out of all selected points)
106
- const draggingPoint = element.points[linearElementEditor.pointerDownState.lastClickedPoint];
137
+ const draggingPoint = element.points[lastClickedPoint];
107
138
  if (selectedPointsIndices && draggingPoint) {
108
139
  if (shouldRotateWithDiscreteAngle(event) &&
109
140
  selectedPointsIndices.length === 1 &&
@@ -115,18 +146,16 @@ export class LinearElementEditor {
115
146
  {
116
147
  index: selectedIndex,
117
148
  point: [width + referencePoint[0], height + referencePoint[1]],
118
- isDragging: selectedIndex ===
119
- linearElementEditor.pointerDownState.lastClickedPoint,
149
+ isDragging: selectedIndex === lastClickedPoint,
120
150
  },
121
- ]);
151
+ ], scene);
122
152
  }
123
153
  else {
124
154
  const newDraggingPointPosition = LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - linearElementEditor.pointerOffset.x, scenePointerY - linearElementEditor.pointerOffset.y, event[KEYS.CTRL_OR_CMD] ? null : appState.gridSize);
125
155
  const deltaX = newDraggingPointPosition[0] - draggingPoint[0];
126
156
  const deltaY = newDraggingPointPosition[1] - draggingPoint[1];
127
157
  LinearElementEditor.movePoints(element, selectedPointsIndices.map((pointIndex) => {
128
- const newPointPosition = pointIndex ===
129
- linearElementEditor.pointerDownState.lastClickedPoint
158
+ const newPointPosition = pointIndex === lastClickedPoint
130
159
  ? LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - linearElementEditor.pointerOffset.x, scenePointerY - linearElementEditor.pointerOffset.y, event[KEYS.CTRL_OR_CMD] ? null : appState.gridSize)
131
160
  : [
132
161
  element.points[pointIndex][0] + deltaX,
@@ -135,10 +164,9 @@ export class LinearElementEditor {
135
164
  return {
136
165
  index: pointIndex,
137
166
  point: newPointPosition,
138
- isDragging: pointIndex ===
139
- linearElementEditor.pointerDownState.lastClickedPoint,
167
+ isDragging: pointIndex === lastClickedPoint,
140
168
  };
141
- }));
169
+ }), scene);
142
170
  }
143
171
  const boundTextElement = getBoundTextElement(element, elementsMap);
144
172
  if (boundTextElement) {
@@ -163,8 +191,9 @@ export class LinearElementEditor {
163
191
  }
164
192
  return false;
165
193
  }
166
- static handlePointerUp(event, editingLinearElement, appState, app) {
167
- const elementsMap = app.scene.getNonDeletedElementsMap();
194
+ static handlePointerUp(event, editingLinearElement, appState, scene) {
195
+ const elementsMap = scene.getNonDeletedElementsMap();
196
+ const elements = scene.getNonDeletedElements();
168
197
  const { elementId, selectedPointsIndices, isDragging, pointerDownState } = editingLinearElement;
169
198
  const element = LinearElementEditor.getElement(elementId, elementsMap);
170
199
  if (!element) {
@@ -183,10 +212,10 @@ export class LinearElementEditor {
183
212
  ? element.points[element.points.length - 1]
184
213
  : element.points[0],
185
214
  },
186
- ]);
215
+ ], scene);
187
216
  }
188
217
  const bindingElement = isBindingEnabled(appState)
189
- ? getHoveredElementForBinding(tupleToCoors(LinearElementEditor.getPointAtIndexGlobalCoordinates(element, selectedPoint, elementsMap)), app)
218
+ ? getHoveredElementForBinding(tupleToCoors(LinearElementEditor.getPointAtIndexGlobalCoordinates(element, selectedPoint, elementsMap)), elements, elementsMap)
190
219
  : null;
191
220
  bindings[selectedPoint === 0 ? "startBindingElement" : "endBindingElement"] = bindingElement;
192
221
  }
@@ -314,8 +343,9 @@ export class LinearElementEditor {
314
343
  }
315
344
  return -1;
316
345
  }
317
- static handlePointerDown(event, appState, store, scenePointer, linearElementEditor, app) {
318
- const elementsMap = app.scene.getNonDeletedElementsMap();
346
+ static handlePointerDown(event, appState, store, scenePointer, linearElementEditor, scene) {
347
+ const elementsMap = scene.getNonDeletedElementsMap();
348
+ const elements = scene.getNonDeletedElements();
319
349
  const ret = {
320
350
  didAddPoint: false,
321
351
  hitElement: null,
@@ -335,7 +365,8 @@ export class LinearElementEditor {
335
365
  segmentMidpointIndex = LinearElementEditor.getSegmentMidPointIndex(linearElementEditor, appState, segmentMidpoint, elementsMap);
336
366
  }
337
367
  if (event.altKey && appState.editingLinearElement) {
338
- if (linearElementEditor.lastUncommittedPoint == null) {
368
+ if (linearElementEditor.lastUncommittedPoint == null ||
369
+ !isElbowArrow(element)) {
339
370
  mutateElement(element, {
340
371
  points: [
341
372
  ...element.points,
@@ -350,6 +381,7 @@ export class LinearElementEditor {
350
381
  pointerDownState: {
351
382
  prevSelectedPointsIndices: linearElementEditor.selectedPointsIndices,
352
383
  lastClickedPoint: -1,
384
+ lastClickedIsEndPoint: false,
353
385
  origin: { x: scenePointer.x, y: scenePointer.y },
354
386
  segmentMidpoint: {
355
387
  value: segmentMidpoint,
@@ -359,7 +391,7 @@ export class LinearElementEditor {
359
391
  },
360
392
  selectedPointsIndices: [element.points.length - 1],
361
393
  lastUncommittedPoint: null,
362
- endBindingElement: getHoveredElementForBinding(scenePointer, app),
394
+ endBindingElement: getHoveredElementForBinding(scenePointer, elements, elementsMap),
363
395
  };
364
396
  ret.didAddPoint = true;
365
397
  return ret;
@@ -378,7 +410,7 @@ export class LinearElementEditor {
378
410
  // the point).
379
411
  const { startBindingElement, endBindingElement } = linearElementEditor;
380
412
  if (isBindingEnabled(appState) && isBindingElement(element)) {
381
- bindOrUnbindLinearElement(element, startBindingElement, endBindingElement, elementsMap);
413
+ bindOrUnbindLinearElement(element, startBindingElement, endBindingElement, elementsMap, scene);
382
414
  }
383
415
  }
384
416
  const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
@@ -400,6 +432,7 @@ export class LinearElementEditor {
400
432
  pointerDownState: {
401
433
  prevSelectedPointsIndices: linearElementEditor.selectedPointsIndices,
402
434
  lastClickedPoint: clickedPointIndex,
435
+ lastClickedIsEndPoint: clickedPointIndex === element.points.length - 1,
403
436
  origin: { x: scenePointer.x, y: scenePointer.y },
404
437
  segmentMidpoint: {
405
438
  value: segmentMidpoint,
@@ -426,11 +459,12 @@ export class LinearElementEditor {
426
459
  }
427
460
  return arePointsEqual(point1, point2);
428
461
  }
429
- static handlePointerMove(event, scenePointerX, scenePointerY, appState, elementsMap) {
462
+ static handlePointerMove(event, scenePointerX, scenePointerY, appState, scene) {
430
463
  if (!appState.editingLinearElement) {
431
464
  return null;
432
465
  }
433
466
  const { elementId, lastUncommittedPoint } = appState.editingLinearElement;
467
+ const elementsMap = scene.getNonDeletedElementsMap();
434
468
  const element = LinearElementEditor.getElement(elementId, elementsMap);
435
469
  if (!element) {
436
470
  return appState.editingLinearElement;
@@ -439,7 +473,7 @@ export class LinearElementEditor {
439
473
  const lastPoint = points[points.length - 1];
440
474
  if (!event.altKey) {
441
475
  if (lastPoint === lastUncommittedPoint) {
442
- LinearElementEditor.deletePoints(element, [points.length - 1]);
476
+ LinearElementEditor.deletePoints(element, [points.length - 1], scene);
443
477
  }
444
478
  return {
445
479
  ...appState.editingLinearElement,
@@ -456,7 +490,9 @@ export class LinearElementEditor {
456
490
  ];
457
491
  }
458
492
  else {
459
- newPoint = LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - appState.editingLinearElement.pointerOffset.x, scenePointerY - appState.editingLinearElement.pointerOffset.y, event[KEYS.CTRL_OR_CMD] ? null : appState.gridSize);
493
+ newPoint = LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - appState.editingLinearElement.pointerOffset.x, scenePointerY - appState.editingLinearElement.pointerOffset.y, event[KEYS.CTRL_OR_CMD] || isElbowArrow(element)
494
+ ? null
495
+ : appState.gridSize);
460
496
  }
461
497
  if (lastPoint === lastUncommittedPoint) {
462
498
  LinearElementEditor.movePoints(element, [
@@ -464,10 +500,10 @@ export class LinearElementEditor {
464
500
  index: element.points.length - 1,
465
501
  point: newPoint,
466
502
  },
467
- ]);
503
+ ], scene);
468
504
  }
469
505
  else {
470
- LinearElementEditor.addPoints(element, appState, [{ point: newPoint }]);
506
+ LinearElementEditor.addPoints(element, appState, [{ point: newPoint }], scene);
471
507
  }
472
508
  return {
473
509
  ...appState.editingLinearElement,
@@ -509,6 +545,10 @@ export class LinearElementEditor {
509
545
  : rotate(x, y, cx, cy, element.angle);
510
546
  }
511
547
  static pointFromAbsoluteCoords(element, absoluteCoords, elementsMap) {
548
+ if (isElbowArrow(element)) {
549
+ // No rotation for elbow arrows
550
+ return [absoluteCoords[0] - element.x, absoluteCoords[1] - element.y];
551
+ }
512
552
  const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
513
553
  const cx = (x1 + x2) / 2;
514
554
  const cy = (y1 + y2) / 2;
@@ -561,11 +601,12 @@ export class LinearElementEditor {
561
601
  static normalizePoints(element) {
562
602
  mutateElement(element, LinearElementEditor.getNormalizedPoints(element));
563
603
  }
564
- static duplicateSelectedPoints(appState, elementsMap) {
604
+ static duplicateSelectedPoints(appState, scene) {
565
605
  if (!appState.editingLinearElement) {
566
606
  return false;
567
607
  }
568
608
  const { selectedPointsIndices, elementId } = appState.editingLinearElement;
609
+ const elementsMap = scene.getNonDeletedElementsMap();
569
610
  const element = LinearElementEditor.getElement(elementId, elementsMap);
570
611
  if (!element || selectedPointsIndices === null) {
571
612
  return false;
@@ -601,7 +642,7 @@ export class LinearElementEditor {
601
642
  index: element.points.length - 1,
602
643
  point: [lastPoint[0] + 30, lastPoint[1] + 30],
603
644
  },
604
- ]);
645
+ ], scene);
605
646
  }
606
647
  return {
607
648
  appState: {
@@ -613,7 +654,7 @@ export class LinearElementEditor {
613
654
  },
614
655
  };
615
656
  }
616
- static deletePoints(element, pointIndices) {
657
+ static deletePoints(element, pointIndices, scene) {
617
658
  let offsetX = 0;
618
659
  let offsetY = 0;
619
660
  const isDeletingOriginPoint = pointIndices.includes(0);
@@ -634,15 +675,15 @@ export class LinearElementEditor {
634
675
  }
635
676
  return acc;
636
677
  }, []);
637
- LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY);
678
+ LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, scene);
638
679
  }
639
- static addPoints(element, appState, targetPoints) {
680
+ static addPoints(element, appState, targetPoints, scene) {
640
681
  const offsetX = 0;
641
682
  const offsetY = 0;
642
683
  const nextPoints = [...element.points, ...targetPoints.map((x) => x.point)];
643
- LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY);
684
+ LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, scene);
644
685
  }
645
- static movePoints(element, targetPoints, otherUpdates) {
686
+ static movePoints(element, targetPoints, scene, otherUpdates, options) {
646
687
  const { points } = element;
647
688
  // in case we're moving start point, instead of modifying its position
648
689
  // which would break the invariant of it being at [0,0], we move
@@ -661,21 +702,31 @@ export class LinearElementEditor {
661
702
  const nextPoints = points.map((point, idx) => {
662
703
  const selectedPointData = targetPoints.find((p) => p.index === idx);
663
704
  if (selectedPointData) {
664
- if (selectedOriginPoint) {
705
+ if (selectedPointData.index === 0) {
665
706
  return point;
666
707
  }
667
708
  const deltaX = selectedPointData.point[0] - points[selectedPointData.index][0];
668
709
  const deltaY = selectedPointData.point[1] - points[selectedPointData.index][1];
669
- return [point[0] + deltaX, point[1] + deltaY];
710
+ return [
711
+ point[0] + deltaX - offsetX,
712
+ point[1] + deltaY - offsetY,
713
+ ];
670
714
  }
671
715
  return offsetX || offsetY
672
716
  ? [point[0] - offsetX, point[1] - offsetY]
673
717
  : point;
674
718
  });
675
- LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, otherUpdates);
719
+ LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, scene, otherUpdates, {
720
+ isDragging: targetPoints.reduce((dragging, targetPoint) => dragging || targetPoint.isDragging === true, false),
721
+ changedElements: options?.changedElements,
722
+ });
676
723
  }
677
724
  static shouldAddMidpoint(linearElementEditor, pointerCoords, appState, elementsMap) {
678
725
  const element = LinearElementEditor.getElement(linearElementEditor.elementId, elementsMap);
726
+ // Elbow arrows don't allow midpoints
727
+ if (element && isElbowArrow(element)) {
728
+ return false;
729
+ }
679
730
  if (!element) {
680
731
  return false;
681
732
  }
@@ -704,7 +755,7 @@ export class LinearElementEditor {
704
755
  pointerDownState: linearElementEditor.pointerDownState,
705
756
  selectedPointsIndices: linearElementEditor.selectedPointsIndices,
706
757
  };
707
- const midpoint = LinearElementEditor.createPointAt(element, elementsMap, pointerCoords.x, pointerCoords.y, snapToGrid ? appState.gridSize : null);
758
+ const midpoint = LinearElementEditor.createPointAt(element, elementsMap, pointerCoords.x, pointerCoords.y, snapToGrid && !isElbowArrow(element) ? appState.gridSize : null);
708
759
  const points = [
709
760
  ...element.points.slice(0, segmentMidpoint.index),
710
761
  midpoint,
@@ -724,25 +775,51 @@ export class LinearElementEditor {
724
775
  ret.selectedPointsIndices = [segmentMidpoint.index];
725
776
  return ret;
726
777
  }
727
- static _updatePoints(element, nextPoints, offsetX, offsetY, otherUpdates) {
728
- const nextCoords = getElementPointsCoords(element, nextPoints);
729
- const prevCoords = getElementPointsCoords(element, element.points);
730
- const nextCenterX = (nextCoords[0] + nextCoords[2]) / 2;
731
- const nextCenterY = (nextCoords[1] + nextCoords[3]) / 2;
732
- const prevCenterX = (prevCoords[0] + prevCoords[2]) / 2;
733
- const prevCenterY = (prevCoords[1] + prevCoords[3]) / 2;
734
- const dX = prevCenterX - nextCenterX;
735
- const dY = prevCenterY - nextCenterY;
736
- const rotated = rotate(offsetX, offsetY, dX, dY, element.angle);
737
- mutateElement(element, {
738
- ...otherUpdates,
739
- points: nextPoints,
740
- x: element.x + rotated[0],
741
- y: element.y + rotated[1],
742
- });
778
+ static _updatePoints(element, nextPoints, offsetX, offsetY, scene, otherUpdates, options) {
779
+ if (isElbowArrow(element)) {
780
+ const bindings = {};
781
+ if (otherUpdates?.startBinding !== undefined) {
782
+ bindings.startBinding =
783
+ otherUpdates.startBinding !== null &&
784
+ isFixedPointBinding(otherUpdates.startBinding)
785
+ ? otherUpdates.startBinding
786
+ : null;
787
+ }
788
+ if (otherUpdates?.endBinding !== undefined) {
789
+ bindings.endBinding =
790
+ otherUpdates.endBinding !== null &&
791
+ isFixedPointBinding(otherUpdates.endBinding)
792
+ ? otherUpdates.endBinding
793
+ : null;
794
+ }
795
+ mutateElbowArrow(element, scene, nextPoints, [offsetX, offsetY], bindings, options);
796
+ }
797
+ else {
798
+ const nextCoords = getElementPointsCoords(element, nextPoints);
799
+ const prevCoords = getElementPointsCoords(element, element.points);
800
+ const nextCenterX = (nextCoords[0] + nextCoords[2]) / 2;
801
+ const nextCenterY = (nextCoords[1] + nextCoords[3]) / 2;
802
+ const prevCenterX = (prevCoords[0] + prevCoords[2]) / 2;
803
+ const prevCenterY = (prevCoords[1] + prevCoords[3]) / 2;
804
+ const dX = prevCenterX - nextCenterX;
805
+ const dY = prevCenterY - nextCenterY;
806
+ const rotated = rotate(offsetX, offsetY, dX, dY, element.angle);
807
+ mutateElement(element, {
808
+ ...otherUpdates,
809
+ points: nextPoints,
810
+ x: element.x + rotated[0],
811
+ y: element.y + rotated[1],
812
+ });
813
+ }
743
814
  }
744
815
  static _getShiftLockedDelta(element, elementsMap, referencePoint, scenePointer, gridSize) {
745
816
  const referencePointCoords = LinearElementEditor.getPointGlobalCoordinates(element, referencePoint, elementsMap);
817
+ if (isElbowArrow(element)) {
818
+ return [
819
+ scenePointer[0] - referencePointCoords[0],
820
+ scenePointer[1] - referencePointCoords[1],
821
+ ];
822
+ }
746
823
  const [gridX, gridY] = getGridPoint(scenePointer[0], scenePointer[1], gridSize);
747
824
  const { width, height } = getLockedLinearCursorAlignSize(referencePointCoords[0], referencePointCoords[1], gridX, gridY);
748
825
  return rotatePoint([width, height], [0, 0], -element.angle);
@@ -1,8 +1,8 @@
1
- import { ExcalidrawElement } from "./types";
2
- import { Mutable } from "../utility-types";
1
+ import type { ExcalidrawElement } from "./types";
2
+ import type { Mutable } from "../utility-types";
3
3
  export type ElementUpdate<TElement extends ExcalidrawElement> = Omit<Partial<TElement>, "id" | "version" | "versionNonce" | "updated">;
4
4
  export declare const mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, informMutation?: boolean) => TElement;
5
- export declare const newElementWith: <TElement extends ExcalidrawElement>(element: TElement, updates: ElementUpdate<TElement>) => TElement;
5
+ export declare const newElementWith: <TElement extends ExcalidrawElement>(element: TElement, updates: ElementUpdate<TElement>, force?: boolean) => TElement;
6
6
  /**
7
7
  * Mutates element, bumping `version`, `versionNonce`, and `updated`.
8
8
  *
@@ -71,11 +71,13 @@ export const mutateElement = (element, updates, informMutation = true) => {
71
71
  element.versionNonce = randomInteger();
72
72
  element.updated = getUpdatedTimestamp();
73
73
  if (informMutation) {
74
- Scene.getScene(element)?.informMutation();
74
+ Scene.getScene(element)?.triggerUpdate();
75
75
  }
76
76
  return element;
77
77
  };
78
- export const newElementWith = (element, updates) => {
78
+ export const newElementWith = (element, updates,
79
+ /** pass `true` to always regenerate */
80
+ force = false) => {
79
81
  let didChange = false;
80
82
  for (const key in updates) {
81
83
  const value = updates[key];
@@ -88,7 +90,7 @@ export const newElementWith = (element, updates) => {
88
90
  didChange = true;
89
91
  }
90
92
  }
91
- if (!didChange) {
93
+ if (!didChange && !force) {
92
94
  return element;
93
95
  }
94
96
  return {
@@ -1,6 +1,6 @@
1
- import { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap } from "./types";
2
- import { AppState } from "../types";
3
- import { MarkOptional, Mutable } from "../utility-types";
1
+ import type { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap, ExcalidrawArrowElement } from "./types";
2
+ import type { AppState } from "../types";
3
+ import type { MarkOptional, Mutable } from "../utility-types";
4
4
  export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "index" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData">;
5
5
  export declare const newElement: (opts: {
6
6
  type: ExcalidrawGenericElement["type"];
@@ -19,6 +19,7 @@ export declare const newMagicFrameElement: (opts: {
19
19
  } & ElementConstructorOpts) => NonDeleted<ExcalidrawMagicFrameElement>;
20
20
  export declare const newTextElement: (opts: {
21
21
  text: string;
22
+ originalText?: string;
22
23
  fontSize?: number;
23
24
  fontFamily?: FontFamilyValues;
24
25
  textAlign?: TextAlign;
@@ -26,6 +27,7 @@ export declare const newTextElement: (opts: {
26
27
  containerId?: ExcalidrawTextContainer["id"] | null;
27
28
  lineHeight?: ExcalidrawTextElement["lineHeight"];
28
29
  strokeWidth?: ExcalidrawTextElement["strokeWidth"];
30
+ autoResize?: ExcalidrawTextElement["autoResize"];
29
31
  } & ElementConstructorOpts) => NonDeleted<ExcalidrawTextElement>;
30
32
  export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null, elementsMap: ElementsMap, text?: string) => {
31
33
  x: number;
@@ -34,11 +36,6 @@ export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement,
34
36
  height: number;
35
37
  text: string;
36
38
  } | undefined;
37
- export declare const updateTextElement: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null, elementsMap: ElementsMap, { text, isDeleted, originalText, }: {
38
- text: string;
39
- isDeleted?: boolean | undefined;
40
- originalText: string;
41
- }) => ExcalidrawTextElement;
42
39
  export declare const newFreeDrawElement: (opts: {
43
40
  type: "freedraw";
44
41
  points?: ExcalidrawFreeDrawElement["points"];
@@ -46,10 +43,15 @@ export declare const newFreeDrawElement: (opts: {
46
43
  } & ElementConstructorOpts) => NonDeleted<ExcalidrawFreeDrawElement>;
47
44
  export declare const newLinearElement: (opts: {
48
45
  type: ExcalidrawLinearElement["type"];
49
- startArrowhead?: Arrowhead | null;
50
- endArrowhead?: Arrowhead | null;
51
46
  points?: ExcalidrawLinearElement["points"];
52
47
  } & ElementConstructorOpts) => NonDeleted<ExcalidrawLinearElement>;
48
+ export declare const newArrowElement: (opts: {
49
+ type: ExcalidrawArrowElement["type"];
50
+ startArrowhead?: Arrowhead | null;
51
+ endArrowhead?: Arrowhead | null;
52
+ points?: ExcalidrawArrowElement["points"];
53
+ elbowed?: boolean;
54
+ } & ElementConstructorOpts) => NonDeleted<ExcalidrawArrowElement>;
53
55
  export declare const newImageElement: (opts: {
54
56
  type: ExcalidrawImageElement["type"];
55
57
  status?: ExcalidrawImageElement["status"];
@@ -5,8 +5,9 @@ import { getNewGroupIdsForDuplication } from "../groups";
5
5
  import { getElementAbsoluteCoords } from ".";
6
6
  import { adjustXYWithRotation } from "../math";
7
7
  import { getResizedElementAbsoluteCoords } from "./bounds";
8
- import { measureText, normalizeText, wrapText, getBoundTextMaxWidth, getDefaultLineHeight, } from "./textElement";
8
+ import { measureText, normalizeText, wrapText, getBoundTextMaxWidth, } from "./textElement";
9
9
  import { DEFAULT_ELEMENT_PROPS, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, VERTICAL_ALIGN, } from "../constants";
10
+ import { getLineHeight } from "../fonts";
10
11
  const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strokeColor, backgroundColor = DEFAULT_ELEMENT_PROPS.backgroundColor, fillStyle = DEFAULT_ELEMENT_PROPS.fillStyle, strokeWidth = DEFAULT_ELEMENT_PROPS.strokeWidth, strokeStyle = DEFAULT_ELEMENT_PROPS.strokeStyle, roughness = DEFAULT_ELEMENT_PROPS.roughness, opacity = DEFAULT_ELEMENT_PROPS.opacity, width = 0, height = 0, angle = 0, groupIds = [], frameId = null, index = null, roundness = null, boundElements = null, link = null, locked = DEFAULT_ELEMENT_PROPS.locked, ...rest }) => {
11
12
  // assign type to guard against excess properties
12
13
  const element = {
@@ -79,13 +80,13 @@ const getTextElementPositionOffsets = (opts, metrics) => {
79
80
  export const newTextElement = (opts) => {
80
81
  const fontFamily = opts.fontFamily || DEFAULT_FONT_FAMILY;
81
82
  const fontSize = opts.fontSize || DEFAULT_FONT_SIZE;
82
- const lineHeight = opts.lineHeight || getDefaultLineHeight(fontFamily);
83
+ const lineHeight = opts.lineHeight || getLineHeight(fontFamily);
83
84
  const text = normalizeText(opts.text);
84
85
  const metrics = measureText(text, getFontString({ fontFamily, fontSize }), lineHeight);
85
86
  const textAlign = opts.textAlign || DEFAULT_TEXT_ALIGN;
86
87
  const verticalAlign = opts.verticalAlign || DEFAULT_VERTICAL_ALIGN;
87
88
  const offsets = getTextElementPositionOffsets({ textAlign, verticalAlign }, metrics);
88
- const textElement = newElementWith({
89
+ const textElementProps = {
89
90
  ..._newElementBase("text", opts),
90
91
  text,
91
92
  fontSize,
@@ -97,19 +98,26 @@ export const newTextElement = (opts) => {
97
98
  width: metrics.width,
98
99
  height: metrics.height,
99
100
  containerId: opts.containerId || null,
100
- originalText: text,
101
+ originalText: opts.originalText ?? text,
102
+ autoResize: opts.autoResize ?? true,
101
103
  lineHeight,
102
- }, {});
104
+ };
105
+ const textElement = newElementWith(textElementProps, {});
103
106
  return textElement;
104
107
  };
105
108
  const getAdjustedDimensions = (element, elementsMap, nextText) => {
106
- const { width: nextWidth, height: nextHeight } = measureText(nextText, getFontString(element), element.lineHeight);
109
+ let { width: nextWidth, height: nextHeight } = measureText(nextText, getFontString(element), element.lineHeight);
110
+ // wrapped text
111
+ if (!element.autoResize) {
112
+ nextWidth = element.width;
113
+ }
107
114
  const { textAlign, verticalAlign } = element;
108
115
  let x;
109
116
  let y;
110
117
  if (textAlign === "center" &&
111
118
  verticalAlign === VERTICAL_ALIGN.MIDDLE &&
112
- !element.containerId) {
119
+ !element.containerId &&
120
+ element.autoResize) {
113
121
  const prevMetrics = measureText(element.text, getFontString(element), element.lineHeight);
114
122
  const offsets = getTextElementPositionOffsets(element, {
115
123
  width: nextWidth - prevMetrics.width,
@@ -142,19 +150,14 @@ export const refreshTextDimensions = (textElement, container, elementsMap, text
142
150
  if (textElement.isDeleted) {
143
151
  return;
144
152
  }
145
- if (container) {
146
- text = wrapText(text, getFontString(textElement), getBoundTextMaxWidth(container, textElement));
153
+ if (container || !textElement.autoResize) {
154
+ text = wrapText(text, getFontString(textElement), container
155
+ ? getBoundTextMaxWidth(container, textElement)
156
+ : textElement.width);
147
157
  }
148
158
  const dimensions = getAdjustedDimensions(textElement, elementsMap, text);
149
159
  return { text, ...dimensions };
150
160
  };
151
- export const updateTextElement = (textElement, container, elementsMap, { text, isDeleted, originalText, }) => {
152
- return newElementWith(textElement, {
153
- originalText,
154
- isDeleted: isDeleted ?? textElement.isDeleted,
155
- ...refreshTextDimensions(textElement, container, elementsMap, originalText),
156
- });
157
- };
158
161
  export const newFreeDrawElement = (opts) => {
159
162
  return {
160
163
  ..._newElementBase(opts.type, opts),
@@ -165,6 +168,17 @@ export const newFreeDrawElement = (opts) => {
165
168
  };
166
169
  };
167
170
  export const newLinearElement = (opts) => {
171
+ return {
172
+ ..._newElementBase(opts.type, opts),
173
+ points: opts.points || [],
174
+ lastCommittedPoint: null,
175
+ startBinding: null,
176
+ endBinding: null,
177
+ startArrowhead: null,
178
+ endArrowhead: null,
179
+ };
180
+ };
181
+ export const newArrowElement = (opts) => {
168
182
  return {
169
183
  ..._newElementBase(opts.type, opts),
170
184
  points: opts.points || [],
@@ -173,6 +187,7 @@ export const newLinearElement = (opts) => {
173
187
  endBinding: null,
174
188
  startArrowhead: opts.startArrowhead || null,
175
189
  endArrowhead: opts.endArrowhead || null,
190
+ elbowed: opts.elbowed || false,
176
191
  };
177
192
  };
178
193
  export const newImageElement = (opts) => {
@@ -1,9 +1,18 @@
1
- import { ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
2
- import { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
3
- import { PointerDownState } from "../types";
1
+ import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
2
+ import type { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
3
+ import type { PointerDownState } from "../types";
4
+ import Scene from "../scene/Scene";
4
5
  export declare const normalizeAngle: (angle: number) => number;
5
- export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
6
- export declare const resizeSingleElement: (originalElements: PointerDownState["originalElements"], shouldMaintainAspectRatio: boolean, element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleDirection: TransformHandleDirection, shouldResizeFromCenter: boolean, pointerX: number, pointerY: number) => void;
7
- export declare const resizeMultipleElements: (originalElements: PointerDownState["originalElements"], selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number) => void;
6
+ export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number, scene: Scene) => boolean;
7
+ export declare const rescalePointsInElement: (element: NonDeletedExcalidrawElement, width: number, height: number, normalizePoints: boolean) => {
8
+ points: (readonly [number, number])[];
9
+ } | {
10
+ points?: undefined;
11
+ };
12
+ export declare const measureFontSizeFromWidth: (element: NonDeleted<ExcalidrawTextElement>, elementsMap: ElementsMap, nextWidth: number) => {
13
+ size: number;
14
+ } | null;
15
+ export declare const resizeSingleElement: (originalElements: PointerDownState["originalElements"], shouldMaintainAspectRatio: boolean, element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleDirection: TransformHandleDirection, shouldResizeFromCenter: boolean, pointerX: number, pointerY: number, scene: Scene) => void;
16
+ export declare const resizeMultipleElements: (originalElements: PointerDownState["originalElements"], selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, scene: Scene) => void;
8
17
  export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, x: number, y: number) => [number, number];
9
18
  export declare const getResizeArrowDirection: (transformHandleType: MaybeTransformHandleType, element: NonDeleted<ExcalidrawLinearElement>) => "origin" | "end";