@excalidraw/excalidraw 0.17.1-1d71f84 → 0.17.1-1ed53b1

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 (426) hide show
  1. package/CHANGELOG.md +14 -2
  2. package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-ACFH36JV.js → blockDiagram-91b80b7a-H47FTXHA.js} +5 -5
  3. package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-QZ27YR47.js → c4Diagram-b2a90758-NNJK6GKC.js} +3 -3
  4. package/dist/browser/dev/excalidraw-assets-dev/{chunk-HO2HMSK7.js → chunk-4KQVEBHW.js} +3 -3
  5. package/dist/browser/dev/excalidraw-assets-dev/{chunk-USGV265L.js → chunk-53YI56GV.js} +4 -4
  6. package/dist/browser/dev/excalidraw-assets-dev/{chunk-EDFX3S7X.js → chunk-A2WCJI4I.js} +3 -3
  7. package/dist/browser/dev/excalidraw-assets-dev/{chunk-IX4V72YG.js → chunk-EFLPX7NE.js} +6 -6
  8. package/dist/browser/dev/excalidraw-assets-dev/{chunk-AK7SWNLN.js → chunk-JKPJV7MZ.js} +6 -4
  9. package/dist/browser/dev/excalidraw-assets-dev/chunk-JKPJV7MZ.js.map +7 -0
  10. package/dist/browser/dev/excalidraw-assets-dev/{chunk-MXVETLVM.js → chunk-JYIQCNWV.js} +2 -2
  11. package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js → chunk-LVIQQW6F.js} +2 -2
  12. package/dist/browser/dev/excalidraw-assets-dev/{chunk-RWZVJAQU.js → chunk-OKAZAA6U.js} +4494 -2647
  13. package/dist/browser/dev/excalidraw-assets-dev/chunk-OKAZAA6U.js.map +7 -0
  14. package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js → chunk-PXLO3FOU.js} +2 -2
  15. package/dist/browser/dev/excalidraw-assets-dev/{chunk-7DACDEY3.js → chunk-TO2AW5PW.js} +2 -2
  16. package/dist/browser/dev/excalidraw-assets-dev/{chunk-NJ77ZFNJ.js → chunk-VURILHLY.js} +2 -2
  17. package/dist/browser/dev/excalidraw-assets-dev/{chunk-2T2GU7NF.js → chunk-ZAYGSUHF.js} +2 -2
  18. package/dist/browser/dev/excalidraw-assets-dev/{chunk-Z3PH3V2B.js → chunk-ZQR5ML6Y.js} +26 -26
  19. package/dist/browser/dev/excalidraw-assets-dev/chunk-ZQR5ML6Y.js.map +7 -0
  20. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-QSLMH4JW.js → classDiagram-30eddba6-CUYIJICN.js} +5 -5
  21. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-DY4DYQ5P.js → classDiagram-v2-f2df5561-K6WW6K73.js} +8 -8
  22. package/dist/browser/dev/excalidraw-assets-dev/{dist-Z46EOVOL.js → dist-ITJNUBZF.js} +2 -2
  23. package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js → en-BF4XUPIZ.js} +2 -2
  24. package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js → erDiagram-47591fe2-XGAD7EEP.js} +4 -4
  25. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js → flowDiagram-5540d9b9-B6EOVNNO.js} +9 -9
  26. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js → flowDiagram-v2-3b53844e-NUG24FJH.js} +9 -9
  27. package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js → flowchart-elk-definition-5fe447d6-25Y7PCBL.js} +5 -5
  28. package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js → ganttDiagram-9a3bba1f-GNL6ZDTC.js} +2 -2
  29. package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js → gitGraphDiagram-96e6b4ee-HNW52NVO.js} +2 -2
  30. package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js → image-LVS32KQQ.js} +2 -2
  31. package/dist/browser/dev/excalidraw-assets-dev/{image-OFRRV5MB.css → image-O66MQ7WQ.css} +1 -1
  32. package/dist/browser/dev/excalidraw-assets-dev/image-O66MQ7WQ.css.map +7 -0
  33. package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js → infoDiagram-bcd20f53-FWEUVFLT.js} +2 -2
  34. package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js → journeyDiagram-4fe6b3dc-RZIUI7UG.js} +3 -3
  35. package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js → mindmap-definition-f354de21-GBVN45GU.js} +3 -3
  36. package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js → pieDiagram-79897490-ECENNII6.js} +2 -2
  37. package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js → quadrantDiagram-62f64e94-ZMEOFVNL.js} +2 -2
  38. package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js → requirementDiagram-05bf5f74-FHZSFHCR.js} +4 -4
  39. package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js → sankeyDiagram-97764748-VDKIKTA6.js} +2 -2
  40. package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js → sequenceDiagram-acc0e65c-6JUSPVKX.js} +3 -3
  41. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js → stateDiagram-0ff1cf1a-L3AKWENF.js} +5 -5
  42. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js → stateDiagram-v2-9a9d610d-NU3GGMCH.js} +8 -8
  43. package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js → timeline-definition-fea2a41d-JGP7XCHW.js} +2 -2
  44. package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js → xychartDiagram-ab372869-HLFHHF2I.js} +3 -3
  45. package/dist/browser/dev/index.css +72 -28
  46. package/dist/browser/dev/index.css.map +3 -3
  47. package/dist/browser/dev/index.js +2064 -1830
  48. package/dist/browser/dev/index.js.map +4 -4
  49. package/dist/browser/prod/excalidraw-assets/{blockDiagram-91b80b7a-ONPS22AM.js → blockDiagram-91b80b7a-FVCRVGN5.js} +1 -1
  50. package/dist/browser/prod/excalidraw-assets/{c4Diagram-b2a90758-XMIQY7ZT.js → c4Diagram-b2a90758-56CXO7GA.js} +1 -1
  51. package/dist/browser/prod/excalidraw-assets/{chunk-GCHQBOKV.js → chunk-635MQ3CK.js} +1 -1
  52. package/dist/browser/prod/excalidraw-assets/{chunk-P5M3G2RP.js → chunk-AIKXYJX3.js} +1 -1
  53. package/dist/browser/prod/excalidraw-assets/{chunk-E2YLWFZX.js → chunk-CR7VMNWC.js} +1 -1
  54. package/dist/browser/prod/excalidraw-assets/{chunk-WEYK4A2L.js → chunk-FFF2CSVG.js} +1 -1
  55. package/dist/browser/prod/excalidraw-assets/{chunk-R3HAIP6R.js → chunk-G4WDCSPE.js} +1 -1
  56. package/dist/browser/prod/excalidraw-assets/{chunk-HFOXJM22.js → chunk-HKZSHFLX.js} +1 -1
  57. package/dist/browser/prod/excalidraw-assets/{chunk-XIMFFJTE.js → chunk-IKCDYWMW.js} +1 -1
  58. package/dist/browser/prod/excalidraw-assets/{chunk-AHLLBBVJ.js → chunk-L5DS24G6.js} +1 -1
  59. package/dist/browser/prod/excalidraw-assets/{chunk-CQJF3C6G.js → chunk-MUNOKHUD.js} +1 -1
  60. package/dist/browser/prod/excalidraw-assets/{chunk-CTYINSWT.js → chunk-O4AI3NNG.js} +2 -2
  61. package/dist/browser/prod/excalidraw-assets/{chunk-NI6SYCUG.js → chunk-QOQYOOQ4.js} +1 -1
  62. package/dist/browser/prod/excalidraw-assets/chunk-SXBDZOS3.js +55 -0
  63. package/dist/browser/prod/excalidraw-assets/{chunk-I2PZFXTK.js → chunk-ZTIWFPBM.js} +21 -21
  64. package/dist/browser/prod/excalidraw-assets/{classDiagram-30eddba6-IEJXXCVX.js → classDiagram-30eddba6-BCUTAUMD.js} +1 -1
  65. package/dist/browser/prod/excalidraw-assets/{classDiagram-v2-f2df5561-7LZDSWOS.js → classDiagram-v2-f2df5561-6SOXSGQ2.js} +1 -1
  66. package/dist/browser/prod/excalidraw-assets/{dist-PIPZXALV.js → dist-54276HPL.js} +1 -1
  67. package/dist/browser/prod/excalidraw-assets/{en-LROPV2RN.js → en-N7CLNF6C.js} +1 -1
  68. package/dist/browser/prod/excalidraw-assets/{erDiagram-47591fe2-E5V666CF.js → erDiagram-47591fe2-RE6HB7RM.js} +1 -1
  69. package/dist/browser/prod/excalidraw-assets/{flowDiagram-5540d9b9-GMBRCYVF.js → flowDiagram-5540d9b9-ZNJZBERW.js} +1 -1
  70. package/dist/browser/prod/excalidraw-assets/{flowDiagram-v2-3b53844e-Z4HUWP6B.js → flowDiagram-v2-3b53844e-LY44JLQJ.js} +1 -1
  71. package/dist/browser/prod/excalidraw-assets/{flowchart-elk-definition-5fe447d6-5ZCYTX5N.js → flowchart-elk-definition-5fe447d6-TMTJ6Z7O.js} +1 -1
  72. package/dist/browser/prod/excalidraw-assets/{ganttDiagram-9a3bba1f-WM32OMT5.js → ganttDiagram-9a3bba1f-5O6EA6LX.js} +1 -1
  73. package/dist/browser/prod/excalidraw-assets/{gitGraphDiagram-96e6b4ee-CAKZ2U6E.js → gitGraphDiagram-96e6b4ee-UHYNM5DI.js} +1 -1
  74. package/dist/browser/prod/excalidraw-assets/image-VAGBVQ3G.js +1 -0
  75. package/dist/browser/prod/excalidraw-assets/{infoDiagram-bcd20f53-MUIKXGC4.js → infoDiagram-bcd20f53-BP77NQEH.js} +1 -1
  76. package/dist/browser/prod/excalidraw-assets/{journeyDiagram-4fe6b3dc-NYRV4HK2.js → journeyDiagram-4fe6b3dc-XMGKCMES.js} +1 -1
  77. package/dist/browser/prod/excalidraw-assets/{mindmap-definition-f354de21-MY55DRSM.js → mindmap-definition-f354de21-ZQRRBRWF.js} +1 -1
  78. package/dist/browser/prod/excalidraw-assets/{pieDiagram-79897490-47L6J6L2.js → pieDiagram-79897490-IGXEC2KX.js} +1 -1
  79. package/dist/browser/prod/excalidraw-assets/{quadrantDiagram-62f64e94-DF5C2GDT.js → quadrantDiagram-62f64e94-WTHHDYJL.js} +1 -1
  80. package/dist/browser/prod/excalidraw-assets/{requirementDiagram-05bf5f74-C4IMUBDN.js → requirementDiagram-05bf5f74-MV4OFRVW.js} +1 -1
  81. package/dist/browser/prod/excalidraw-assets/{sankeyDiagram-97764748-YHW7EUST.js → sankeyDiagram-97764748-ZGYUHEJT.js} +1 -1
  82. package/dist/browser/prod/excalidraw-assets/{sequenceDiagram-acc0e65c-H3XEHT32.js → sequenceDiagram-acc0e65c-IBSENK6W.js} +1 -1
  83. package/dist/browser/prod/excalidraw-assets/{stateDiagram-0ff1cf1a-Z5WB6Q3P.js → stateDiagram-0ff1cf1a-DB73XNZH.js} +1 -1
  84. package/dist/browser/prod/excalidraw-assets/{stateDiagram-v2-9a9d610d-T7OZETQC.js → stateDiagram-v2-9a9d610d-2OOBUPNR.js} +1 -1
  85. package/dist/browser/prod/excalidraw-assets/{timeline-definition-fea2a41d-VVC22BWF.js → timeline-definition-fea2a41d-P3NQQVDU.js} +1 -1
  86. package/dist/browser/prod/excalidraw-assets/{xychartDiagram-ab372869-JAXODQF7.js → xychartDiagram-ab372869-HI3XLK3Y.js} +1 -1
  87. package/dist/browser/prod/index.css +1 -1
  88. package/dist/browser/prod/index.js +24 -24
  89. package/dist/dev/{en-II4GK66F.json → en-UQDDYCH7.json} +5 -3
  90. package/dist/dev/index.css +72 -28
  91. package/dist/dev/index.css.map +3 -3
  92. package/dist/dev/index.js +5352 -3354
  93. package/dist/dev/index.js.map +4 -4
  94. package/dist/excalidraw/actions/actionAddToLibrary.d.ts +4 -4
  95. package/dist/excalidraw/actions/actionAddToLibrary.js +4 -3
  96. package/dist/excalidraw/actions/actionAlign.d.ts +22 -22
  97. package/dist/excalidraw/actions/actionAlign.js +7 -6
  98. package/dist/excalidraw/actions/actionBoundText.d.ts +10 -10
  99. package/dist/excalidraw/actions/actionBoundText.js +8 -4
  100. package/dist/excalidraw/actions/actionCanvas.d.ts +52 -52
  101. package/dist/excalidraw/actions/actionCanvas.js +19 -14
  102. package/dist/excalidraw/actions/actionClipboard.d.ts +24 -24
  103. package/dist/excalidraw/actions/actionClipboard.js +14 -13
  104. package/dist/excalidraw/actions/actionDeleteSelected.d.ts +10 -10
  105. package/dist/excalidraw/actions/actionDeleteSelected.js +6 -3
  106. package/dist/excalidraw/actions/actionDistribute.d.ts +10 -10
  107. package/dist/excalidraw/actions/actionDistribute.js +3 -2
  108. package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +7 -8
  109. package/dist/excalidraw/actions/actionDuplicateSelection.js +7 -3
  110. package/dist/excalidraw/actions/actionElementLock.d.ts +9 -9
  111. package/dist/excalidraw/actions/actionElementLock.js +3 -2
  112. package/dist/excalidraw/actions/actionExport.d.ts +33 -33
  113. package/dist/excalidraw/actions/actionExport.js +15 -11
  114. package/dist/excalidraw/actions/actionFinalize.d.ts +9 -9
  115. package/dist/excalidraw/actions/actionFinalize.js +9 -5
  116. package/dist/excalidraw/actions/actionFlip.d.ts +10 -10
  117. package/dist/excalidraw/actions/actionFlip.js +12 -12
  118. package/dist/excalidraw/actions/actionFrame.d.ts +16 -171
  119. package/dist/excalidraw/actions/actionFrame.js +7 -6
  120. package/dist/excalidraw/actions/actionGroup.d.ts +12 -322
  121. package/dist/excalidraw/actions/actionGroup.js +9 -11
  122. package/dist/excalidraw/actions/actionHistory.d.ts +4 -3
  123. package/dist/excalidraw/actions/actionHistory.js +27 -28
  124. package/dist/excalidraw/actions/actionLinearEditor.d.ts +6 -4
  125. package/dist/excalidraw/actions/actionLinearEditor.js +21 -5
  126. package/dist/excalidraw/actions/actionLink.d.ts +5 -5
  127. package/dist/excalidraw/actions/actionLink.js +2 -1
  128. package/dist/excalidraw/actions/actionMenu.d.ts +8 -8
  129. package/dist/excalidraw/actions/actionMenu.js +4 -3
  130. package/dist/excalidraw/actions/actionNavigate.d.ts +4 -4
  131. package/dist/excalidraw/actions/actionNavigate.js +3 -2
  132. package/dist/excalidraw/actions/actionProperties.d.ts +34 -34
  133. package/dist/excalidraw/actions/actionProperties.js +18 -13
  134. package/dist/excalidraw/actions/actionSelectAll.d.ts +5 -5
  135. package/dist/excalidraw/actions/actionSelectAll.js +2 -1
  136. package/dist/excalidraw/actions/actionStyles.d.ts +9 -12
  137. package/dist/excalidraw/actions/actionStyles.js +4 -3
  138. package/dist/excalidraw/actions/actionToggleGridMode.d.ts +7 -5
  139. package/dist/excalidraw/actions/actionToggleGridMode.js +6 -2
  140. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +4 -4
  141. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.js +2 -1
  142. package/dist/excalidraw/actions/actionToggleStats.d.ts +4 -4
  143. package/dist/excalidraw/actions/actionToggleStats.js +2 -1
  144. package/dist/excalidraw/actions/actionToggleViewMode.d.ts +4 -4
  145. package/dist/excalidraw/actions/actionToggleViewMode.js +2 -1
  146. package/dist/excalidraw/actions/actionToggleZenMode.d.ts +4 -4
  147. package/dist/excalidraw/actions/actionToggleZenMode.js +2 -1
  148. package/dist/excalidraw/actions/actionZindex.d.ts +23 -19
  149. package/dist/excalidraw/actions/actionZindex.js +9 -4
  150. package/dist/excalidraw/actions/manager.d.ts +5 -5
  151. package/dist/excalidraw/actions/register.d.ts +1 -1
  152. package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
  153. package/dist/excalidraw/actions/shortcuts.js +1 -1
  154. package/dist/excalidraw/actions/types.d.ts +7 -7
  155. package/dist/excalidraw/align.d.ts +1 -1
  156. package/dist/excalidraw/analytics.js +1 -1
  157. package/dist/excalidraw/animated-trail.d.ts +2 -2
  158. package/dist/excalidraw/appState.d.ts +5 -5
  159. package/dist/excalidraw/change.d.ts +191 -0
  160. package/dist/excalidraw/change.js +894 -0
  161. package/dist/excalidraw/charts.d.ts +1 -1
  162. package/dist/excalidraw/clients.d.ts +2 -2
  163. package/dist/excalidraw/clients.js +1 -1
  164. package/dist/excalidraw/clipboard.d.ts +3 -3
  165. package/dist/excalidraw/colors.d.ts +1 -1
  166. package/dist/excalidraw/components/Actions.d.ts +3 -3
  167. package/dist/excalidraw/components/Actions.js +8 -5
  168. package/dist/excalidraw/components/App.d.ts +27 -13
  169. package/dist/excalidraw/components/App.js +362 -157
  170. package/dist/excalidraw/components/ColorPicker/ColorInput.d.ts +1 -1
  171. package/dist/excalidraw/components/ColorPicker/ColorInput.js +1 -1
  172. package/dist/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
  173. package/dist/excalidraw/components/ColorPicker/ColorPicker.js +1 -1
  174. package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
  175. package/dist/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
  176. package/dist/excalidraw/components/ColorPicker/PickerHeading.d.ts +1 -1
  177. package/dist/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
  178. package/dist/excalidraw/components/ColorPicker/TopPicks.d.ts +1 -1
  179. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +2 -2
  180. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
  181. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
  182. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.js +1 -1
  183. package/dist/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
  184. package/dist/excalidraw/components/CommandPalette/CommandPalette.js +28 -13
  185. package/dist/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -1
  186. package/dist/excalidraw/components/CommandPalette/types.d.ts +3 -3
  187. package/dist/excalidraw/components/ConfirmDialog.d.ts +1 -1
  188. package/dist/excalidraw/components/ContextMenu.d.ts +2 -2
  189. package/dist/excalidraw/components/ContextMenu.js +1 -1
  190. package/dist/excalidraw/components/DarkModeToggle.d.ts +1 -1
  191. package/dist/excalidraw/components/DarkModeToggle.js +3 -1
  192. package/dist/excalidraw/components/DefaultSidebar.d.ts +2 -2
  193. package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
  194. package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
  195. package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
  196. package/dist/excalidraw/components/HelpDialog.js +8 -6
  197. package/dist/excalidraw/components/HintViewer.d.ts +1 -1
  198. package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
  199. package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
  200. package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
  201. package/dist/excalidraw/components/LayerUI.d.ts +4 -4
  202. package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
  203. package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
  204. package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  205. package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
  206. package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
  207. package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
  208. package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
  209. package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
  210. package/dist/excalidraw/components/MagicSettings.js +2 -2
  211. package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
  212. package/dist/excalidraw/components/Modal.d.ts +1 -1
  213. package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  214. package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
  215. package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
  216. package/dist/excalidraw/components/RadioGroup.d.ts +2 -1
  217. package/dist/excalidraw/components/RadioGroup.js +1 -1
  218. package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
  219. package/dist/excalidraw/components/Sidebar/Sidebar.d.ts +2 -2
  220. package/dist/excalidraw/components/Sidebar/Sidebar.js +1 -1
  221. package/dist/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -1
  222. package/dist/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -1
  223. package/dist/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
  224. package/dist/excalidraw/components/Sidebar/common.d.ts +1 -1
  225. package/dist/excalidraw/components/Stack.d.ts +2 -2
  226. package/dist/excalidraw/components/Stats.d.ts +2 -2
  227. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
  228. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.js +6 -2
  229. package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
  230. package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
  231. package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
  232. package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
  233. package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
  234. package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
  235. package/dist/excalidraw/components/TTDDialog/common.d.ts +4 -4
  236. package/dist/excalidraw/components/TextField.d.ts +1 -1
  237. package/dist/excalidraw/components/Toast.d.ts +1 -1
  238. package/dist/excalidraw/components/ToolButton.d.ts +4 -2
  239. package/dist/excalidraw/components/ToolButton.js +1 -1
  240. package/dist/excalidraw/components/Trans.d.ts +1 -1
  241. package/dist/excalidraw/components/UserList.d.ts +1 -1
  242. package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +2 -1
  243. package/dist/excalidraw/components/canvases/InteractiveCanvas.js +1 -0
  244. package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
  245. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +2 -2
  246. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +18 -0
  247. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.js +9 -0
  248. package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
  249. package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
  250. package/dist/excalidraw/components/hyperlink/Hyperlink.js +3 -3
  251. package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  252. package/dist/excalidraw/components/hyperlink/helpers.js +2 -3
  253. package/dist/excalidraw/components/icons.d.ts +6 -1
  254. package/dist/excalidraw/components/icons.js +19 -5
  255. package/dist/excalidraw/components/main-menu/DefaultItems.d.ts +12 -2
  256. package/dist/excalidraw/components/main-menu/DefaultItems.js +38 -7
  257. package/dist/excalidraw/constants.d.ts +5 -5
  258. package/dist/excalidraw/constants.js +6 -3
  259. package/dist/excalidraw/context/ui-appState.d.ts +1 -1
  260. package/dist/excalidraw/cursor.d.ts +1 -1
  261. package/dist/excalidraw/data/EditorLocalStorage.d.ts +2 -2
  262. package/dist/excalidraw/data/blob.d.ts +5 -5
  263. package/dist/excalidraw/data/filesystem.d.ts +2 -1
  264. package/dist/excalidraw/data/index.d.ts +4 -4
  265. package/dist/excalidraw/data/json.d.ts +3 -3
  266. package/dist/excalidraw/data/library.d.ts +3 -3
  267. package/dist/excalidraw/data/magic.d.ts +3 -3
  268. package/dist/excalidraw/data/magic.js +2 -1
  269. package/dist/excalidraw/data/reconcile.d.ts +6 -0
  270. package/dist/excalidraw/data/reconcile.js +49 -0
  271. package/dist/excalidraw/data/resave.d.ts +2 -2
  272. package/dist/excalidraw/data/restore.d.ts +5 -5
  273. package/dist/excalidraw/data/restore.js +6 -7
  274. package/dist/excalidraw/data/transform.d.ts +4 -4
  275. package/dist/excalidraw/data/transform.js +12 -3
  276. package/dist/excalidraw/data/types.d.ts +3 -3
  277. package/dist/excalidraw/data/url.d.ts +1 -0
  278. package/dist/excalidraw/data/url.js +4 -1
  279. package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
  280. package/dist/excalidraw/element/binding.d.ts +50 -9
  281. package/dist/excalidraw/element/binding.js +712 -155
  282. package/dist/excalidraw/element/bounds.d.ts +3 -4
  283. package/dist/excalidraw/element/bounds.js +0 -3
  284. package/dist/excalidraw/element/collision.d.ts +14 -19
  285. package/dist/excalidraw/element/collision.js +36 -713
  286. package/dist/excalidraw/element/containerCache.d.ts +1 -1
  287. package/dist/excalidraw/element/dragElements.d.ts +3 -3
  288. package/dist/excalidraw/element/embeddable.d.ts +9 -6
  289. package/dist/excalidraw/element/embeddable.js +98 -62
  290. package/dist/excalidraw/element/image.d.ts +2 -2
  291. package/dist/excalidraw/element/index.d.ts +1 -2
  292. package/dist/excalidraw/element/index.js +0 -1
  293. package/dist/excalidraw/element/linearElementEditor.d.ts +12 -12
  294. package/dist/excalidraw/element/linearElementEditor.js +7 -5
  295. package/dist/excalidraw/element/mutateElement.d.ts +3 -4
  296. package/dist/excalidraw/element/newElement.d.ts +4 -4
  297. package/dist/excalidraw/element/newElement.js +2 -1
  298. package/dist/excalidraw/element/resizeElements.d.ts +4 -4
  299. package/dist/excalidraw/element/resizeElements.js +110 -86
  300. package/dist/excalidraw/element/resizeTest.d.ts +7 -7
  301. package/dist/excalidraw/element/resizeTest.js +55 -8
  302. package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
  303. package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
  304. package/dist/excalidraw/element/sizeHelpers.js +3 -0
  305. package/dist/excalidraw/element/sortElements.d.ts +1 -1
  306. package/dist/excalidraw/element/textElement.d.ts +5 -6
  307. package/dist/excalidraw/element/textElement.js +5 -34
  308. package/dist/excalidraw/element/textWysiwyg.d.ts +2 -2
  309. package/dist/excalidraw/element/transformHandles.d.ts +24 -6
  310. package/dist/excalidraw/element/transformHandles.js +24 -3
  311. package/dist/excalidraw/element/typeChecks.d.ts +4 -4
  312. package/dist/excalidraw/element/types.d.ts +26 -10
  313. package/dist/excalidraw/emitter.d.ts +1 -1
  314. package/dist/excalidraw/errors.d.ts +3 -0
  315. package/dist/excalidraw/errors.js +3 -0
  316. package/dist/excalidraw/fractionalIndex.d.ts +40 -0
  317. package/dist/excalidraw/fractionalIndex.js +241 -0
  318. package/dist/excalidraw/frame.d.ts +4 -4
  319. package/dist/excalidraw/gatransforms.d.ts +1 -1
  320. package/dist/excalidraw/gesture.d.ts +1 -1
  321. package/dist/excalidraw/groups.d.ts +5 -3
  322. package/dist/excalidraw/groups.js +17 -0
  323. package/dist/excalidraw/history.d.ts +35 -47
  324. package/dist/excalidraw/history.js +100 -167
  325. package/dist/excalidraw/hooks/useCreatePortalContainer.js +2 -1
  326. package/dist/excalidraw/hooks/useEmitter.d.ts +2 -0
  327. package/dist/excalidraw/hooks/useEmitter.js +13 -0
  328. package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  329. package/dist/excalidraw/i18n.d.ts +1 -1
  330. package/dist/excalidraw/index.d.ts +3 -1
  331. package/dist/excalidraw/index.js +2 -0
  332. package/dist/excalidraw/jotai.d.ts +1 -1
  333. package/dist/excalidraw/laser-trails.d.ts +3 -2
  334. package/dist/excalidraw/locales/en.json +5 -3
  335. package/dist/excalidraw/math.d.ts +2 -2
  336. package/dist/excalidraw/points.d.ts +1 -1
  337. package/dist/excalidraw/queue.d.ts +1 -1
  338. package/dist/excalidraw/renderer/helpers.d.ts +2 -2
  339. package/dist/excalidraw/renderer/helpers.js +2 -2
  340. package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
  341. package/dist/excalidraw/renderer/interactiveScene.js +8 -7
  342. package/dist/excalidraw/renderer/renderElement.d.ts +3 -3
  343. package/dist/excalidraw/renderer/renderElement.js +5 -5
  344. package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
  345. package/dist/excalidraw/renderer/renderSnaps.js +2 -1
  346. package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
  347. package/dist/excalidraw/renderer/staticScene.js +14 -3
  348. package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
  349. package/dist/excalidraw/renderer/staticSvgScene.js +10 -0
  350. package/dist/excalidraw/scene/Fonts.d.ts +1 -1
  351. package/dist/excalidraw/scene/Renderer.d.ts +3 -3
  352. package/dist/excalidraw/scene/Scene.d.ts +9 -8
  353. package/dist/excalidraw/scene/Scene.js +31 -16
  354. package/dist/excalidraw/scene/Shape.d.ts +1 -1
  355. package/dist/excalidraw/scene/ShapeCache.d.ts +4 -4
  356. package/dist/excalidraw/scene/comparisons.d.ts +2 -2
  357. package/dist/excalidraw/scene/export.d.ts +2 -2
  358. package/dist/excalidraw/scene/export.js +5 -4
  359. package/dist/excalidraw/scene/scroll.d.ts +2 -2
  360. package/dist/excalidraw/scene/scrollbars.d.ts +3 -3
  361. package/dist/excalidraw/scene/selection.d.ts +2 -2
  362. package/dist/excalidraw/scene/types.d.ts +5 -4
  363. package/dist/excalidraw/scene/zoom.d.ts +1 -1
  364. package/dist/excalidraw/snapping.d.ts +4 -4
  365. package/dist/excalidraw/store.d.ts +99 -0
  366. package/dist/excalidraw/store.js +269 -0
  367. package/dist/excalidraw/types.d.ts +33 -19
  368. package/dist/excalidraw/utils.d.ts +11 -4
  369. package/dist/excalidraw/utils.js +8 -0
  370. package/dist/excalidraw/zindex.d.ts +4 -4
  371. package/dist/excalidraw/zindex.js +9 -13
  372. package/dist/prod/{en-II4GK66F.json → en-UQDDYCH7.json} +5 -3
  373. package/dist/prod/index.css +1 -1
  374. package/dist/prod/index.js +44 -44
  375. package/dist/utils/bbox.d.ts +2 -2
  376. package/dist/utils/collision.d.ts +4 -0
  377. package/dist/utils/collision.js +48 -0
  378. package/dist/utils/export.d.ts +2 -2
  379. package/dist/utils/geometry/geometry.d.ts +71 -0
  380. package/dist/utils/geometry/geometry.js +674 -0
  381. package/dist/utils/geometry/shape.d.ts +56 -0
  382. package/dist/utils/geometry/shape.js +168 -0
  383. package/dist/utils/withinBounds.d.ts +1 -1
  384. package/history.ts +163 -218
  385. package/package.json +2 -1
  386. package/dist/browser/dev/excalidraw-assets-dev/chunk-AK7SWNLN.js.map +0 -7
  387. package/dist/browser/dev/excalidraw-assets-dev/chunk-RWZVJAQU.js.map +0 -7
  388. package/dist/browser/dev/excalidraw-assets-dev/chunk-Z3PH3V2B.js.map +0 -7
  389. package/dist/browser/dev/excalidraw-assets-dev/image-OFRRV5MB.css.map +0 -7
  390. package/dist/browser/prod/excalidraw-assets/chunk-LL4GORAM.js +0 -55
  391. package/dist/browser/prod/excalidraw-assets/image-EFCJDJH3.js +0 -1
  392. /package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-ACFH36JV.js.map → blockDiagram-91b80b7a-H47FTXHA.js.map} +0 -0
  393. /package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-QZ27YR47.js.map → c4Diagram-b2a90758-NNJK6GKC.js.map} +0 -0
  394. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-HO2HMSK7.js.map → chunk-4KQVEBHW.js.map} +0 -0
  395. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-USGV265L.js.map → chunk-53YI56GV.js.map} +0 -0
  396. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-EDFX3S7X.js.map → chunk-A2WCJI4I.js.map} +0 -0
  397. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-IX4V72YG.js.map → chunk-EFLPX7NE.js.map} +0 -0
  398. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-MXVETLVM.js.map → chunk-JYIQCNWV.js.map} +0 -0
  399. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js.map → chunk-LVIQQW6F.js.map} +0 -0
  400. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js.map → chunk-PXLO3FOU.js.map} +0 -0
  401. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-7DACDEY3.js.map → chunk-TO2AW5PW.js.map} +0 -0
  402. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-NJ77ZFNJ.js.map → chunk-VURILHLY.js.map} +0 -0
  403. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-2T2GU7NF.js.map → chunk-ZAYGSUHF.js.map} +0 -0
  404. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-QSLMH4JW.js.map → classDiagram-30eddba6-CUYIJICN.js.map} +0 -0
  405. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-DY4DYQ5P.js.map → classDiagram-v2-f2df5561-K6WW6K73.js.map} +0 -0
  406. /package/dist/browser/dev/excalidraw-assets-dev/{dist-Z46EOVOL.js.map → dist-ITJNUBZF.js.map} +0 -0
  407. /package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js.map → en-BF4XUPIZ.js.map} +0 -0
  408. /package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js.map → erDiagram-47591fe2-XGAD7EEP.js.map} +0 -0
  409. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js.map → flowDiagram-5540d9b9-B6EOVNNO.js.map} +0 -0
  410. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js.map → flowDiagram-v2-3b53844e-NUG24FJH.js.map} +0 -0
  411. /package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js.map → flowchart-elk-definition-5fe447d6-25Y7PCBL.js.map} +0 -0
  412. /package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js.map → ganttDiagram-9a3bba1f-GNL6ZDTC.js.map} +0 -0
  413. /package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js.map → gitGraphDiagram-96e6b4ee-HNW52NVO.js.map} +0 -0
  414. /package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js.map → image-LVS32KQQ.js.map} +0 -0
  415. /package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js.map → infoDiagram-bcd20f53-FWEUVFLT.js.map} +0 -0
  416. /package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js.map → journeyDiagram-4fe6b3dc-RZIUI7UG.js.map} +0 -0
  417. /package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js.map → mindmap-definition-f354de21-GBVN45GU.js.map} +0 -0
  418. /package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js.map → pieDiagram-79897490-ECENNII6.js.map} +0 -0
  419. /package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js.map → quadrantDiagram-62f64e94-ZMEOFVNL.js.map} +0 -0
  420. /package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js.map → requirementDiagram-05bf5f74-FHZSFHCR.js.map} +0 -0
  421. /package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js.map → sankeyDiagram-97764748-VDKIKTA6.js.map} +0 -0
  422. /package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js.map → sequenceDiagram-acc0e65c-6JUSPVKX.js.map} +0 -0
  423. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js.map → stateDiagram-0ff1cf1a-L3AKWENF.js.map} +0 -0
  424. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js.map → stateDiagram-v2-9a9d610d-NU3GGMCH.js.map} +0 -0
  425. /package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js.map → timeline-definition-fea2a41d-JGP7XCHW.js.map} +0 -0
  426. /package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js.map → xychartDiagram-ab372869-HLFHHF2I.js.map} +0 -0
