@excalidraw/excalidraw 0.17.1-1d71f84 → 0.17.1-2f9526d

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 (443) 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-MXVETLVM.js → chunk-JYIQCNWV.js} +2 -2
  9. package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js → chunk-LVIQQW6F.js} +2 -2
  10. package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js → chunk-PXLO3FOU.js} +2 -2
  11. package/dist/browser/dev/excalidraw-assets-dev/{chunk-AK7SWNLN.js → chunk-Q6A4M3MN.js} +9 -5
  12. package/dist/browser/dev/excalidraw-assets-dev/chunk-Q6A4M3MN.js.map +7 -0
  13. package/dist/browser/dev/excalidraw-assets-dev/{chunk-RWZVJAQU.js → chunk-Q6NFAEKN.js} +4597 -2668
  14. package/dist/browser/dev/excalidraw-assets-dev/chunk-Q6NFAEKN.js.map +7 -0
  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-6QVAH5JA.js} +37 -15
  23. package/dist/browser/dev/excalidraw-assets-dev/dist-6QVAH5JA.js.map +7 -0
  24. package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js → en-Y27YPU72.js} +2 -2
  25. package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js → erDiagram-47591fe2-XGAD7EEP.js} +4 -4
  26. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js → flowDiagram-5540d9b9-B6EOVNNO.js} +9 -9
  27. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js → flowDiagram-v2-3b53844e-NUG24FJH.js} +9 -9
  28. package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js → flowchart-elk-definition-5fe447d6-25Y7PCBL.js} +5 -5
  29. package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js → ganttDiagram-9a3bba1f-GNL6ZDTC.js} +2 -2
  30. package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js → gitGraphDiagram-96e6b4ee-HNW52NVO.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/{image-EDKQZH7Z.js → image-Y5X7K6KW.js} +2 -2
  34. package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js → infoDiagram-bcd20f53-FWEUVFLT.js} +2 -2
  35. package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js → journeyDiagram-4fe6b3dc-RZIUI7UG.js} +3 -3
  36. package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js → mindmap-definition-f354de21-GBVN45GU.js} +3 -3
  37. package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js → pieDiagram-79897490-ECENNII6.js} +2 -2
  38. package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js → quadrantDiagram-62f64e94-ZMEOFVNL.js} +2 -2
  39. package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js → requirementDiagram-05bf5f74-FHZSFHCR.js} +4 -4
  40. package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js → sankeyDiagram-97764748-VDKIKTA6.js} +2 -2
  41. package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js → sequenceDiagram-acc0e65c-6JUSPVKX.js} +3 -3
  42. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js → stateDiagram-0ff1cf1a-L3AKWENF.js} +5 -5
  43. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js → stateDiagram-v2-9a9d610d-NU3GGMCH.js} +8 -8
  44. package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js → timeline-definition-fea2a41d-JGP7XCHW.js} +2 -2
  45. package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js → xychartDiagram-ab372869-HLFHHF2I.js} +3 -3
  46. package/dist/browser/dev/index.css +72 -28
  47. package/dist/browser/dev/index.css.map +3 -3
  48. package/dist/browser/dev/index.js +2211 -1904
  49. package/dist/browser/dev/index.js.map +4 -4
  50. package/dist/browser/prod/excalidraw-assets/{blockDiagram-91b80b7a-ONPS22AM.js → blockDiagram-91b80b7a-FVCRVGN5.js} +1 -1
  51. package/dist/browser/prod/excalidraw-assets/{c4Diagram-b2a90758-XMIQY7ZT.js → c4Diagram-b2a90758-56CXO7GA.js} +1 -1
  52. package/dist/browser/prod/excalidraw-assets/{chunk-GCHQBOKV.js → chunk-635MQ3CK.js} +1 -1
  53. package/dist/browser/prod/excalidraw-assets/{chunk-P5M3G2RP.js → chunk-AIKXYJX3.js} +1 -1
  54. package/dist/browser/prod/excalidraw-assets/{chunk-E2YLWFZX.js → chunk-CR7VMNWC.js} +1 -1
  55. package/dist/browser/prod/excalidraw-assets/{chunk-WEYK4A2L.js → chunk-FFF2CSVG.js} +1 -1
  56. package/dist/browser/prod/excalidraw-assets/{chunk-R3HAIP6R.js → chunk-G4WDCSPE.js} +1 -1
  57. package/dist/browser/prod/excalidraw-assets/{chunk-HFOXJM22.js → chunk-HKZSHFLX.js} +1 -1
  58. package/dist/browser/prod/excalidraw-assets/{chunk-XIMFFJTE.js → chunk-IKCDYWMW.js} +1 -1
  59. package/dist/browser/prod/excalidraw-assets/{chunk-CTYINSWT.js → chunk-IZMZ6RPD.js} +2 -2
  60. package/dist/browser/prod/excalidraw-assets/{chunk-AHLLBBVJ.js → chunk-L5DS24G6.js} +1 -1
  61. package/dist/browser/prod/excalidraw-assets/chunk-MDMKPHYD.js +55 -0
  62. package/dist/browser/prod/excalidraw-assets/{chunk-CQJF3C6G.js → chunk-MUNOKHUD.js} +1 -1
  63. package/dist/browser/prod/excalidraw-assets/{chunk-NI6SYCUG.js → chunk-QOQYOOQ4.js} +1 -1
  64. package/dist/browser/prod/excalidraw-assets/{chunk-I2PZFXTK.js → chunk-ZTIWFPBM.js} +21 -21
  65. package/dist/browser/prod/excalidraw-assets/{classDiagram-30eddba6-IEJXXCVX.js → classDiagram-30eddba6-BCUTAUMD.js} +1 -1
  66. package/dist/browser/prod/excalidraw-assets/{classDiagram-v2-f2df5561-7LZDSWOS.js → classDiagram-v2-f2df5561-6SOXSGQ2.js} +1 -1
  67. package/dist/browser/prod/excalidraw-assets/dist-567JAXHK.js +7 -0
  68. package/dist/browser/prod/excalidraw-assets/{en-LROPV2RN.js → en-GSUSWMSH.js} +1 -1
  69. package/dist/browser/prod/excalidraw-assets/{erDiagram-47591fe2-E5V666CF.js → erDiagram-47591fe2-RE6HB7RM.js} +1 -1
  70. package/dist/browser/prod/excalidraw-assets/{flowDiagram-5540d9b9-GMBRCYVF.js → flowDiagram-5540d9b9-ZNJZBERW.js} +1 -1
  71. package/dist/browser/prod/excalidraw-assets/{flowDiagram-v2-3b53844e-Z4HUWP6B.js → flowDiagram-v2-3b53844e-LY44JLQJ.js} +1 -1
  72. package/dist/browser/prod/excalidraw-assets/{flowchart-elk-definition-5fe447d6-5ZCYTX5N.js → flowchart-elk-definition-5fe447d6-TMTJ6Z7O.js} +1 -1
  73. package/dist/browser/prod/excalidraw-assets/{ganttDiagram-9a3bba1f-WM32OMT5.js → ganttDiagram-9a3bba1f-5O6EA6LX.js} +1 -1
  74. package/dist/browser/prod/excalidraw-assets/{gitGraphDiagram-96e6b4ee-CAKZ2U6E.js → gitGraphDiagram-96e6b4ee-UHYNM5DI.js} +1 -1
  75. package/dist/browser/prod/excalidraw-assets/image-7MVXYJUE.js +1 -0
  76. package/dist/browser/prod/excalidraw-assets/{infoDiagram-bcd20f53-MUIKXGC4.js → infoDiagram-bcd20f53-BP77NQEH.js} +1 -1
  77. package/dist/browser/prod/excalidraw-assets/{journeyDiagram-4fe6b3dc-NYRV4HK2.js → journeyDiagram-4fe6b3dc-XMGKCMES.js} +1 -1
  78. package/dist/browser/prod/excalidraw-assets/{mindmap-definition-f354de21-MY55DRSM.js → mindmap-definition-f354de21-ZQRRBRWF.js} +1 -1
  79. package/dist/browser/prod/excalidraw-assets/{pieDiagram-79897490-47L6J6L2.js → pieDiagram-79897490-IGXEC2KX.js} +1 -1
  80. package/dist/browser/prod/excalidraw-assets/{quadrantDiagram-62f64e94-DF5C2GDT.js → quadrantDiagram-62f64e94-WTHHDYJL.js} +1 -1
  81. package/dist/browser/prod/excalidraw-assets/{requirementDiagram-05bf5f74-C4IMUBDN.js → requirementDiagram-05bf5f74-MV4OFRVW.js} +1 -1
  82. package/dist/browser/prod/excalidraw-assets/{sankeyDiagram-97764748-YHW7EUST.js → sankeyDiagram-97764748-ZGYUHEJT.js} +1 -1
  83. package/dist/browser/prod/excalidraw-assets/{sequenceDiagram-acc0e65c-H3XEHT32.js → sequenceDiagram-acc0e65c-IBSENK6W.js} +1 -1
  84. package/dist/browser/prod/excalidraw-assets/{stateDiagram-0ff1cf1a-Z5WB6Q3P.js → stateDiagram-0ff1cf1a-DB73XNZH.js} +1 -1
  85. package/dist/browser/prod/excalidraw-assets/{stateDiagram-v2-9a9d610d-T7OZETQC.js → stateDiagram-v2-9a9d610d-2OOBUPNR.js} +1 -1
  86. package/dist/browser/prod/excalidraw-assets/{timeline-definition-fea2a41d-VVC22BWF.js → timeline-definition-fea2a41d-P3NQQVDU.js} +1 -1
  87. package/dist/browser/prod/excalidraw-assets/{xychartDiagram-ab372869-JAXODQF7.js → xychartDiagram-ab372869-HI3XLK3Y.js} +1 -1
  88. package/dist/browser/prod/index.css +1 -1
  89. package/dist/browser/prod/index.js +24 -24
  90. package/dist/dev/{en-II4GK66F.json → en-OIPCBIOA.json} +8 -4
  91. package/dist/dev/index.css +72 -28
  92. package/dist/dev/index.css.map +3 -3
  93. package/dist/dev/index.js +5626 -3465
  94. package/dist/dev/index.js.map +4 -4
  95. package/dist/excalidraw/actions/actionAddToLibrary.d.ts +4 -4
  96. package/dist/excalidraw/actions/actionAddToLibrary.js +4 -3
  97. package/dist/excalidraw/actions/actionAlign.d.ts +22 -22
  98. package/dist/excalidraw/actions/actionAlign.js +7 -6
  99. package/dist/excalidraw/actions/actionBoundText.d.ts +10 -10
  100. package/dist/excalidraw/actions/actionBoundText.js +11 -5
  101. package/dist/excalidraw/actions/actionCanvas.d.ts +52 -52
  102. package/dist/excalidraw/actions/actionCanvas.js +19 -14
  103. package/dist/excalidraw/actions/actionClipboard.d.ts +24 -24
  104. package/dist/excalidraw/actions/actionClipboard.js +14 -13
  105. package/dist/excalidraw/actions/actionDeleteSelected.d.ts +10 -10
  106. package/dist/excalidraw/actions/actionDeleteSelected.js +6 -3
  107. package/dist/excalidraw/actions/actionDistribute.d.ts +10 -10
  108. package/dist/excalidraw/actions/actionDistribute.js +3 -2
  109. package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +7 -8
  110. package/dist/excalidraw/actions/actionDuplicateSelection.js +7 -3
  111. package/dist/excalidraw/actions/actionElementLock.d.ts +9 -9
  112. package/dist/excalidraw/actions/actionElementLock.js +3 -2
  113. package/dist/excalidraw/actions/actionExport.d.ts +33 -33
  114. package/dist/excalidraw/actions/actionExport.js +15 -11
  115. package/dist/excalidraw/actions/actionFinalize.d.ts +9 -9
  116. package/dist/excalidraw/actions/actionFinalize.js +9 -5
  117. package/dist/excalidraw/actions/actionFlip.d.ts +10 -10
  118. package/dist/excalidraw/actions/actionFlip.js +12 -12
  119. package/dist/excalidraw/actions/actionFrame.d.ts +16 -171
  120. package/dist/excalidraw/actions/actionFrame.js +7 -6
  121. package/dist/excalidraw/actions/actionGroup.d.ts +12 -322
  122. package/dist/excalidraw/actions/actionGroup.js +9 -11
  123. package/dist/excalidraw/actions/actionHistory.d.ts +4 -3
  124. package/dist/excalidraw/actions/actionHistory.js +27 -28
  125. package/dist/excalidraw/actions/actionLinearEditor.d.ts +6 -4
  126. package/dist/excalidraw/actions/actionLinearEditor.js +21 -5
  127. package/dist/excalidraw/actions/actionLink.d.ts +5 -5
  128. package/dist/excalidraw/actions/actionLink.js +2 -1
  129. package/dist/excalidraw/actions/actionMenu.d.ts +8 -8
  130. package/dist/excalidraw/actions/actionMenu.js +4 -3
  131. package/dist/excalidraw/actions/actionNavigate.d.ts +4 -4
  132. package/dist/excalidraw/actions/actionNavigate.js +3 -2
  133. package/dist/excalidraw/actions/actionProperties.d.ts +34 -34
  134. package/dist/excalidraw/actions/actionProperties.js +19 -14
  135. package/dist/excalidraw/actions/actionSelectAll.d.ts +5 -5
  136. package/dist/excalidraw/actions/actionSelectAll.js +2 -1
  137. package/dist/excalidraw/actions/actionStyles.d.ts +9 -12
  138. package/dist/excalidraw/actions/actionStyles.js +4 -3
  139. package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
  140. package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
  141. package/dist/excalidraw/actions/actionToggleGridMode.d.ts +7 -5
  142. package/dist/excalidraw/actions/actionToggleGridMode.js +6 -2
  143. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +4 -4
  144. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.js +2 -1
  145. package/dist/excalidraw/actions/actionToggleStats.d.ts +4 -4
  146. package/dist/excalidraw/actions/actionToggleStats.js +2 -1
  147. package/dist/excalidraw/actions/actionToggleViewMode.d.ts +4 -4
  148. package/dist/excalidraw/actions/actionToggleViewMode.js +2 -1
  149. package/dist/excalidraw/actions/actionToggleZenMode.d.ts +4 -4
  150. package/dist/excalidraw/actions/actionToggleZenMode.js +2 -1
  151. package/dist/excalidraw/actions/actionZindex.d.ts +23 -19
  152. package/dist/excalidraw/actions/actionZindex.js +9 -4
  153. package/dist/excalidraw/actions/manager.d.ts +5 -5
  154. package/dist/excalidraw/actions/register.d.ts +1 -1
  155. package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
  156. package/dist/excalidraw/actions/shortcuts.js +1 -1
  157. package/dist/excalidraw/actions/types.d.ts +8 -8
  158. package/dist/excalidraw/align.d.ts +1 -1
  159. package/dist/excalidraw/analytics.js +1 -1
  160. package/dist/excalidraw/animated-trail.d.ts +2 -2
  161. package/dist/excalidraw/appState.d.ts +5 -5
  162. package/dist/excalidraw/change.d.ts +191 -0
  163. package/dist/excalidraw/change.js +894 -0
  164. package/dist/excalidraw/charts.d.ts +1 -1
  165. package/dist/excalidraw/clients.d.ts +2 -2
  166. package/dist/excalidraw/clients.js +1 -1
  167. package/dist/excalidraw/clipboard.d.ts +3 -3
  168. package/dist/excalidraw/colors.d.ts +1 -1
  169. package/dist/excalidraw/components/Actions.d.ts +3 -3
  170. package/dist/excalidraw/components/Actions.js +9 -6
  171. package/dist/excalidraw/components/App.d.ts +28 -14
  172. package/dist/excalidraw/components/App.js +407 -187
  173. package/dist/excalidraw/components/ButtonIconSelect.js +1 -1
  174. package/dist/excalidraw/components/CheckboxItem.js +1 -1
  175. package/dist/excalidraw/components/ColorPicker/ColorInput.d.ts +1 -1
  176. package/dist/excalidraw/components/ColorPicker/ColorInput.js +1 -1
  177. package/dist/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
  178. package/dist/excalidraw/components/ColorPicker/ColorPicker.js +1 -1
  179. package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
  180. package/dist/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
  181. package/dist/excalidraw/components/ColorPicker/PickerHeading.d.ts +1 -1
  182. package/dist/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
  183. package/dist/excalidraw/components/ColorPicker/TopPicks.d.ts +1 -1
  184. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +2 -2
  185. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
  186. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
  187. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.js +1 -1
  188. package/dist/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
  189. package/dist/excalidraw/components/CommandPalette/CommandPalette.js +30 -15
  190. package/dist/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -1
  191. package/dist/excalidraw/components/CommandPalette/types.d.ts +3 -3
  192. package/dist/excalidraw/components/ConfirmDialog.d.ts +1 -1
  193. package/dist/excalidraw/components/ContextMenu.d.ts +2 -2
  194. package/dist/excalidraw/components/ContextMenu.js +2 -2
  195. package/dist/excalidraw/components/DarkModeToggle.d.ts +1 -1
  196. package/dist/excalidraw/components/DarkModeToggle.js +3 -1
  197. package/dist/excalidraw/components/DefaultSidebar.d.ts +2 -2
  198. package/dist/excalidraw/components/Dialog.js +1 -1
  199. package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
  200. package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
  201. package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
  202. package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
  203. package/dist/excalidraw/components/HelpDialog.js +8 -6
  204. package/dist/excalidraw/components/HintViewer.d.ts +1 -1
  205. package/dist/excalidraw/components/IconPicker.js +2 -2
  206. package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
  207. package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
  208. package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
  209. package/dist/excalidraw/components/LayerUI.d.ts +4 -4
  210. package/dist/excalidraw/components/LayerUI.js +2 -2
  211. package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
  212. package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
  213. package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  214. package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
  215. package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
  216. package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
  217. package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
  218. package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
  219. package/dist/excalidraw/components/MagicSettings.js +2 -2
  220. package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
  221. package/dist/excalidraw/components/MobileMenu.js +1 -1
  222. package/dist/excalidraw/components/Modal.d.ts +1 -1
  223. package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  224. package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
  225. package/dist/excalidraw/components/PasteChartDialog.js +1 -1
  226. package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
  227. package/dist/excalidraw/components/RadioGroup.d.ts +2 -1
  228. package/dist/excalidraw/components/RadioGroup.js +1 -1
  229. package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
  230. package/dist/excalidraw/components/Sidebar/Sidebar.d.ts +2 -2
  231. package/dist/excalidraw/components/Sidebar/Sidebar.js +1 -1
  232. package/dist/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -1
  233. package/dist/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -1
  234. package/dist/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
  235. package/dist/excalidraw/components/Sidebar/common.d.ts +1 -1
  236. package/dist/excalidraw/components/Stack.d.ts +2 -2
  237. package/dist/excalidraw/components/Stats.d.ts +2 -2
  238. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
  239. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.js +6 -2
  240. package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
  241. package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
  242. package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
  243. package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
  244. package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
  245. package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
  246. package/dist/excalidraw/components/TTDDialog/common.d.ts +4 -4
  247. package/dist/excalidraw/components/TextField.d.ts +1 -1
  248. package/dist/excalidraw/components/Toast.d.ts +1 -1
  249. package/dist/excalidraw/components/ToolButton.d.ts +4 -2
  250. package/dist/excalidraw/components/ToolButton.js +1 -1
  251. package/dist/excalidraw/components/Trans.d.ts +1 -1
  252. package/dist/excalidraw/components/UserList.d.ts +1 -1
  253. package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +3 -2
  254. package/dist/excalidraw/components/canvases/InteractiveCanvas.js +3 -2
  255. package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
  256. package/dist/excalidraw/components/canvases/StaticCanvas.js +2 -2
  257. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +2 -2
  258. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +18 -0
  259. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.js +9 -0
  260. package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
  261. package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
  262. package/dist/excalidraw/components/hyperlink/Hyperlink.js +3 -3
  263. package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  264. package/dist/excalidraw/components/hyperlink/helpers.js +2 -3
  265. package/dist/excalidraw/components/icons.d.ts +6 -1
  266. package/dist/excalidraw/components/icons.js +23 -5
  267. package/dist/excalidraw/components/main-menu/DefaultItems.d.ts +12 -2
  268. package/dist/excalidraw/components/main-menu/DefaultItems.js +38 -7
  269. package/dist/excalidraw/constants.d.ts +5 -5
  270. package/dist/excalidraw/constants.js +6 -3
  271. package/dist/excalidraw/context/ui-appState.d.ts +1 -1
  272. package/dist/excalidraw/cursor.d.ts +1 -1
  273. package/dist/excalidraw/data/EditorLocalStorage.d.ts +2 -2
  274. package/dist/excalidraw/data/blob.d.ts +5 -5
  275. package/dist/excalidraw/data/filesystem.d.ts +2 -1
  276. package/dist/excalidraw/data/index.d.ts +4 -4
  277. package/dist/excalidraw/data/json.d.ts +3 -3
  278. package/dist/excalidraw/data/library.d.ts +3 -3
  279. package/dist/excalidraw/data/magic.d.ts +3 -3
  280. package/dist/excalidraw/data/magic.js +2 -1
  281. package/dist/excalidraw/data/reconcile.d.ts +6 -0
  282. package/dist/excalidraw/data/reconcile.js +49 -0
  283. package/dist/excalidraw/data/resave.d.ts +2 -2
  284. package/dist/excalidraw/data/restore.d.ts +5 -5
  285. package/dist/excalidraw/data/restore.js +7 -7
  286. package/dist/excalidraw/data/transform.d.ts +4 -4
  287. package/dist/excalidraw/data/transform.js +12 -3
  288. package/dist/excalidraw/data/types.d.ts +3 -3
  289. package/dist/excalidraw/data/url.d.ts +1 -0
  290. package/dist/excalidraw/data/url.js +4 -1
  291. package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
  292. package/dist/excalidraw/element/binding.d.ts +50 -9
  293. package/dist/excalidraw/element/binding.js +712 -155
  294. package/dist/excalidraw/element/bounds.d.ts +3 -4
  295. package/dist/excalidraw/element/bounds.js +0 -3
  296. package/dist/excalidraw/element/collision.d.ts +14 -19
  297. package/dist/excalidraw/element/collision.js +36 -713
  298. package/dist/excalidraw/element/containerCache.d.ts +1 -1
  299. package/dist/excalidraw/element/dragElements.d.ts +3 -3
  300. package/dist/excalidraw/element/embeddable.d.ts +9 -6
  301. package/dist/excalidraw/element/embeddable.js +98 -62
  302. package/dist/excalidraw/element/image.d.ts +2 -2
  303. package/dist/excalidraw/element/index.d.ts +2 -3
  304. package/dist/excalidraw/element/index.js +1 -2
  305. package/dist/excalidraw/element/linearElementEditor.d.ts +12 -12
  306. package/dist/excalidraw/element/linearElementEditor.js +7 -5
  307. package/dist/excalidraw/element/mutateElement.d.ts +4 -5
  308. package/dist/excalidraw/element/mutateElement.js +5 -3
  309. package/dist/excalidraw/element/newElement.d.ts +4 -9
  310. package/dist/excalidraw/element/newElement.js +17 -14
  311. package/dist/excalidraw/element/resizeElements.d.ts +4 -4
  312. package/dist/excalidraw/element/resizeElements.js +170 -97
  313. package/dist/excalidraw/element/resizeTest.d.ts +7 -7
  314. package/dist/excalidraw/element/resizeTest.js +53 -8
  315. package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
  316. package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
  317. package/dist/excalidraw/element/sizeHelpers.js +3 -0
  318. package/dist/excalidraw/element/sortElements.d.ts +1 -1
  319. package/dist/excalidraw/element/textElement.d.ts +5 -6
  320. package/dist/excalidraw/element/textElement.js +13 -37
  321. package/dist/excalidraw/element/textWysiwyg.d.ts +10 -5
  322. package/dist/excalidraw/element/textWysiwyg.js +6 -8
  323. package/dist/excalidraw/element/transformHandles.d.ts +24 -6
  324. package/dist/excalidraw/element/transformHandles.js +22 -11
  325. package/dist/excalidraw/element/typeChecks.d.ts +4 -4
  326. package/dist/excalidraw/element/types.d.ts +33 -10
  327. package/dist/excalidraw/emitter.d.ts +1 -1
  328. package/dist/excalidraw/errors.d.ts +3 -0
  329. package/dist/excalidraw/errors.js +3 -0
  330. package/dist/excalidraw/fractionalIndex.d.ts +40 -0
  331. package/dist/excalidraw/fractionalIndex.js +241 -0
  332. package/dist/excalidraw/frame.d.ts +4 -4
  333. package/dist/excalidraw/gatransforms.d.ts +1 -1
  334. package/dist/excalidraw/gesture.d.ts +1 -1
  335. package/dist/excalidraw/groups.d.ts +5 -3
  336. package/dist/excalidraw/groups.js +17 -0
  337. package/dist/excalidraw/history.d.ts +35 -47
  338. package/dist/excalidraw/history.js +100 -167
  339. package/dist/excalidraw/hooks/useCreatePortalContainer.js +2 -1
  340. package/dist/excalidraw/hooks/useEmitter.d.ts +2 -0
  341. package/dist/excalidraw/hooks/useEmitter.js +13 -0
  342. package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  343. package/dist/excalidraw/i18n.d.ts +1 -1
  344. package/dist/excalidraw/index.d.ts +3 -1
  345. package/dist/excalidraw/index.js +2 -0
  346. package/dist/excalidraw/jotai.d.ts +1 -1
  347. package/dist/excalidraw/laser-trails.d.ts +3 -2
  348. package/dist/excalidraw/locales/en.json +8 -4
  349. package/dist/excalidraw/math.d.ts +2 -2
  350. package/dist/excalidraw/points.d.ts +1 -1
  351. package/dist/excalidraw/queue.d.ts +1 -1
  352. package/dist/excalidraw/renderer/helpers.d.ts +2 -2
  353. package/dist/excalidraw/renderer/helpers.js +2 -2
  354. package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
  355. package/dist/excalidraw/renderer/interactiveScene.js +8 -7
  356. package/dist/excalidraw/renderer/renderElement.d.ts +3 -3
  357. package/dist/excalidraw/renderer/renderElement.js +5 -5
  358. package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
  359. package/dist/excalidraw/renderer/renderSnaps.js +2 -1
  360. package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
  361. package/dist/excalidraw/renderer/staticScene.js +14 -3
  362. package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
  363. package/dist/excalidraw/renderer/staticSvgScene.js +10 -0
  364. package/dist/excalidraw/scene/Fonts.d.ts +2 -4
  365. package/dist/excalidraw/scene/Fonts.js +6 -12
  366. package/dist/excalidraw/scene/Renderer.d.ts +4 -4
  367. package/dist/excalidraw/scene/Renderer.js +2 -3
  368. package/dist/excalidraw/scene/Scene.d.ts +19 -12
  369. package/dist/excalidraw/scene/Scene.js +44 -23
  370. package/dist/excalidraw/scene/Shape.d.ts +1 -1
  371. package/dist/excalidraw/scene/ShapeCache.d.ts +4 -4
  372. package/dist/excalidraw/scene/comparisons.d.ts +2 -2
  373. package/dist/excalidraw/scene/export.d.ts +2 -2
  374. package/dist/excalidraw/scene/export.js +6 -5
  375. package/dist/excalidraw/scene/scroll.d.ts +2 -2
  376. package/dist/excalidraw/scene/scrollbars.d.ts +3 -3
  377. package/dist/excalidraw/scene/selection.d.ts +2 -2
  378. package/dist/excalidraw/scene/types.d.ts +5 -4
  379. package/dist/excalidraw/scene/zoom.d.ts +1 -1
  380. package/dist/excalidraw/snapping.d.ts +4 -4
  381. package/dist/excalidraw/store.d.ts +99 -0
  382. package/dist/excalidraw/store.js +269 -0
  383. package/dist/excalidraw/types.d.ts +33 -19
  384. package/dist/excalidraw/utils.d.ts +11 -4
  385. package/dist/excalidraw/utils.js +8 -0
  386. package/dist/excalidraw/zindex.d.ts +4 -4
  387. package/dist/excalidraw/zindex.js +9 -13
  388. package/dist/prod/{en-II4GK66F.json → en-OIPCBIOA.json} +8 -4
  389. package/dist/prod/index.css +1 -1
  390. package/dist/prod/index.js +44 -44
  391. package/dist/utils/bbox.d.ts +2 -2
  392. package/dist/utils/collision.d.ts +4 -0
  393. package/dist/utils/collision.js +48 -0
  394. package/dist/utils/export.d.ts +2 -2
  395. package/dist/utils/geometry/geometry.d.ts +71 -0
  396. package/dist/utils/geometry/geometry.js +674 -0
  397. package/dist/utils/geometry/shape.d.ts +56 -0
  398. package/dist/utils/geometry/shape.js +168 -0
  399. package/dist/utils/withinBounds.d.ts +1 -1
  400. package/history.ts +163 -218
  401. package/package.json +3 -2
  402. package/dist/browser/dev/excalidraw-assets-dev/chunk-AK7SWNLN.js.map +0 -7
  403. package/dist/browser/dev/excalidraw-assets-dev/chunk-RWZVJAQU.js.map +0 -7
  404. package/dist/browser/dev/excalidraw-assets-dev/chunk-Z3PH3V2B.js.map +0 -7
  405. package/dist/browser/dev/excalidraw-assets-dev/dist-Z46EOVOL.js.map +0 -7
  406. package/dist/browser/dev/excalidraw-assets-dev/image-OFRRV5MB.css.map +0 -7
  407. package/dist/browser/prod/excalidraw-assets/chunk-LL4GORAM.js +0 -55
  408. package/dist/browser/prod/excalidraw-assets/dist-PIPZXALV.js +0 -6
  409. package/dist/browser/prod/excalidraw-assets/image-EFCJDJH3.js +0 -1
  410. /package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-ACFH36JV.js.map → blockDiagram-91b80b7a-H47FTXHA.js.map} +0 -0
  411. /package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-QZ27YR47.js.map → c4Diagram-b2a90758-NNJK6GKC.js.map} +0 -0
  412. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-HO2HMSK7.js.map → chunk-4KQVEBHW.js.map} +0 -0
  413. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-USGV265L.js.map → chunk-53YI56GV.js.map} +0 -0
  414. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-EDFX3S7X.js.map → chunk-A2WCJI4I.js.map} +0 -0
  415. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-IX4V72YG.js.map → chunk-EFLPX7NE.js.map} +0 -0
  416. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-MXVETLVM.js.map → chunk-JYIQCNWV.js.map} +0 -0
  417. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js.map → chunk-LVIQQW6F.js.map} +0 -0
  418. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js.map → chunk-PXLO3FOU.js.map} +0 -0
  419. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-7DACDEY3.js.map → chunk-TO2AW5PW.js.map} +0 -0
  420. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-NJ77ZFNJ.js.map → chunk-VURILHLY.js.map} +0 -0
  421. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-2T2GU7NF.js.map → chunk-ZAYGSUHF.js.map} +0 -0
  422. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-QSLMH4JW.js.map → classDiagram-30eddba6-CUYIJICN.js.map} +0 -0
  423. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-DY4DYQ5P.js.map → classDiagram-v2-f2df5561-K6WW6K73.js.map} +0 -0
  424. /package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js.map → en-Y27YPU72.js.map} +0 -0
  425. /package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js.map → erDiagram-47591fe2-XGAD7EEP.js.map} +0 -0
  426. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js.map → flowDiagram-5540d9b9-B6EOVNNO.js.map} +0 -0
  427. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js.map → flowDiagram-v2-3b53844e-NUG24FJH.js.map} +0 -0
  428. /package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js.map → flowchart-elk-definition-5fe447d6-25Y7PCBL.js.map} +0 -0
  429. /package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js.map → ganttDiagram-9a3bba1f-GNL6ZDTC.js.map} +0 -0
  430. /package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js.map → gitGraphDiagram-96e6b4ee-HNW52NVO.js.map} +0 -0
  431. /package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js.map → image-Y5X7K6KW.js.map} +0 -0
  432. /package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js.map → infoDiagram-bcd20f53-FWEUVFLT.js.map} +0 -0
  433. /package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js.map → journeyDiagram-4fe6b3dc-RZIUI7UG.js.map} +0 -0
  434. /package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js.map → mindmap-definition-f354de21-GBVN45GU.js.map} +0 -0
  435. /package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js.map → pieDiagram-79897490-ECENNII6.js.map} +0 -0
  436. /package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js.map → quadrantDiagram-62f64e94-ZMEOFVNL.js.map} +0 -0
  437. /package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js.map → requirementDiagram-05bf5f74-FHZSFHCR.js.map} +0 -0
  438. /package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js.map → sankeyDiagram-97764748-VDKIKTA6.js.map} +0 -0
  439. /package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js.map → sequenceDiagram-acc0e65c-6JUSPVKX.js.map} +0 -0
  440. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js.map → stateDiagram-0ff1cf1a-L3AKWENF.js.map} +0 -0
  441. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js.map → stateDiagram-v2-9a9d610d-NU3GGMCH.js.map} +0 -0
  442. /package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js.map → timeline-definition-fea2a41d-JGP7XCHW.js.map} +0 -0
  443. /package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js.map → xychartDiagram-ab372869-HLFHHF2I.js.map} +0 -0
