@excalidraw/excalidraw 0.18.0-817d8c5 → 0.18.0-a30e1b2

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 (279) hide show
  1. package/CHANGELOG.md +11 -11
  2. package/dist/dev/{chunk-LMHBUWQS.js → chunk-CARD3WJZ.js} +10 -4
  3. package/dist/dev/chunk-CARD3WJZ.js.map +7 -0
  4. package/dist/dev/{chunk-3SN6HYVK.js → chunk-ETWEPOFC.js} +15663 -22657
  5. package/dist/dev/chunk-ETWEPOFC.js.map +7 -0
  6. package/dist/dev/chunk-FB2NA5UG.js +4132 -0
  7. package/dist/dev/chunk-FB2NA5UG.js.map +7 -0
  8. package/dist/dev/{chunk-53KHN5WM.js → chunk-RS23HYC4.js} +2 -2
  9. package/dist/dev/{chunk-53KHN5WM.js.map → chunk-RS23HYC4.js.map} +1 -1
  10. package/dist/dev/data/{image-V26YBSDB.js → image-AYLHSOBV.js} +3 -3
  11. package/dist/dev/index.css +3093 -3055
  12. package/dist/dev/index.css.map +3 -3
  13. package/dist/dev/index.js +32056 -23232
  14. package/dist/dev/index.js.map +4 -4
  15. package/dist/dev/locales/{en-OZCJJ2HN.js → en-E3O5XSXJ.js} +2 -2
  16. package/dist/dev/subset-shared.chunk.js +2 -2
  17. package/dist/dev/subset-worker.chunk.js +2 -2
  18. package/dist/prod/chunk-6BSJPDKJ.js +33 -0
  19. package/dist/prod/{chunk-6U3AYISY.js → chunk-FGHASORR.js} +4 -4
  20. package/dist/prod/chunk-LS7FJGPW.js +86 -0
  21. package/dist/prod/{chunk-G5N3DNGT.js → chunk-SBKTMZM7.js} +1 -1
  22. package/dist/prod/data/image-VAYKYPXV.js +1 -0
  23. package/dist/prod/index.css +1 -1
  24. package/dist/prod/index.js +19 -15
  25. package/dist/prod/locales/{en-B4ZKOASM.js → en-44IKVKYT.js} +1 -1
  26. package/dist/prod/subset-shared.chunk.js +1 -1
  27. package/dist/prod/subset-worker.chunk.js +1 -1
  28. package/dist/types/{excalidraw/binaryheap.d.ts → common/src/binary-heap.d.ts} +1 -1
  29. package/dist/types/{excalidraw → common/src}/colors.d.ts +1 -0
  30. package/dist/types/{excalidraw → common/src}/constants.d.ts +11 -6
  31. package/dist/types/{excalidraw → common/src}/emitter.d.ts +1 -1
  32. package/dist/types/{excalidraw/fonts/FontMetadata.d.ts → common/src/font-metadata.d.ts} +15 -5
  33. package/dist/types/common/src/index.d.ts +12 -0
  34. package/dist/types/{excalidraw → common/src}/points.d.ts +2 -0
  35. package/dist/types/common/src/promise-pool.d.ts +6 -0
  36. package/dist/types/{excalidraw → common/src}/utility-types.d.ts +5 -0
  37. package/dist/types/{excalidraw → common/src}/utils.d.ts +22 -12
  38. package/dist/types/{excalidraw/scene → element/src}/Scene.d.ts +12 -15
  39. package/dist/types/{excalidraw/scene → element/src}/Shape.d.ts +2 -2
  40. package/dist/types/{excalidraw/scene → element/src}/ShapeCache.d.ts +4 -4
  41. package/dist/types/element/src/align.d.ts +7 -0
  42. package/dist/types/{excalidraw/element → element/src}/binding.d.ts +24 -16
  43. package/dist/types/{excalidraw/element → element/src}/bounds.d.ts +9 -4
  44. package/dist/types/{excalidraw/element → element/src}/collision.d.ts +3 -3
  45. package/dist/types/{excalidraw/scene → element/src}/comparisons.d.ts +1 -1
  46. package/dist/types/{excalidraw/change.d.ts → element/src/delta.d.ts} +41 -36
  47. package/dist/types/{excalidraw → element/src}/distribute.d.ts +1 -1
  48. package/dist/types/{excalidraw/element → element/src}/dragElements.d.ts +5 -4
  49. package/dist/types/element/src/duplicate.d.ts +63 -0
  50. package/dist/types/{excalidraw/element → element/src}/elbowArrow.d.ts +1 -1
  51. package/dist/types/{excalidraw/element → element/src}/elementLink.d.ts +1 -1
  52. package/dist/types/element/src/embeddable.d.ts +10 -0
  53. package/dist/types/{excalidraw/element → element/src}/flowchart.d.ts +4 -3
  54. package/dist/types/{excalidraw → element/src}/fractionalIndex.d.ts +5 -2
  55. package/dist/types/{excalidraw → element/src}/frame.d.ts +8 -7
  56. package/dist/types/{excalidraw → element/src}/groups.d.ts +5 -5
  57. package/dist/types/{excalidraw/element → element/src}/heading.d.ts +1 -2
  58. package/dist/types/{excalidraw/element → element/src}/image.d.ts +2 -2
  59. package/dist/types/element/src/index.d.ts +16 -0
  60. package/dist/types/{excalidraw/element → element/src}/linearElementEditor.d.ts +16 -20
  61. package/dist/types/{excalidraw/element → element/src}/mutateElement.d.ts +11 -3
  62. package/dist/types/{excalidraw/element → element/src}/newElement.d.ts +4 -44
  63. package/dist/types/{excalidraw/renderer → element/src}/renderElement.d.ts +3 -3
  64. package/dist/types/{excalidraw/element → element/src}/resizeElements.d.ts +6 -6
  65. package/dist/types/{excalidraw/element → element/src}/resizeTest.d.ts +4 -4
  66. package/dist/types/{excalidraw/scene → element/src}/selection.d.ts +13 -2
  67. package/dist/types/element/src/shapes.d.ts +23 -0
  68. package/dist/types/{excalidraw/element → element/src}/showSelectedShapeActions.d.ts +1 -1
  69. package/dist/types/{excalidraw/element → element/src}/sizeHelpers.d.ts +1 -2
  70. package/dist/types/element/src/store.d.ts +227 -0
  71. package/dist/types/{excalidraw/element → element/src}/textElement.d.ts +8 -7
  72. package/dist/types/{excalidraw/element → element/src}/transformHandles.d.ts +7 -7
  73. package/dist/types/{excalidraw/element → element/src}/typeChecks.d.ts +5 -2
  74. package/dist/types/{excalidraw/element → element/src}/types.d.ts +9 -2
  75. package/dist/types/element/src/zindex.d.ts +7 -0
  76. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +88 -103
  77. package/dist/types/excalidraw/actions/actionAlign.d.ts +15 -15
  78. package/dist/types/excalidraw/actions/actionBoundText.d.ts +64 -74
  79. package/dist/types/excalidraw/actions/actionCanvas.d.ts +608 -497
  80. package/dist/types/excalidraw/actions/actionClipboard.d.ts +188 -218
  81. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +31 -36
  82. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +89 -104
  83. package/dist/types/excalidraw/actions/actionDistribute.d.ts +7 -7
  84. package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +5 -9
  85. package/dist/types/excalidraw/actions/actionElementLink.d.ts +34 -39
  86. package/dist/types/excalidraw/actions/actionElementLock.d.ts +65 -76
  87. package/dist/types/excalidraw/{element/embeddable.d.ts → actions/actionEmbeddable.d.ts} +31 -46
  88. package/dist/types/excalidraw/actions/actionExport.d.ts +342 -387
  89. package/dist/types/excalidraw/actions/actionFinalize.d.ts +52 -62
  90. package/dist/types/excalidraw/actions/actionFlip.d.ts +7 -7
  91. package/dist/types/excalidraw/actions/actionFrame.d.ts +234 -254
  92. package/dist/types/excalidraw/actions/actionGroup.d.ts +65 -75
  93. package/dist/types/excalidraw/actions/actionHistory.d.ts +2 -3
  94. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +32 -37
  95. package/dist/types/excalidraw/actions/actionLink.d.ts +34 -39
  96. package/dist/types/excalidraw/actions/actionMenu.d.ts +91 -106
  97. package/dist/types/excalidraw/actions/actionNavigate.d.ts +59 -69
  98. package/dist/types/excalidraw/actions/actionProperties.d.ts +396 -471
  99. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +33 -38
  100. package/dist/types/excalidraw/actions/actionStyles.d.ts +37 -42
  101. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +3 -3
  102. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +33 -38
  103. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +33 -38
  104. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +32 -209
  105. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +19 -0
  106. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +32 -38
  107. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +33 -39
  108. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +33 -39
  109. package/dist/types/excalidraw/actions/actionZindex.d.ts +16 -16
  110. package/dist/types/excalidraw/actions/index.d.ts +1 -0
  111. package/dist/types/excalidraw/actions/manager.d.ts +2 -2
  112. package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
  113. package/dist/types/excalidraw/actions/types.d.ts +5 -5
  114. package/dist/types/excalidraw/animated-trail.d.ts +7 -1
  115. package/dist/types/excalidraw/appState.d.ts +34 -33
  116. package/dist/types/excalidraw/charts.d.ts +1 -1
  117. package/dist/types/excalidraw/clipboard.d.ts +7 -7
  118. package/dist/types/excalidraw/components/Actions.d.ts +3 -3
  119. package/dist/types/excalidraw/components/App.d.ts +38 -20
  120. package/dist/types/excalidraw/components/Avatar.d.ts +1 -1
  121. package/dist/types/excalidraw/components/ButtonIcon.d.ts +1 -1
  122. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
  123. package/dist/types/excalidraw/components/ColorPicker/HotkeyLabel.d.ts +1 -2
  124. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +2 -2
  125. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
  126. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
  127. package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +3 -3
  128. package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +1 -1
  129. package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
  130. package/dist/types/excalidraw/components/ConfirmDialog.d.ts +1 -1
  131. package/dist/types/excalidraw/components/ContextMenu.d.ts +2 -2
  132. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +49 -0
  133. package/dist/types/excalidraw/components/DarkModeToggle.d.ts +1 -1
  134. package/dist/types/excalidraw/components/DefaultSidebar.d.ts +2 -2
  135. package/dist/types/excalidraw/components/DialogActionButton.d.ts +1 -1
  136. package/dist/types/excalidraw/{element → components}/ElementCanvasButtons.d.ts +1 -1
  137. package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +5 -4
  138. package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -1
  139. package/dist/types/excalidraw/components/FixedSideContainer.d.ts +1 -1
  140. package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
  141. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +1 -1
  142. package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +3 -3
  143. package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +1 -1
  144. package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +1 -1
  145. package/dist/types/excalidraw/components/HintViewer.d.ts +1 -1
  146. package/dist/types/excalidraw/components/IconPicker.d.ts +1 -1
  147. package/dist/types/excalidraw/components/ImageExportDialog.d.ts +2 -2
  148. package/dist/types/excalidraw/components/InitializeApp.d.ts +1 -1
  149. package/dist/types/excalidraw/components/Island.d.ts +1 -1
  150. package/dist/types/excalidraw/components/JSONExportDialog.d.ts +2 -2
  151. package/dist/types/excalidraw/components/LayerUI.d.ts +3 -3
  152. package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +1 -1
  153. package/dist/types/excalidraw/components/LibraryMenuItems.d.ts +1 -1
  154. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +3 -3
  155. package/dist/types/excalidraw/components/LibraryUnit.d.ts +2 -2
  156. package/dist/types/excalidraw/components/LoadingMessage.d.ts +1 -1
  157. package/dist/types/excalidraw/components/MagicButton.d.ts +1 -1
  158. package/dist/types/excalidraw/components/MobileMenu.d.ts +3 -3
  159. package/dist/types/excalidraw/components/PasteChartDialog.d.ts +1 -1
  160. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -1
  161. package/dist/types/excalidraw/components/PublishLibrary.d.ts +1 -1
  162. package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
  163. package/dist/types/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
  164. package/dist/types/excalidraw/components/Sidebar/common.d.ts +1 -1
  165. package/dist/types/excalidraw/components/Stack.d.ts +1 -1
  166. package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
  167. package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +1 -1
  168. package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +2 -1
  169. package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
  170. package/dist/types/excalidraw/components/Stats/DragInput.d.ts +3 -3
  171. package/dist/types/excalidraw/components/Stats/FontSize.d.ts +2 -2
  172. package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
  173. package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +3 -3
  174. package/dist/types/excalidraw/components/Stats/MultiFontSize.d.ts +2 -2
  175. package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
  176. package/dist/types/excalidraw/components/Stats/Position.d.ts +2 -2
  177. package/dist/types/excalidraw/components/Stats/index.d.ts +2 -2
  178. package/dist/types/excalidraw/components/Stats/utils.d.ts +4 -11
  179. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
  180. package/dist/types/excalidraw/components/TTDDialog/common.d.ts +1 -1
  181. package/dist/types/excalidraw/components/TextField.d.ts +1 -1
  182. package/dist/types/excalidraw/components/Toast.d.ts +1 -1
  183. package/dist/types/excalidraw/components/ToolButton.d.ts +2 -2
  184. package/dist/types/excalidraw/components/Tooltip.d.ts +1 -1
  185. package/dist/types/excalidraw/components/UserList.d.ts +1 -1
  186. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +4 -3
  187. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +2 -2
  188. package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +3 -3
  189. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +1 -1
  190. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +2 -2
  191. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +1 -1
  192. package/dist/types/excalidraw/components/hyperlink/Hyperlink.d.ts +5 -4
  193. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +2 -2
  194. package/dist/types/excalidraw/components/icons.d.ts +2 -1
  195. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +1 -1
  196. package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +4 -1
  197. package/dist/types/excalidraw/components/shapes.d.ts +62 -0
  198. package/dist/types/excalidraw/context/tunnels.d.ts +1 -1
  199. package/dist/types/excalidraw/data/EditorLocalStorage.d.ts +1 -1
  200. package/dist/types/excalidraw/data/blob.d.ts +4 -4
  201. package/dist/types/excalidraw/data/filesystem.d.ts +2 -2
  202. package/dist/types/excalidraw/data/index.d.ts +2 -2
  203. package/dist/types/excalidraw/data/json.d.ts +1 -1
  204. package/dist/types/excalidraw/data/library.d.ts +3 -3
  205. package/dist/types/excalidraw/data/reconcile.d.ts +2 -2
  206. package/dist/types/excalidraw/data/resave.d.ts +1 -1
  207. package/dist/types/excalidraw/data/restore.d.ts +1 -1
  208. package/dist/types/excalidraw/data/transform.d.ts +4 -4
  209. package/dist/types/excalidraw/data/types.d.ts +3 -3
  210. package/dist/types/excalidraw/editor-jotai.d.ts +6 -6
  211. package/dist/types/excalidraw/eraser/index.d.ts +14 -0
  212. package/dist/types/excalidraw/errors.d.ts +0 -3
  213. package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -13
  214. package/dist/types/excalidraw/history.d.ts +15 -23
  215. package/dist/types/excalidraw/hooks/useEmitter.d.ts +1 -1
  216. package/dist/types/excalidraw/i18n.d.ts +1 -1
  217. package/dist/types/excalidraw/index.d.ts +16 -15
  218. package/dist/types/excalidraw/laser-trails.d.ts +1 -1
  219. package/dist/types/excalidraw/lasso/index.d.ts +15 -0
  220. package/dist/types/excalidraw/lasso/utils.d.ts +12 -0
  221. package/dist/types/excalidraw/renderer/helpers.d.ts +7 -2
  222. package/dist/types/excalidraw/renderer/staticSvgScene.d.ts +2 -2
  223. package/dist/types/excalidraw/scene/Renderer.d.ts +3 -3
  224. package/dist/types/excalidraw/scene/export.d.ts +1 -1
  225. package/dist/types/excalidraw/scene/index.d.ts +2 -2
  226. package/dist/types/excalidraw/scene/scroll.d.ts +1 -1
  227. package/dist/types/excalidraw/scene/scrollbars.d.ts +2 -3
  228. package/dist/types/excalidraw/scene/types.d.ts +6 -4
  229. package/dist/types/excalidraw/snapping.d.ts +5 -6
  230. package/dist/types/excalidraw/types.d.ts +31 -18
  231. package/dist/types/excalidraw/visualdebug.d.ts +2 -2
  232. package/dist/types/excalidraw/{element → wysiwyg}/textWysiwyg.d.ts +4 -2
  233. package/dist/types/math/{curve.d.ts → src/curve.d.ts} +2 -0
  234. package/dist/types/math/{point.d.ts → src/point.d.ts} +2 -2
  235. package/dist/types/math/{polygon.d.ts → src/polygon.d.ts} +1 -0
  236. package/dist/types/math/{segment.d.ts → src/segment.d.ts} +1 -1
  237. package/dist/types/math/{types.d.ts → src/types.d.ts} +1 -0
  238. package/dist/types/math/{vector.d.ts → src/vector.d.ts} +4 -0
  239. package/dist/types/utils/{bbox.d.ts → src/bbox.d.ts} +1 -1
  240. package/dist/types/utils/{collision.d.ts → src/collision.d.ts} +2 -3
  241. package/dist/types/utils/{export.d.ts → src/export.d.ts} +2 -2
  242. package/dist/types/utils/{index.d.ts → src/index.d.ts} +1 -1
  243. package/dist/types/utils/{geometry → src}/shape.d.ts +2 -15
  244. package/dist/types/utils/{withinBounds.d.ts → src/withinBounds.d.ts} +2 -2
  245. package/history.ts +70 -94
  246. package/package.json +16 -4
  247. package/dist/dev/chunk-3SN6HYVK.js.map +0 -7
  248. package/dist/dev/chunk-LMHBUWQS.js.map +0 -7
  249. package/dist/dev/chunk-OKSO7T74.js +0 -4132
  250. package/dist/dev/chunk-OKSO7T74.js.map +0 -7
  251. package/dist/prod/chunk-36CXSE6H.js +0 -34
  252. package/dist/prod/chunk-EIO257PC.js +0 -86
  253. package/dist/prod/data/image-N4WCURRR.js +0 -1
  254. package/dist/types/excalidraw/align.d.ts +0 -7
  255. package/dist/types/excalidraw/element/index.d.ts +0 -26
  256. package/dist/types/excalidraw/shapes.d.ts +0 -85
  257. package/dist/types/excalidraw/store.d.ts +0 -129
  258. package/dist/types/excalidraw/zindex.d.ts +0 -6
  259. package/dist/dev/data/{image-V26YBSDB.js.map → image-AYLHSOBV.js.map} +0 -0
  260. package/dist/dev/locales/{en-OZCJJ2HN.js.map → en-E3O5XSXJ.js.map} +0 -0
  261. package/dist/types/{excalidraw → common/src}/keys.d.ts +0 -0
  262. package/dist/types/{excalidraw → common/src}/queue.d.ts +0 -0
  263. package/dist/types/{excalidraw → common/src}/random.d.ts +0 -0
  264. package/dist/types/{excalidraw/data → common/src}/url.d.ts +0 -0
  265. package/dist/types/{excalidraw/element → element/src}/containerCache.d.ts +0 -0
  266. package/dist/types/{excalidraw/element → element/src}/cropElement.d.ts +0 -0
  267. package/dist/types/{excalidraw/element → element/src}/distance.d.ts +0 -0
  268. package/dist/types/{excalidraw/element → element/src}/sortElements.d.ts +0 -0
  269. package/dist/types/{excalidraw/element → element/src}/textMeasurements.d.ts +0 -0
  270. package/dist/types/{excalidraw/element → element/src}/textWrapping.d.ts +0 -0
  271. package/dist/types/{excalidraw/element → element/src}/utils.d.ts +1 -1
  272. /package/dist/types/math/{angle.d.ts → src/angle.d.ts} +0 -0
  273. /package/dist/types/math/{ellipse.d.ts → src/ellipse.d.ts} +0 -0
  274. /package/dist/types/math/{index.d.ts → src/index.d.ts} +0 -0
  275. /package/dist/types/math/{line.d.ts → src/line.d.ts} +0 -0
  276. /package/dist/types/math/{range.d.ts → src/range.d.ts} +0 -0
  277. /package/dist/types/math/{rectangle.d.ts → src/rectangle.d.ts} +0 -0
  278. /package/dist/types/math/{triangle.d.ts → src/triangle.d.ts} +0 -0
  279. /package/dist/types/math/{utils.d.ts → src/utils.d.ts} +0 -0
