@excalidraw/excalidraw 0.17.1-550a388 → 0.17.1-62228e0

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 (552) hide show
  1. package/CHANGELOG.md +18 -2
  2. package/dist/browser/dev/excalidraw-assets-dev/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
  3. package/dist/browser/dev/excalidraw-assets-dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  4. package/dist/browser/dev/excalidraw-assets-dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  5. package/dist/browser/dev/excalidraw-assets-dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  6. package/dist/browser/dev/excalidraw-assets-dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  7. package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-ACFH36JV.js → blockDiagram-91b80b7a-H47FTXHA.js} +5 -5
  8. package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-QZ27YR47.js → c4Diagram-b2a90758-NNJK6GKC.js} +3 -3
  9. package/dist/browser/dev/excalidraw-assets-dev/{chunk-HO2HMSK7.js → chunk-4KQVEBHW.js} +3 -3
  10. package/dist/browser/dev/excalidraw-assets-dev/{chunk-USGV265L.js → chunk-53YI56GV.js} +4 -4
  11. package/dist/browser/dev/excalidraw-assets-dev/{chunk-EDFX3S7X.js → chunk-A2WCJI4I.js} +3 -3
  12. package/dist/browser/dev/excalidraw-assets-dev/{chunk-IX4V72YG.js → chunk-EFLPX7NE.js} +6 -6
  13. package/dist/browser/dev/excalidraw-assets-dev/{chunk-MXVETLVM.js → chunk-JYIQCNWV.js} +2 -2
  14. package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js → chunk-LVIQQW6F.js} +2 -2
  15. package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js → chunk-PXLO3FOU.js} +2 -2
  16. package/dist/browser/dev/excalidraw-assets-dev/{chunk-7DACDEY3.js → chunk-TO2AW5PW.js} +2 -2
  17. package/dist/browser/dev/excalidraw-assets-dev/{chunk-NJ77ZFNJ.js → chunk-VURILHLY.js} +2 -2
  18. package/dist/browser/dev/excalidraw-assets-dev/{chunk-AK7SWNLN.js → chunk-XDYNNNIZ.js} +48 -10
  19. package/dist/browser/dev/excalidraw-assets-dev/chunk-XDYNNNIZ.js.map +7 -0
  20. package/dist/browser/dev/excalidraw-assets-dev/{chunk-2T2GU7NF.js → chunk-ZAYGSUHF.js} +2 -2
  21. package/dist/browser/dev/excalidraw-assets-dev/{chunk-Z3PH3V2B.js → chunk-ZQR5ML6Y.js} +26 -26
  22. package/dist/browser/dev/excalidraw-assets-dev/chunk-ZQR5ML6Y.js.map +7 -0
  23. package/dist/browser/dev/excalidraw-assets-dev/{chunk-RWZVJAQU.js → chunk-ZYC7SDAJ.js} +13172 -7476
  24. package/dist/browser/dev/excalidraw-assets-dev/chunk-ZYC7SDAJ.js.map +7 -0
  25. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-QSLMH4JW.js → classDiagram-30eddba6-CUYIJICN.js} +5 -5
  26. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-DY4DYQ5P.js → classDiagram-v2-f2df5561-K6WW6K73.js} +8 -8
  27. package/dist/browser/dev/excalidraw-assets-dev/{dist-Z46EOVOL.js → dist-DNSPZDOZ.js} +67 -33
  28. package/dist/browser/dev/excalidraw-assets-dev/dist-DNSPZDOZ.js.map +7 -0
  29. package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js → en-RAFN4KPD.js} +8 -2
  30. package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js → erDiagram-47591fe2-XGAD7EEP.js} +4 -4
  31. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js → flowDiagram-5540d9b9-B6EOVNNO.js} +9 -9
  32. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js → flowDiagram-v2-3b53844e-NUG24FJH.js} +9 -9
  33. package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js → flowchart-elk-definition-5fe447d6-25Y7PCBL.js} +5 -5
  34. package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js → ganttDiagram-9a3bba1f-GNL6ZDTC.js} +2 -2
  35. package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js → gitGraphDiagram-96e6b4ee-HNW52NVO.js} +2 -2
  36. package/dist/browser/dev/excalidraw-assets-dev/{image-OFRRV5MB.css → image-WDHYGKKP.css} +1 -1
  37. package/dist/browser/dev/excalidraw-assets-dev/image-WDHYGKKP.css.map +7 -0
  38. package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js → image-ZNLDWTK3.js} +2 -2
  39. package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js → infoDiagram-bcd20f53-FWEUVFLT.js} +2 -2
  40. package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js → journeyDiagram-4fe6b3dc-RZIUI7UG.js} +3 -3
  41. package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js → mindmap-definition-f354de21-GBVN45GU.js} +3 -3
  42. package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js → pieDiagram-79897490-ECENNII6.js} +2 -2
  43. package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js → quadrantDiagram-62f64e94-ZMEOFVNL.js} +2 -2
  44. package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js → requirementDiagram-05bf5f74-FHZSFHCR.js} +4 -4
  45. package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js → sankeyDiagram-97764748-VDKIKTA6.js} +2 -2
  46. package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js → sequenceDiagram-acc0e65c-6JUSPVKX.js} +3 -3
  47. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js → stateDiagram-0ff1cf1a-L3AKWENF.js} +5 -5
  48. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js → stateDiagram-v2-9a9d610d-NU3GGMCH.js} +8 -8
  49. package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js → timeline-definition-fea2a41d-JGP7XCHW.js} +2 -2
  50. package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js → xychartDiagram-ab372869-HLFHHF2I.js} +3 -3
  51. package/dist/browser/dev/index.css +668 -191
  52. package/dist/browser/dev/index.css.map +3 -3
  53. package/dist/browser/dev/index.js +14529 -9273
  54. package/dist/browser/dev/index.js.map +4 -4
  55. package/dist/browser/prod/excalidraw-assets/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
  56. package/dist/browser/prod/excalidraw-assets/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  57. package/dist/browser/prod/excalidraw-assets/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  58. package/dist/browser/prod/excalidraw-assets/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  59. package/dist/browser/prod/excalidraw-assets/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  60. package/dist/browser/prod/excalidraw-assets/{blockDiagram-91b80b7a-ONPS22AM.js → blockDiagram-91b80b7a-FVCRVGN5.js} +1 -1
  61. package/dist/browser/prod/excalidraw-assets/{c4Diagram-b2a90758-XMIQY7ZT.js → c4Diagram-b2a90758-56CXO7GA.js} +1 -1
  62. package/dist/browser/prod/excalidraw-assets/{chunk-GCHQBOKV.js → chunk-635MQ3CK.js} +1 -1
  63. package/dist/browser/prod/excalidraw-assets/{chunk-P5M3G2RP.js → chunk-AIKXYJX3.js} +1 -1
  64. package/dist/browser/prod/excalidraw-assets/{chunk-E2YLWFZX.js → chunk-CR7VMNWC.js} +1 -1
  65. package/dist/browser/prod/excalidraw-assets/chunk-F3JN4YS2.js +61 -0
  66. package/dist/browser/prod/excalidraw-assets/{chunk-WEYK4A2L.js → chunk-FFF2CSVG.js} +1 -1
  67. package/dist/browser/prod/excalidraw-assets/{chunk-R3HAIP6R.js → chunk-G4WDCSPE.js} +1 -1
  68. package/dist/browser/prod/excalidraw-assets/{chunk-HFOXJM22.js → chunk-HKZSHFLX.js} +1 -1
  69. package/dist/browser/prod/excalidraw-assets/{chunk-XIMFFJTE.js → chunk-IKCDYWMW.js} +1 -1
  70. package/dist/browser/prod/excalidraw-assets/{chunk-AHLLBBVJ.js → chunk-L5DS24G6.js} +1 -1
  71. package/dist/browser/prod/excalidraw-assets/{chunk-CQJF3C6G.js → chunk-MUNOKHUD.js} +1 -1
  72. package/dist/browser/prod/excalidraw-assets/{chunk-CTYINSWT.js → chunk-MXFM2KIK.js} +5 -5
  73. package/dist/browser/prod/excalidraw-assets/{chunk-NI6SYCUG.js → chunk-QOQYOOQ4.js} +1 -1
  74. package/dist/browser/prod/excalidraw-assets/{chunk-I2PZFXTK.js → chunk-ZTIWFPBM.js} +21 -21
  75. package/dist/browser/prod/excalidraw-assets/{classDiagram-30eddba6-IEJXXCVX.js → classDiagram-30eddba6-BCUTAUMD.js} +1 -1
  76. package/dist/browser/prod/excalidraw-assets/{classDiagram-v2-f2df5561-7LZDSWOS.js → classDiagram-v2-f2df5561-6SOXSGQ2.js} +1 -1
  77. package/dist/browser/prod/excalidraw-assets/dist-NLUQPPQQ.js +7 -0
  78. package/dist/browser/prod/excalidraw-assets/en-SQSS4H2K.js +1 -0
  79. package/dist/browser/prod/excalidraw-assets/{erDiagram-47591fe2-E5V666CF.js → erDiagram-47591fe2-RE6HB7RM.js} +1 -1
  80. package/dist/browser/prod/excalidraw-assets/{flowDiagram-5540d9b9-GMBRCYVF.js → flowDiagram-5540d9b9-ZNJZBERW.js} +1 -1
  81. package/dist/browser/prod/excalidraw-assets/{flowDiagram-v2-3b53844e-Z4HUWP6B.js → flowDiagram-v2-3b53844e-LY44JLQJ.js} +1 -1
  82. package/dist/browser/prod/excalidraw-assets/{flowchart-elk-definition-5fe447d6-5ZCYTX5N.js → flowchart-elk-definition-5fe447d6-TMTJ6Z7O.js} +1 -1
  83. package/dist/browser/prod/excalidraw-assets/{ganttDiagram-9a3bba1f-WM32OMT5.js → ganttDiagram-9a3bba1f-5O6EA6LX.js} +1 -1
  84. package/dist/browser/prod/excalidraw-assets/{gitGraphDiagram-96e6b4ee-CAKZ2U6E.js → gitGraphDiagram-96e6b4ee-UHYNM5DI.js} +1 -1
  85. package/dist/browser/prod/excalidraw-assets/image-CMH7O36X.js +1 -0
  86. package/dist/browser/prod/excalidraw-assets/{infoDiagram-bcd20f53-MUIKXGC4.js → infoDiagram-bcd20f53-BP77NQEH.js} +1 -1
  87. package/dist/browser/prod/excalidraw-assets/{journeyDiagram-4fe6b3dc-NYRV4HK2.js → journeyDiagram-4fe6b3dc-XMGKCMES.js} +1 -1
  88. package/dist/browser/prod/excalidraw-assets/{mindmap-definition-f354de21-MY55DRSM.js → mindmap-definition-f354de21-ZQRRBRWF.js} +1 -1
  89. package/dist/browser/prod/excalidraw-assets/{pieDiagram-79897490-47L6J6L2.js → pieDiagram-79897490-IGXEC2KX.js} +1 -1
  90. package/dist/browser/prod/excalidraw-assets/{quadrantDiagram-62f64e94-DF5C2GDT.js → quadrantDiagram-62f64e94-WTHHDYJL.js} +1 -1
  91. package/dist/browser/prod/excalidraw-assets/{requirementDiagram-05bf5f74-C4IMUBDN.js → requirementDiagram-05bf5f74-MV4OFRVW.js} +1 -1
  92. package/dist/browser/prod/excalidraw-assets/{sankeyDiagram-97764748-YHW7EUST.js → sankeyDiagram-97764748-ZGYUHEJT.js} +1 -1
  93. package/dist/browser/prod/excalidraw-assets/{sequenceDiagram-acc0e65c-H3XEHT32.js → sequenceDiagram-acc0e65c-IBSENK6W.js} +1 -1
  94. package/dist/browser/prod/excalidraw-assets/{stateDiagram-0ff1cf1a-Z5WB6Q3P.js → stateDiagram-0ff1cf1a-DB73XNZH.js} +1 -1
  95. package/dist/browser/prod/excalidraw-assets/{stateDiagram-v2-9a9d610d-T7OZETQC.js → stateDiagram-v2-9a9d610d-2OOBUPNR.js} +1 -1
  96. package/dist/browser/prod/excalidraw-assets/{timeline-definition-fea2a41d-VVC22BWF.js → timeline-definition-fea2a41d-P3NQQVDU.js} +1 -1
  97. package/dist/browser/prod/excalidraw-assets/{xychartDiagram-ab372869-JAXODQF7.js → xychartDiagram-ab372869-HI3XLK3Y.js} +1 -1
  98. package/dist/browser/prod/index.css +1 -1
  99. package/dist/browser/prod/index.js +70 -51
  100. package/dist/dev/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
  101. package/dist/dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  102. package/dist/dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  103. package/dist/dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  104. package/dist/dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  105. package/dist/{prod/en-II4GK66F.json → dev/en-HDAPS7XK.json} +41 -9
  106. package/dist/dev/index.css +668 -191
  107. package/dist/dev/index.css.map +3 -3
  108. package/dist/dev/index.js +22026 -16675
  109. package/dist/dev/index.js.map +4 -4
  110. package/dist/excalidraw/actions/actionAddToLibrary.d.ts +22 -10
  111. package/dist/excalidraw/actions/actionAddToLibrary.js +4 -3
  112. package/dist/excalidraw/actions/actionAlign.d.ts +22 -22
  113. package/dist/excalidraw/actions/actionAlign.js +7 -6
  114. package/dist/excalidraw/actions/actionBoundText.d.ts +22 -14
  115. package/dist/excalidraw/actions/actionBoundText.js +11 -5
  116. package/dist/excalidraw/actions/actionCanvas.d.ts +124 -76
  117. package/dist/excalidraw/actions/actionCanvas.js +20 -15
  118. package/dist/excalidraw/actions/actionClipboard.d.ts +66 -38
  119. package/dist/excalidraw/actions/actionClipboard.js +14 -13
  120. package/dist/excalidraw/actions/actionDeleteSelected.d.ts +28 -16
  121. package/dist/excalidraw/actions/actionDeleteSelected.js +6 -3
  122. package/dist/excalidraw/actions/actionDistribute.d.ts +10 -10
  123. package/dist/excalidraw/actions/actionDistribute.js +3 -2
  124. package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +7 -8
  125. package/dist/excalidraw/actions/actionDuplicateSelection.js +7 -3
  126. package/dist/excalidraw/actions/actionElementLock.d.ts +21 -13
  127. package/dist/excalidraw/actions/actionElementLock.js +3 -2
  128. package/dist/excalidraw/actions/actionExport.d.ts +87 -51
  129. package/dist/excalidraw/actions/actionExport.js +15 -11
  130. package/dist/excalidraw/actions/actionFinalize.d.ts +21 -13
  131. package/dist/excalidraw/actions/actionFinalize.js +9 -5
  132. package/dist/excalidraw/actions/actionFlip.d.ts +10 -10
  133. package/dist/excalidraw/actions/actionFlip.js +12 -12
  134. package/dist/excalidraw/actions/actionFrame.d.ts +193 -24
  135. package/dist/excalidraw/actions/actionFrame.js +7 -6
  136. package/dist/excalidraw/actions/actionGroup.d.ts +28 -20
  137. package/dist/excalidraw/actions/actionGroup.js +9 -11
  138. package/dist/excalidraw/actions/actionHistory.d.ts +4 -3
  139. package/dist/excalidraw/actions/actionHistory.js +27 -28
  140. package/dist/excalidraw/actions/actionLinearEditor.d.ts +12 -6
  141. package/dist/excalidraw/actions/actionLinearEditor.js +21 -5
  142. package/dist/excalidraw/actions/actionLink.d.ts +11 -7
  143. package/dist/excalidraw/actions/actionLink.js +2 -1
  144. package/dist/excalidraw/actions/actionMenu.d.ts +26 -14
  145. package/dist/excalidraw/actions/actionMenu.js +4 -3
  146. package/dist/excalidraw/actions/actionNavigate.d.ts +16 -8
  147. package/dist/excalidraw/actions/actionNavigate.js +3 -2
  148. package/dist/excalidraw/actions/actionProperties.d.ts +272 -62
  149. package/dist/excalidraw/actions/actionProperties.js +261 -59
  150. package/dist/excalidraw/actions/actionSelectAll.d.ts +11 -7
  151. package/dist/excalidraw/actions/actionSelectAll.js +2 -1
  152. package/dist/excalidraw/actions/actionStyles.d.ts +17 -13
  153. package/dist/excalidraw/actions/actionStyles.js +7 -5
  154. package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
  155. package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
  156. package/dist/excalidraw/actions/actionToggleGridMode.d.ts +13 -7
  157. package/dist/excalidraw/actions/actionToggleGridMode.js +6 -2
  158. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +10 -6
  159. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.js +2 -1
  160. package/dist/excalidraw/actions/actionToggleStats.d.ts +11 -6
  161. package/dist/excalidraw/actions/actionToggleStats.js +6 -4
  162. package/dist/excalidraw/actions/actionToggleViewMode.d.ts +10 -6
  163. package/dist/excalidraw/actions/actionToggleViewMode.js +2 -1
  164. package/dist/excalidraw/actions/actionToggleZenMode.d.ts +10 -6
  165. package/dist/excalidraw/actions/actionToggleZenMode.js +2 -1
  166. package/dist/excalidraw/actions/actionZindex.d.ts +23 -19
  167. package/dist/excalidraw/actions/actionZindex.js +9 -4
  168. package/dist/excalidraw/actions/manager.d.ts +5 -5
  169. package/dist/excalidraw/actions/register.d.ts +1 -1
  170. package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
  171. package/dist/excalidraw/actions/shortcuts.js +1 -1
  172. package/dist/excalidraw/actions/types.d.ts +8 -8
  173. package/dist/excalidraw/align.d.ts +1 -1
  174. package/dist/excalidraw/analytics.js +9 -7
  175. package/dist/excalidraw/animated-trail.d.ts +2 -2
  176. package/dist/excalidraw/appState.d.ts +9 -6
  177. package/dist/excalidraw/appState.js +8 -3
  178. package/dist/excalidraw/change.d.ts +191 -0
  179. package/dist/excalidraw/change.js +901 -0
  180. package/dist/excalidraw/charts.d.ts +1 -1
  181. package/dist/excalidraw/clients.d.ts +2 -2
  182. package/dist/excalidraw/clients.js +1 -1
  183. package/dist/excalidraw/clipboard.d.ts +3 -3
  184. package/dist/excalidraw/colors.d.ts +1 -1
  185. package/dist/excalidraw/components/Actions.d.ts +3 -3
  186. package/dist/excalidraw/components/Actions.js +10 -7
  187. package/dist/excalidraw/components/App.d.ts +26 -16
  188. package/dist/excalidraw/components/App.js +490 -217
  189. package/dist/excalidraw/components/ButtonIcon.d.ts +15 -0
  190. package/dist/excalidraw/components/ButtonIcon.js +8 -0
  191. package/dist/excalidraw/components/ButtonIconSelect.js +2 -3
  192. package/dist/excalidraw/components/ButtonSeparator.d.ts +2 -0
  193. package/dist/excalidraw/components/ButtonSeparator.js +7 -0
  194. package/dist/excalidraw/components/CheckboxItem.js +1 -1
  195. package/dist/excalidraw/components/ColorPicker/ColorInput.d.ts +1 -1
  196. package/dist/excalidraw/components/ColorPicker/ColorInput.js +1 -1
  197. package/dist/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
  198. package/dist/excalidraw/components/ColorPicker/ColorPicker.js +48 -80
  199. package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
  200. package/dist/excalidraw/components/ColorPicker/Picker.js +1 -1
  201. package/dist/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
  202. package/dist/excalidraw/components/ColorPicker/PickerHeading.d.ts +1 -1
  203. package/dist/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
  204. package/dist/excalidraw/components/ColorPicker/TopPicks.d.ts +1 -1
  205. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +2 -2
  206. package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
  207. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
  208. package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.js +1 -1
  209. package/dist/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
  210. package/dist/excalidraw/components/CommandPalette/CommandPalette.js +33 -18
  211. package/dist/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -1
  212. package/dist/excalidraw/components/CommandPalette/types.d.ts +3 -3
  213. package/dist/excalidraw/components/ConfirmDialog.d.ts +1 -1
  214. package/dist/excalidraw/components/ContextMenu.d.ts +2 -2
  215. package/dist/excalidraw/components/ContextMenu.js +2 -2
  216. package/dist/excalidraw/components/DarkModeToggle.d.ts +1 -1
  217. package/dist/excalidraw/components/DarkModeToggle.js +3 -1
  218. package/dist/excalidraw/components/DefaultSidebar.d.ts +2 -2
  219. package/dist/excalidraw/components/Dialog.js +1 -1
  220. package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
  221. package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
  222. package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
  223. package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
  224. package/dist/excalidraw/components/FontPicker/FontPicker.d.ts +21 -0
  225. package/dist/excalidraw/components/FontPicker/FontPicker.js +49 -0
  226. package/dist/excalidraw/components/FontPicker/FontPickerList.d.ts +25 -0
  227. package/dist/excalidraw/components/FontPicker/FontPickerList.js +119 -0
  228. package/dist/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +7 -0
  229. package/dist/excalidraw/components/FontPicker/FontPickerTrigger.js +13 -0
  230. package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +14 -0
  231. package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.js +38 -0
  232. package/dist/excalidraw/components/HelpDialog.js +9 -7
  233. package/dist/excalidraw/components/HintViewer.d.ts +1 -1
  234. package/dist/excalidraw/components/IconPicker.js +2 -2
  235. package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
  236. package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
  237. package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
  238. package/dist/excalidraw/components/LayerUI.d.ts +4 -4
  239. package/dist/excalidraw/components/LayerUI.js +10 -7
  240. package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
  241. package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
  242. package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  243. package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
  244. package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
  245. package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
  246. package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
  247. package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
  248. package/dist/excalidraw/components/MagicSettings.js +2 -2
  249. package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
  250. package/dist/excalidraw/components/MobileMenu.js +2 -6
  251. package/dist/excalidraw/components/Modal.d.ts +1 -1
  252. package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  253. package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
  254. package/dist/excalidraw/components/PasteChartDialog.js +1 -1
  255. package/dist/excalidraw/components/PropertiesPopover.d.ts +15 -0
  256. package/dist/excalidraw/components/PropertiesPopover.js +31 -0
  257. package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
  258. package/dist/excalidraw/components/QuickSearch.d.ts +9 -0
  259. package/dist/excalidraw/components/QuickSearch.js +8 -0
  260. package/dist/excalidraw/components/RadioGroup.d.ts +2 -1
  261. package/dist/excalidraw/components/RadioGroup.js +1 -1
  262. package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
  263. package/dist/excalidraw/components/ScrollableList.d.ts +9 -0
  264. package/dist/excalidraw/components/ScrollableList.js +8 -0
  265. package/dist/excalidraw/components/Sidebar/Sidebar.d.ts +2 -2
  266. package/dist/excalidraw/components/Sidebar/Sidebar.js +1 -1
  267. package/dist/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -1
  268. package/dist/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -1
  269. package/dist/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
  270. package/dist/excalidraw/components/Sidebar/common.d.ts +1 -1
  271. package/dist/excalidraw/components/Stack.d.ts +2 -2
  272. package/dist/excalidraw/components/Stats/Angle.d.ts +12 -0
  273. package/dist/excalidraw/components/Stats/Angle.js +52 -0
  274. package/dist/excalidraw/components/Stats/Collapsible.d.ts +9 -0
  275. package/dist/excalidraw/components/Stats/Collapsible.js +12 -0
  276. package/dist/excalidraw/components/Stats/Dimension.d.ts +12 -0
  277. package/dist/excalidraw/components/Stats/Dimension.js +67 -0
  278. package/dist/excalidraw/components/Stats/DragInput.d.ts +32 -0
  279. package/dist/excalidraw/components/Stats/DragInput.js +174 -0
  280. package/dist/excalidraw/components/Stats/FontSize.d.ts +12 -0
  281. package/dist/excalidraw/components/Stats/FontSize.js +50 -0
  282. package/dist/excalidraw/components/Stats/MultiAngle.d.ts +12 -0
  283. package/dist/excalidraw/components/Stats/MultiAngle.js +66 -0
  284. package/dist/excalidraw/components/Stats/MultiDimension.d.ts +15 -0
  285. package/dist/excalidraw/components/Stats/MultiDimension.js +197 -0
  286. package/dist/excalidraw/components/Stats/MultiFontSize.d.ts +13 -0
  287. package/dist/excalidraw/components/Stats/MultiFontSize.js +72 -0
  288. package/dist/excalidraw/components/Stats/MultiPosition.d.ts +15 -0
  289. package/dist/excalidraw/components/Stats/MultiPosition.js +100 -0
  290. package/dist/excalidraw/components/Stats/Position.d.ts +13 -0
  291. package/dist/excalidraw/components/Stats/Position.js +39 -0
  292. package/dist/excalidraw/components/Stats/index.d.ts +16 -0
  293. package/dist/excalidraw/components/Stats/index.js +78 -0
  294. package/dist/excalidraw/components/Stats/utils.d.ts +25 -0
  295. package/dist/excalidraw/components/Stats/utils.js +158 -0
  296. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
  297. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.js +6 -2
  298. package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
  299. package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
  300. package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
  301. package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
  302. package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
  303. package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
  304. package/dist/excalidraw/components/TTDDialog/common.d.ts +5 -5
  305. package/dist/excalidraw/components/TTDDialog/common.js +3 -7
  306. package/dist/excalidraw/components/TextField.d.ts +1 -1
  307. package/dist/excalidraw/components/Toast.d.ts +1 -1
  308. package/dist/excalidraw/components/ToolButton.d.ts +4 -2
  309. package/dist/excalidraw/components/ToolButton.js +1 -1
  310. package/dist/excalidraw/components/Trans.d.ts +1 -1
  311. package/dist/excalidraw/components/UserList.d.ts +1 -1
  312. package/dist/excalidraw/components/UserList.js +22 -22
  313. package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +5 -3
  314. package/dist/excalidraw/components/canvases/InteractiveCanvas.js +5 -2
  315. package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
  316. package/dist/excalidraw/components/canvases/StaticCanvas.js +3 -2
  317. package/dist/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +12 -3
  318. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +24 -4
  319. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +55 -14
  320. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +2 -1
  321. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.js +2 -2
  322. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +18 -0
  323. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.js +9 -0
  324. package/dist/excalidraw/components/dropdownMenu/common.d.ts +1 -1
  325. package/dist/excalidraw/components/dropdownMenu/common.js +3 -2
  326. package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
  327. package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
  328. package/dist/excalidraw/components/hyperlink/Hyperlink.js +3 -3
  329. package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  330. package/dist/excalidraw/components/hyperlink/helpers.js +2 -3
  331. package/dist/excalidraw/components/icons.d.ts +10 -1
  332. package/dist/excalidraw/components/icons.js +27 -5
  333. package/dist/excalidraw/components/main-menu/DefaultItems.d.ts +12 -2
  334. package/dist/excalidraw/components/main-menu/DefaultItems.js +38 -7
  335. package/dist/excalidraw/components/main-menu/MainMenu.d.ts +12 -3
  336. package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Center.js +2 -2
  337. package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Hints.js +3 -3
  338. package/dist/excalidraw/constants.d.ts +24 -6
  339. package/dist/excalidraw/constants.js +29 -7
  340. package/dist/excalidraw/context/ui-appState.d.ts +1 -1
  341. package/dist/excalidraw/cursor.d.ts +1 -1
  342. package/dist/excalidraw/data/EditorLocalStorage.d.ts +2 -2
  343. package/dist/excalidraw/data/blob.d.ts +5 -5
  344. package/dist/excalidraw/data/filesystem.d.ts +2 -1
  345. package/dist/excalidraw/data/index.d.ts +4 -4
  346. package/dist/excalidraw/data/json.d.ts +3 -3
  347. package/dist/excalidraw/data/library.d.ts +3 -3
  348. package/dist/excalidraw/data/magic.d.ts +3 -3
  349. package/dist/excalidraw/data/magic.js +2 -1
  350. package/dist/excalidraw/data/reconcile.d.ts +6 -0
  351. package/dist/excalidraw/data/reconcile.js +49 -0
  352. package/dist/excalidraw/data/resave.d.ts +2 -2
  353. package/dist/excalidraw/data/restore.d.ts +5 -5
  354. package/dist/excalidraw/data/restore.js +25 -10
  355. package/dist/excalidraw/data/transform.d.ts +4 -4
  356. package/dist/excalidraw/data/transform.js +15 -5
  357. package/dist/excalidraw/data/types.d.ts +3 -3
  358. package/dist/excalidraw/data/url.d.ts +1 -0
  359. package/dist/excalidraw/data/url.js +4 -1
  360. package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
  361. package/dist/excalidraw/element/binding.d.ts +49 -8
  362. package/dist/excalidraw/element/binding.js +716 -153
  363. package/dist/excalidraw/element/bounds.d.ts +3 -4
  364. package/dist/excalidraw/element/bounds.js +0 -3
  365. package/dist/excalidraw/element/collision.d.ts +14 -19
  366. package/dist/excalidraw/element/collision.js +36 -713
  367. package/dist/excalidraw/element/containerCache.d.ts +1 -1
  368. package/dist/excalidraw/element/dragElements.d.ts +4 -4
  369. package/dist/excalidraw/element/dragElements.js +27 -3
  370. package/dist/excalidraw/element/embeddable.d.ts +15 -8
  371. package/dist/excalidraw/element/embeddable.js +98 -62
  372. package/dist/excalidraw/element/image.d.ts +2 -2
  373. package/dist/excalidraw/element/index.d.ts +2 -3
  374. package/dist/excalidraw/element/index.js +1 -2
  375. package/dist/excalidraw/element/linearElementEditor.d.ts +18 -14
  376. package/dist/excalidraw/element/linearElementEditor.js +12 -7
  377. package/dist/excalidraw/element/mutateElement.d.ts +4 -5
  378. package/dist/excalidraw/element/mutateElement.js +5 -3
  379. package/dist/excalidraw/element/newElement.d.ts +6 -9
  380. package/dist/excalidraw/element/newElement.js +21 -17
  381. package/dist/excalidraw/element/resizeElements.d.ts +12 -4
  382. package/dist/excalidraw/element/resizeElements.js +174 -98
  383. package/dist/excalidraw/element/resizeTest.d.ts +7 -7
  384. package/dist/excalidraw/element/resizeTest.js +53 -8
  385. package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
  386. package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
  387. package/dist/excalidraw/element/sizeHelpers.js +3 -0
  388. package/dist/excalidraw/element/sortElements.d.ts +1 -1
  389. package/dist/excalidraw/element/textElement.d.ts +7 -30
  390. package/dist/excalidraw/element/textElement.js +68 -144
  391. package/dist/excalidraw/element/textWysiwyg.d.ts +12 -6
  392. package/dist/excalidraw/element/textWysiwyg.js +75 -62
  393. package/dist/excalidraw/element/transformHandles.d.ts +24 -6
  394. package/dist/excalidraw/element/transformHandles.js +22 -11
  395. package/dist/excalidraw/element/typeChecks.d.ts +5 -5
  396. package/dist/excalidraw/element/types.d.ts +33 -10
  397. package/dist/excalidraw/emitter.d.ts +1 -1
  398. package/dist/excalidraw/errors.d.ts +3 -0
  399. package/dist/excalidraw/errors.js +3 -0
  400. package/dist/excalidraw/fonts/ExcalidrawFont.d.ts +17 -0
  401. package/dist/excalidraw/fonts/ExcalidrawFont.js +50 -0
  402. package/dist/excalidraw/fonts/index.d.ts +45 -0
  403. package/dist/excalidraw/fonts/index.js +202 -0
  404. package/dist/excalidraw/fonts/metadata.d.ts +34 -0
  405. package/dist/excalidraw/fonts/metadata.js +90 -0
  406. package/dist/excalidraw/fractionalIndex.d.ts +40 -0
  407. package/dist/excalidraw/fractionalIndex.js +239 -0
  408. package/dist/excalidraw/frame.d.ts +4 -4
  409. package/dist/excalidraw/gatransforms.d.ts +1 -1
  410. package/dist/excalidraw/gesture.d.ts +1 -1
  411. package/dist/excalidraw/groups.d.ts +6 -4
  412. package/dist/excalidraw/groups.js +17 -0
  413. package/dist/excalidraw/history.d.ts +35 -47
  414. package/dist/excalidraw/history.js +100 -167
  415. package/dist/excalidraw/hooks/useCreatePortalContainer.js +2 -1
  416. package/dist/excalidraw/hooks/useEmitter.d.ts +2 -0
  417. package/dist/excalidraw/hooks/useEmitter.js +13 -0
  418. package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  419. package/dist/excalidraw/i18n.d.ts +1 -1
  420. package/dist/excalidraw/index.d.ts +4 -2
  421. package/dist/excalidraw/index.js +5 -3
  422. package/dist/excalidraw/jotai.d.ts +1 -1
  423. package/dist/excalidraw/laser-trails.d.ts +3 -2
  424. package/dist/excalidraw/locales/en.json +41 -9
  425. package/dist/excalidraw/math.d.ts +4 -2
  426. package/dist/excalidraw/math.js +6 -0
  427. package/dist/excalidraw/mermaid.d.ts +2 -0
  428. package/dist/excalidraw/mermaid.js +28 -0
  429. package/dist/excalidraw/points.d.ts +1 -1
  430. package/dist/excalidraw/queue.d.ts +1 -1
  431. package/dist/excalidraw/renderer/helpers.d.ts +2 -2
  432. package/dist/excalidraw/renderer/helpers.js +2 -2
  433. package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
  434. package/dist/excalidraw/renderer/interactiveScene.js +38 -11
  435. package/dist/excalidraw/renderer/renderElement.d.ts +6 -4
  436. package/dist/excalidraw/renderer/renderElement.js +81 -61
  437. package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
  438. package/dist/excalidraw/renderer/renderSnaps.js +2 -1
  439. package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
  440. package/dist/excalidraw/renderer/staticScene.js +14 -3
  441. package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
  442. package/dist/excalidraw/renderer/staticSvgScene.js +12 -1
  443. package/dist/excalidraw/scene/Renderer.d.ts +4 -4
  444. package/dist/excalidraw/scene/Renderer.js +2 -3
  445. package/dist/excalidraw/scene/Scene.d.ts +22 -12
  446. package/dist/excalidraw/scene/Scene.js +47 -23
  447. package/dist/excalidraw/scene/Shape.d.ts +1 -1
  448. package/dist/excalidraw/scene/ShapeCache.d.ts +4 -4
  449. package/dist/excalidraw/scene/comparisons.d.ts +2 -2
  450. package/dist/excalidraw/scene/export.d.ts +3 -2
  451. package/dist/excalidraw/scene/export.js +40 -29
  452. package/dist/excalidraw/scene/scroll.d.ts +2 -2
  453. package/dist/excalidraw/scene/scrollbars.d.ts +3 -3
  454. package/dist/excalidraw/scene/selection.d.ts +2 -2
  455. package/dist/excalidraw/scene/types.d.ts +7 -8
  456. package/dist/excalidraw/scene/zoom.d.ts +1 -1
  457. package/dist/excalidraw/shapes.d.ts +7 -0
  458. package/dist/excalidraw/shapes.js +40 -0
  459. package/dist/excalidraw/snapping.d.ts +4 -4
  460. package/dist/excalidraw/snapping.js +2 -1
  461. package/dist/excalidraw/store.d.ts +129 -0
  462. package/dist/excalidraw/store.js +296 -0
  463. package/dist/excalidraw/types.d.ts +45 -22
  464. package/dist/excalidraw/utils.d.ts +20 -4
  465. package/dist/excalidraw/utils.js +29 -0
  466. package/dist/excalidraw/zindex.d.ts +4 -4
  467. package/dist/excalidraw/zindex.js +9 -13
  468. package/dist/prod/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
  469. package/dist/prod/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
  470. package/dist/prod/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
  471. package/dist/prod/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
  472. package/dist/prod/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
  473. package/dist/{dev/en-II4GK66F.json → prod/en-HDAPS7XK.json} +41 -9
  474. package/dist/prod/index.css +1 -1
  475. package/dist/prod/index.js +47 -53
  476. package/dist/utils/bbox.d.ts +2 -2
  477. package/dist/utils/collision.d.ts +4 -0
  478. package/dist/utils/collision.js +48 -0
  479. package/dist/utils/export.d.ts +4 -3
  480. package/dist/utils/export.js +2 -1
  481. package/dist/utils/geometry/geometry.d.ts +71 -0
  482. package/dist/utils/geometry/geometry.js +674 -0
  483. package/dist/utils/geometry/shape.d.ts +56 -0
  484. package/dist/utils/geometry/shape.js +168 -0
  485. package/dist/utils/index.d.ts +1 -0
  486. package/dist/utils/index.js +1 -0
  487. package/dist/utils/withinBounds.d.ts +1 -1
  488. package/history.ts +163 -218
  489. package/package.json +3 -2
  490. package/dist/browser/dev/Cascadia-CYPE3OJC.woff2 +0 -0
  491. package/dist/browser/dev/Virgil-UZN6MUT6.woff2 +0 -0
  492. package/dist/browser/dev/excalidraw-assets-dev/chunk-AK7SWNLN.js.map +0 -7
  493. package/dist/browser/dev/excalidraw-assets-dev/chunk-RWZVJAQU.js.map +0 -7
  494. package/dist/browser/dev/excalidraw-assets-dev/chunk-Z3PH3V2B.js.map +0 -7
  495. package/dist/browser/dev/excalidraw-assets-dev/dist-Z46EOVOL.js.map +0 -7
  496. package/dist/browser/dev/excalidraw-assets-dev/image-OFRRV5MB.css.map +0 -7
  497. package/dist/browser/prod/Cascadia-CYPE3OJC.woff2 +0 -0
  498. package/dist/browser/prod/Virgil-UZN6MUT6.woff2 +0 -0
  499. package/dist/browser/prod/excalidraw-assets/chunk-LL4GORAM.js +0 -55
  500. package/dist/browser/prod/excalidraw-assets/dist-PIPZXALV.js +0 -6
  501. package/dist/browser/prod/excalidraw-assets/en-LROPV2RN.js +0 -1
  502. package/dist/browser/prod/excalidraw-assets/image-EFCJDJH3.js +0 -1
  503. package/dist/dev/Cascadia-CYPE3OJC.woff2 +0 -0
  504. package/dist/dev/Virgil-UZN6MUT6.woff2 +0 -0
  505. package/dist/excalidraw/components/Stats.d.ts +0 -11
  506. package/dist/excalidraw/components/Stats.js +0 -13
  507. package/dist/excalidraw/scene/Fonts.d.ts +0 -21
  508. package/dist/excalidraw/scene/Fonts.js +0 -72
  509. package/dist/prod/Cascadia-CYPE3OJC.woff2 +0 -0
  510. package/dist/prod/Virgil-UZN6MUT6.woff2 +0 -0
  511. /package/dist/browser/dev/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets-dev/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
  512. /package/dist/browser/dev/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets-dev/Assistant-Medium-DZ25RZU3.woff2} +0 -0
  513. /package/dist/browser/dev/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets-dev/Assistant-Regular-PLF2XOGW.woff2} +0 -0
  514. /package/dist/browser/dev/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets-dev/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
  515. /package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-ACFH36JV.js.map → blockDiagram-91b80b7a-H47FTXHA.js.map} +0 -0
  516. /package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-QZ27YR47.js.map → c4Diagram-b2a90758-NNJK6GKC.js.map} +0 -0
  517. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-HO2HMSK7.js.map → chunk-4KQVEBHW.js.map} +0 -0
  518. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-USGV265L.js.map → chunk-53YI56GV.js.map} +0 -0
  519. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-EDFX3S7X.js.map → chunk-A2WCJI4I.js.map} +0 -0
  520. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-IX4V72YG.js.map → chunk-EFLPX7NE.js.map} +0 -0
  521. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-MXVETLVM.js.map → chunk-JYIQCNWV.js.map} +0 -0
  522. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js.map → chunk-LVIQQW6F.js.map} +0 -0
  523. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js.map → chunk-PXLO3FOU.js.map} +0 -0
  524. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-7DACDEY3.js.map → chunk-TO2AW5PW.js.map} +0 -0
  525. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-NJ77ZFNJ.js.map → chunk-VURILHLY.js.map} +0 -0
  526. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-2T2GU7NF.js.map → chunk-ZAYGSUHF.js.map} +0 -0
  527. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-QSLMH4JW.js.map → classDiagram-30eddba6-CUYIJICN.js.map} +0 -0
  528. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-DY4DYQ5P.js.map → classDiagram-v2-f2df5561-K6WW6K73.js.map} +0 -0
  529. /package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js.map → en-RAFN4KPD.js.map} +0 -0
  530. /package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js.map → erDiagram-47591fe2-XGAD7EEP.js.map} +0 -0
  531. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js.map → flowDiagram-5540d9b9-B6EOVNNO.js.map} +0 -0
  532. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js.map → flowDiagram-v2-3b53844e-NUG24FJH.js.map} +0 -0
  533. /package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js.map → flowchart-elk-definition-5fe447d6-25Y7PCBL.js.map} +0 -0
  534. /package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js.map → ganttDiagram-9a3bba1f-GNL6ZDTC.js.map} +0 -0
  535. /package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js.map → gitGraphDiagram-96e6b4ee-HNW52NVO.js.map} +0 -0
  536. /package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js.map → image-ZNLDWTK3.js.map} +0 -0
  537. /package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js.map → infoDiagram-bcd20f53-FWEUVFLT.js.map} +0 -0
  538. /package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js.map → journeyDiagram-4fe6b3dc-RZIUI7UG.js.map} +0 -0
  539. /package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js.map → mindmap-definition-f354de21-GBVN45GU.js.map} +0 -0
  540. /package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js.map → pieDiagram-79897490-ECENNII6.js.map} +0 -0
  541. /package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js.map → quadrantDiagram-62f64e94-ZMEOFVNL.js.map} +0 -0
  542. /package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js.map → requirementDiagram-05bf5f74-FHZSFHCR.js.map} +0 -0
  543. /package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js.map → sankeyDiagram-97764748-VDKIKTA6.js.map} +0 -0
  544. /package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js.map → sequenceDiagram-acc0e65c-6JUSPVKX.js.map} +0 -0
  545. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js.map → stateDiagram-0ff1cf1a-L3AKWENF.js.map} +0 -0
  546. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js.map → stateDiagram-v2-9a9d610d-NU3GGMCH.js.map} +0 -0
  547. /package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js.map → timeline-definition-fea2a41d-JGP7XCHW.js.map} +0 -0
  548. /package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js.map → xychartDiagram-ab372869-HLFHHF2I.js.map} +0 -0
  549. /package/dist/browser/prod/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
  550. /package/dist/browser/prod/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets/Assistant-Medium-DZ25RZU3.woff2} +0 -0
  551. /package/dist/browser/prod/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets/Assistant-Regular-PLF2XOGW.woff2} +0 -0
  552. /package/dist/browser/prod/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