@@ -4,10 +4,6 @@ import { ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO, ARROW_LABEL_WIDTH_FRACTION, B
4
4
  import { isTextElement } from ".";
5
5
  import { isBoundToContainer, isArrowElement } from "./typeChecks";
6
6
  import { LinearElementEditor } from "./linearElementEditor";
7
- import { isTextBindableContainer } from "./typeChecks";
8
- import { getElementAbsoluteCoords } from ".";
9
- import { getSelectedElements } from "../scene";
10
- import { isHittingElementNotConsideringBoundingBox } from "./collision";
11
7
  import { resetOriginalContainerCache, updateOriginalContainerCache, } from "./containerCache";
12
8
  export const normalizeText = (text) => {
13
9
  return (normalizeEOL(text)
@@ -17,7 +13,7 @@ export const normalizeText = (text) => {
17
13
  const splitIntoLines = (text) => {
18
14
  return normalizeText(text).split("\n");
19
15
  };
20
- export const redrawTextBoundingBox = (textElement, container, elementsMap) => {
16
+ export const redrawTextBoundingBox = (textElement, container, elementsMap, informMutation = true) => {
21
17
  let maxWidth = undefined;
22
18
  const boundTextUpdates = {
23
19
  x: textElement.x,
@@ -25,26 +21,32 @@ export const redrawTextBoundingBox = (textElement, container, elementsMap) => {
25
21
  text: textElement.text,
26
22
  width: textElement.width,
27
23
  height: textElement.height,
24
+ angle: container?.angle ?? textElement.angle,
28
25
  };
29
26
  boundTextUpdates.text = textElement.text;
30
- if (container) {
31
- maxWidth = getBoundTextMaxWidth(container, textElement);
27
+ if (container || !textElement.autoResize) {
28
+ maxWidth = container
29
+ ? getBoundTextMaxWidth(container, textElement)
30
+ : textElement.width;
32
31
  boundTextUpdates.text = wrapText(textElement.originalText, getFontString(textElement), maxWidth);
33
32
  }
34
33
  const metrics = measureText(boundTextUpdates.text, getFontString(textElement), textElement.lineHeight);
35
- boundTextUpdates.width = metrics.width;
34
+ // Note: only update width for unwrapped text and bound texts (which always have autoResize set to true)
35
+ if (textElement.autoResize) {
36
+ boundTextUpdates.width = metrics.width;
37
+ }
36
38
  boundTextUpdates.height = metrics.height;
37
39
  if (container) {
38
40
  const maxContainerHeight = getBoundTextMaxHeight(container, textElement);
39
41
  const maxContainerWidth = getBoundTextMaxWidth(container, textElement);
40
42
  if (!isArrowElement(container) && metrics.height > maxContainerHeight) {
41
43
  const nextHeight = computeContainerDimensionForBoundText(metrics.height, container.type);
42
- mutateElement(container, { height: nextHeight });
44
+ mutateElement(container, { height: nextHeight }, informMutation);
43
45
  updateOriginalContainerCache(container.id, nextHeight);
44
46
  }
45
47
  if (metrics.width > maxContainerWidth) {
46
48
  const nextWidth = computeContainerDimensionForBoundText(metrics.width, container.type);
47
- mutateElement(container, { width: nextWidth });
49
+ mutateElement(container, { width: nextWidth }, informMutation);
48
50
  }
49
51
  const updatedTextElement = {
50
52
  ...textElement,
@@ -54,7 +56,7 @@ export const redrawTextBoundingBox = (textElement, container, elementsMap) => {
54
56
  boundTextUpdates.x = x;
55
57
  boundTextUpdates.y = y;
56
58
  }
57
- mutateElement(textElement, boundTextUpdates);
59
+ mutateElement(textElement, boundTextUpdates, informMutation);
58
60
  };
59
61
  export const bindTextToShapeAfterDuplication = (newElements, oldElements, oldIdToDuplicatedId) => {
60
62
  const newElementsMap = arrayToMap(newElements);
@@ -540,32 +542,6 @@ export const suppportsHorizontalAlign = (selectedElements, elementsMap) => {
540
542
  return isTextElement(element);
541
543
  });
542
544
  };
543
- export const getTextBindableContainerAtPosition = (elements, appState, x, y, elementsMap) => {
544
- const selectedElements = getSelectedElements(elements, appState);
545
- if (selectedElements.length === 1) {
546
- return isTextBindableContainer(selectedElements[0], false)
547
- ? selectedElements[0]
548
- : null;
549
- }
550
- let hitElement = null;
551
- // We need to to hit testing from front (end of the array) to back (beginning of the array)
552
- for (let index = elements.length - 1; index >= 0; --index) {
553
- if (elements[index].isDeleted) {
554
- continue;
555
- }
556
- const [x1, y1, x2, y2] = getElementAbsoluteCoords(elements[index], elementsMap);
557
- if (isArrowElement(elements[index]) &&
558
- isHittingElementNotConsideringBoundingBox(elements[index], appState, null, [x, y], elementsMap)) {
559
- hitElement = elements[index];
560
- break;
561
- }
562
- else if (x1 < x && x < x2 && y1 < y && y < y2) {
563
- hitElement = elements[index];
564
- break;
565
- }
566
- }
567
- return isTextBindableContainer(hitElement, false) ? hitElement : null;
568
- };
569
545
  const VALID_CONTAINER_TYPES = new Set([
570
546
  "rectangle",
571
547
  "ellipse",
@@ -1,12 +1,17 @@
1
- import { ExcalidrawElement, ExcalidrawTextElement } from "./types";
2
- import App from "../components/App";
1
+ import type { ExcalidrawElement, ExcalidrawTextElement } from "./types";
2
+ import type App from "../components/App";
3
3
  export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, }: {
4
4
  id: ExcalidrawElement["id"];
5
- onChange?: ((text: string) => void) | undefined;
5
+ /**
6
+ * textWysiwyg only deals with `originalText`
7
+ *
8
+ * Note: `text`, which can be wrapped and therefore different from `originalText`,
9
+ * is derived from `originalText`
10
+ */
11
+ onChange?: ((nextOriginalText: string) => void) | undefined;
6
12
  onSubmit: (data: {
7
- text: string;
8
13
  viaKeyboard: boolean;
9
- originalText: string;
14
+ nextOriginalText: string;
10
15
  }) => void;
11
16
  getViewportCoords: (x: number, y: number) => [number, number];
12
17
  element: ExcalidrawTextElement;
@@ -53,8 +53,6 @@ export const textWysiwyg = ({ id, onChange, onSubmit, getViewportCoords, element
53
53
  let maxWidth = updatedTextElement.width;
54
54
  let maxHeight = updatedTextElement.height;
55
55
  let textElementWidth = updatedTextElement.width;
56
- // Set to element height by default since that's
57
- // what is going to be used for unbounded text
58
56
  const textElementHeight = updatedTextElement.height;
59
57
  if (container && updatedTextElement.containerId) {
60
58
  if (isArrowElement(container)) {
@@ -113,6 +111,9 @@ export const textWysiwyg = ({ id, onChange, onSubmit, getViewportCoords, element
113
111
  maxWidth = (appState.width - 8 - viewportX) / appState.zoom.value;
114
112
  textElementWidth = Math.min(textElementWidth, maxWidth);
115
113
  }
114
+ else {
115
+ textElementWidth += 0.5;
116
+ }
116
117
  // Make sure text editor height doesn't go beyond viewport
117
118
  const editorMaxHeight = (appState.height - viewportY) / appState.zoom.value;
118
119
  Object.assign(editable.style, {
@@ -149,7 +150,7 @@ export const textWysiwyg = ({ id, onChange, onSubmit, getViewportCoords, element
149
150
  editable.classList.add("excalidraw-wysiwyg");
150
151
  let whiteSpace = "pre";
151
152
  let wordBreak = "normal";
152
- if (isBoundToContainer(element)) {
153
+ if (isBoundToContainer(element) || !element.autoResize) {
153
154
  whiteSpace = "pre-wrap";
154
155
  wordBreak = "break-word";
155
156
  }
@@ -334,10 +335,8 @@ export const textWysiwyg = ({ id, onChange, onSubmit, getViewportCoords, element
334
335
  if (!updateElement) {
335
336
  return;
336
337
  }
337
- let text = editable.value;
338
338
  const container = getContainerElement(updateElement, app.scene.getNonDeletedElementsMap());
339
339
  if (container) {
340
- text = updateElement.text;
341
340
  if (editable.value.trim()) {
342
341
  const boundTextElementId = getBoundTextElementId(container);
343
342
  if (!boundTextElementId || boundTextElementId !== element.id) {
@@ -361,9 +360,8 @@ export const textWysiwyg = ({ id, onChange, onSubmit, getViewportCoords, element
361
360
  redrawTextBoundingBox(updateElement, container, app.scene.getNonDeletedElementsMap());
362
361
  }
363
362
  onSubmit({
364
- text,
365
363
  viaKeyboard: submittedViaKeyboard,
366
- originalText: editable.value,
364
+ nextOriginalText: editable.value,
367
365
  });
368
366
  };
369
367
  const cleanup = () => {
@@ -441,7 +439,7 @@ export const textWysiwyg = ({ id, onChange, onSubmit, getViewportCoords, element
441
439
  }
442
440
  };
443
441
  // handle updates of textElement properties of editing element
444
- const unbindUpdate = Scene.getScene(element).addCallback(() => {
442
+ const unbindUpdate = Scene.getScene(element).onUpdate(() => {
445
443
  updateWysiwygStyle();
446
444
  const isColorPickerActive = !!document.activeElement?.closest(".color-picker-content");
447
445
  if (!isColorPickerActive) {
@@ -1,6 +1,6 @@
1
- import { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement, PointerType } from "./types";
2
- import { Bounds } from "./bounds";
3
- import { InteractiveCanvasAppState, Zoom } from "../types";
1
+ import type { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement, PointerType } from "./types";
2
+ import type { Bounds } from "./bounds";
3
+ import type { Device, InteractiveCanvasAppState, Zoom } from "../types";
4
4
  export type TransformHandleDirection = "n" | "s" | "w" | "e" | "nw" | "ne" | "sw" | "se";
5
5
  export type TransformHandleType = TransformHandleDirection | "rotation";
6
6
  export type TransformHandle = Bounds;
@@ -8,6 +8,12 @@ export type TransformHandles = Partial<{
8
8
  [T in TransformHandleType]: TransformHandle;
9
9
  }>;
10
10
  export type MaybeTransformHandleType = TransformHandleType | false;
11
+ export declare const DEFAULT_OMIT_SIDES: {
12
+ e: boolean;
13
+ s: boolean;
14
+ n: boolean;
15
+ w: boolean;
16
+ };
11
17
  export declare const OMIT_SIDES_FOR_MULTIPLE_ELEMENTS: {
12
18
  e: boolean;
13
19
  s: boolean;
@@ -21,16 +27,28 @@ export declare const OMIT_SIDES_FOR_FRAME: {
21
27
  w: boolean;
22
28
  rotation: boolean;
23
29
  };
30
+ export declare const canResizeFromSides: (device: Device) => boolean;
31
+ export declare const getOmitSidesForDevice: (device: Device) => {};
24
32
  export declare const getTransformHandlesFromCoords: ([x1, y1, x2, y2, cx, cy]: [number, number, number, number, number, number], angle: number, zoom: Zoom, pointerType: PointerType, omitSides?: {
25
33
  s?: boolean | undefined;
26
- n?: boolean | undefined;
27
- w?: boolean | undefined;
28
34
  e?: boolean | undefined;
35
+ w?: boolean | undefined;
36
+ n?: boolean | undefined;
29
37
  nw?: boolean | undefined;
30
38
  ne?: boolean | undefined;
31
39
  sw?: boolean | undefined;
32
40
  se?: boolean | undefined;
33
41
  rotation?: boolean | undefined;
34
42
  }, margin?: number) => TransformHandles;
35
- export declare const getTransformHandles: (element: ExcalidrawElement, zoom: Zoom, elementsMap: ElementsMap, pointerType?: PointerType) => TransformHandles;
43
+ export declare const getTransformHandles: (element: ExcalidrawElement, zoom: Zoom, elementsMap: ElementsMap, pointerType?: PointerType, omitSides?: {
44
+ s?: boolean | undefined;
45
+ e?: boolean | undefined;
46
+ w?: boolean | undefined;
47
+ n?: boolean | undefined;
48
+ nw?: boolean | undefined;
49
+ ne?: boolean | undefined;
50
+ sw?: boolean | undefined;
51
+ se?: boolean | undefined;
52
+ rotation?: boolean | undefined;
53
+ }) => TransformHandles;
36
54
  export declare const shouldShowBoundingBox: (elements: readonly NonDeletedExcalidrawElement[], appState: InteractiveCanvasAppState) => boolean;
@@ -1,32 +1,31 @@
1
1
  import { getElementAbsoluteCoords } from "./bounds";
2
2
  import { rotate } from "../math";
3
- import { isTextElement } from ".";
4
3
  import { isFrameLikeElement, isLinearElement } from "./typeChecks";
5
- import { DEFAULT_TRANSFORM_HANDLE_SPACING } from "../constants";
4
+ import { DEFAULT_TRANSFORM_HANDLE_SPACING, isAndroid, isIOS, } from "../constants";
6
5
  const transformHandleSizes = {
7
6
  mouse: 8,
8
7
  pen: 16,
9
8
  touch: 28,
10
9
  };
11
10
  const ROTATION_RESIZE_HANDLE_GAP = 16;
12
- export const OMIT_SIDES_FOR_MULTIPLE_ELEMENTS = {
11
+ export const DEFAULT_OMIT_SIDES = {
13
12
  e: true,
14
13
  s: true,
15
14
  n: true,
16
15
  w: true,
17
16
  };
18
- export const OMIT_SIDES_FOR_FRAME = {
17
+ export const OMIT_SIDES_FOR_MULTIPLE_ELEMENTS = {
19
18
  e: true,
20
19
  s: true,
21
20
  n: true,
22
21
  w: true,
23
- rotation: true,
24
22
  };
25
- const OMIT_SIDES_FOR_TEXT_ELEMENT = {
23
+ export const OMIT_SIDES_FOR_FRAME = {
26
24
  e: true,
27
25
  s: true,
28
26
  n: true,
29
27
  w: true,
28
+ rotation: true,
30
29
  };
31
30
  const OMIT_SIDES_FOR_LINE_SLASH = {
32
31
  e: true,
@@ -46,6 +45,21 @@ const generateTransformHandle = (x, y, width, height, cx, cy, angle) => {
46
45
  const [xx, yy] = rotate(x + width / 2, y + height / 2, cx, cy, angle);
47
46
  return [xx - width / 2, yy - height / 2, width, height];
48
47
  };
48
+ export const canResizeFromSides = (device) => {
49
+ if (device.viewport.isMobile) {
50
+ return false;
51
+ }
52
+ if (device.isTouchScreen && (isAndroid || isIOS)) {
53
+ return false;
54
+ }
55
+ return true;
56
+ };
57
+ export const getOmitSidesForDevice = (device) => {
58
+ if (canResizeFromSides(device)) {
59
+ return DEFAULT_OMIT_SIDES;
60
+ }
61
+ return {};
62
+ };
49
63
  export const getTransformHandlesFromCoords = ([x1, y1, x2, y2, cx, cy], angle, zoom, pointerType, omitSides = {}, margin = 4) => {
50
64
  const size = transformHandleSizes[pointerType];
51
65
  const handleWidth = size / zoom.value;
@@ -98,14 +112,13 @@ export const getTransformHandlesFromCoords = ([x1, y1, x2, y2, cx, cy], angle, z
98
112
  }
99
113
  return transformHandles;
100
114
  };
101
- export const getTransformHandles = (element, zoom, elementsMap, pointerType = "mouse") => {
115
+ export const getTransformHandles = (element, zoom, elementsMap, pointerType = "mouse", omitSides = DEFAULT_OMIT_SIDES) => {
102
116
  // so that when locked element is selected (especially when you toggle lock
103
117
  // via keyboard) the locked element is visually distinct, indicating
104
118
  // you can't move/resize
105
119
  if (element.locked) {
106
120
  return {};
107
121
  }
108
- let omitSides = {};
109
122
  if (element.type === "freedraw" || isLinearElement(element)) {
110
123
  if (element.points.length === 2) {
111
124
  // only check the last point because starting point is always (0,0)
@@ -127,11 +140,9 @@ export const getTransformHandles = (element, zoom, elementsMap, pointerType = "m
127
140
  }
128
141
  }
129
142
  }
130
- else if (isTextElement(element)) {
131
- omitSides = OMIT_SIDES_FOR_TEXT_ELEMENT;
132
- }
133
143
  else if (isFrameLikeElement(element)) {
134
144
  omitSides = {
145
+ ...omitSides,
135
146
  rotation: true,
136
147
  };
137
148
  }
@@ -1,6 +1,6 @@
1
- import { ElementOrToolType } from "../types";
2
- import { MarkNonNullable } from "../utility-types";
3
- import { ExcalidrawElement, ExcalidrawTextElement, ExcalidrawEmbeddableElement, ExcalidrawLinearElement, ExcalidrawBindableElement, ExcalidrawFreeDrawElement, InitializedExcalidrawImageElement, ExcalidrawImageElement, ExcalidrawTextElementWithContainer, ExcalidrawTextContainer, ExcalidrawFrameElement, RoundnessType, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeElement, ExcalidrawIframeLikeElement, ExcalidrawMagicFrameElement } from "./types";
1
+ import type { ElementOrToolType } from "../types";
2
+ import type { MarkNonNullable } from "../utility-types";
3
+ import type { ExcalidrawElement, ExcalidrawTextElement, ExcalidrawEmbeddableElement, ExcalidrawLinearElement, ExcalidrawBindableElement, ExcalidrawFreeDrawElement, InitializedExcalidrawImageElement, ExcalidrawImageElement, ExcalidrawTextElementWithContainer, ExcalidrawTextContainer, ExcalidrawFrameElement, RoundnessType, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeElement, ExcalidrawIframeLikeElement, ExcalidrawMagicFrameElement, ExcalidrawArrowElement } from "./types";
4
4
  export declare const isInitializedImageElement: (element: ExcalidrawElement | null) => element is InitializedExcalidrawImageElement;
5
5
  export declare const isImageElement: (element: ExcalidrawElement | null) => element is ExcalidrawImageElement;
6
6
  export declare const isEmbeddableElement: (element: ExcalidrawElement | null | undefined) => element is ExcalidrawEmbeddableElement;
@@ -13,7 +13,7 @@ export declare const isFrameLikeElement: (element: ExcalidrawElement | null) =>
13
13
  export declare const isFreeDrawElement: (element?: ExcalidrawElement | null) => element is ExcalidrawFreeDrawElement;
14
14
  export declare const isFreeDrawElementType: (elementType: ExcalidrawElementType) => boolean;
15
15
  export declare const isLinearElement: (element?: ExcalidrawElement | null) => element is ExcalidrawLinearElement;
16
- export declare const isArrowElement: (element?: ExcalidrawElement | null) => element is ExcalidrawLinearElement;
16
+ export declare const isArrowElement: (element?: ExcalidrawElement | null) => element is ExcalidrawArrowElement;
17
17
  export declare const isLinearElementType: (elementType: ElementOrToolType) => boolean;
18
18
  export declare const isBindingElement: (element?: ExcalidrawElement | null, includeLocked?: boolean) => element is ExcalidrawLinearElement;
19
19
  export declare const isBindingElementType: (elementType: ElementOrToolType) => boolean;
@@ -1,7 +1,7 @@
1
- import { Point } from "../types";
2
- import { FONT_FAMILY, ROUNDNESS, TEXT_ALIGN, THEME, VERTICAL_ALIGN } from "../constants";
3
- import { MakeBrand, MarkNonNullable, ValueOf } from "../utility-types";
4
- import { MagicCacheData } from "../data/magic";
1
+ import type { Point } from "../types";
2
+ import type { FONT_FAMILY, ROUNDNESS, TEXT_ALIGN, THEME, VERTICAL_ALIGN } from "../constants";
3
+ import type { MakeBrand, MarkNonNullable, ValueOf } from "../utility-types";
4
+ import type { MagicCacheData } from "../data/magic";
5
5
  export type ChartType = "bar" | "line";
6
6
  export type FillStyle = "hachure" | "cross-hatch" | "solid" | "zigzag";
7
7
  export type FontFamilyKeys = keyof typeof FONT_FAMILY;
@@ -18,6 +18,13 @@ export type StrokeStyle = "solid" | "dashed" | "dotted";
18
18
  export type TextAlign = typeof TEXT_ALIGN[keyof typeof TEXT_ALIGN];
19
19
  type VerticalAlignKeys = keyof typeof VERTICAL_ALIGN;
20
20
  export type VerticalAlign = typeof VERTICAL_ALIGN[VerticalAlignKeys];
21
+ export type FractionalIndex = string & {
22
+ _brand: "franctionalIndex";
23
+ };
24
+ export type BoundElement = Readonly<{
25
+ id: ExcalidrawLinearElement["id"];
26
+ type: "arrow" | "text";
27
+ }>;
21
28
  type _ExcalidrawElementBase = Readonly<{
22
29
  id: string;
23
30
  x: number;
@@ -46,16 +53,18 @@ type _ExcalidrawElementBase = Readonly<{
46
53
  Used for deterministic reconciliation of updates during collaboration,
47
54
  in case the versions (see above) are identical. */
48
55
  versionNonce: number;
56
+ /** String in a fractional form defined by https://github.com/rocicorp/fractional-indexing.
57
+ Used for ordering in multiplayer scenarios, such as during reconciliation or undo / redo.
58
+ Always kept in sync with the array order by `syncMovedIndices` and `syncInvalidIndices`.
59
+ Could be null, i.e. for new elements which were not yet assigned to the scene. */
60
+ index: FractionalIndex | null;
49
61
  isDeleted: boolean;
50
62
  /** List of groups the element belongs to.
51
63
  Ordered from deepest to shallowest. */
52
64
  groupIds: readonly GroupId[];
53
65
  frameId: string | null;
54
66
  /** other elements that are bound to this element */
55
- boundElements: readonly Readonly<{
56
- id: ExcalidrawLinearElement["id"];
57
- type: "arrow" | "text";
58
- }>[] | null;
67
+ boundElements: readonly BoundElement[] | null;
59
68
  /** epoch (ms) timestamp of last element update */
60
69
  updated: number;
61
70
  link: string | null;
@@ -90,6 +99,9 @@ export type IframeData = ({
90
99
  h: number;
91
100
  };
92
101
  error?: Error;
102
+ sandbox?: {
103
+ allowSameOrigin?: boolean;
104
+ };
93
105
  } & ({
94
106
  type: "video" | "generic";
95
107
  link: string;
@@ -125,6 +137,10 @@ export type ExcalidrawGenericElement = ExcalidrawSelectionElement | ExcalidrawRe
125
137
  * between peers and contain no state local to the peer.
126
138
  */
127
139
  export type ExcalidrawElement = ExcalidrawGenericElement | ExcalidrawTextElement | ExcalidrawLinearElement | ExcalidrawFreeDrawElement | ExcalidrawImageElement | ExcalidrawFrameElement | ExcalidrawMagicFrameElement | ExcalidrawIframeElement | ExcalidrawEmbeddableElement;
140
+ export type Ordered<TElement extends ExcalidrawElement> = TElement & {
141
+ index: FractionalIndex;
142
+ };
143
+ export type OrderedExcalidrawElement = Ordered<ExcalidrawElement>;
128
144
  export type NonDeleted<TElement extends ExcalidrawElement> = TElement & {
129
145
  isDeleted: boolean;
130
146
  };
@@ -138,6 +154,13 @@ export type ExcalidrawTextElement = _ExcalidrawElementBase & Readonly<{
138
154
  verticalAlign: VerticalAlign;
139
155
  containerId: ExcalidrawGenericElement["id"] | null;
140
156
  originalText: string;
157
+ /**
158
+ * If `true` the width will fit the text. If `false`, the text will
159
+ * wrap to fit the width.
160
+ *
161
+ * @default true
162
+ */
163
+ autoResize: boolean;
141
164
  /**
142
165
  * Unitless line height (aligned to W3C). To get line height in px, multiply
143
166
  * with font size (using `getLineHeightInPx` helper).
@@ -195,11 +218,11 @@ export type NonDeletedElementsMap = Map<ExcalidrawElement["id"], NonDeletedExcal
195
218
  * Map of all excalidraw Scene elements, including deleted.
196
219
  * Not a subset. Use this type when you need access to current Scene elements.
197
220
  */
198
- export type SceneElementsMap = Map<ExcalidrawElement["id"], ExcalidrawElement> & MakeBrand<"SceneElementsMap">;
221
+ export type SceneElementsMap = Map<ExcalidrawElement["id"], Ordered<ExcalidrawElement>> & MakeBrand<"SceneElementsMap">;
199
222
  /**
200
223
  * Map of all non-deleted Scene elements.
201
224
  * Not a subset. Use this type when you need access to current Scene elements.
202
225
  */
203
- export type NonDeletedSceneElementsMap = Map<ExcalidrawElement["id"], NonDeletedExcalidrawElement> & MakeBrand<"NonDeletedSceneElementsMap">;
226
+ export type NonDeletedSceneElementsMap = Map<ExcalidrawElement["id"], Ordered<NonDeletedExcalidrawElement>> & MakeBrand<"NonDeletedSceneElementsMap">;
204
227
  export type ElementsMapOrArray = readonly ExcalidrawElement[] | Readonly<ElementsMap>;
205
228
  export {};
@@ -1,4 +1,4 @@
1
- import { UnsubscribeCallback } from "./types";
1
+ import type { UnsubscribeCallback } from "./types";
2
2
  type Subscriber<T extends any[]> = (...payload: T) => void;
3
3
  export declare class Emitter<T extends any[] = []> {
4
4
  subscribers: Subscriber<T>[];
@@ -10,4 +10,7 @@ export declare class ImageSceneDataError extends Error {
10
10
  code: ImageSceneDataErrorCode;
11
11
  constructor(message?: string, code?: ImageSceneDataErrorCode);
12
12
  }
13
+ export declare class InvalidFractionalIndexError extends Error {
14
+ code: "ELEMENT_HAS_INVALID_INDEX";
15
+ }
13
16
  export {};
@@ -18,3 +18,6 @@ export class ImageSceneDataError extends Error {
18
18
  this.code = code;
19
19
  }
20
20
  }
21
+ export class InvalidFractionalIndexError extends Error {
22
+ code = "ELEMENT_HAS_INVALID_INDEX";
23
+ }
@@ -0,0 +1,40 @@
1
+ import type { ExcalidrawElement, OrderedExcalidrawElement } from "./element/types";
2
+ /**
3
+ * Envisioned relation between array order and fractional indices:
4
+ *
5
+ * 1) Array (or array-like ordered data structure) should be used as a cache of elements order, hiding the internal fractional indices implementation.
6
+ * - it's undesirable to to perform reorder for each related operation, thefeore it's necessary to cache the order defined by fractional indices into an ordered data structure
7
+ * - it's easy enough to define the order of the elements from the outside (boundaries), without worrying about the underlying structure of fractional indices (especially for the host apps)
8
+ * - it's necessary to always keep the array support for backwards compatibility (restore) - old scenes, old libraries, supporting multiple excalidraw versions etc.
9
+ * - it's necessary to always keep the fractional indices in sync with the array order
10
+ * - elements with invalid indices should be detected and synced, without altering the already valid indices
11
+ *
12
+ * 2) Fractional indices should be used to reorder the elements, whenever the cached order is expected to be invalidated.
13
+ * - as the fractional indices are encoded as part of the elements, it opens up possibilties for incremental-like APIs
14
+ * - re-order based on fractional indices should be part of (multiplayer) operations such as reconcillitation & undo/redo
15
+ * - technically all the z-index actions could perform also re-order based on fractional indices,but in current state it would not bring much benefits,
16
+ * as it's faster & more efficient to perform re-order based on array manipulation and later synchronisation of moved indices with the array order
17
+ */
18
+ /**
19
+ * Ensure that all elements have valid fractional indices.
20
+ *
21
+ * @throws `InvalidFractionalIndexError` if invalid index is detected.
22
+ */
23
+ export declare const validateFractionalIndices: (indices: (ExcalidrawElement["index"] | undefined)[]) => void;
24
+ /**
25
+ * Order the elements based on the fractional indices.
26
+ * - when fractional indices are identical, break the tie based on the element id
27
+ * - when there is no fractional index in one of the elements, respect the order of the array
28
+ */
29
+ export declare const orderByFractionalIndex: (elements: OrderedExcalidrawElement[]) => OrderedExcalidrawElement[];
30
+ /**
31
+ * Synchronizes invalid fractional indices of moved elements with the array order by mutating passed elements.
32
+ * If the synchronization fails or the result is invalid, it fallbacks to `syncInvalidIndices`.
33
+ */
34
+ export declare const syncMovedIndices: (elements: readonly ExcalidrawElement[], movedElements: Map<string, ExcalidrawElement>) => OrderedExcalidrawElement[];
35
+ /**
36
+ * Synchronizes all invalid fractional indices with the array order by mutating passed elements.
37
+ *
38
+ * WARN: in edge cases it could modify the elements which were not moved, as it's impossible to guess the actually moved elements from the elements array itself.
39
+ */
40
+ export declare const syncInvalidIndices: (elements: readonly ExcalidrawElement[]) => OrderedExcalidrawElement[];