@@ -1,25 +1,23 @@
1
- import type { JSX } from "react";
2
- import type React from "react";
3
- import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, FileId, ExcalidrawImageElement, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement } from "./element/types";
1
+ import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES } from "@excalidraw/common";
2
+ import type { SuggestedBinding } from "@excalidraw/element/binding";
3
+ import type { LinearElementEditor } from "@excalidraw/element/linearElementEditor";
4
+ import type { MaybeTransformHandleType } from "@excalidraw/element/transformHandles";
5
+ import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, FileId, ExcalidrawImageElement, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement } from "@excalidraw/element/types";
6
+ import type { Merge, MaybePromise, ValueOf, MakeBrand } from "@excalidraw/common/utility-types";
7
+ import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement } from "@excalidraw/element/store";
4
8
  import type { Action } from "./actions/types";
5
- import type { LinearElementEditor } from "./element/linearElementEditor";
6
- import type { SuggestedBinding } from "./element/binding";
7
- import type { ImportedDataState } from "./data/types";
8
- import type App from "./components/App";
9
- import type { throttleRAF } from "./utils";
10
9
  import type { Spreadsheet } from "./charts";
11
- import type { Language } from "./i18n";
12
10
  import type { ClipboardData } from "./clipboard";
13
- import type { isOverScrollBars } from "./scene/scrollbars";
14
- import type { MaybeTransformHandleType } from "./element/transformHandles";
11
+ import type App from "./components/App";
15
12
  import type Library from "./data/library";