@@ -1,13 +1,17 @@
1
- import { OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransformHandlesFromCoords, getTransformHandles, } from "./transformHandles";
1
+ import { getTransformHandlesFromCoords, getTransformHandles, getOmitSidesForDevice, canResizeFromSides, } from "./transformHandles";
2
+ import { getElementAbsoluteCoords } from "./bounds";
3
+ import { SIDE_RESIZING_THRESHOLD } from "../constants";
4
+ import { angleToDegrees, pointOnLine, pointRotate, } from "../../utils/geometry/geometry";
5
+ import { isLinearElement } from "./typeChecks";
2
6
  const isInsideTransformHandle = (transformHandle, x, y) => x >= transformHandle[0] &&
3
7
  x <= transformHandle[0] + transformHandle[2] &&
4
8
  y >= transformHandle[1] &&
5
9
  y <= transformHandle[1] + transformHandle[3];
6
- export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerType) => {
10
+ export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerType, device) => {
7
11
  if (!appState.selectedElementIds[element.id]) {
8
12
  return false;
9
13
  }
10
- const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, elementsMap, pointerType);
14
+ const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, elementsMap, pointerType, getOmitSidesForDevice(device));
11
15
  if (rotationTransformHandle &&
12
16
  isInsideTransformHandle(rotationTransformHandle, x, y)) {
13
17
  return "rotation";
@@ -22,25 +26,54 @@ export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerTy
22
26
  if (filter.length > 0) {
23
27
  return filter[0];
24
28
  }
29
+ if (canResizeFromSides(device)) {
30
+ const [x1, y1, x2, y2, cx, cy] = getElementAbsoluteCoords(element, elementsMap);
31
+ // do not resize from the sides for linear elements with only two points
32
+ if (!(isLinearElement(element) && element.points.length <= 2)) {
33
+ const SPACING = SIDE_RESIZING_THRESHOLD / zoom.value;
34
+ const sides = getSelectionBorders([x1 - SPACING, y1 - SPACING], [x2 + SPACING, y2 + SPACING], [cx, cy], angleToDegrees(element.angle));
35
+ for (const [dir, side] of Object.entries(sides)) {
36
+ // test to see if x, y are on the line segment
37
+ if (pointOnLine([x, y], side, SPACING)) {
38
+ return dir;
39
+ }
40
+ }
41
+ }
42
+ }
25
43
  return false;
26
44
  };