@@ -1,190 +1,123 @@
1
- import { isLinearElement } from "./element/typeChecks";
2
- import { deepCopyElement } from "./element/newElement";
3
- const clearAppStatePropertiesForHistory = (appState) => {
4
- return {
5
- selectedElementIds: appState.selectedElementIds,
6
- selectedGroupIds: appState.selectedGroupIds,
7
- viewBackgroundColor: appState.viewBackgroundColor,
8
- editingLinearElement: appState.editingLinearElement,
9
- editingGroupId: appState.editingGroupId,
10
- name: appState.name,
11
- };
12
- };
13
- class History {
14
- elementCache = new Map();
15
- recording = true;
16
- stateHistory = [];
1
+ import { Emitter } from "./emitter";
2
+ export class HistoryChangedEvent {
3
+ isUndoStackEmpty;
4
+ isRedoStackEmpty;
5
+ constructor(isUndoStackEmpty = true, isRedoStackEmpty = true) {
6
+ this.isUndoStackEmpty = isUndoStackEmpty;
7
+ this.isRedoStackEmpty = isRedoStackEmpty;
8
+ }
9
+ }
10
+ export class History {
11
+ onHistoryChangedEmitter = new Emitter();
12
+ undoStack = [];
17
13
  redoStack = [];
18
- lastEntry = null;
19
- hydrateHistoryEntry({ appState, elements, }) {
20
- return {
21
- appState: JSON.parse(appState),
22
- elements: elements.map((dehydratedExcalidrawElement) => {
23
- const element = this.elementCache
24
- .get(dehydratedExcalidrawElement.id)
25
- ?.get(dehydratedExcalidrawElement.versionNonce);
26
- if (!element) {
27
- throw new Error(`Element not found: ${dehydratedExcalidrawElement.id}:${dehydratedExcalidrawElement.versionNonce}`);
28
- }
29
- return element;
30
- }),
31
- };
32
- }
33
- dehydrateHistoryEntry({ appState, elements, }) {
34
- return {
35
- appState: JSON.stringify(appState),
36
- elements: elements.map((element) => {
37
- if (!this.elementCache.has(element.id)) {
38
- this.elementCache.set(element.id, new Map());
39
- }
40
- const versions = this.elementCache.get(element.id);
41
- if (!versions.has(element.versionNonce)) {
42
- versions.set(element.versionNonce, deepCopyElement(element));
43
- }
44
- return {
45
- id: element.id,
46
- versionNonce: element.versionNonce,
47
- };
48
- }),
49
- };
50
- }
51
- getSnapshotForTest() {
52
- return {
53
- recording: this.recording,
54
- stateHistory: this.stateHistory.map((dehydratedHistoryEntry) => this.hydrateHistoryEntry(dehydratedHistoryEntry)),
55
- redoStack: this.redoStack.map((dehydratedHistoryEntry) => this.hydrateHistoryEntry(dehydratedHistoryEntry)),
56
- };
14
+ get isUndoStackEmpty() {
15
+ return this.undoStack.length === 0;
16
+ }
17
+ get isRedoStackEmpty() {
18
+ return this.redoStack.length === 0;
57
19
  }
58
20
  clear() {
59
- this.stateHistory.length = 0;
21
+ this.undoStack.length = 0;
60
22
  this.redoStack.length = 0;
61
- this.lastEntry = null;
62
- this.elementCache.clear();
63
- }
64
- generateEntry = (appState, elements) => this.dehydrateHistoryEntry({
65
- appState: clearAppStatePropertiesForHistory(appState),
66
- elements: elements.reduce((elements, element) => {
67
- if (isLinearElement(element) &&
68
- appState.multiElement &&
69
- appState.multiElement.id === element.id) {
70
- // don't store multi-point arrow if still has only one point
71
- if (appState.multiElement &&
72
- appState.multiElement.id === element.id &&
73
- element.points.length < 2) {
74
- return elements;
75
- }
76
- elements.push({
77
- ...element,
78
- // don't store last point if not committed
79
- points: element.lastCommittedPoint !==
80
- element.points[element.points.length - 1]
81
- ? element.points.slice(0, -1)
82
- : element.points,
83
- });
84
- }
85
- else {
86
- elements.push(element);
23
+ }
24
+ /**
25
+ * Record a local change which will go into the history
26
+ */
27
+ record(elementsChange, appStateChange) {
28
+ const entry = HistoryEntry.create(appStateChange, elementsChange);
29
+ if (!entry.isEmpty()) {
30
+ // we have the latest changes, no need to `applyLatest`, which is done within `History.push`
31
+ this.undoStack.push(entry.inverse());
32
+ if (!entry.elementsChange.isEmpty()) {
33
+ // don't reset redo stack on local appState changes,
34
+ // as a simple click (unselect) could lead to losing all the redo entries
35
+ // only reset on non empty elements changes!
36
+ this.redoStack.length = 0;
87
37
  }
88
- return elements;
89
- }, []),
90
- });
91
- shouldCreateEntry(nextEntry) {
92
- const { lastEntry } = this;
93
- if (!lastEntry) {
94
- return true;
95
- }
96
- if (nextEntry.elements.length !== lastEntry.elements.length) {
97
- return true;
38
+ this.onHistoryChangedEmitter.trigger(new HistoryChangedEvent(this.isUndoStackEmpty, this.isRedoStackEmpty));
98
39
  }
99
- // loop from right to left as changes are likelier to happen on new elements
100
- for (let i = nextEntry.elements.length - 1; i > -1; i--) {
101
- const prev = nextEntry.elements[i];
102
- const next = lastEntry.elements[i];
103
- if (!prev ||
104
- !next ||
105
- prev.id !== next.id ||
106
- prev.versionNonce !== next.versionNonce) {
107
- return true;
40
+ }
41
+ undo(elements, appState, snapshot) {
42
+ return this.perform(elements, appState, snapshot, () => History.pop(this.undoStack), (entry) => History.push(this.redoStack, entry, elements));
43
+ }
44
+ redo(elements, appState, snapshot) {
45
+ return this.perform(elements, appState, snapshot, () => History.pop(this.redoStack), (entry) => History.push(this.undoStack, entry, elements));
46
+ }
47
+ perform(elements, appState, snapshot, pop, push) {
48
+ try {
49
+ let historyEntry = pop();
50
+ if (historyEntry === null) {
51
+ return;
108
52
  }
109
- }
110
- // note: this is safe because entry's appState is guaranteed no excess props
111
- let key;
112
- for (key in nextEntry.appState) {
113
- if (key === "editingLinearElement") {
114
- if (nextEntry.appState[key]?.elementId ===
115
- lastEntry.appState[key]?.elementId) {
116
- continue;
53
+ let nextElements = elements;
54
+ let nextAppState = appState;
55
+ let containsVisibleChange = false;
56
+ // iterate through the history entries in case they result in no visible changes
57
+ while (historyEntry) {
58
+ try {
59
+ [nextElements, nextAppState, containsVisibleChange] =
60
+ historyEntry.applyTo(nextElements, nextAppState, snapshot);
117
61
  }
62
+ finally {
63
+ // make sure to always push / pop, even if the increment is corrupted
64
+ push(historyEntry);
65
+ }
66
+ if (containsVisibleChange) {
67
+ break;
68
+ }
69
+ historyEntry = pop();
118
70
  }
119
- if (key === "selectedElementIds" || key === "selectedGroupIds") {
120
- continue;
121
- }
122
- if (nextEntry.appState[key] !== lastEntry.appState[key]) {
123
- return true;
124
- }
71
+ return [nextElements, nextAppState];
125
72
  }
126
- return false;
127
- }
128
- pushEntry(appState, elements) {
129
- const newEntryDehydrated = this.generateEntry(appState, elements);
130
- const newEntry = this.hydrateHistoryEntry(newEntryDehydrated);
131
- if (newEntry) {
132
- if (!this.shouldCreateEntry(newEntry)) {
133
- return;
134
- }
135
- this.stateHistory.push(newEntryDehydrated);
136
- this.lastEntry = newEntry;
137
- // As a new entry was pushed, we invalidate the redo stack
138
- this.clearRedoStack();
73
+ finally {
74
+ // trigger the history change event before returning completely
75
+ // also trigger it just once, no need doing so on each entry
76
+ this.onHistoryChangedEmitter.trigger(new HistoryChangedEvent(this.isUndoStackEmpty, this.isRedoStackEmpty));
139
77
  }
140
78
  }
141
- clearRedoStack() {
142
- this.redoStack.splice(0, this.redoStack.length);
143
- }
144
- redoOnce() {
145
- if (this.redoStack.length === 0) {
79
+ static pop(stack) {
80
+ if (!stack.length) {
146
81
  return null;
147
82
  }
148
- const entryToRestore = this.redoStack.pop();
149
- if (entryToRestore !== undefined) {
150
- this.stateHistory.push(entryToRestore);
151
- return this.hydrateHistoryEntry(entryToRestore);
83
+ const entry = stack.pop();
84
+ if (entry !== undefined) {
85
+ return entry;
152
86
  }
153
87
  return null;
154
88
  }
155
- undoOnce() {
156
- if (this.stateHistory.length === 1) {
157
- return null;
158
- }
159
- const currentEntry = this.stateHistory.pop();
160
- const entryToRestore = this.stateHistory[this.stateHistory.length - 1];
161
- if (currentEntry !== undefined) {
162
- this.redoStack.push(currentEntry);
163
- return this.hydrateHistoryEntry(entryToRestore);
164
- }
165
- return null;
89
+ static push(stack, entry, prevElements) {
90
+ const updatedEntry = entry.inverse().applyLatestChanges(prevElements);
91
+ return stack.push(updatedEntry);
92
+ }
93
+ }
94
+ export class HistoryEntry {
95
+ appStateChange;
96
+ elementsChange;
97
+ constructor(appStateChange, elementsChange) {
98
+ this.appStateChange = appStateChange;
99
+ this.elementsChange = elementsChange;
100
+ }
101
+ static create(appStateChange, elementsChange) {
102
+ return new HistoryEntry(appStateChange, elementsChange);
103
+ }
104
+ inverse() {
105
+ return new HistoryEntry(this.appStateChange.inverse(), this.elementsChange.inverse());
106
+ }
107
+ applyTo(elements, appState, snapshot) {
108
+ const [nextElements, elementsContainVisibleChange] = this.elementsChange.applyTo(elements, snapshot.elements);
109
+ const [nextAppState, appStateContainsVisibleChange] = this.appStateChange.applyTo(appState, nextElements);
110
+ const appliedVisibleChanges = elementsContainVisibleChange || appStateContainsVisibleChange;
111
+ return [nextElements, nextAppState, appliedVisibleChanges];
166
112
  }
167
113
  /**
168
- * Updates history's `lastEntry` to latest app state. This is necessary
169
- * when doing undo/redo which itself doesn't commit to history, but updates
170
- * app state in a way that would break `shouldCreateEntry` which relies on
171
- * `lastEntry` to reflect last comittable history state.
172
- * We can't update `lastEntry` from within history when calling undo/redo
173
- * because the action potentially mutates appState/elements before storing
174
- * it.
114
+ * Apply latest (remote) changes to the history entry, creates new instance of `HistoryEntry`.
175
115
  */
176
- setCurrentState(appState, elements) {
177
- this.lastEntry = this.hydrateHistoryEntry(this.generateEntry(appState, elements));
116
+ applyLatestChanges(elements) {
117
+ const updatedElementsChange = this.elementsChange.applyLatestChanges(elements);
118
+ return HistoryEntry.create(this.appStateChange, updatedElementsChange);
178
119
  }
179
- // Suspicious that this is called so many places. Seems error-prone.
180
- resumeRecording() {
181
- this.recording = true;
182
- }
183
- record(state, elements) {
184
- if (this.recording) {
185
- this.pushEntry(state, elements);
186
- this.recording = false;
187
- }
120
+ isEmpty() {
121
+ return this.appStateChange.isEmpty() && this.elementsChange.isEmpty();
188
122
  }
189
123
  }
190
- export default History;
@@ -1,5 +1,6 @@
1
1
  import { useState, useLayoutEffect } from "react";
2
2
  import { useDevice, useExcalidrawContainer } from "../components/App";
3
+ import { THEME } from "../constants";
3
4
  import { useUIAppState } from "../context/ui-appState";
4
5
  export const useCreatePortalContainer = (opts) => {
5
6
  const [div, setDiv] = useState(null);
@@ -11,7 +12,7 @@ export const useCreatePortalContainer = (opts) => {
11
12
  div.className = "";
12
13
  div.classList.add("excalidraw", ...(opts?.className?.split(/\s+/) || []));
13
14
  div.classList.toggle("excalidraw--mobile", device.editor.isMobile);
14
- div.classList.toggle("theme--dark", theme === "dark");
15
+ div.classList.toggle("theme--dark", theme === THEME.DARK);
15
16
  }
16
17
  }, [div, theme, device.editor.isMobile, opts?.className]);
17
18
  useLayoutEffect(() => {
@@ -0,0 +1,2 @@
1
+ import type { Emitter } from "../emitter";
2
+ export declare const useEmitter: <TEvent extends unknown>(emitter: Emitter<[TEvent]>, initialState: TEvent) => TEvent;
@@ -0,0 +1,13 @@
1
+ import { useEffect, useState } from "react";
2
+ export const useEmitter = (emitter, initialState) => {
3
+ const [event, setEvent] = useState(initialState);
4
+ useEffect(() => {
5
+ const unsubscribe = emitter.on((event) => {
6
+ setEvent(event);
7
+ });
8
+ return () => {
9
+ unsubscribe();
10
+ };
11
+ }, [emitter]);
12
+ return event;
13
+ };
@@ -1,4 +1,4 @@
1
- import { LibraryItem } from "../types";
1
+ import type { LibraryItem } from "../types";
2
2
  export type SvgCache = Map<LibraryItem["id"], SVGSVGElement>;
3
3
  export declare const libraryItemSvgsCache: import("jotai").PrimitiveAtom<SvgCache> & {
4
4
  init: SvgCache;
@@ -1,5 +1,5 @@
1
1
  import fallbackLangData from "./locales/en.json";
2
- import { NestedKeyOf } from "./utility-types";
2
+ import type { NestedKeyOf } from "./utility-types";
3
3
  export interface Language {
4
4
  code: string;
5
5
  label: string;
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import "./css/app.scss";
3
3
  import "./css/styles.scss";
4
4
  import "../../public/fonts/fonts.css";
5
- import { ExcalidrawProps } from "./types";
5
+ import type { ExcalidrawProps } from "./types";
6
6
  import Footer from "./components/footer/FooterCenter";
7
7
  import MainMenu from "./components/main-menu/MainMenu";
8
8
  import WelcomeScreen from "./components/welcome-screen/WelcomeScreen";
@@ -11,6 +11,7 @@ export declare const Excalidraw: React.MemoExoticComponent<(props: ExcalidrawPro
11
11
  export { getSceneVersion, hashElementsVersion, hashString, isInvisiblySmallElement, getNonDeletedElements, } from "./element";
12
12
  export { defaultLang, useI18n, languages } from "./i18n";
13
13
  export { restore, restoreAppState, restoreElements, restoreLibraryItems, } from "./data/restore";
14
+ export { reconcileElements } from "./data/reconcile";
14
15
  export { exportToCanvas, exportToBlob, exportToSvg, exportToClipboard, } from "../utils/export";
15
16
  export { serializeAsJSON, serializeLibraryAsJSON } from "./data/json";
16
17
  export { loadFromBlob, loadSceneOrLibraryFromBlob, loadLibraryFromBlob, } from "./data/blob";
@@ -19,6 +20,7 @@ export { mergeLibraryItems, getLibraryItemsHash } from "./data/library";
19
20
  export { isLinearElement } from "./element/typeChecks";
20
21
  export { FONT_FAMILY, THEME, MIME_TYPES, ROUNDNESS, DEFAULT_LASER_COLOR, } from "./constants";
21
22
  export { mutateElement, newElementWith, bumpVersion, } from "./element/mutateElement";
23
+ export { StoreAction } from "./store";
22
24
  export { parseLibraryTokensFromUrl, useHandleLibrary } from "./data/library";
23
25
  export { sceneCoordsToViewportCoords, viewportCoordsToSceneCoords, } from "./utils";
24
26
  export { Sidebar } from "./components/Sidebar/Sidebar";
@@ -98,6 +98,7 @@ Excalidraw.displayName = "Excalidraw";
98
98
  export { getSceneVersion, hashElementsVersion, hashString, isInvisiblySmallElement, getNonDeletedElements, } from "./element";
99
99
  export { defaultLang, useI18n, languages } from "./i18n";
100
100
  export { restore, restoreAppState, restoreElements, restoreLibraryItems, } from "./data/restore";
101
+ export { reconcileElements } from "./data/reconcile";
101
102
  export { exportToCanvas, exportToBlob, exportToSvg, exportToClipboard, } from "../utils/export";
102
103
  export { serializeAsJSON, serializeLibraryAsJSON } from "./data/json";
103
104
  export { loadFromBlob, loadSceneOrLibraryFromBlob, loadLibraryFromBlob, } from "./data/blob";
@@ -106,6 +107,7 @@ export { mergeLibraryItems, getLibraryItemsHash } from "./data/library";
106
107
  export { isLinearElement } from "./element/typeChecks";
107
108
  export { FONT_FAMILY, THEME, MIME_TYPES, ROUNDNESS, DEFAULT_LASER_COLOR, } from "./constants";
108
109
  export { mutateElement, newElementWith, bumpVersion, } from "./element/mutateElement";
110
+ export { StoreAction } from "./store";
109
111
  export { parseLibraryTokensFromUrl, useHandleLibrary } from "./data/library";
110
112
  export { sceneCoordsToViewportCoords, viewportCoordsToSceneCoords, } from "./utils";
111
113
  export { Sidebar } from "./components/Sidebar/Sidebar";
@@ -1,4 +1,4 @@
1
- import { PrimitiveAtom } from "jotai";
1
+ import type { PrimitiveAtom } from "jotai";
2
2
  export declare const jotaiScope: unique symbol;
3
3
  export declare const jotaiStore: {
4
4
  get: <Value>(atom: import("jotai").Atom<Value>) => Awaited<Value> | undefined;
@@ -1,5 +1,6 @@
1
- import { AnimatedTrail, Trail } from "./animated-trail";
2
- import { AnimationFrameHandler } from "./animation-frame-handler";
1
+ import type { Trail } from "./animated-trail";
2
+ import { AnimatedTrail } from "./animated-trail";
3
+ import type { AnimationFrameHandler } from "./animation-frame-handler";
3
4
  import type App from "./components/App";
4
5
  export declare class LaserTrails implements Trail {
5
6
  private animationFrameHandler;
@@ -87,7 +87,7 @@
87
87
  "group": "Group selection",
88
88
  "ungroup": "Ungroup selection",
89
89
  "collaborators": "Collaborators",
90
- "showGrid": "Show grid",
90
+ "toggleGrid": "Toggle grid",
91
91
  "addToLibrary": "Add to library",
92
92
  "removeFromLibrary": "Remove from library",
93
93
  "libraryLoadingMessage": "Loading library…",
@@ -110,6 +110,7 @@
110
110
  "showStroke": "Show stroke color picker",
111
111
  "showBackground": "Show background color picker",
112
112
  "toggleTheme": "Toggle light/dark theme",
113
+ "theme": "Theme",
113
114
  "personalLib": "Personal Library",
114
115
  "excalidrawLib": "Excalidraw Library",
115
116
  "decreaseFontSize": "Decrease font size",
@@ -128,7 +129,7 @@
128
129
  },
129
130
  "lineEditor": {
130
131
  "edit": "Edit line",
131
- "exit": "Exit line editor"
132
+ "editArrow": "Edit arrow"
132
133
  },
133
134
  "elementLock": {
134
135
  "lock": "Lock",
@@ -180,6 +181,7 @@
180
181
  "fullScreen": "Full screen",
181
182
  "darkMode": "Dark mode",
182
183
  "lightMode": "Light mode",
184
+ "systemMode": "System mode",
183
185
  "zenMode": "Zen mode",
184
186
  "objectsSnapMode": "Snap to objects",
185
187
  "exitZenMode": "Exit zen mode",
@@ -560,6 +562,6 @@
560
562
  "noMatch": "No matching commands..."
561
563
  },
562
564
  "itemNotAvailable": "Command is not available...",
563
- "shortcutHint": "For Command palette, use {{shortcutOne}} or {{shortcutTwo}}"
565
+ "shortcutHint": "For Command palette, use {{shortcut}}"
564
566
  }
565
567
  }
@@ -1,5 +1,5 @@
1
- import { Point, Zoom } from "./types";
2
- import { ExcalidrawElement, ExcalidrawLinearElement, NonDeleted } from "./element/types";
1
+ import type { Point, Zoom } from "./types";
2
+ import type { ExcalidrawElement, ExcalidrawLinearElement, NonDeleted } from "./element/types";
3
3
  export declare const rotate: (x: number, y: number, cx: number, cy: number, angle: number) => [number, number];
4
4
  export declare const rotatePoint: (point: readonly [number, number], center: readonly [number, number], angle: number) => [number, number];
5
5
  export declare const adjustXYWithRotation: (sides: {
@@ -1,4 +1,4 @@
1
- import { Point } from "./types";
1
+ import type { Point } from "./types";
2
2
  export declare const getSizeFromPoints: (points: readonly Point[]) => {
3
3
  width: number;
4
4
  height: number;
@@ -1,4 +1,4 @@
1
- import { MaybePromise } from "./utility-types";
1
+ import type { MaybePromise } from "./utility-types";
2
2
  type Job<T, TArgs extends unknown[]> = (...args: TArgs) => MaybePromise<T>;
3
3
  export declare class Queue {
4
4
  private jobs;
@@ -1,5 +1,5 @@
1
- import { StaticCanvasAppState, AppState } from "../types";
2
- import { StaticCanvasRenderConfig } from "../scene/types";
1
+ import type { StaticCanvasAppState, AppState } from "../types";
2
+ import type { StaticCanvasRenderConfig } from "../scene/types";
3
3
  export declare const fillCircle: (context: CanvasRenderingContext2D, cx: number, cy: number, radius: number, stroke?: boolean) => void;
4
4
  export declare const getNormalizedCanvasDimensions: (canvas: HTMLCanvasElement, scale: number) => [number, number];
5
5
  export declare const bootstrapCanvas: ({ canvas, scale, normalizedWidth, normalizedHeight, theme, isExporting, viewBackgroundColor, }: {
@@ -1,4 +1,4 @@
1
- import { THEME_FILTER } from "../constants";
1
+ import { THEME, THEME_FILTER } from "../constants";
2
2
  export const fillCircle = (context, cx, cy, radius, stroke = true) => {
3
3
  context.beginPath();
4
4
  context.arc(cx, cy, radius, 0, Math.PI * 2);
@@ -15,7 +15,7 @@ export const bootstrapCanvas = ({ canvas, scale, normalizedWidth, normalizedHeig
15
15
  const context = canvas.getContext("2d");
16
16
  context.setTransform(1, 0, 0, 1, 0, 0);
17
17
  context.scale(scale, scale);
18
- if (isExporting && theme === "dark") {
18
+ if (isExporting && theme === THEME.DARK) {
19
19
  context.filter = THEME_FILTER;
20
20
  }
21
21
  // Paint background
@@ -1,4 +1,4 @@
1
- import { InteractiveSceneRenderConfig, RenderableElementsMap } from "../scene/types";
1
+ import type { InteractiveSceneRenderConfig, RenderableElementsMap } from "../scene/types";
2
2
  /** throttled to animation framerate */
3
3
  export declare const renderInteractiveSceneThrottled: {
4
4
  (config: InteractiveSceneRenderConfig): void;
@@ -9,7 +9,7 @@ export declare const renderInteractiveSceneThrottled: {
9
9
  * Interactive scene is the ui-canvas where we render bounding boxes, selections
10
10
  * and other ui stuff.
11
11
  */
12
- export declare const renderInteractiveScene: <U extends ({ canvas, elementsMap, visibleElements, selectedElements, scale, appState, renderConfig, }: InteractiveSceneRenderConfig) => {
12
+ export declare const renderInteractiveScene: <U extends ({ canvas, elementsMap, visibleElements, selectedElements, scale, appState, renderConfig, device, }: InteractiveSceneRenderConfig) => {
13
13
  atLeastOneVisibleElement: boolean;
14
14
  elementsMap: RenderableElementsMap;
15
15
  scrollBars?: undefined;
@@ -1,14 +1,14 @@
1
- import { getElementAbsoluteCoords, OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransformHandlesFromCoords, getTransformHandles, getCommonBounds, } from "../element";
1
+ import { getElementAbsoluteCoords, getTransformHandlesFromCoords, getTransformHandles, getCommonBounds, } from "../element";
2
2
  import { roundRect } from "../renderer/roundRect";
3
3
  import { getScrollBars, SCROLLBAR_COLOR, SCROLLBAR_WIDTH, } from "../scene/scrollbars";
4
4
  import { renderSelectionElement } from "../renderer/renderElement";
5
5
  import { getClientColor, renderRemoteCursors } from "../clients";
6
6
  import { isSelectedViaGroup, getSelectedGroupIds, getElementsInGroup, selectGroupsFromGivenElements, } from "../groups";
7
- import { OMIT_SIDES_FOR_FRAME, shouldShowBoundingBox, } from "../element/transformHandles";
7
+ import { getOmitSidesForDevice, shouldShowBoundingBox, } from "../element/transformHandles";
8
8
  import { arrayToMap, throttleRAF } from "../utils";
9
9
  import { DEFAULT_TRANSFORM_HANDLE_SPACING, FRAME_STYLE } from "../constants";
10
10
  import { renderSnaps } from "../renderer/renderSnaps";
11
- import { maxBindingGap } from "../element/collision";
11
+ import { maxBindingGap } from "../element/binding";
12
12
  import { LinearElementEditor } from "../element/linearElementEditor";
13
13
  import { bootstrapCanvas, fillCircle, getNormalizedCanvasDimensions, } from "./helpers";
14
14
  import oc from "open-color";
@@ -264,7 +264,7 @@ const renderTransformHandles = (context, renderConfig, appState, transformHandle
264
264
  }
265
265
  });
266
266
  };
267
- const _renderInteractiveScene = ({ canvas, elementsMap, visibleElements, selectedElements, scale, appState, renderConfig, }) => {
267
+ const _renderInteractiveScene = ({ canvas, elementsMap, visibleElements, selectedElements, scale, appState, renderConfig, device, }) => {
268
268
  if (canvas === null) {
269
269
  return { atLeastOneVisibleElement: false, elementsMap };
270
270
  }
@@ -403,7 +403,8 @@ const _renderInteractiveScene = ({ canvas, elementsMap, visibleElements, selecte
403
403
  context.translate(appState.scrollX, appState.scrollY);
404
404
  if (selectedElements.length === 1) {
405
405
  context.fillStyle = oc.white;
406
- const transformHandles = getTransformHandles(selectedElements[0], appState.zoom, elementsMap, "mouse");
406
+ const transformHandles = getTransformHandles(selectedElements[0], appState.zoom, elementsMap, "mouse", // when we render we don't know which pointer type so use mouse,
407
+ getOmitSidesForDevice(device));
407
408
  if (!appState.viewModeEnabled && showBoundingBox) {
408
409
  renderTransformHandles(context, renderConfig, appState, transformHandles, selectedElements[0].angle);
409
410
  }
@@ -421,8 +422,8 @@ const _renderInteractiveScene = ({ canvas, elementsMap, visibleElements, selecte
421
422
  context.lineWidth = lineWidth;
422
423
  context.setLineDash(initialLineDash);
423
424
  const transformHandles = getTransformHandlesFromCoords([x1, y1, x2, y2, (x1 + x2) / 2, (y1 + y2) / 2], 0, appState.zoom, "mouse", isFrameSelected
424
- ? OMIT_SIDES_FOR_FRAME
425
- : OMIT_SIDES_FOR_MULTIPLE_ELEMENTS);
425
+ ? { ...getOmitSidesForDevice(device), rotation: true }
426
+ : getOmitSidesForDevice(device));
426
427
  if (selectedElements.some((element) => !element.locked)) {
427
428
  renderTransformHandles(context, renderConfig, appState, transformHandles, 0);
428
429
  }
@@ -1,7 +1,7 @@
1
- import { ExcalidrawElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, ExcalidrawFreeDrawElement, ExcalidrawFrameLikeElement, NonDeletedSceneElementsMap } from "../element/types";
1
+ import type { ExcalidrawElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, ExcalidrawFreeDrawElement, ExcalidrawFrameLikeElement, NonDeletedSceneElementsMap } from "../element/types";
2
2
  import type { RoughCanvas } from "roughjs/bin/canvas";
3
- import { StaticCanvasRenderConfig, RenderableElementsMap } from "../scene/types";
4
- import { AppState, StaticCanvasAppState, InteractiveCanvasAppState, ElementsPendingErasure } from "../types";
3
+ import type { StaticCanvasRenderConfig, RenderableElementsMap } from "../scene/types";
4
+ import type { AppState, StaticCanvasAppState, InteractiveCanvasAppState, ElementsPendingErasure } from "../types";
5
5
  export declare const IMAGE_INVERT_FILTER = "invert(100%) hue-rotate(180deg) saturate(1.25)";
6
6
  export declare const getRenderOpacity: (element: ExcalidrawElement, containingFrame: ExcalidrawFrameLikeElement | null, elementsPendingErasure: ElementsPendingErasure) => number;
7
7
  export interface ExcalidrawElementWithCanvas {
@@ -4,7 +4,7 @@ import { distance, getFontString, isRTL } from "../utils";
4
4
  import { getCornerRadius, isRightAngle } from "../math";
5
5
  import rough from "roughjs/bin/rough";
6
6
  import { getDefaultAppState } from "../appState";
7
- import { BOUND_TEXT_PADDING, ELEMENT_READY_TO_ERASE_OPACITY, FRAME_STYLE, MIME_TYPES, } from "../constants";
7
+ import { BOUND_TEXT_PADDING, ELEMENT_READY_TO_ERASE_OPACITY, FRAME_STYLE, MIME_TYPES, THEME, } from "../constants";
8
8
  import { getStroke } from "perfect-freehand";
9
9
  import { getBoundTextElement, getContainerCoords, getContainerElement, getLineHeightInPx, getBoundTextMaxHeight, getBoundTextMaxWidth, getVerticalOffset, } from "../element/textElement";
10
10
  import { LinearElementEditor } from "../element/linearElementEditor";
@@ -19,7 +19,7 @@ const defaultAppState = getDefaultAppState();
19
19
  const isPendingImageElement = (element, renderConfig) => isInitializedImageElement(element) &&
20
20
  !renderConfig.imageCache.has(element.fileId);
21
21
  const shouldResetImageFilter = (element, renderConfig, appState) => {
22
- return (appState.theme === "dark" &&
22
+ return (appState.theme === THEME.DARK &&
23
23
  isInitializedImageElement(element) &&
24
24
  !isPendingImageElement(element, renderConfig) &&
25
25
  renderConfig.imageCache.get(element.fileId)?.mimeType !== MIME_TYPES.svg);
@@ -119,7 +119,7 @@ const IMAGE_PLACEHOLDER_IMG = document.createElement("img");
119
119
  IMAGE_PLACEHOLDER_IMG.src = `data:${MIME_TYPES.svg},${encodeURIComponent(`<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="image" class="svg-inline--fa fa-image fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#888" d="M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"></path></svg>`)}`;
120
120
  const IMAGE_ERROR_PLACEHOLDER_IMG = document.createElement("img");
121
121
  IMAGE_ERROR_PLACEHOLDER_IMG.src = `data:${MIME_TYPES.svg},${encodeURIComponent(`<svg viewBox="0 0 668 668" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48ZM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56ZM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48Z" style="fill:#888;fill-rule:nonzero" transform="matrix(.81709 0 0 .81709 124.825 145.825)"/><path d="M256 8C119.034 8 8 119.033 8 256c0 136.967 111.034 248 248 248s248-111.034 248-248S392.967 8 256 8Zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676ZM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676Z" style="fill:#888;fill-rule:nonzero" transform="matrix(.30366 0 0 .30366 506.822 60.065)"/></svg>`)}`;
122
- const drawImagePlaceholder = (element, context, zoomValue) => {
122
+ const drawImagePlaceholder = (element, context) => {
123
123
  context.fillStyle = "#E7E7E7";
124
124
  context.fillRect(0, 0, element.width, element.height);
125
125
  const imageMinWidthOrHeight = Math.min(element.width, element.height);
@@ -176,7 +176,7 @@ const drawElementOnCanvas = (element, rc, context, renderConfig, appState) => {
176
176
  context.drawImage(img, 0 /* hardcoded for the selection box*/, 0, element.width, element.height);
177
177
  }
178
178
  else {
179
- drawImagePlaceholder(element, context, appState.zoom.value);
179
+ drawImagePlaceholder(element, context);
180
180
  }
181
181
  break;
182
182
  }
@@ -352,7 +352,7 @@ export const renderElement = (element, elementsMap, allElementsMap, rc, context,
352
352
  // TODO change later to only affect AI frames
353
353
  if (isMagicFrameElement(element)) {
354
354
  context.strokeStyle =
355
- appState.theme === "light" ? "#7affd7" : "#1d8264";
355
+ appState.theme === THEME.LIGHT ? "#7affd7" : "#1d8264";
356
356
  }
357
357
  if (FRAME_STYLE.radius && context.roundRect) {
358
358
  context.beginPath();
@@ -1,2 +1,2 @@
1
- import { InteractiveCanvasAppState } from "../types";
1
+ import type { InteractiveCanvasAppState } from "../types";
2
2
  export declare const renderSnaps: (context: CanvasRenderingContext2D, appState: InteractiveCanvasAppState) => void;