16
13
  import type { FileSystemHandle } from "./data/filesystem";
17
- import type { IMAGE_MIME_TYPES, MIME_TYPES } from "./constants";
18
14
  import type { ContextMenuItems } from "./components/ContextMenu";
19
15
  import type { SnapLine } from "./snapping";
20
- import type { Merge, MaybePromise, ValueOf, MakeBrand } from "./utility-types";
21
- import type { CaptureUpdateActionType } from "./store";
22
- import type { UserIdleState } from "./constants";
16
+ import type { ImportedDataState } from "./data/types";
17
+ import type { Language } from "./i18n";
18
+ import type { isOverScrollBars } from "./scene/scrollbars";
19
+ import type React from "react";
20
+ import type { JSX } from "react";
23
21
  export type SocketId = string & {
24
22
  _brand: "SocketId";
25
23
  };
@@ -86,7 +84,7 @@ export type BinaryFileData = {
86
84
  };
87
85
  export type BinaryFileMetadata = Omit<BinaryFileData, "dataURL">;
88
86
  export type BinaryFiles = Record<ExcalidrawElement["id"], BinaryFileData>;
89
- export type ToolType = "selection" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser";
87
+ export type ToolType = "selection" | "lasso" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser";
90
88
  export type ElementOrToolType = ExcalidrawElementType | ToolType | "custom";