27
- export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType, elementsMap) => {
45
+ export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType, elementsMap, device) => {
28
46
  return elements.reduce((result, element) => {
29
47
  if (result) {
30
48
  return result;
31
49
  }
32
- const transformHandleType = resizeTest(element, elementsMap, appState, scenePointerX, scenePointerY, zoom, pointerType);
50
+ const transformHandleType = resizeTest(element, elementsMap, appState, scenePointerX, scenePointerY, zoom, pointerType, device);
33
51
  return transformHandleType ? { element, transformHandleType } : null;
34
52
  }, null);
35
53
  };
36
- export const getTransformHandleTypeFromCoords = ([x1, y1, x2, y2], scenePointerX, scenePointerY, zoom, pointerType) => {
37
- const transformHandles = getTransformHandlesFromCoords([x1, y1, x2, y2, (x1 + x2) / 2, (y1 + y2) / 2], 0, zoom, pointerType, OMIT_SIDES_FOR_MULTIPLE_ELEMENTS);
54
+ export const getTransformHandleTypeFromCoords = ([x1, y1, x2, y2], scenePointerX, scenePointerY, zoom, pointerType, device) => {
55
+ const transformHandles = getTransformHandlesFromCoords([x1, y1, x2, y2, (x1 + x2) / 2, (y1 + y2) / 2], 0, zoom, pointerType, getOmitSidesForDevice(device));
38
56
  const found = Object.keys(transformHandles).find((key) => {
39
57
  const transformHandle = transformHandles[key];
40
58
  return (transformHandle &&
41
59
  isInsideTransformHandle(transformHandle, scenePointerX, scenePointerY));
42
60
  });
43
- return (found || false);
61
+ if (found) {
62
+ return found;
63
+ }
64
+ if (canResizeFromSides(device)) {
65
+ const cx = (x1 + x2) / 2;
66
+ const cy = (y1 + y2) / 2;
67
+ const SPACING = SIDE_RESIZING_THRESHOLD / zoom.value;
68
+ const sides = getSelectionBorders([x1 - SPACING, y1 - SPACING], [x2 + SPACING, y2 + SPACING], [cx, cy], angleToDegrees(0));
69
+ for (const [dir, side] of Object.entries(sides)) {
70
+ // test to see if x, y are on the line segment
71
+ if (pointOnLine([scenePointerX, scenePointerY], side, SPACING)) {
72
+ return dir;
73
+ }
74
+ }
75
+ }
76
+ return false;
44
77
  };
45
78
  const RESIZE_CURSORS = ["ns", "nesw", "ew", "nwse"];
46
79
  const rotateResizeCursor = (cursor, angle) => {
@@ -93,3 +126,15 @@ export const getCursorForResizingElement = (resizingElement) => {
93
126
  }
94
127
  return cursor ? `${cursor}-resize` : "";
95
128
  };
129
+ const getSelectionBorders = ([x1, y1], [x2, y2], center, angleInDegrees) => {
130
+ const topLeft = pointRotate([x1, y1], angleInDegrees, center);
131
+ const topRight = pointRotate([x2, y1], angleInDegrees, center);
132
+ const bottomLeft = pointRotate([x1, y2], angleInDegrees, center);
133
+ const bottomRight = pointRotate([x2, y2], angleInDegrees, center);
134
+ return {
135
+ n: [topLeft, topRight],
136
+ e: [topRight, bottomRight],
137
+ s: [bottomRight, bottomLeft],
138
+ w: [bottomLeft, topLeft],
139
+ };
140
+ };
@@ -1,3 +1,3 @@
1
- import { NonDeletedExcalidrawElement } from "./types";
2
- import { UIAppState } from "../types";
1
+ import type { NonDeletedExcalidrawElement } from "./types";
2
+ import type { UIAppState } from "../types";
3
3
  export declare const showSelectedShapeActions: (appState: UIAppState, elements: readonly NonDeletedExcalidrawElement[]) => boolean;
@@ -1,5 +1,5 @@
1
- import { ElementsMap, ExcalidrawElement } from "./types";
2
- import { AppState, Zoom } from "../types";
1
+ import type { ElementsMap, ExcalidrawElement } from "./types";
2
+ import type { AppState, Zoom } from "../types";
3
3
  export declare const isInvisiblySmallElement: (element: ExcalidrawElement) => boolean;
4
4
  export declare const isElementInViewport: (element: ExcalidrawElement, width: number, height: number, viewTransformations: {
5
5
  zoom: Zoom;
@@ -3,6 +3,9 @@ import { isFreeDrawElement, isLinearElement } from "./typeChecks";
3
3
  import { SHIFT_LOCKING_ANGLE } from "../constants";
4
4
  import { getElementBounds } from "./bounds";
5
5
  import { viewportCoordsToSceneCoords } from "../utils";
6
+ // TODO: remove invisible elements consistently actions, so that invisible elements are not recorded by the store, exported, broadcasted or persisted
7
+ // - perhaps could be as part of a standalone 'cleanup' action, in addition to 'finalize'
8
+ // - could also be part of `_clearElements`
6
9
  export const isInvisiblySmallElement = (element) => {
7
10
  if (isLinearElement(element) || isFreeDrawElement(element)) {
8
11
  return element.points.length < 2;
@@ -1,2 +1,2 @@
1
- import { ExcalidrawElement } from "./types";
1
+ import type { ExcalidrawElement } from "./types";
2
2
  export declare const normalizeElementOrder: (elements: readonly ExcalidrawElement[]) => readonly ExcalidrawElement[];
@@ -1,9 +1,9 @@
1
- import { ElementsMap, ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontFamilyValues, FontString, NonDeletedExcalidrawElement } from "./types";
2
- import { MaybeTransformHandleType } from "./transformHandles";
3
- import { AppState } from "../types";
4
- import { ExtractSetType, MakeBrand } from "../utility-types";
1
+ import type { ElementsMap, ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontString, NonDeletedExcalidrawElement } from "./types";
2
+ import type { MaybeTransformHandleType } from "./transformHandles";
3
+ import type { AppState } from "../types";
4
+ import type { ExtractSetType } from "../utility-types";
5
5
  export declare const normalizeText: (text: string) => string;
6
- export declare const redrawTextBoundingBox: (textElement: ExcalidrawTextElement, container: ExcalidrawElement | null, elementsMap: ElementsMap) => void;
6
+ export declare const redrawTextBoundingBox: (textElement: ExcalidrawTextElement, container: ExcalidrawElement | null, elementsMap: ElementsMap, informMutation?: boolean) => void;
7
7
  export declare const bindTextToShapeAfterDuplication: (newElements: ExcalidrawElement[], oldElements: ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
8
8
  export declare const handleBindTextResize: (container: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleType: MaybeTransformHandleType, shouldMaintainAspectRatio?: boolean) => void;
9
9
  export declare const computeBoundTextPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
@@ -26,12 +26,8 @@ export declare const detectLineHeight: (textElement: ExcalidrawTextElement) => n
26
26
  * aligning with the W3C spec.
27
27
  */
28
28
  export declare const getLineHeightInPx: (fontSize: ExcalidrawTextElement["fontSize"], lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
29
- /**
30
- * Calculates vertical offset for a text with alphabetic baseline.
31
- */
32
- export declare const getVerticalOffset: (fontFamily: ExcalidrawTextElement["fontFamily"], fontSize: ExcalidrawTextElement["fontSize"], lineHeightPx: number) => number;
33
29
  export declare const getApproxMinLineHeight: (fontSize: ExcalidrawTextElement["fontSize"], lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
34
- export declare const getTextWidth: (text: string, font: FontString) => number;
30
+ export declare const getTextWidth: (text: string, font: FontString, forceAdvanceWidth?: true) => number;
35
31
  export declare const getTextHeight: (text: string, fontSize: number, lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
36
32
  export declare const parseTokens: (text: string) => string[];
37
33
  export declare const wrapText: (text: string, font: FontString, maxWidth: number) => string;
@@ -42,7 +38,6 @@ export declare const charWidth: {
42
38
  export declare const getApproxMinLineWidth: (font: FontString, lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
43
39
  export declare const getMinCharWidth: (font: FontString) => number;
44
40
  export declare const getMaxCharWidth: (font: FontString) => number;
45
- export declare const getApproxCharsToFitInWidth: (font: FontString, width: number) => number;
46
41
  export declare const getBoundTextElementId: (container: ExcalidrawElement | null) => string | null;
47
42
  export declare const getBoundTextElement: (element: ExcalidrawElement | null, elementsMap: ElementsMap) => ExcalidrawTextElementWithContainer | null;
48
43
  export declare const getContainerElement: (element: ExcalidrawTextElement | null, elementsMap: ElementsMap) => ExcalidrawTextContainer | null;
@@ -61,7 +56,6 @@ export declare const getBoundTextElementPosition: (container: ExcalidrawElement,
61
56
  } | undefined;
62
57
  export declare const shouldAllowVerticalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
63
58
  export declare const suppportsHorizontalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
64
- export declare const getTextBindableContainerAtPosition: (elements: readonly ExcalidrawElement[], appState: AppState, x: number, y: number, elementsMap: ElementsMap) => ExcalidrawTextContainer | null;
65
59
  declare const VALID_CONTAINER_TYPES: Set<string>;
66
60
  export declare const isValidTextContainer: (element: {
67
61
  type: ExcalidrawElementType;
@@ -70,22 +64,5 @@ export declare const computeContainerDimensionForBoundText: (dimension: number,
70
64
  export declare const getBoundTextMaxWidth: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElement | null) => number;
71
65
  export declare const getBoundTextMaxHeight: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer) => number;
72
66
  export declare const isMeasureTextSupported: () => boolean;
73
- /** OS/2 sTypoAscender, https://learn.microsoft.com/en-us/typography/opentype/spec/os2#stypoascender */
74
- type sTypoAscender = number & MakeBrand<"sTypoAscender">;
75
- /** OS/2 sTypoDescender, https://learn.microsoft.com/en-us/typography/opentype/spec/os2#stypodescender */
76
- type sTypoDescender = number & MakeBrand<"sTypoDescender">;
77
- /**
78
- * Hardcoded metrics for default fonts, read by https://opentype.js.org/font-inspector.html.
79
- * For custom fonts, read these metrics from OS/2 table and extend this object.
80
- *
81
- * WARN: opentype does NOT open WOFF2 correctly, make sure to convert WOFF2 to TTF first.
82
- */
83
- export declare const FONT_METRICS: Record<number, {
84
- unitsPerEm: number;
85
- ascender: sTypoAscender;
86
- descender: sTypoDescender;
87
- }>;
88
- export declare const getDefaultLineHeight: (fontFamily: FontFamilyValues) => number & {
89
- _brand: "unitlessLineHeight";
90
- };
67
+ export declare const getMinTextElementWidth: (font: FontString, lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
91
68
  export {};
@@ -1,13 +1,9 @@
1
1
  import { getFontString, arrayToMap, isTestEnv, normalizeEOL } from "../utils";
2
2
  import { mutateElement } from "./mutateElement";
3
- import { ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO, ARROW_LABEL_WIDTH_FRACTION, BOUND_TEXT_PADDING, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, FONT_FAMILY, TEXT_ALIGN, VERTICAL_ALIGN, } from "../constants";
3
+ import { ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO, ARROW_LABEL_WIDTH_FRACTION, BOUND_TEXT_PADDING, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, TEXT_ALIGN, VERTICAL_ALIGN, } from "../constants";
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);
@@ -199,41 +201,58 @@ export const detectLineHeight = (textElement) => {
199
201
  export const getLineHeightInPx = (fontSize, lineHeight) => {
200
202
  return fontSize * lineHeight;
201
203
  };
202
- /**
203
- * Calculates vertical offset for a text with alphabetic baseline.
204
- */
205
- export const getVerticalOffset = (fontFamily, fontSize, lineHeightPx) => {
206
- const { unitsPerEm, ascender, descender } = FONT_METRICS[fontFamily] || FONT_METRICS[FONT_FAMILY.Helvetica];
207
- const fontSizeEm = fontSize / unitsPerEm;
208
- const lineGap = lineHeightPx - fontSizeEm * ascender + fontSizeEm * descender;
209
- const verticalOffset = fontSizeEm * ascender + lineGap;
210
- return verticalOffset;
211
- };
212
204
  // FIXME rename to getApproxMinContainerHeight
213
205
  export const getApproxMinLineHeight = (fontSize, lineHeight) => {
214
206
  return getLineHeightInPx(fontSize, lineHeight) + BOUND_TEXT_PADDING * 2;
215
207
  };
216
208
  let canvas;
217
- const getLineWidth = (text, font) => {
209
+ /**
210
+ * @param forceAdvanceWidth use to force retrieve the "advance width" ~ `metrics.width`, instead of the actual boundind box width.
211
+ *
212
+ * > The advance width is the distance between the glyph's initial pen position and the next glyph's initial pen position.
213
+ *
214
+ * We need to use the advance width as that's the closest thing to the browser wrapping algo, hence using it for:
215
+ * - text wrapping
216
+ * - wysiwyg editor (+padding)
217
+ *
218
+ * Everything else should be based on the actual bounding box width.
219
+ *
220
+ * `Math.ceil` of the final width adds additional buffer which stabilizes slight wrapping incosistencies.
221
+ */
222
+ const getLineWidth = (text, font, forceAdvanceWidth) => {
218
223
  if (!canvas) {
219
224
  canvas = document.createElement("canvas");
220
225
  }
221
226
  const canvas2dContext = canvas.getContext("2d");
222
227
  canvas2dContext.font = font;
223
- const width = canvas2dContext.measureText(text).width;
228
+ const metrics = canvas2dContext.measureText(text);
229
+ const advanceWidth = metrics.width;
230
+ // retrieve the actual bounding box width if these metrics are available (as of now > 95% coverage)
231
+ if (!forceAdvanceWidth &&
232
+ window.TextMetrics &&
233
+ "actualBoundingBoxLeft" in window.TextMetrics.prototype &&
234
+ "actualBoundingBoxRight" in window.TextMetrics.prototype) {
235
+ // could be negative, therefore getting the absolute value
236
+ const actualWidth = Math.abs(metrics.actualBoundingBoxLeft) +
237
+ Math.abs(metrics.actualBoundingBoxRight);
238
+ // fallback to advance width if the actual width is zero, i.e. on text editing start
239
+ // or when actual width does not respect whitespace chars, i.e. spaces
240
+ // otherwise actual width should always be bigger
241
+ return Math.max(actualWidth, advanceWidth);
242
+ }
224
243
  // since in test env the canvas measureText algo
225
244
  // doesn't measure text and instead just returns number of
226
245
  // characters hence we assume that each letteris 10px
227
246
  if (isTestEnv()) {
228
- return width * 10;
247
+ return advanceWidth * 10;
229
248
  }
230
- return width;
249
+ return advanceWidth;
231
250
  };
232
- export const getTextWidth = (text, font) => {
251
+ export const getTextWidth = (text, font, forceAdvanceWidth) => {
233
252
  const lines = splitIntoLines(text);
234
253
  let width = 0;
235
254
  lines.forEach((line) => {
236
- width = Math.max(width, getLineWidth(line, font));
255
+ width = Math.max(width, getLineWidth(line, font, forceAdvanceWidth));
237
256
  });
238
257
  return width;
239
258
  };
@@ -267,7 +286,7 @@ export const wrapText = (text, font, maxWidth) => {
267
286
  }
268
287
  const lines = [];
269
288
  const originalLines = text.split("\n");
270
- const spaceWidth = getLineWidth(" ", font);
289
+ const spaceAdvanceWidth = getLineWidth(" ", font, true);
271
290
  let currentLine = "";
272
291
  let currentLineWidthTillNow = 0;
273
292
  const push = (str) => {
@@ -279,18 +298,18 @@ export const wrapText = (text, font, maxWidth) => {
279
298
  currentLine = "";
280
299
  currentLineWidthTillNow = 0;
281
300
  };
282
- originalLines.forEach((originalLine) => {
283
- const currentLineWidth = getTextWidth(originalLine, font);
301
+ for (const originalLine of originalLines) {
302
+ const currentLineWidth = getLineWidth(originalLine, font, true);
284
303
  // Push the line if its <= maxWidth
285
304
  if (currentLineWidth <= maxWidth) {
286
305
  lines.push(originalLine);
287
- return; // continue
306
+ continue;
288
307
  }
289
308
  const words = parseTokens(originalLine);
290
309
  resetParams();
291
310
  let index = 0;
292
311
  while (index < words.length) {
293
- const currentWordWidth = getLineWidth(words[index], font);
312
+ const currentWordWidth = getLineWidth(words[index], font, true);
294
313
  // This will only happen when single word takes entire width
295
314
  if (currentWordWidth === maxWidth) {
296
315
  push(words[index]);
@@ -304,20 +323,24 @@ export const wrapText = (text, font, maxWidth) => {
304
323
  resetParams();
305
324
  while (words[index].length > 0) {
306
325
  const currentChar = String.fromCodePoint(words[index].codePointAt(0));
307
- const width = charWidth.calculate(currentChar, font);
308
- currentLineWidthTillNow += width;
326
+ const line = currentLine + currentChar;
327
+ // use advance width instead of the actual width as it's closest to the browser wapping algo
328
+ // use width of the whole line instead of calculating individual chars to accomodate for kerning
329
+ const lineAdvanceWidth = getLineWidth(line, font, true);
330
+ const charAdvanceWidth = charWidth.calculate(currentChar, font);
331
+ currentLineWidthTillNow = lineAdvanceWidth;
309
332
  words[index] = words[index].slice(currentChar.length);
310
333
  if (currentLineWidthTillNow >= maxWidth) {
311
334
  push(currentLine);
312
335
  currentLine = currentChar;
313
- currentLineWidthTillNow = width;
336
+ currentLineWidthTillNow = charAdvanceWidth;
314
337
  }
315
338
  else {
316
- currentLine += currentChar;
339
+ currentLine = line;
317
340
  }
318
341
  }
319
342
  // push current line if appending space exceeds max width
320
- if (currentLineWidthTillNow + spaceWidth >= maxWidth) {
343
+ if (currentLineWidthTillNow + spaceAdvanceWidth >= maxWidth) {
321
344
  push(currentLine);
322
345
  resetParams();
323
346
  // space needs to be appended before next word
@@ -327,7 +350,7 @@ export const wrapText = (text, font, maxWidth) => {
327
350
  }
328
351
  else if (!currentLine.endsWith("-")) {
329
352
  currentLine += " ";
330
- currentLineWidthTillNow += spaceWidth;
353
+ currentLineWidthTillNow += spaceAdvanceWidth;
331
354
  }
332
355
  index++;
333
356
  }
@@ -335,7 +358,7 @@ export const wrapText = (text, font, maxWidth) => {
335
358
  // Start appending words in a line till max width reached
336
359
  while (currentLineWidthTillNow < maxWidth && index < words.length) {
337
360
  const word = words[index];
338
- currentLineWidthTillNow = getLineWidth(currentLine + word, font);
361
+ currentLineWidthTillNow = getLineWidth(currentLine + word, font, true);
339
362
  if (currentLineWidthTillNow > maxWidth) {
340
363
  push(currentLine);
341
364
  resetParams();
@@ -350,7 +373,7 @@ export const wrapText = (text, font, maxWidth) => {
350
373
  currentLine += " ";
351
374
  }
352
375
  // Push the word if appending space exceeds max width
353
- if (currentLineWidthTillNow + spaceWidth >= maxWidth) {
376
+ if (currentLineWidthTillNow + spaceAdvanceWidth >= maxWidth) {
354
377
  if (shouldAppendSpace) {
355
378
  lines.push(currentLine.slice(0, -1));
356
379
  }
@@ -368,7 +391,7 @@ export const wrapText = (text, font, maxWidth) => {
368
391
  currentLine = currentLine.slice(0, -1);
369
392
  push(currentLine);
370
393
  }
371
- });
394
+ }
372
395
  return lines.join("\n");
373
396
  };
374
397
  export const charWidth = (() => {
@@ -379,7 +402,7 @@ export const charWidth = (() => {
379
402
  cachedCharWidth[font] = [];
380
403
  }
381
404
  if (!cachedCharWidth[font][ascii]) {
382
- const width = getLineWidth(char, font);
405
+ const width = getLineWidth(char, font, true);
383
406
  cachedCharWidth[font][ascii] = width;
384
407
  }
385
408
  return cachedCharWidth[font][ascii];
@@ -418,28 +441,6 @@ export const getMaxCharWidth = (font) => {
418
441
  const cacheWithOutEmpty = cache.filter((val) => val !== undefined);
419
442
  return Math.max(...cacheWithOutEmpty);
420
443
  };
421
- export const getApproxCharsToFitInWidth = (font, width) => {
422
- // Generally lower case is used so converting to lower case
423
- const dummyText = DUMMY_TEXT.toLocaleLowerCase();
424
- const batchLength = 6;
425
- let index = 0;
426
- let widthTillNow = 0;
427
- let str = "";
428
- while (widthTillNow <= width) {
429
- const batch = dummyText.substr(index, index + batchLength);
430
- str += batch;
431
- widthTillNow += getLineWidth(str, font);
432
- if (index === dummyText.length - 1) {
433
- index = 0;
434
- }
435
- index = index + batchLength;
436
- }
437
- while (widthTillNow > width) {
438
- str = str.substr(0, str.length - 1);
439
- widthTillNow = getLineWidth(str, font);
440
- }
441
- return str.length;
442
- };
443
444
  export const getBoundTextElementId = (container) => {
444
445
  return container?.boundElements?.length
445
446
  ? container?.boundElements?.filter((ele) => ele.type === "text")[0]?.id ||
@@ -540,32 +541,6 @@ export const suppportsHorizontalAlign = (selectedElements, elementsMap) => {
540
541
  return isTextElement(element);
541
542
  });
542
543
  };
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
544
  const VALID_CONTAINER_TYPES = new Set([
570
545
  "rectangle",
571
546
  "ellipse",
@@ -636,57 +611,6 @@ export const isMeasureTextSupported = () => {
636
611
  }));
637
612
  return width > 0;
638
613
  };
639
- /**
640
- * Unitless line height
641
- *
642
- * In previous versions we used `normal` line height, which browsers interpret
643
- * differently, and based on font-family and font-size.
644
- *
645
- * To make line heights consistent across browsers we hardcode the values for
646
- * each of our fonts based on most common average line-heights.
647
- * See https://github.com/excalidraw/excalidraw/pull/6360#issuecomment-1477635971
648
- * where the values come from.
649
- */
650
- const DEFAULT_LINE_HEIGHT = {
651
- // ~1.25 is the average for Virgil in WebKit and Blink.
652
- // Gecko (FF) uses ~1.28.
653
- [FONT_FAMILY.Virgil]: 1.25,
654
- // ~1.15 is the average for Helvetica in WebKit and Blink.
655
- [FONT_FAMILY.Helvetica]: 1.15,
656
- // ~1.2 is the average for Cascadia in WebKit and Blink, and kinda Gecko too
657
- [FONT_FAMILY.Cascadia]: 1.2,
658
- };
659
- /**
660
- * Hardcoded metrics for default fonts, read by https://opentype.js.org/font-inspector.html.
661
- * For custom fonts, read these metrics from OS/2 table and extend this object.
662
- *
663
- * WARN: opentype does NOT open WOFF2 correctly, make sure to convert WOFF2 to TTF first.
664
- */
665
- export const FONT_METRICS = {
666
- [FONT_FAMILY.Virgil]: {
667
- unitsPerEm: 1000,
668
- ascender: 886,
669
- descender: -374,
670
- },
671
- [FONT_FAMILY.Helvetica]: {
672
- unitsPerEm: 2048,
673
- ascender: 1577,
674
- descender: -471,
675
- },
676
- [FONT_FAMILY.Cascadia]: {
677
- unitsPerEm: 2048,
678
- ascender: 1977,
679
- descender: -480,
680
- },
681
- [FONT_FAMILY.Assistant]: {
682
- unitsPerEm: 1000,
683
- ascender: 1021,
684
- descender: -287,
685
- },
686
- };
687
- export const getDefaultLineHeight = (fontFamily) => {
688
- if (fontFamily in DEFAULT_LINE_HEIGHT) {
689
- return DEFAULT_LINE_HEIGHT[fontFamily];
690
- }
691
- return DEFAULT_LINE_HEIGHT[DEFAULT_FONT_FAMILY];
614
+ export const getMinTextElementWidth = (font, lineHeight) => {
615
+ return measureText("", font, lineHeight).width + BOUND_TEXT_PADDING * 2;
692
616
  };
@@ -1,16 +1,22 @@
1
- import { ExcalidrawElement, ExcalidrawTextElement } from "./types";
2
- import App from "../components/App";
3
- export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, }: {
1
+ import type { ExcalidrawElement, ExcalidrawTextElement } from "./types";
2
+ import type App from "../components/App";
3
+ export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, autoSelect, }: {
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;
13
18
  canvas: HTMLCanvasElement;
14
19
  excalidrawContainer: HTMLDivElement | null;
15
20
  app: App;
21
+ autoSelect?: boolean | undefined;
16
22
  }) => void;