91
89
  export type ActiveTool = {
92
90
  type: ToolType;
@@ -219,6 +217,7 @@ export interface AppState {
219
217
  */
220
218
  lastActiveTool: ActiveTool | null;
221
219
  locked: boolean;
220
+ fromSelection: boolean;
222
221
  } & ActiveTool;
223
222
  penMode: boolean;
224
223
  penDetected: boolean;
@@ -342,9 +341,13 @@ export interface AppState {
342
341
  /** image cropping */
343
342
  isCropping: boolean;
344
343
  croppingElementId: ExcalidrawElement["id"] | null;
345
- searchMatches: readonly SearchMatch[];
344
+ /** null if no search matches found / search closed */
345
+ searchMatches: Readonly<{
346
+ focusedId: ExcalidrawElement["id"] | null;
347
+ matches: readonly SearchMatch[];
348
+ }> | null;
346
349
  }
347
- type SearchMatch = {
350
+ export type SearchMatch = {
348
351
  id: string;
349
352
  focus: boolean;
350
353
  matchedLines: {
@@ -352,6 +355,7 @@ type SearchMatch = {
352
355
  offsetY: number;
353
356
  width: number;
354
357
  height: number;
358
+ showOnCanvas: boolean;
355
359
  }[];
356
360
  };
357
361
  export type UIAppState = Omit<AppState, "suggestedBindings" | "startBoundElement" | "cursorButton" | "scrollX" | "scrollY">;
@@ -404,6 +408,7 @@ export type OnUserFollowedPayload = {
404
408
  };
405
409
  export interface ExcalidrawProps {
406
410
  onChange?: (elements: readonly OrderedExcalidrawElement[], appState: AppState, files: BinaryFiles) => void;
411
+ onIncrement?: (event: DurableIncrement | EphemeralIncrement) => void;
407
412
  initialData?: (() => MaybePromise<ExcalidrawInitialDataState | null>) | MaybePromise<ExcalidrawInitialDataState | null>;
408
413
  excalidrawAPI?: (api: ExcalidrawImperativeAPI) => void;
409
414
  isCollaborating?: boolean;
@@ -460,6 +465,7 @@ export interface ExcalidrawProps {
460
465
  renderEmbeddable?: (element: NonDeleted<ExcalidrawEmbeddableElement>, appState: AppState) => JSX.Element | null;
461
466
  aiEnabled?: boolean;
462
467
  showDeprecatedFonts?: boolean;
468
+ renderScrollbars?: boolean;
463
469
  }
464
470
  export type SceneData = {
465
471
  elements?: ImportedDataState["elements"];
@@ -545,6 +551,7 @@ export type AppClassProperties = {
545
551
  visibleElements: App["visibleElements"];
546
552
  excalidrawContainerValue: App["excalidrawContainerValue"];
547
553
  onPointerUpEmitter: App["onPointerUpEmitter"];
554
+ updateEditorAtom: App["updateEditorAtom"];
548
555
  };
549
556
  export type PointerDownState = Readonly<{
550
557
  origin: Readonly<{
@@ -588,6 +595,10 @@ export type PointerDownState = Readonly<{
588
595
  x: number;
589
596
  y: number;
590
597
  } | null;
598
+ origin: {
599
+ x: number;
600
+ y: number;
601
+ };
591
602
  };
592
603
  eventListeners: {
593
604
  onMove: null | ReturnType<typeof throttleRAF>;
@@ -602,6 +613,7 @@ export type PointerDownState = Readonly<{
602
613
  export type UnsubscribeCallback = () => void;
603
614
  export interface ExcalidrawImperativeAPI {
604
615
  updateScene: InstanceType<typeof App>["updateScene"];
616
+ mutateElement: InstanceType<typeof App>["mutateElement"];
605
617
  updateLibrary: InstanceType<typeof Library>["updateLibrary"];
606
618
  resetScene: InstanceType<typeof App>["resetScene"];
607
619
  getSceneElementsIncludingDeleted: InstanceType<typeof App>["getSceneElementsIncludingDeleted"];
@@ -629,6 +641,7 @@ export interface ExcalidrawImperativeAPI {
629
641
  */
630
642
  updateFrameRendering: InstanceType<typeof App>["updateFrameRendering"];
631
643
  onChange: (callback: (elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles) => void) => UnsubscribeCallback;
644
+ onIncrement: (callback: (event: DurableIncrement | EphemeralIncrement) => void) => UnsubscribeCallback;
632
645
  onPointerDown: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: React.PointerEvent<HTMLElement>) => void) => UnsubscribeCallback;
633
646
  onPointerUp: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: PointerEvent) => void) => UnsubscribeCallback;
634
647
  onScrollChange: (callback: (scrollX: number, scrollY: number, zoom: Zoom) => void) => UnsubscribeCallback;
@@ -1,7 +1,7 @@
1
- import type { Curve } from "@excalidraw/math";
2
1
  import { type GlobalPoint, type LocalPoint } from "@excalidraw/math";
2
+ import type { Curve } from "@excalidraw/math";
3
3
  import type { LineSegment } from "@excalidraw/utils";
4
- import type { Bounds } from "./element/bounds";
4
+ import type { Bounds } from "@excalidraw/element/bounds";
5
5
  declare global {
6
6
  interface Window {
7
7
  visualDebug?: {
@@ -1,5 +1,6 @@
1
- import type { ExcalidrawElement, ExcalidrawTextElement } from "./types";
1
+ import type { ExcalidrawElement, ExcalidrawTextElement } from "@excalidraw/element/types";
2
2
  import type App from "../components/App";
3
+ type SubmitHandler = () => void;
3
4
  export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, autoSelect, }: {
4
5
  id: ExcalidrawElement["id"];
5
6
  /**
@@ -19,4 +20,5 @@ export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords,
19
20
  excalidrawContainer: HTMLDivElement | null;
20
21
  app: App;
21
22
  autoSelect?: boolean | undefined;
22
- }) => void;
23
+ }) => SubmitHandler;
24
+ export {};
@@ -8,6 +8,7 @@ import type { Curve, GlobalPoint, LineSegment, LocalPoint } from "./types";
8
8
  * @returns
9
9
  */
10
10
  export declare function curve<Point extends GlobalPoint | LocalPoint>(a: Point, b: Point, c: Point, d: Point): Curve<Point>;
11
+ export declare const bezierEquation: <Point extends GlobalPoint | LocalPoint>(c: Curve<Point>, t: number) => Point;
11
12
  /**
12
13
  * Computes the intersection between a cubic spline and a line segment.
13
14
  */
@@ -38,3 +39,4 @@ export declare function curvePointDistance<Point extends GlobalPoint | LocalPoin
38
39
  * Determines if the parameter is a Curve
39
40
  */
40
41
  export declare function isCurve<P extends GlobalPoint | LocalPoint>(v: unknown): v is Curve<P>;
42
+ export declare function curveTangent<Point extends GlobalPoint | LocalPoint>([p0, p1, p2, p3]: Curve<Point>, t: number): import("./types").Vector;
@@ -45,7 +45,7 @@ export declare function isPoint(p: unknown): p is LocalPoint | GlobalPoint;
45
45
  */
46
46
  export declare function pointsEqual<Point extends GlobalPoint | LocalPoint>(a: Point, b: Point): boolean;
47
47
  /**
48
- * Roate a point by [angle] radians.
48
+ * Rotate a point by [angle] radians.
49
49
  *
50
50
  * @param point The point to rotate
51
51
  * @param center The point to rotate around, the center point
@@ -54,7 +54,7 @@ export declare function pointsEqual<Point extends GlobalPoint | LocalPoint>(a: P
54
54
  */
55
55
  export declare function pointRotateRads<Point extends GlobalPoint | LocalPoint>([x, y]: Point, [cx, cy]: Point, angle: Radians): Point;
56
56
  /**
57
- * Roate a point by [angle] degree.
57
+ * Rotate a point by [angle] degree.
58
58
  *
59
59
  * @param point The point to rotate
60
60
  * @param center The point to rotate around, the center point
@@ -2,4 +2,5 @@ import type { GlobalPoint, LocalPoint, Polygon } from "./types";
2
2
  export declare function polygon<Point extends GlobalPoint | LocalPoint>(...points: Point[]): Polygon<Point>;
3
3
  export declare function polygonFromPoints<Point extends GlobalPoint | LocalPoint>(points: Point[]): Polygon<Point>;
4
4
  export declare const polygonIncludesPoint: <Point extends GlobalPoint | LocalPoint>(point: Point, polygon: Polygon<Point>) => boolean;
5
+ export declare const polygonIncludesPointNonZero: <Point extends [number, number]>(point: Point, polygon: Point[]) => boolean;
5
6
  export declare const pointOnPolygon: <Point extends GlobalPoint | LocalPoint>(p: Point, poly: Polygon<Point>, threshold?: number) => boolean;
@@ -36,4 +36,4 @@ export declare const distanceToLineSegment: <Point extends GlobalPoint | LocalPo
36
36
  * @param s
37
37
  * @returns
38
38
  */
39
- export declare function lineSegmentIntersectionPoints<Point extends GlobalPoint | LocalPoint>(l: LineSegment<Point>, s: LineSegment<Point>): Point | null;
39
+ export declare function lineSegmentIntersectionPoints<Point extends GlobalPoint | LocalPoint>(l: LineSegment<Point>, s: LineSegment<Point>, threshold?: number): Point | null;
@@ -103,3 +103,4 @@ export type Ellipse<Point extends GlobalPoint | LocalPoint> = {
103
103
  } & {
104
104
  _brand: "excalimath_ellipse";
105
105
  };
106
+ export type ElementsSegmentsMap = Map<string, LineSegment<GlobalPoint>[]>;
@@ -86,3 +86,7 @@ export declare function vectorMagnitude(v: Vector): number;
86
86
  * @returns The new normalized vector
87
87
  */
88
88
  export declare const vectorNormalize: (v: Vector) => Vector;
89
+ /**
90
+ * Calculate the right-hand normal of the vector.
91
+ */
92
+ export declare const vectorNormal: (v: Vector) => Vector;
@@ -1,5 +1,5 @@
1
1
  import { type GlobalPoint, type LocalPoint } from "@excalidraw/math";
2
- import type { Bounds } from "@excalidraw/excalidraw/element/bounds";
2
+ import type { Bounds } from "@excalidraw/element/bounds";
3
3
  export type LineSegment<P extends LocalPoint | GlobalPoint> = [P, P];
4
4
  export declare function getBBox<P extends LocalPoint | GlobalPoint>(line: LineSegment<P>): Bounds;
5
5
  export declare function doBBoxesIntersect(a: Bounds, b: Bounds): boolean;
@@ -1,7 +1,6 @@
1
- import type { Polyline } from "./geometry/shape";
2
- import { type GeometricShape } from "./geometry/shape";
3
- import type { Curve } from "@excalidraw/math";
4
1
  import { type GlobalPoint, type LocalPoint, type Polygon } from "@excalidraw/math";
2
+ import type { Curve } from "@excalidraw/math";
3
+ import type { Polyline, GeometricShape } from "./shape";
5
4
  export declare const isPointOnShape: <Point extends GlobalPoint | LocalPoint>(point: Point, shape: GeometricShape<Point>, tolerance?: number) => boolean;
6
5
  export declare const isPointInShape: <Point extends GlobalPoint | LocalPoint>(point: Point, shape: GeometricShape<Point>) => boolean;
7
6
  export declare const isPointInBounds: <Point extends GlobalPoint | LocalPoint>(point: Point, bounds: Polygon<Point>) => boolean;
@@ -1,6 +1,6 @@
1
+ import { MIME_TYPES } from "@excalidraw/common";
2
+ import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted } from "@excalidraw/element/types";
1
3
  import type { AppState, BinaryFiles } from "@excalidraw/excalidraw/types";
2
- import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted } from "@excalidraw/excalidraw/element/types";
3
- import { MIME_TYPES } from "@excalidraw/excalidraw/constants";
4
4
  export { MIME_TYPES };
5
5
  type ExportOpts = {
6
6
  elements: readonly NonDeleted<ExcalidrawElement>[];
@@ -1,4 +1,4 @@
1
1
  export * from "./export";
2
2
  export * from "./withinBounds";
3
3
  export * from "./bbox";
4
- export { getCommonBounds } from "@excalidraw/excalidraw/element/bounds";
4
+ export { getCommonBounds } from "@excalidraw/element/bounds";
@@ -1,19 +1,6 @@
1
- /**
2
- * this file defines pure geometric shapes
3
- *
4
- * for instance, a cubic bezier curve is specified by its four control points and
5
- * an ellipse is defined by its center, angle, semi major axis and semi minor axis
6
- * (but in semi-width and semi-height so it's more relevant to Excalidraw)
7
- *
8
- * the idea with pure shapes is so that we can provide collision and other geoemtric methods not depending on
9
- * the specifics of roughjs or elements in Excalidraw; instead, we can focus on the pure shapes themselves
10
- *
11
- * also included in this file are methods for converting an Excalidraw element or a Drawable from roughjs
12
- * to pure shapes
13
- */
14
- import type { Curve, LineSegment, Polygon, Radians } from "@excalidraw/math";
15
1
  import { type GlobalPoint, type LocalPoint } from "@excalidraw/math";
16
- import type { ElementsMap, ExcalidrawBindableElement, ExcalidrawDiamondElement, ExcalidrawElement, ExcalidrawEllipseElement, ExcalidrawEmbeddableElement, ExcalidrawFrameLikeElement, ExcalidrawFreeDrawElement, ExcalidrawIframeElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawRectangleElement, ExcalidrawSelectionElement, ExcalidrawTextElement } from "@excalidraw/excalidraw/element/types";
2
+ import type { ElementsMap, ExcalidrawBindableElement, ExcalidrawDiamondElement, ExcalidrawElement, ExcalidrawEllipseElement, ExcalidrawEmbeddableElement, ExcalidrawFrameLikeElement, ExcalidrawFreeDrawElement, ExcalidrawIframeElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawRectangleElement, ExcalidrawSelectionElement, ExcalidrawTextElement } from "@excalidraw/element/types";
3
+ import type { Curve, LineSegment, Polygon, Radians } from "@excalidraw/math";
17
4
  import type { Drawable, Op } from "roughjs/bin/core";
18
5
  export type Polyline<Point extends GlobalPoint | LocalPoint> = LineSegment<Point>[];
19
6
  export type Polycurve<Point extends GlobalPoint | LocalPoint> = Curve<Point>[];
@@ -1,5 +1,5 @@
1
- import type { ExcalidrawElement, NonDeletedExcalidrawElement } from "@excalidraw/excalidraw/element/types";
2
- import type { Bounds } from "@excalidraw/excalidraw/element/bounds";
1
+ import type { Bounds } from "@excalidraw/element/bounds";
2
+ import type { ExcalidrawElement, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
3
3
  type Element = NonDeletedExcalidrawElement;
4
4
  type Elements = readonly NonDeletedExcalidrawElement[];
5
5
  export declare const isElementInsideBBox: (element: Element, bbox: Bounds, eitherDirection?: boolean) => boolean;
package/history.ts CHANGED
@@ -1,10 +1,17 @@
1
- import type { AppStateChange, ElementsChange } from "./change";
2
- import type { SceneElementsMap } from "./element/types";
3
- import { Emitter } from "./emitter";
4
- import type { Snapshot } from "./store";
1
+ import { Emitter } from "@excalidraw/common";
2
+
3
+ import {
4
+ CaptureUpdateAction,
5
+ StoreChange,
6
+ StoreDelta,
7
+ type Store,
8
+ } from "@excalidraw/element/store";
9
+
10
+ import type { SceneElementsMap } from "@excalidraw/element/types";
11
+
5
12
  import type { AppState } from "./types";
6
13
 
7
- type HistoryStack = HistoryEntry[];
14
+ class HistoryEntry extends StoreDelta {}
8
15
 
9
16
  export class HistoryChangedEvent {
10
17
  constructor(
@@ -18,8 +25,8 @@ export class History {
18
25
  [HistoryChangedEvent]
19
26
  >();
20
27
 
21
- private readonly undoStack: HistoryStack = [];
22
- private readonly redoStack: HistoryStack = [];
28
+ public readonly undoStack: HistoryEntry[] = [];
29
+ public readonly redoStack: HistoryEntry[] = [];
23
30
 
24
31
  public get isUndoStackEmpty() {
25
32
  return this.undoStack.length === 0;
@@ -29,60 +36,52 @@ export class History {
29
36
  return this.redoStack.length === 0;
30
37
  }
31
38
 
39
+ constructor(private readonly store: Store) {}
40
+
32
41
  public clear() {
33
42
  this.undoStack.length = 0;
34
43
  this.redoStack.length = 0;
35
44
  }
36
45
 
37
46
  /**
38
- * Record a local change which will go into the history
47
+ * Record a non-empty local durable increment, which will go into the undo stack..
48
+ * Do not re-record history entries, which were already pushed to undo / redo stack, as part of history action.
39
49
  */
40
- public record(
41
- elementsChange: ElementsChange,
42
- appStateChange: AppStateChange,
43
- ) {
44
- const entry = HistoryEntry.create(appStateChange, elementsChange);
50
+ public record(delta: StoreDelta) {
51
+ if (delta.isEmpty() || delta instanceof HistoryEntry) {
52
+ return;
53
+ }
45
54
 
46
- if (!entry.isEmpty()) {
47
- // we have the latest changes, no need to `applyLatest`, which is done within `History.push`
48
- this.undoStack.push(entry.inverse());
55
+ // construct history entry, so once it's emitted, it's not recorded again
56
+ const entry = HistoryEntry.inverse(delta);
49
57
 
50
- if (!entry.elementsChange.isEmpty()) {
51
- // don't reset redo stack on local appState changes,
52
- // as a simple click (unselect) could lead to losing all the redo entries
53
- // only reset on non empty elements changes!
54
- this.redoStack.length = 0;
55
- }
58
+ this.undoStack.push(entry);
56
59
 
57
- this.onHistoryChangedEmitter.trigger(
58
- new HistoryChangedEvent(this.isUndoStackEmpty, this.isRedoStackEmpty),
59
- );
60
+ if (!entry.elements.isEmpty()) {
61
+ // don't reset redo stack on local appState changes,
62
+ // as a simple click (unselect) could lead to losing all the redo entries
63
+ // only reset on non empty elements changes!
64
+ this.redoStack.length = 0;
60
65
  }
66
+
67
+ this.onHistoryChangedEmitter.trigger(
68
+ new HistoryChangedEvent(this.isUndoStackEmpty, this.isRedoStackEmpty),
69
+ );
61
70
  }
62
71
 
63
- public undo(
64
- elements: SceneElementsMap,
65
- appState: AppState,
66
- snapshot: Readonly<Snapshot>,
67
- ) {
72
+ public undo(elements: SceneElementsMap, appState: AppState) {
68
73
  return this.perform(
69
74
  elements,
70
75
  appState,
71
- snapshot,
72
76
  () => History.pop(this.undoStack),
73
77
  (entry: HistoryEntry) => History.push(this.redoStack, entry, elements),
74
78
  );
75
79
  }
76
80
 
77
- public redo(
78
- elements: SceneElementsMap,
79
- appState: AppState,
80
- snapshot: Readonly<Snapshot>,
81
- ) {
81
+ public redo(elements: SceneElementsMap, appState: AppState) {
82
82
  return this.perform(
83
83
  elements,
84
84
  appState,
85
- snapshot,
86
85
  () => History.pop(this.redoStack),
87
86
  (entry: HistoryEntry) => History.push(this.undoStack, entry, elements),
88
87
  );
@@ -91,7 +90,6 @@ export class History {
91
90
  private perform(
92
91
  elements: SceneElementsMap,
93
92
  appState: AppState,
94
- snapshot: Readonly<Snapshot>,
95
93
  pop: () => HistoryEntry | null,
96
94
  push: (entry: HistoryEntry) => void,
97
95
  ): [SceneElementsMap, AppState] | void {
@@ -102,6 +100,10 @@ export class History {
102
100
  return;
103
101
  }
104
102
 
103
+ const action = CaptureUpdateAction.IMMEDIATELY;
104
+
105
+ let prevSnapshot = this.store.snapshot;
106
+
105
107
  let nextElements = elements;
106
108
  let nextAppState = appState;
107
109
  let containsVisibleChange = false;
@@ -110,9 +112,29 @@ export class History {
110
112
  while (historyEntry) {
111
113
  try {
112
114
  [nextElements, nextAppState, containsVisibleChange] =
113
- historyEntry.applyTo(nextElements, nextAppState, snapshot);
115
+ StoreDelta.applyTo(
116
+ historyEntry,
117
+ nextElements,
118
+ nextAppState,
119
+ prevSnapshot,
120
+ );
121
+
122
+ const nextSnapshot = prevSnapshot.maybeClone(
123
+ action,
124
+ nextElements,
125
+ nextAppState,
126
+ );
127
+
128
+ // schedule immediate capture, so that it's emitted for the sync purposes
129
+ this.store.scheduleMicroAction({
130
+ action,
131
+ change: StoreChange.create(prevSnapshot, nextSnapshot),
132
+ delta: historyEntry,
133
+ });
134
+
135
+ prevSnapshot = nextSnapshot;
114
136
  } finally {
115
- // make sure to always push / pop, even if the increment is corrupted
137
+ // make sure to always push, even if the delta is corrupted
116
138
  push(historyEntry);
117
139
  }
118
140
 
@@ -133,7 +155,7 @@ export class History {
133
155
  }
134
156
  }
135
157
 
136
- private static pop(stack: HistoryStack): HistoryEntry | null {
158
+ private static pop(stack: HistoryEntry[]): HistoryEntry | null {
137
159
  if (!stack.length) {
138
160
  return null;
139
161
  }
@@ -148,63 +170,17 @@ export class History {
148
170
  }
149
171
 
150
172
  private static push(
151
- stack: HistoryStack,
173
+ stack: HistoryEntry[],
152
174
  entry: HistoryEntry,
153
175
  prevElements: SceneElementsMap,
154
176
  ) {
155
- const updatedEntry = entry.inverse().applyLatestChanges(prevElements);
156
- return stack.push(updatedEntry);
157
- }
158
- }
159
-
160
- export class HistoryEntry {
161
- private constructor(
162
- public readonly appStateChange: AppStateChange,
163
- public readonly elementsChange: ElementsChange,
164
- ) {}
165
-
166
- public static create(
167
- appStateChange: AppStateChange,
168
- elementsChange: ElementsChange,
169
- ) {
170
- return new HistoryEntry(appStateChange, elementsChange);
171
- }
172
-
173
- public inverse(): HistoryEntry {
174
- return new HistoryEntry(
175
- this.appStateChange.inverse(),
176
- this.elementsChange.inverse(),
177
+ const inversedEntry = HistoryEntry.inverse(entry);
178
+ const updatedEntry = HistoryEntry.applyLatestChanges(
179
+ inversedEntry,
180
+ prevElements,
181
+ "inserted",
177
182
  );
178
- }
179
-
180
- public applyTo(
181
- elements: SceneElementsMap,
182
- appState: AppState,
183
- snapshot: Readonly<Snapshot>,
184
- ): [SceneElementsMap, AppState, boolean] {
185
- const [nextElements, elementsContainVisibleChange] =
186
- this.elementsChange.applyTo(elements, snapshot.elements);
187
183
 
188
- const [nextAppState, appStateContainsVisibleChange] =
189
- this.appStateChange.applyTo(appState, nextElements);
190
-
191
- const appliedVisibleChanges =
192
- elementsContainVisibleChange || appStateContainsVisibleChange;
193
-
194
- return [nextElements, nextAppState, appliedVisibleChanges];
195
- }
196
-
197
- /**
198
- * Apply latest (remote) changes to the history entry, creates new instance of `HistoryEntry`.
199
- */
200
- public applyLatestChanges(elements: SceneElementsMap): HistoryEntry {
201
- const updatedElementsChange =
202
- this.elementsChange.applyLatestChanges(elements);
203
-
204
- return HistoryEntry.create(this.appStateChange, updatedElementsChange);
205
- }
206
-
207
- public isEmpty(): boolean {
208
- return this.appStateChange.isEmpty() && this.elementsChange.isEmpty();
184
+ return stack.push(updatedEntry);
209
185
  }
210
186
  }
package/package.json CHANGED
@@ -1,11 +1,23 @@
1
1
  {
2
2
  "name": "@excalidraw/excalidraw",
3
- "version": "0.18.0-817d8c5",
3
+ "version": "0.18.0-a30e1b2",
4
4
  "type": "module",
5
5
  "types": "./dist/types/excalidraw/index.d.ts",
6
6
  "main": "./dist/prod/index.js",
7
7
  "module": "./dist/prod/index.js",
8
8
  "exports": {
9
+ "./common/*": {
10
+ "types": "./dist/types/common/src/*.d.ts"
11
+ },
12
+ "./element/*": {
13
+ "types": "./dist/types/element/src/*.d.ts"
14
+ },
15
+ "./math/*": {
16
+ "types": "./dist/types/math/src/*.d.ts"
17
+ },
18
+ "./utils/*": {
19
+ "types": "./dist/types/utils/src/*.d.ts"
20
+ },
9
21
  "./*": {
10
22
  "types": "./dist/types/excalidraw/*.d.ts"
11
23
  },
@@ -64,7 +76,7 @@
64
76
  "@excalidraw/mermaid-to-excalidraw": "1.1.2",
65
77
  "@excalidraw/random-username": "1.1.0",
66
78
  "@radix-ui/react-popover": "1.1.6",
67
- "@radix-ui/react-tabs": "1.0.2",
79
+ "@radix-ui/react-tabs": "1.1.3",
68
80
  "browser-fs-access": "0.29.1",
69
81
  "canvas-roundrect-polyfill": "0.0.1",
70
82
  "clsx": "1.1.1",
@@ -117,7 +129,7 @@
117
129
  "bugs": "https://github.com/excalidraw/excalidraw/issues",
118
130
  "homepage": "https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw",
119
131
  "scripts": {
120
- "gen:types": "rm -rf types && tsc",
121
- "build:esm": "rm -rf dist && node ../../scripts/buildPackage.js && yarn gen:types"
132
+ "gen:types": "rimraf types && tsc",
133
+ "build:esm": "rimraf dist && node ../../scripts/buildPackage.js && yarn gen:types"
122
134
  }
123
135
  }