@dwelle/excalidraw 0.5.0-3bc80da → 0.5.0-3f1f8dd

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 (427) hide show
  1. package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-AV5QRETN.js → blockDiagram-91b80b7a-ILS6OLW7.js} +6 -6
  2. package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-76KP7R2J.js → c4Diagram-b2a90758-ZOMIZS7C.js} +4 -4
  3. package/dist/browser/dev/excalidraw-assets-dev/{chunk-VC5KAH7K.js → chunk-2NKYQ7YO.js} +7 -7
  4. package/dist/browser/dev/excalidraw-assets-dev/{chunk-5A2HLTCS.js → chunk-6MVAKZD7.js} +3 -3
  5. package/dist/browser/dev/excalidraw-assets-dev/{chunk-ETW42MP7.js → chunk-A3JTYPH7.js} +3 -3
  6. package/dist/browser/dev/excalidraw-assets-dev/{chunk-72BUNPBM.js → chunk-BUWJGA2Q.js} +1814 -1411
  7. package/dist/browser/dev/excalidraw-assets-dev/chunk-BUWJGA2Q.js.map +7 -0
  8. package/dist/browser/dev/excalidraw-assets-dev/{chunk-LQ6UJQPH.js → chunk-F3FIDJD4.js} +38 -16
  9. package/dist/browser/dev/excalidraw-assets-dev/chunk-F3FIDJD4.js.map +7 -0
  10. package/dist/browser/dev/excalidraw-assets-dev/{chunk-EGR52Q6D.js → chunk-FPTNVFSO.js} +3 -3
  11. package/dist/browser/dev/excalidraw-assets-dev/{chunk-NZKR3TXM.js → chunk-HPTO4BUO.js} +28 -28
  12. package/dist/browser/dev/excalidraw-assets-dev/chunk-HPTO4BUO.js.map +7 -0
  13. package/dist/browser/dev/excalidraw-assets-dev/{chunk-RT5XHPGC.js → chunk-JAMLJD7O.js} +3 -3
  14. package/dist/browser/dev/excalidraw-assets-dev/{chunk-7V2SB4RU.js → chunk-LOACNU4P.js} +4 -4
  15. package/dist/browser/dev/excalidraw-assets-dev/{chunk-RC7ANJ5H.js → chunk-QGBZMLTJ.js} +3 -3
  16. package/dist/browser/dev/excalidraw-assets-dev/{chunk-BHIY32T7.js → chunk-RLV4E4WN.js} +3 -3
  17. package/dist/browser/dev/excalidraw-assets-dev/{chunk-ASZRDHCI.js → chunk-SHPKYTPS.js} +5 -5
  18. package/dist/browser/dev/excalidraw-assets-dev/{chunk-ADIHRQXG.js → chunk-WYUX2CK4.js} +4 -4
  19. package/dist/browser/dev/excalidraw-assets-dev/{chunk-LSPV6OUU.js → chunk-YAYXS7DC.js} +2 -2
  20. package/dist/browser/dev/excalidraw-assets-dev/{chunk-AKQDHN2W.js → chunk-YGAE3YWH.js} +5 -3
  21. package/dist/browser/dev/excalidraw-assets-dev/chunk-YGAE3YWH.js.map +7 -0
  22. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-KKFMJDII.js → classDiagram-30eddba6-YGYWOEDS.js} +6 -6
  23. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-H6OLRXIM.js → classDiagram-v2-f2df5561-4ZZOSFAG.js} +9 -9
  24. package/dist/browser/dev/excalidraw-assets-dev/{directory-open-01563666-JDTB6SPR.js → directory-open-01563666-QTUC5QKS.js} +2 -2
  25. package/dist/browser/dev/excalidraw-assets-dev/{directory-open-4ed118d0-JL7GGNMJ.js → directory-open-4ed118d0-EAOFXSXO.js} +2 -2
  26. package/dist/browser/dev/excalidraw-assets-dev/dist-V4ZSY6BC.js +10 -0
  27. package/dist/browser/dev/excalidraw-assets-dev/{en-PSBMWL4S.js → en-RSUSLGPV.js} +2 -2
  28. package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-N5L7DKGN.js → erDiagram-47591fe2-JIHVWX3W.js} +5 -5
  29. package/dist/browser/dev/excalidraw-assets-dev/{file-open-002ab408-YDSARWPZ.js → file-open-002ab408-UPAWPTEF.js} +2 -2
  30. package/dist/browser/dev/excalidraw-assets-dev/{file-open-7c801643-EROXTFSX.js → file-open-7c801643-N5N32MHQ.js} +2 -2
  31. package/dist/browser/dev/excalidraw-assets-dev/{file-save-3189631c-TL6V2OEY.js → file-save-3189631c-PRH4NPQ5.js} +2 -2
  32. package/dist/browser/dev/excalidraw-assets-dev/{file-save-745eba88-6WWZFABL.js → file-save-745eba88-5GM4HHWQ.js} +2 -2
  33. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-VRM36QCA.js → flowDiagram-5540d9b9-6CLLUMWF.js} +10 -10
  34. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-3CAUSA7W.js → flowDiagram-v2-3b53844e-NBMLQH3M.js} +10 -10
  35. package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-ODK3QXSV.js → flowchart-elk-definition-5fe447d6-UEQSCXLT.js} +6 -6
  36. package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-KKXGBNQI.js → ganttDiagram-9a3bba1f-WK2H7LFS.js} +3 -3
  37. package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-TMH7E2V3.js → gitGraphDiagram-96e6b4ee-KDAA2U2K.js} +3 -3
  38. package/dist/browser/dev/excalidraw-assets-dev/{image-DTHOT6RB.js → image-IPNHMJTL.js} +6 -6
  39. package/dist/browser/dev/excalidraw-assets-dev/{image-FDQLNM24.css → image-JYKIJPJC.css} +11 -14
  40. package/dist/browser/dev/excalidraw-assets-dev/image-JYKIJPJC.css.map +7 -0
  41. package/dist/browser/dev/excalidraw-assets-dev/{image-blob-reduce.esm-COPHY4CW.js → image-blob-reduce.esm-LQUP674P.js} +2 -2
  42. package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-VF34AT6C.js → infoDiagram-bcd20f53-JHVEGFM5.js} +3 -3
  43. package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-I4SJ2IBL.js → journeyDiagram-4fe6b3dc-LELHHHNL.js} +4 -4
  44. package/dist/browser/dev/excalidraw-assets-dev/{katex-SVKNABMQ.js → katex-24LMEI2S.js} +2 -2
  45. package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-PZW6XTRC.js → mindmap-definition-f354de21-EIYHHYCX.js} +4 -4
  46. package/dist/browser/dev/excalidraw-assets-dev/{pica-KKOK34SZ.js → pica-AEP6VYOH.js} +2 -2
  47. package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-JATUFGKC.js → pieDiagram-79897490-LKE2EHUL.js} +3 -3
  48. package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-V5FY6DEM.js → quadrantDiagram-62f64e94-HZHJFQUT.js} +3 -3
  49. package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZHT5V47S.js → requirementDiagram-05bf5f74-FXXIEN7J.js} +5 -5
  50. package/dist/browser/dev/excalidraw-assets-dev/{roundRect-ZX3RASBO.js → roundRect-5PHKZGUZ.js} +2 -2
  51. package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-ELYQDLSC.js → sankeyDiagram-97764748-KKTB5UYB.js} +3 -3
  52. package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-GEO2ZAH2.js → sequenceDiagram-acc0e65c-KPIADG32.js} +4 -4
  53. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-BLHQKXOS.js → stateDiagram-0ff1cf1a-IQUWRAPJ.js} +6 -6
  54. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-XFLTR7I5.js → stateDiagram-v2-9a9d610d-3OAKVFDX.js} +9 -9
  55. package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-6DNHPFX5.js → timeline-definition-fea2a41d-TRDW4746.js} +3 -3
  56. package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-4S5CTHTW.js → xychartDiagram-ab372869-IMLIZWMU.js} +4 -4
  57. package/dist/browser/dev/index.css +10 -13
  58. package/dist/browser/dev/index.css.map +2 -2
  59. package/dist/browser/dev/index.js +5 -5
  60. package/dist/browser/prod/excalidraw-assets/{blockDiagram-91b80b7a-JEM7KGWA.js → blockDiagram-91b80b7a-U252OY5I.js} +1 -1
  61. package/dist/browser/prod/excalidraw-assets/{c4Diagram-b2a90758-MPCOLKKP.js → c4Diagram-b2a90758-PZHH3D6H.js} +1 -1
  62. package/dist/browser/prod/excalidraw-assets/{chunk-U2OTJT7X.js → chunk-2Q2CONEB.js} +1 -1
  63. package/dist/browser/prod/excalidraw-assets/{chunk-6AI4F5QL.js → chunk-673OVD3J.js} +1 -1
  64. package/dist/browser/prod/excalidraw-assets/{chunk-OVXHC22A.js → chunk-6WNOLTTI.js} +1 -1
  65. package/dist/browser/prod/excalidraw-assets/{chunk-HSQV5QPE.js → chunk-74OJXQQW.js} +1 -1
  66. package/dist/browser/prod/excalidraw-assets/{chunk-6EO6NUHK.js → chunk-AFIKGZ5K.js} +1 -1
  67. package/dist/browser/prod/excalidraw-assets/{chunk-722XS4R3.js → chunk-BEIT5EF6.js} +1 -1
  68. package/dist/browser/prod/excalidraw-assets/{chunk-7P65EP4L.js → chunk-BZSIRHFI.js} +1 -1
  69. package/dist/browser/prod/excalidraw-assets/chunk-DIQBR7TD.js +7 -0
  70. package/dist/browser/prod/excalidraw-assets/{chunk-VVPLNHF7.js → chunk-EHJPIGV7.js} +1 -1
  71. package/dist/browser/prod/excalidraw-assets/{chunk-JVAZGNHG.js → chunk-JP7OGUWY.js} +21 -21
  72. package/dist/browser/prod/excalidraw-assets/{chunk-Y5GBBDDT.js → chunk-LJU3KBAH.js} +1 -1
  73. package/dist/browser/prod/excalidraw-assets/chunk-MZQB665Y.js +335 -0
  74. package/dist/browser/prod/excalidraw-assets/{chunk-VMMEDW7P.js → chunk-NN5GPCYQ.js} +1 -1
  75. package/dist/browser/prod/excalidraw-assets/{chunk-ICDT7GZX.js → chunk-PLOZZA4H.js} +1 -1
  76. package/dist/browser/prod/excalidraw-assets/{chunk-BJTCWAK5.js → chunk-SCZE4QLN.js} +2 -2
  77. package/dist/browser/prod/excalidraw-assets/{chunk-Q6QP4TRB.js → chunk-VVOVJRKV.js} +2 -2
  78. package/dist/browser/prod/excalidraw-assets/{classDiagram-30eddba6-L5O4YQR4.js → classDiagram-30eddba6-F55Z2E53.js} +1 -1
  79. package/dist/browser/prod/excalidraw-assets/{classDiagram-v2-f2df5561-FEFNEE7Y.js → classDiagram-v2-f2df5561-BT5JNEDE.js} +1 -1
  80. package/dist/browser/prod/excalidraw-assets/{directory-open-01563666-AYWCK7BJ.js → directory-open-01563666-6YO3OQDX.js} +1 -1
  81. package/dist/browser/prod/excalidraw-assets/{directory-open-4ed118d0-QI47HV3G.js → directory-open-4ed118d0-4LV3RSSM.js} +1 -1
  82. package/dist/browser/prod/excalidraw-assets/dist-4LC2UFYB.js +1 -0
  83. package/dist/browser/prod/excalidraw-assets/{en-MPFDZHEH.js → en-GM5O55AO-LNPCBS7J.js} +1 -1
  84. package/dist/browser/prod/excalidraw-assets/{en-Q552WR7L-QAV42NF3.js → en-SOC7FEW5.js} +1 -1
  85. package/dist/browser/prod/excalidraw-assets/{erDiagram-47591fe2-BI5PYUZN.js → erDiagram-47591fe2-XG2ZEMCB.js} +1 -1
  86. package/dist/browser/prod/excalidraw-assets/{file-open-002ab408-55ZWRNMG.js → file-open-002ab408-A6LI262V.js} +1 -1
  87. package/dist/browser/prod/excalidraw-assets/{file-open-7c801643-HBAOEEFX.js → file-open-7c801643-BBGJO4PI.js} +1 -1
  88. package/dist/browser/prod/excalidraw-assets/{file-save-3189631c-FJ75SUZ7.js → file-save-3189631c-7RDEYICA.js} +1 -1
  89. package/dist/browser/prod/excalidraw-assets/{file-save-745eba88-RAVXYEAW.js → file-save-745eba88-4PPFVJWD.js} +1 -1
  90. package/dist/browser/prod/excalidraw-assets/{flowDiagram-5540d9b9-CYU56524.js → flowDiagram-5540d9b9-2SENIXRT.js} +1 -1
  91. package/dist/browser/prod/excalidraw-assets/flowDiagram-v2-3b53844e-KLBTW5WV.js +1 -0
  92. package/dist/browser/prod/excalidraw-assets/{flowchart-elk-definition-5fe447d6-PECNKVTE.js → flowchart-elk-definition-5fe447d6-TLXFCSNW.js} +1 -1
  93. package/dist/browser/prod/excalidraw-assets/{ganttDiagram-9a3bba1f-CED7COSZ.js → ganttDiagram-9a3bba1f-5JR6PUBI.js} +1 -1
  94. package/dist/browser/prod/excalidraw-assets/{gitGraphDiagram-96e6b4ee-JKIKIQ6K.js → gitGraphDiagram-96e6b4ee-6A6CZ3PI.js} +1 -1
  95. package/dist/browser/prod/excalidraw-assets/image-MFUVVFOH.js +1 -0
  96. package/dist/browser/prod/excalidraw-assets/{image-blob-reduce.esm-JZQK2EOW.js → image-blob-reduce.esm-MLHV7PI7.js} +1 -1
  97. package/dist/browser/prod/excalidraw-assets/{infoDiagram-bcd20f53-FN22PGWX.js → infoDiagram-bcd20f53-AV3OBV2N.js} +1 -1
  98. package/dist/browser/prod/excalidraw-assets/{journeyDiagram-4fe6b3dc-4YOSXQFH.js → journeyDiagram-4fe6b3dc-BLHDTOGZ.js} +1 -1
  99. package/dist/browser/prod/excalidraw-assets/{katex-VZTZSNIY.js → katex-WDF2YXSQ.js} +1 -1
  100. package/dist/browser/prod/excalidraw-assets/{mindmap-definition-f354de21-F3HVRHRH.js → mindmap-definition-f354de21-ZETPFZUU.js} +1 -1
  101. package/dist/browser/prod/excalidraw-assets/{pica-UIPUQYNH.js → pica-EKWSA7DQ.js} +1 -1
  102. package/dist/browser/prod/excalidraw-assets/{pieDiagram-79897490-2EPJDOIF.js → pieDiagram-79897490-YIGOGIGU.js} +1 -1
  103. package/dist/browser/prod/excalidraw-assets/{quadrantDiagram-62f64e94-DOUD6GJY.js → quadrantDiagram-62f64e94-PKU6OGXK.js} +1 -1
  104. package/dist/browser/prod/excalidraw-assets/{requirementDiagram-05bf5f74-6SN5DKRA.js → requirementDiagram-05bf5f74-ZS6DWQXC.js} +1 -1
  105. package/dist/browser/prod/excalidraw-assets/{roundRect-KPNU7DEE.js → roundRect-LMXTT73M.js} +1 -1
  106. package/dist/browser/prod/excalidraw-assets/{sankeyDiagram-97764748-UWC7MPXQ.js → sankeyDiagram-97764748-BAQTPNXW.js} +1 -1
  107. package/dist/browser/prod/excalidraw-assets/{sequenceDiagram-acc0e65c-F6IOZYAD.js → sequenceDiagram-acc0e65c-ZGG6MEZO.js} +1 -1
  108. package/dist/browser/prod/excalidraw-assets/{stateDiagram-0ff1cf1a-BFMFLWOS.js → stateDiagram-0ff1cf1a-FF7QI5F7.js} +1 -1
  109. package/dist/browser/prod/excalidraw-assets/{stateDiagram-v2-9a9d610d-5VQQPAQD.js → stateDiagram-v2-9a9d610d-K3KQFXGQ.js} +1 -1
  110. package/dist/browser/prod/excalidraw-assets/{timeline-definition-fea2a41d-7E3BGOKT.js → timeline-definition-fea2a41d-2A5Y4OLK.js} +1 -1
  111. package/dist/browser/prod/excalidraw-assets/{xychartDiagram-ab372869-THLWKJ2H.js → xychartDiagram-ab372869-RKDU5XOA.js} +1 -1
  112. package/dist/browser/prod/index.css +1 -1
  113. package/dist/browser/prod/index.js +15 -15
  114. package/dist/{prod/en-Q552WR7L.json → dev/en-GM5O55AO.json} +4 -2
  115. package/dist/dev/index.css +10 -13
  116. package/dist/dev/index.css.map +2 -2
  117. package/dist/dev/index.js +1606 -1192
  118. package/dist/dev/index.js.map +4 -4
  119. package/dist/excalidraw/actions/actionAddToLibrary.d.ts +3 -3
  120. package/dist/excalidraw/actions/actionAlign.d.ts +8 -8
  121. package/dist/excalidraw/actions/actionBoundText.d.ts +6 -6
  122. package/dist/excalidraw/actions/actionBoundText.js +3 -1
  123. package/dist/excalidraw/actions/actionCanvas.d.ts +16 -16
  124. package/dist/excalidraw/actions/actionClipboard.d.ts +12 -12
  125. package/dist/excalidraw/actions/actionDeleteSelected.d.ts +5 -5
  126. package/dist/excalidraw/actions/actionDistribute.d.ts +4 -4
  127. package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +3 -3
  128. package/dist/excalidraw/actions/actionElementLock.d.ts +3 -3
  129. package/dist/excalidraw/actions/actionExport.d.ts +12 -12
  130. package/dist/excalidraw/actions/actionFinalize.d.ts +3 -3
  131. package/dist/excalidraw/actions/actionFlip.d.ts +4 -4
  132. package/dist/excalidraw/actions/actionFlip.js +6 -7
  133. package/dist/excalidraw/actions/actionFrame.d.ts +314 -6
  134. package/dist/excalidraw/actions/actionGroup.d.ts +314 -4
  135. package/dist/excalidraw/actions/actionHistory.d.ts +3 -3
  136. package/dist/excalidraw/actions/actionHistory.js +4 -4
  137. package/dist/excalidraw/actions/actionLinearEditor.d.ts +5 -3
  138. package/dist/excalidraw/actions/actionLinearEditor.js +19 -4
  139. package/dist/excalidraw/actions/actionLink.d.ts +1 -1
  140. package/dist/excalidraw/actions/actionMenu.d.ts +3 -3
  141. package/dist/excalidraw/actions/actionNavigate.d.ts +3 -3
  142. package/dist/excalidraw/actions/actionProperties.d.ts +15 -15
  143. package/dist/excalidraw/actions/actionProperties.js +1 -1
  144. package/dist/excalidraw/actions/actionSelectAll.d.ts +2 -2
  145. package/dist/excalidraw/actions/actionStyles.d.ts +5 -2
  146. package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
  147. package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
  148. package/dist/excalidraw/actions/actionToggleGridMode.d.ts +2 -2
  149. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +1 -1
  150. package/dist/excalidraw/actions/actionToggleStats.d.ts +1 -1
  151. package/dist/excalidraw/actions/actionToggleViewMode.d.ts +1 -1
  152. package/dist/excalidraw/actions/actionToggleZenMode.d.ts +1 -1
  153. package/dist/excalidraw/actions/actionZindex.d.ts +8 -4
  154. package/dist/excalidraw/actions/actionZindex.js +4 -0
  155. package/dist/excalidraw/actions/manager.d.ts +3 -3
  156. package/dist/excalidraw/actions/register.d.ts +1 -1
  157. package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
  158. package/dist/excalidraw/actions/types.d.ts +6 -6
  159. package/dist/excalidraw/align.d.ts +1 -1
  160. package/dist/excalidraw/animated-trail.d.ts +2 -2
  161. package/dist/excalidraw/appState.d.ts +1 -1
  162. package/dist/excalidraw/change.d.ts +4 -4
  163. package/dist/excalidraw/change.js +14 -7
  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 +10 -11
  172. package/dist/excalidraw/components/App.js +187 -95
  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 +5 -5
  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/DefaultSidebar.d.ts +2 -2
  197. package/dist/excalidraw/components/Dialog.js +1 -1
  198. package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
  199. package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
  200. package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
  201. package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
  202. package/dist/excalidraw/components/HintViewer.d.ts +1 -1
  203. package/dist/excalidraw/components/IconPicker.js +2 -2
  204. package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
  205. package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
  206. package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
  207. package/dist/excalidraw/components/LayerUI.d.ts +4 -4
  208. package/dist/excalidraw/components/LayerUI.js +2 -2
  209. package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
  210. package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
  211. package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  212. package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
  213. package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
  214. package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
  215. package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
  216. package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
  217. package/dist/excalidraw/components/MagicSettings.js +2 -2
  218. package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
  219. package/dist/excalidraw/components/MobileMenu.js +1 -1
  220. package/dist/excalidraw/components/Modal.d.ts +1 -1
  221. package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  222. package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
  223. package/dist/excalidraw/components/PasteChartDialog.js +1 -1
  224. package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
  225. package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
  226. package/dist/excalidraw/components/Sidebar/Sidebar.d.ts +2 -2
  227. package/dist/excalidraw/components/Sidebar/Sidebar.js +1 -1
  228. package/dist/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -1
  229. package/dist/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -1
  230. package/dist/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
  231. package/dist/excalidraw/components/Sidebar/common.d.ts +1 -1
  232. package/dist/excalidraw/components/Stack.d.ts +2 -2
  233. package/dist/excalidraw/components/Stats.d.ts +2 -2
  234. package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
  235. package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
  236. package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
  237. package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
  238. package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
  239. package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
  240. package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
  241. package/dist/excalidraw/components/TTDDialog/common.d.ts +4 -4
  242. package/dist/excalidraw/components/TextField.d.ts +1 -1
  243. package/dist/excalidraw/components/Toast.d.ts +1 -1
  244. package/dist/excalidraw/components/ToolButton.d.ts +3 -2
  245. package/dist/excalidraw/components/Trans.d.ts +1 -1
  246. package/dist/excalidraw/components/UserList.d.ts +1 -1
  247. package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +5 -3
  248. package/dist/excalidraw/components/canvases/InteractiveCanvas.js +5 -2
  249. package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
  250. package/dist/excalidraw/components/canvases/StaticCanvas.js +2 -2
  251. package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +2 -2
  252. package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
  253. package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
  254. package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  255. package/dist/excalidraw/components/icons.d.ts +3 -2
  256. package/dist/excalidraw/components/icons.js +19 -6
  257. package/dist/excalidraw/constants.d.ts +5 -2
  258. package/dist/excalidraw/constants.js +10 -0
  259. package/dist/excalidraw/context/ui-appState.d.ts +1 -1
  260. package/dist/excalidraw/cursor.d.ts +1 -1
  261. package/dist/excalidraw/data/EditorLocalStorage.d.ts +2 -2
  262. package/dist/excalidraw/data/blob.d.ts +5 -5
  263. package/dist/excalidraw/data/filesystem.d.ts +2 -1
  264. package/dist/excalidraw/data/index.d.ts +4 -4
  265. package/dist/excalidraw/data/json.d.ts +3 -3
  266. package/dist/excalidraw/data/library.d.ts +3 -3
  267. package/dist/excalidraw/data/magic.d.ts +3 -3
  268. package/dist/excalidraw/data/reconcile.d.ts +3 -3
  269. package/dist/excalidraw/data/resave.d.ts +2 -2
  270. package/dist/excalidraw/data/resave.js +1 -1
  271. package/dist/excalidraw/data/restore.d.ts +3 -3
  272. package/dist/excalidraw/data/restore.js +3 -0
  273. package/dist/excalidraw/data/transform.d.ts +3 -3
  274. package/dist/excalidraw/data/types.d.ts +3 -3
  275. package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
  276. package/dist/excalidraw/element/binding.d.ts +5 -19
  277. package/dist/excalidraw/element/binding.js +109 -90
  278. package/dist/excalidraw/element/bounds.d.ts +3 -3
  279. package/dist/excalidraw/element/collision.d.ts +3 -3
  280. package/dist/excalidraw/element/collision.js +1 -1
  281. package/dist/excalidraw/element/containerCache.d.ts +1 -1
  282. package/dist/excalidraw/element/dragElements.d.ts +4 -4
  283. package/dist/excalidraw/element/dragElements.js +27 -3
  284. package/dist/excalidraw/element/embeddable.d.ts +4 -4
  285. package/dist/excalidraw/element/image.d.ts +2 -2
  286. package/dist/excalidraw/element/index.d.ts +2 -2
  287. package/dist/excalidraw/element/index.js +1 -1
  288. package/dist/excalidraw/element/linearElementEditor.d.ts +4 -4
  289. package/dist/excalidraw/element/mutateElement.d.ts +3 -3
  290. package/dist/excalidraw/element/mutateElement.js +5 -3
  291. package/dist/excalidraw/element/newElement.d.ts +5 -8
  292. package/dist/excalidraw/element/newElement.js +16 -14
  293. package/dist/excalidraw/element/resizeElements.d.ts +4 -4
  294. package/dist/excalidraw/element/resizeElements.js +172 -96
  295. package/dist/excalidraw/element/resizeTest.d.ts +7 -7
  296. package/dist/excalidraw/element/resizeTest.js +53 -8
  297. package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
  298. package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
  299. package/dist/excalidraw/element/sortElements.d.ts +1 -1
  300. package/dist/excalidraw/element/textElement.d.ts +5 -4
  301. package/dist/excalidraw/element/textElement.js +11 -3
  302. package/dist/excalidraw/element/textWysiwyg.d.ts +12 -6
  303. package/dist/excalidraw/element/textWysiwyg.js +38 -17
  304. package/dist/excalidraw/element/transformHandles.d.ts +22 -4
  305. package/dist/excalidraw/element/transformHandles.js +22 -11
  306. package/dist/excalidraw/element/typeChecks.d.ts +3 -3
  307. package/dist/excalidraw/element/types.d.ts +11 -4
  308. package/dist/excalidraw/emitter.d.ts +1 -1
  309. package/dist/excalidraw/fractionalIndex.d.ts +1 -1
  310. package/dist/excalidraw/fractionalIndex.js +2 -4
  311. package/dist/excalidraw/frame.d.ts +3 -3
  312. package/dist/excalidraw/gatransforms.d.ts +1 -1
  313. package/dist/excalidraw/gesture.d.ts +1 -1
  314. package/dist/excalidraw/groups.d.ts +4 -3
  315. package/dist/excalidraw/groups.js +3 -0
  316. package/dist/excalidraw/history.d.ts +4 -4
  317. package/dist/excalidraw/hooks/useEmitter.d.ts +1 -1
  318. package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  319. package/dist/excalidraw/i18n.d.ts +1 -1
  320. package/dist/excalidraw/index.d.ts +1 -1
  321. package/dist/excalidraw/jotai.d.ts +1 -1
  322. package/dist/excalidraw/laser-trails.d.ts +3 -2
  323. package/dist/excalidraw/locales/en.json +4 -2
  324. package/dist/excalidraw/math.d.ts +2 -2
  325. package/dist/excalidraw/mermaid.d.ts +2 -0
  326. package/dist/excalidraw/mermaid.js +28 -0
  327. package/dist/excalidraw/points.d.ts +1 -1
  328. package/dist/excalidraw/queue.d.ts +1 -1
  329. package/dist/excalidraw/renderer/helpers.d.ts +2 -2
  330. package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
  331. package/dist/excalidraw/renderer/interactiveScene.js +38 -11
  332. package/dist/excalidraw/renderer/renderElement.d.ts +4 -4
  333. package/dist/excalidraw/renderer/renderElement.js +4 -4
  334. package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
  335. package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
  336. package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
  337. package/dist/excalidraw/scene/Fonts.d.ts +2 -4
  338. package/dist/excalidraw/scene/Fonts.js +6 -12
  339. package/dist/excalidraw/scene/Renderer.d.ts +4 -4
  340. package/dist/excalidraw/scene/Renderer.js +2 -3
  341. package/dist/excalidraw/scene/Scene.d.ts +13 -7
  342. package/dist/excalidraw/scene/Scene.js +14 -8
  343. package/dist/excalidraw/scene/Shape.d.ts +1 -1
  344. package/dist/excalidraw/scene/ShapeCache.d.ts +5 -4
  345. package/dist/excalidraw/scene/comparisons.d.ts +2 -2
  346. package/dist/excalidraw/scene/export.d.ts +3 -3
  347. package/dist/excalidraw/scene/export.js +2 -2
  348. package/dist/excalidraw/scene/scroll.d.ts +2 -2
  349. package/dist/excalidraw/scene/scrollbars.d.ts +3 -3
  350. package/dist/excalidraw/scene/selection.d.ts +2 -2
  351. package/dist/excalidraw/scene/types.d.ts +7 -5
  352. package/dist/excalidraw/scene/zoom.d.ts +1 -1
  353. package/dist/excalidraw/snapping.d.ts +4 -4
  354. package/dist/excalidraw/snapping.js +2 -1
  355. package/dist/excalidraw/store.d.ts +34 -4
  356. package/dist/excalidraw/store.js +27 -0
  357. package/dist/excalidraw/types.d.ts +18 -17
  358. package/dist/excalidraw/utils.d.ts +4 -4
  359. package/dist/excalidraw/zindex.d.ts +2 -2
  360. package/dist/{dev/en-Q552WR7L.json → prod/en-GM5O55AO.json} +4 -2
  361. package/dist/prod/index.css +1 -1
  362. package/dist/prod/index.js +41 -41
  363. package/dist/utils/bbox.d.ts +2 -2
  364. package/dist/utils/collision.d.ts +1 -1
  365. package/dist/utils/export.d.ts +1 -1
  366. package/dist/utils/geometry/geometry.d.ts +1 -1
  367. package/dist/utils/geometry/shape.d.ts +1 -1
  368. package/dist/utils/withinBounds.d.ts +1 -1
  369. package/history.ts +4 -4
  370. package/package.json +2 -2
  371. package/dist/browser/dev/excalidraw-assets-dev/chunk-72BUNPBM.js.map +0 -7
  372. package/dist/browser/dev/excalidraw-assets-dev/chunk-AKQDHN2W.js.map +0 -7
  373. package/dist/browser/dev/excalidraw-assets-dev/chunk-LQ6UJQPH.js.map +0 -7
  374. package/dist/browser/dev/excalidraw-assets-dev/chunk-NZKR3TXM.js.map +0 -7
  375. package/dist/browser/dev/excalidraw-assets-dev/dist-QD4SCHJY.js +0 -10
  376. package/dist/browser/dev/excalidraw-assets-dev/image-FDQLNM24.css.map +0 -7
  377. package/dist/browser/prod/excalidraw-assets/chunk-MJ44PPVZ.js +0 -335
  378. package/dist/browser/prod/excalidraw-assets/chunk-W5Q65S7S.js +0 -6
  379. package/dist/browser/prod/excalidraw-assets/dist-5RJKYEVC.js +0 -1
  380. package/dist/browser/prod/excalidraw-assets/flowDiagram-v2-3b53844e-SDQRTWTZ.js +0 -1
  381. package/dist/browser/prod/excalidraw-assets/image-IBX4GOPW.js +0 -1
  382. /package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-AV5QRETN.js.map → blockDiagram-91b80b7a-ILS6OLW7.js.map} +0 -0
  383. /package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-76KP7R2J.js.map → c4Diagram-b2a90758-ZOMIZS7C.js.map} +0 -0
  384. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-VC5KAH7K.js.map → chunk-2NKYQ7YO.js.map} +0 -0
  385. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-5A2HLTCS.js.map → chunk-6MVAKZD7.js.map} +0 -0
  386. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-ETW42MP7.js.map → chunk-A3JTYPH7.js.map} +0 -0
  387. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-EGR52Q6D.js.map → chunk-FPTNVFSO.js.map} +0 -0
  388. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-RT5XHPGC.js.map → chunk-JAMLJD7O.js.map} +0 -0
  389. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-7V2SB4RU.js.map → chunk-LOACNU4P.js.map} +0 -0
  390. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-RC7ANJ5H.js.map → chunk-QGBZMLTJ.js.map} +0 -0
  391. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-BHIY32T7.js.map → chunk-RLV4E4WN.js.map} +0 -0
  392. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-ASZRDHCI.js.map → chunk-SHPKYTPS.js.map} +0 -0
  393. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-ADIHRQXG.js.map → chunk-WYUX2CK4.js.map} +0 -0
  394. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-LSPV6OUU.js.map → chunk-YAYXS7DC.js.map} +0 -0
  395. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-KKFMJDII.js.map → classDiagram-30eddba6-YGYWOEDS.js.map} +0 -0
  396. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-H6OLRXIM.js.map → classDiagram-v2-f2df5561-4ZZOSFAG.js.map} +0 -0
  397. /package/dist/browser/dev/excalidraw-assets-dev/{directory-open-01563666-JDTB6SPR.js.map → directory-open-01563666-QTUC5QKS.js.map} +0 -0
  398. /package/dist/browser/dev/excalidraw-assets-dev/{directory-open-4ed118d0-JL7GGNMJ.js.map → directory-open-4ed118d0-EAOFXSXO.js.map} +0 -0
  399. /package/dist/browser/dev/excalidraw-assets-dev/{dist-QD4SCHJY.js.map → dist-V4ZSY6BC.js.map} +0 -0
  400. /package/dist/browser/dev/excalidraw-assets-dev/{en-PSBMWL4S.js.map → en-RSUSLGPV.js.map} +0 -0
  401. /package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-N5L7DKGN.js.map → erDiagram-47591fe2-JIHVWX3W.js.map} +0 -0
  402. /package/dist/browser/dev/excalidraw-assets-dev/{file-open-002ab408-YDSARWPZ.js.map → file-open-002ab408-UPAWPTEF.js.map} +0 -0
  403. /package/dist/browser/dev/excalidraw-assets-dev/{file-open-7c801643-EROXTFSX.js.map → file-open-7c801643-N5N32MHQ.js.map} +0 -0
  404. /package/dist/browser/dev/excalidraw-assets-dev/{file-save-3189631c-TL6V2OEY.js.map → file-save-3189631c-PRH4NPQ5.js.map} +0 -0
  405. /package/dist/browser/dev/excalidraw-assets-dev/{file-save-745eba88-6WWZFABL.js.map → file-save-745eba88-5GM4HHWQ.js.map} +0 -0
  406. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-VRM36QCA.js.map → flowDiagram-5540d9b9-6CLLUMWF.js.map} +0 -0
  407. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-3CAUSA7W.js.map → flowDiagram-v2-3b53844e-NBMLQH3M.js.map} +0 -0
  408. /package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-ODK3QXSV.js.map → flowchart-elk-definition-5fe447d6-UEQSCXLT.js.map} +0 -0
  409. /package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-KKXGBNQI.js.map → ganttDiagram-9a3bba1f-WK2H7LFS.js.map} +0 -0
  410. /package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-TMH7E2V3.js.map → gitGraphDiagram-96e6b4ee-KDAA2U2K.js.map} +0 -0
  411. /package/dist/browser/dev/excalidraw-assets-dev/{image-DTHOT6RB.js.map → image-IPNHMJTL.js.map} +0 -0
  412. /package/dist/browser/dev/excalidraw-assets-dev/{image-blob-reduce.esm-COPHY4CW.js.map → image-blob-reduce.esm-LQUP674P.js.map} +0 -0
  413. /package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-VF34AT6C.js.map → infoDiagram-bcd20f53-JHVEGFM5.js.map} +0 -0
  414. /package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-I4SJ2IBL.js.map → journeyDiagram-4fe6b3dc-LELHHHNL.js.map} +0 -0
  415. /package/dist/browser/dev/excalidraw-assets-dev/{katex-SVKNABMQ.js.map → katex-24LMEI2S.js.map} +0 -0
  416. /package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-PZW6XTRC.js.map → mindmap-definition-f354de21-EIYHHYCX.js.map} +0 -0
  417. /package/dist/browser/dev/excalidraw-assets-dev/{pica-KKOK34SZ.js.map → pica-AEP6VYOH.js.map} +0 -0
  418. /package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-JATUFGKC.js.map → pieDiagram-79897490-LKE2EHUL.js.map} +0 -0
  419. /package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-V5FY6DEM.js.map → quadrantDiagram-62f64e94-HZHJFQUT.js.map} +0 -0
  420. /package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZHT5V47S.js.map → requirementDiagram-05bf5f74-FXXIEN7J.js.map} +0 -0
  421. /package/dist/browser/dev/excalidraw-assets-dev/{roundRect-ZX3RASBO.js.map → roundRect-5PHKZGUZ.js.map} +0 -0
  422. /package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-ELYQDLSC.js.map → sankeyDiagram-97764748-KKTB5UYB.js.map} +0 -0
  423. /package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-GEO2ZAH2.js.map → sequenceDiagram-acc0e65c-KPIADG32.js.map} +0 -0
  424. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-BLHQKXOS.js.map → stateDiagram-0ff1cf1a-IQUWRAPJ.js.map} +0 -0
  425. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-XFLTR7I5.js.map → stateDiagram-v2-9a9d610d-3OAKVFDX.js.map} +0 -0
  426. /package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-6DNHPFX5.js.map → timeline-definition-fea2a41d-TRDW4746.js.map} +0 -0
  427. /package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-4S5CTHTW.js.map → xychartDiagram-ab372869-IMLIZWMU.js.map} +0 -0
@@ -1,6 +1,6 @@
1
- import { ElementConstructorOpts } from "../element/newElement";
2
- import { ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawFrameElement, ExcalidrawFreeDrawElement, ExcalidrawGenericElement, ExcalidrawIframeLikeElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawMagicFrameElement, ExcalidrawSelectionElement, ExcalidrawTextElement, FileId, FontFamilyValues, TextAlign, VerticalAlign } from "../element/types";
3
- import { MarkOptional } from "../utility-types";
1
+ import type { ElementConstructorOpts } from "../element/newElement";
2
+ import type { ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawFrameElement, ExcalidrawFreeDrawElement, ExcalidrawGenericElement, ExcalidrawIframeLikeElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawMagicFrameElement, ExcalidrawSelectionElement, ExcalidrawTextElement, FileId, FontFamilyValues, TextAlign, VerticalAlign } from "../element/types";
3
+ import type { MarkOptional } from "../utility-types";
4
4
  export type ValidLinearElement = {
5
5
  type: "arrow" | "line";
6
6
  x: number;
@@ -1,7 +1,7 @@
1
- import { ExcalidrawElement } from "../element/types";
2
- import { AppState, BinaryFiles, LibraryItems, LibraryItems_anyVersion } from "../types";
1
+ import type { ExcalidrawElement } from "../element/types";
2
+ import type { AppState, BinaryFiles, LibraryItems, LibraryItems_anyVersion } from "../types";
3
3
  import type { cleanAppStateForExport } from "../appState";
4
- import { VERSIONS } from "../constants";
4
+ import type { VERSIONS } from "../constants";
5
5
  export interface ExportedDataState {
6
6
  type: string;
7
7
  version: number;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ElementsMap, NonDeletedExcalidrawElement } from "./types";
2
+ import type { ElementsMap, NonDeletedExcalidrawElement } from "./types";
3
3
  import "./ElementCanvasButtons.scss";
4
4
  export declare const ElementCanvasButtons: ({ children, element, elementsMap, }: {
5
5
  children: React.ReactNode;
@@ -1,7 +1,6 @@
1
- import * as GA from "../ga";
2
- import { ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawRectangleElement, ExcalidrawDiamondElement, ExcalidrawEllipseElement, ExcalidrawImageElement, ExcalidrawFrameLikeElement, ExcalidrawIframeLikeElement, NonDeleted, ExcalidrawLinearElement, NonDeletedExcalidrawElement, ElementsMap, NonDeletedSceneElementsMap, ExcalidrawTextElement } from "./types";
3
- import { AppClassProperties, AppState, Point } from "../types";
4
- import { ElementUpdate } from "./mutateElement";
1
+ import type { ExcalidrawBindableElement, ExcalidrawElement, NonDeleted, ExcalidrawLinearElement, NonDeletedExcalidrawElement, ElementsMap, NonDeletedSceneElementsMap } from "./types";
2
+ import type { AppClassProperties, AppState } from "../types";
3
+ import type { ElementUpdate } from "./mutateElement";
5
4
  export type SuggestedBinding = NonDeleted<ExcalidrawBindableElement> | SuggestedPointBinding;
6
5
  export type SuggestedPointBinding = [
7
6
  NonDeleted<ExcalidrawLinearElement>,
@@ -11,14 +10,14 @@ export type SuggestedPointBinding = [
11
10
  export declare const shouldEnableBindingForPointerEvent: (event: React.PointerEvent<HTMLElement>) => boolean;
12
11
  export declare const isBindingEnabled: (appState: AppState) => boolean;
13
12
  export declare const bindOrUnbindLinearElement: (linearElement: NonDeleted<ExcalidrawLinearElement>, startBindingElement: ExcalidrawBindableElement | null | "keep", endBindingElement: ExcalidrawBindableElement | null | "keep", elementsMap: NonDeletedSceneElementsMap) => void;
14
- export declare const bindOrUnbindSelectedElements: (selectedElements: NonDeleted<ExcalidrawElement>[], app: AppClassProperties) => void;
13
+ export declare const bindOrUnbindLinearElements: (selectedElements: NonDeleted<ExcalidrawLinearElement>[], app: AppClassProperties, isBindingEnabled: boolean, draggingPoints: readonly number[] | null) => void;
14
+ export declare const getSuggestedBindingsForArrows: (selectedElements: NonDeleted<ExcalidrawElement>[], app: AppClassProperties) => SuggestedBinding[];
15
15
  export declare const maybeBindLinearElement: (linearElement: NonDeleted<ExcalidrawLinearElement>, appState: AppState, pointerCoords: {
16
16
  x: number;
17
17
  y: number;
18
18
  }, app: AppClassProperties) => void;
19
19
  export declare const bindLinearElement: (linearElement: NonDeleted<ExcalidrawLinearElement>, hoveredElement: ExcalidrawBindableElement, startOrEnd: "start" | "end", elementsMap: NonDeletedSceneElementsMap) => void;
20
20
  export declare const isLinearElementSimpleAndAlreadyBound: (linearElement: NonDeleted<ExcalidrawLinearElement>, alreadyBoundToId: ExcalidrawBindableElement["id"] | undefined, bindableElement: ExcalidrawBindableElement) => boolean;
21
- export declare const unbindLinearElements: (elements: readonly NonDeleted<ExcalidrawElement>[], elementsMap: NonDeletedSceneElementsMap) => void;
22
21
  export declare const getHoveredElementForBinding: (pointerCoords: {
23
22
  x: number;
24
23
  y: number;
@@ -30,22 +29,9 @@ export declare const updateBoundElements: (changedElement: NonDeletedExcalidrawE
30
29
  height: number;
31
30
  };
32
31
  }) => void;
33
- export declare const getEligibleElementsForBinding: (selectedElements: NonDeleted<ExcalidrawElement>[], app: AppClassProperties) => SuggestedBinding[];
34
32
  export declare const fixBindingsAfterDuplication: (sceneElements: readonly ExcalidrawElement[], oldElements: readonly ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>, duplicatesServeAsOld?: "duplicatesServeAsOld" | undefined) => void;
35
33
  export declare const fixBindingsAfterDeletion: (sceneElements: readonly ExcalidrawElement[], deletedElements: readonly ExcalidrawElement[]) => void;
36
- export declare const bindingBorderTest: (element: NonDeleted<ExcalidrawBindableElement>, { x, y }: {
37
- x: number;
38
- y: number;
39
- }, app: AppClassProperties) => boolean;
40
34
  export declare const maxBindingGap: (element: ExcalidrawElement, elementWidth: number, elementHeight: number) => number;
41
- export declare const distanceToBindableElement: (element: ExcalidrawBindableElement, point: readonly [number, number], elementsMap: ElementsMap) => number;
42
- export declare const distanceToEllipse: (element: ExcalidrawEllipseElement, point: readonly [number, number], elementsMap: ElementsMap) => number;
43
- export declare const determineFocusDistance: (element: ExcalidrawBindableElement, a: readonly [number, number], b: readonly [number, number], elementsMap: ElementsMap) => number;
44
- export declare const determineFocusPoint: (element: ExcalidrawBindableElement, focus: number, adjecentPoint: readonly [number, number], elementsMap: ElementsMap) => readonly [number, number];
45
- export declare const intersectElementWithLine: (element: ExcalidrawBindableElement, a: readonly [number, number], b: readonly [number, number], gap: number | undefined, elementsMap: ElementsMap) => Point[];
46
- export declare const getCircleIntersections: (center: readonly [number, number, number, number, number, number, number, number], radius: number, line: readonly [number, number, number, number, number, number, number, number]) => GA.Point[];
47
- export declare const findFocusPointForEllipse: (ellipse: ExcalidrawEllipseElement, relativeDistance: number, point: readonly [number, number, number, number, number, number, number, number]) => readonly [number, number, number, number, number, number, number, number];
48
- export declare const findFocusPointForRectangulars: (element: ExcalidrawRectangleElement | ExcalidrawImageElement | ExcalidrawDiamondElement | ExcalidrawTextElement | ExcalidrawIframeLikeElement | ExcalidrawFrameLikeElement, relativeDistance: number, point: readonly [number, number, number, number, number, number, number, number]) => readonly [number, number, number, number, number, number, number, number];
49
35
  export declare const bindingProperties: Set<BindableProp | BindingProp>;
50
36
  export type BindableProp = "boundElements";
51
37
  export type BindingProp = "frameId" | "containerId" | "startBinding" | "endBinding";
@@ -46,39 +46,110 @@ const bindOrUnbindLinearElementEdge = (linearElement, bindableElement, otherEdge
46
46
  boundToElementIds,
47
47
  // Is mutated
48
48
  unboundFromElementIds, elementsMap) => {
49
- if (bindableElement !== "keep") {
50
- if (bindableElement != null) {
51
- // Don't bind if we're trying to bind or are already bound to the same
52
- // element on the other edge already ("start" edge takes precedence).
53
- if (otherEdgeBindableElement == null ||
54
- (otherEdgeBindableElement === "keep"
55
- ? !isLinearElementSimpleAndAlreadyBoundOnOppositeEdge(linearElement, bindableElement, startOrEnd)
56
- : startOrEnd === "start" ||
57
- otherEdgeBindableElement.id !== bindableElement.id)) {
58
- bindLinearElement(linearElement, bindableElement, startOrEnd, elementsMap);
59
- boundToElementIds.add(bindableElement.id);
60
- }
49
+ // "keep" is for method chaining convenience, a "no-op", so just bail out
50
+ if (bindableElement === "keep") {
51
+ return;
52
+ }
53
+ // null means break the bind, so nothing to consider here
54
+ if (bindableElement === null) {
55
+ const unbound = unbindLinearElement(linearElement, startOrEnd);
56
+ if (unbound != null) {
57
+ unboundFromElementIds.add(unbound);
61
58
  }
62
- else {
63
- const unbound = unbindLinearElement(linearElement, startOrEnd);
64
- if (unbound != null) {
65
- unboundFromElementIds.add(unbound);
66
- }
59
+ return;
60
+ }
61
+ // While complext arrows can do anything, simple arrow with both ends trying
62
+ // to bind to the same bindable should not be allowed, start binding takes
63
+ // precedence
64
+ if (isLinearElementSimple(linearElement)) {
65
+ if (otherEdgeBindableElement == null ||
66
+ (otherEdgeBindableElement === "keep"
67
+ ? // TODO: Refactor - Needlessly complex
68
+ !isLinearElementSimpleAndAlreadyBoundOnOppositeEdge(linearElement, bindableElement, startOrEnd)
69
+ : startOrEnd === "start" ||
70
+ otherEdgeBindableElement.id !== bindableElement.id)) {
71
+ bindLinearElement(linearElement, bindableElement, startOrEnd, elementsMap);
72
+ boundToElementIds.add(bindableElement.id);
67
73
  }
68
74
  }
75
+ else {
76
+ bindLinearElement(linearElement, bindableElement, startOrEnd, elementsMap);
77
+ boundToElementIds.add(bindableElement.id);
78
+ }
69
79
  };
70
- export const bindOrUnbindSelectedElements = (selectedElements, app) => {
71
- selectedElements.forEach((selectedElement) => {
72
- if (isBindingElement(selectedElement)) {
73
- bindOrUnbindLinearElement(selectedElement, getElligibleElementForBindingElement(selectedElement, "start", app), getElligibleElementForBindingElement(selectedElement, "end", app), app.scene.getNonDeletedElementsMap());
74
- }
75
- else if (isBindableElement(selectedElement)) {
76
- maybeBindBindableElement(selectedElement, app.scene.getNonDeletedElementsMap(), app);
80
+ const getOriginalBindingIfStillCloseOfLinearElementEdge = (linearElement, edge, app) => {
81
+ const elementsMap = app.scene.getNonDeletedElementsMap();
82
+ const coors = getLinearElementEdgeCoors(linearElement, edge, elementsMap);
83
+ const elementId = edge === "start"
84
+ ? linearElement.startBinding?.elementId
85
+ : linearElement.endBinding?.elementId;
86
+ if (elementId) {
87
+ const element = elementsMap.get(elementId);
88
+ if (bindingBorderTest(element, coors, app)) {
89
+ return element;
77
90
  }
91
+ }
92
+ return null;
93
+ };
94
+ const getOriginalBindingsIfStillCloseToArrowEnds = (linearElement, app) => ["start", "end"].map((edge) => getOriginalBindingIfStillCloseOfLinearElementEdge(linearElement, edge, app));
95
+ const getBindingStrategyForDraggingArrowEndpoints = (selectedElement, isBindingEnabled, draggingPoints, app) => {
96
+ const startIdx = 0;
97
+ const endIdx = selectedElement.points.length - 1;
98
+ const startDragged = draggingPoints.findIndex((i) => i === startIdx) > -1;
99
+ const endDragged = draggingPoints.findIndex((i) => i === endIdx) > -1;
100
+ const start = startDragged
101
+ ? isBindingEnabled
102
+ ? getElligibleElementForBindingElement(selectedElement, "start", app)
103
+ : null // If binding is disabled and start is dragged, break all binds
104
+ : // We have to update the focus and gap of the binding, so let's rebind
105
+ getElligibleElementForBindingElement(selectedElement, "start", app);
106
+ const end = endDragged
107
+ ? isBindingEnabled
108
+ ? getElligibleElementForBindingElement(selectedElement, "end", app)
109
+ : null // If binding is disabled and end is dragged, break all binds
110
+ : // We have to update the focus and gap of the binding, so let's rebind
111
+ getElligibleElementForBindingElement(selectedElement, "end", app);
112
+ return [start, end];
113
+ };
114
+ const getBindingStrategyForDraggingArrowOrJoints = (selectedElement, app, isBindingEnabled) => {
115
+ const [startIsClose, endIsClose] = getOriginalBindingsIfStillCloseToArrowEnds(selectedElement, app);
116
+ const start = startIsClose
117
+ ? isBindingEnabled
118
+ ? getElligibleElementForBindingElement(selectedElement, "start", app)
119
+ : null
120
+ : null;
121
+ const end = endIsClose
122
+ ? isBindingEnabled
123
+ ? getElligibleElementForBindingElement(selectedElement, "end", app)
124
+ : null
125
+ : null;
126
+ return [start, end];
127
+ };
128
+ export const bindOrUnbindLinearElements = (selectedElements, app, isBindingEnabled, draggingPoints) => {
129
+ selectedElements.forEach((selectedElement) => {
130
+ const [start, end] = draggingPoints?.length
131
+ ? // The arrow edge points are dragged (i.e. start, end)
132
+ getBindingStrategyForDraggingArrowEndpoints(selectedElement, isBindingEnabled, draggingPoints ?? [], app)
133
+ : // The arrow itself (the shaft) or the inner joins are dragged
134
+ getBindingStrategyForDraggingArrowOrJoints(selectedElement, app, isBindingEnabled);
135
+ bindOrUnbindLinearElement(selectedElement, start, end, app.scene.getNonDeletedElementsMap());
78
136
  });
79
137
  };
80
- const maybeBindBindableElement = (bindableElement, elementsMap, app) => {
81
- getElligibleElementsForBindableElementAndWhere(bindableElement, app).forEach(([linearElement, where]) => bindOrUnbindLinearElement(linearElement, where === "end" ? "keep" : bindableElement, where === "start" ? "keep" : bindableElement, elementsMap));
138
+ export const getSuggestedBindingsForArrows = (selectedElements, app) => {
139
+ // HOT PATH: Bail out if selected elements list is too large
140
+ if (selectedElements.length > 50) {
141
+ return [];
142
+ }
143
+ return (selectedElements
144
+ .filter(isLinearElement)
145
+ .flatMap((element) => getOriginalBindingsIfStillCloseToArrowEnds(element, app))
146
+ .filter((element) => element !== null)
147
+ // Filter out bind candidates which are in the
148
+ // same selection / group with the arrow
149
+ //
150
+ // TODO: Is it worth turning the list into a set to avoid dupes?
151
+ .filter((element) => selectedElements.filter((selected) => selected.id === element?.id)
152
+ .length === 0));
82
153
  };
83
154
  export const maybeBindLinearElement = (linearElement, appState, pointerCoords, app) => {
84
155
  if (appState.startBoundElement != null) {
@@ -113,20 +184,10 @@ const isLinearElementSimpleAndAlreadyBoundOnOppositeEdge = (linearElement, binda
113
184
  return isLinearElementSimpleAndAlreadyBound(linearElement, otherBinding?.elementId, bindableElement);
114
185
  };
115
186
  export const isLinearElementSimpleAndAlreadyBound = (linearElement, alreadyBoundToId, bindableElement) => {
116
- return (alreadyBoundToId === bindableElement.id && linearElement.points.length < 3);
117
- };
118
- export const unbindLinearElements = (elements, elementsMap) => {
119
- elements.forEach((element) => {
120
- if (isBindingElement(element)) {
121
- if (element.startBinding !== null && element.endBinding !== null) {
122
- bindOrUnbindLinearElement(element, null, null, elementsMap);
123
- }
124
- else {
125
- bindOrUnbindLinearElement(element, element.startBinding ? "keep" : null, element.endBinding ? "keep" : null, elementsMap);
126
- }
127
- }
128
- });
187
+ return (alreadyBoundToId === bindableElement.id &&
188
+ isLinearElementSimple(linearElement));
129
189
  };
190
+ const isLinearElementSimple = (linearElement) => linearElement.points.length < 3;
130
191
  const unbindLinearElement = (linearElement, startOrEnd) => {
131
192
  const field = startOrEnd === "start" ? "startBinding" : "endBinding";
132
193
  const binding = linearElement[field];
@@ -247,21 +308,6 @@ const maybeCalculateNewGapWhenScaling = (changedElement, currentBinding, newSize
247
308
  const newGap = Math.max(1, Math.min(maxBindingGap(changedElement, newWidth, newHeight), gap * (newWidth < newHeight ? newWidth / width : newHeight / height)));
248
309
  return { elementId, gap: newGap, focus };
249
310
  };
250
- // TODO: this is a bottleneck, optimise
251
- export const getEligibleElementsForBinding = (selectedElements, app) => {
252
- const includedElementIds = new Set(selectedElements.map(({ id }) => id));
253
- return selectedElements.flatMap((selectedElement) => isBindingElement(selectedElement, false)
254
- ? getElligibleElementsForBindingElement(selectedElement, app).filter((element) => !includedElementIds.has(element.id))
255
- : isBindableElement(selectedElement, false)
256
- ? getElligibleElementsForBindableElementAndWhere(selectedElement, app).filter((binding) => !includedElementIds.has(binding[0].id))
257
- : []);
258
- };
259
- const getElligibleElementsForBindingElement = (linearElement, app) => {
260
- return [
261
- getElligibleElementForBindingElement(linearElement, "start", app),
262
- getElligibleElementForBindingElement(linearElement, "end", app),
263
- ].filter((element) => element != null);
264
- };
265
311
  const getElligibleElementForBindingElement = (linearElement, startOrEnd, app) => {
266
312
  return getHoveredElementForBinding(getLinearElementEdgeCoors(linearElement, startOrEnd, app.scene.getNonDeletedElementsMap()), app);
267
313
  };
@@ -269,33 +315,6 @@ const getLinearElementEdgeCoors = (linearElement, startOrEnd, elementsMap) => {
269
315
  const index = startOrEnd === "start" ? 0 : -1;
270
316
  return tupleToCoors(LinearElementEditor.getPointAtIndexGlobalCoordinates(linearElement, index, elementsMap));
271
317
  };
272
- const getElligibleElementsForBindableElementAndWhere = (bindableElement, app) => {
273
- const scene = Scene.getScene(bindableElement);
274
- return scene
275
- .getNonDeletedElements()
276
- .map((element) => {
277
- if (!isBindingElement(element, false)) {
278
- return null;
279
- }
280
- const canBindStart = isLinearElementEligibleForNewBindingByBindable(element, "start", bindableElement, scene.getNonDeletedElementsMap(), app);
281
- const canBindEnd = isLinearElementEligibleForNewBindingByBindable(element, "end", bindableElement, scene.getNonDeletedElementsMap(), app);
282
- if (!canBindStart && !canBindEnd) {
283
- return null;
284
- }
285
- return [
286
- element,
287
- canBindStart && canBindEnd ? "both" : canBindStart ? "start" : "end",
288
- bindableElement,
289
- ];
290
- })
291
- .filter((maybeElement) => maybeElement != null);
292
- };
293
- const isLinearElementEligibleForNewBindingByBindable = (linearElement, startOrEnd, bindableElement, elementsMap, app) => {
294
- const existingBinding = linearElement[startOrEnd === "start" ? "startBinding" : "endBinding"];
295
- return (existingBinding == null &&
296
- !isLinearElementSimpleAndAlreadyBoundOnOppositeEdge(linearElement, bindableElement, startOrEnd) &&
297
- bindingBorderTest(bindableElement, getLinearElementEdgeCoors(linearElement, startOrEnd, elementsMap), app));
298
- };
299
318
  // We need to:
300
319
  // 1: Update elements not selected to point to duplicated elements
301
320
  // 2: Update duplicated elements to point to other duplicated elements
@@ -389,7 +408,7 @@ const newBoundElements = (boundElements, idsToRemove, elementsToAdd = []) => {
389
408
  nextBoundElements.push(...elementsToAdd.map((x) => ({ id: x.id, type: x.type })));
390
409
  return nextBoundElements;
391
410
  };
392
- export const bindingBorderTest = (element, { x, y }, app) => {
411
+ const bindingBorderTest = (element, { x, y }, app) => {
393
412
  const threshold = maxBindingGap(element, element.width, element.height);
394
413
  const shape = app.getElementShape(element);
395
414
  return isPointOnShape([x, y], shape, threshold);
@@ -401,7 +420,7 @@ export const maxBindingGap = (element, elementWidth, elementHeight) => {
401
420
  // We make the bindable boundary bigger for bigger elements
402
421
  return Math.max(16, Math.min(0.25 * smallerDimension, 32));
403
422
  };
404
- export const distanceToBindableElement = (element, point, elementsMap) => {
423
+ const distanceToBindableElement = (element, point, elementsMap) => {
405
424
  switch (element.type) {
406
425
  case "rectangle":
407
426
  case "image":
@@ -426,7 +445,7 @@ const distanceToDiamond = (element, point, elementsMap) => {
426
445
  const side = GALine.equation(hheight, hwidth, -hheight * hwidth);
427
446
  return GAPoint.distanceToLine(pointRel, side);
428
447
  };
429
- export const distanceToEllipse = (element, point, elementsMap) => {
448
+ const distanceToEllipse = (element, point, elementsMap) => {
430
449
  const [pointRel, tangent] = ellipseParamsForTest(element, point, elementsMap);
431
450
  return -GALine.sign(tangent) * GAPoint.distanceToLine(pointRel, tangent);
432
451
  };
@@ -504,7 +523,7 @@ const coordsCenter = (x1, y1, x2, y2) => {
504
523
  // all focus points lie, so it's a number between -1 and 1.
505
524
  // The line going through `a` and `b` is a tangent to the "focus image"
506
525
  // of the element.
507
- export const determineFocusDistance = (element,
526
+ const determineFocusDistance = (element,
508
527
  // Point on the line, in absolute coordinates
509
528
  a,
510
529
  // Another point on the line, in absolute coordinates (closer to element)
@@ -541,7 +560,7 @@ b, elementsMap) => {
541
560
  }
542
561
  return ret || 0;
543
562
  };
544
- export const determineFocusPoint = (element,
563
+ const determineFocusPoint = (element,
545
564
  // The oriented, relative distance from the center of `element` of the
546
565
  // returned focusPoint
547
566
  focus, adjecentPoint, elementsMap) => {
@@ -573,7 +592,7 @@ focus, adjecentPoint, elementsMap) => {
573
592
  };
574
593
  // Returns 2 or 0 intersection points between line going through `a` and `b`
575
594
  // and the `element`, in ascending order of distance from `a`.
576
- export const intersectElementWithLine = (element,
595
+ const intersectElementWithLine = (element,
577
596
  // Point on the line, in absolute coordinates
578
597
  a,
579
598
  // Another point on the line, in absolute coordinates
@@ -688,7 +707,7 @@ const getEllipseIntersections = (element, gap, line) => {
688
707
  GA.point((xn - a * b * n * discrRoot) / squares, (yn + a * b * m * discrRoot) / squares),
689
708
  ];
690
709
  };
691
- export const getCircleIntersections = (center, radius, line) => {
710
+ const getCircleIntersections = (center, radius, line) => {
692
711
  if (radius === 0) {
693
712
  return GAPoint.distanceToLine(line, center) === 0 ? [center] : [];
694
713
  }
@@ -712,7 +731,7 @@ export const getCircleIntersections = (center, radius, line) => {
712
731
  };
713
732
  // The focus point is the tangent point of the "focus image" of the
714
733
  // `element`, where the tangent goes through `point`.
715
- export const findFocusPointForEllipse = (ellipse,
734
+ const findFocusPointForEllipse = (ellipse,
716
735
  // Between -1 and 1 (not 0) the relative size of the "focus image" of
717
736
  // the element on which the focus point lies
718
737
  relativeDistance,
@@ -739,7 +758,7 @@ point) => {
739
758
  const x = -(a ** 2 * m) / (n ** 2 * b ** 2 + m ** 2 * a ** 2);
740
759
  return GA.point(x, (-m * x - 1) / n);
741
760
  };
742
- export const findFocusPointForRectangulars = (element,
761
+ const findFocusPointForRectangulars = (element,
743
762
  // Between -1 and 1 for how far away should the focus point be relative
744
763
  // to the size of the element. Sign determines orientation.
745
764
  relativeDistance,
@@ -1,6 +1,6 @@
1
- import { ExcalidrawElement, ExcalidrawLinearElement, Arrowhead, ExcalidrawFreeDrawElement, NonDeleted, ElementsMap } from "./types";
2
- import { Drawable, Op } from "roughjs/bin/core";
3
- import { AppState, Point } from "../types";
1
+ import type { ExcalidrawElement, ExcalidrawLinearElement, Arrowhead, ExcalidrawFreeDrawElement, NonDeleted, ElementsMap } from "./types";
2
+ import type { Drawable, Op } from "roughjs/bin/core";
3
+ import type { AppState, Point } from "../types";
4
4
  export type RectangleBox = {
5
5
  x: number;
6
6
  y: number;
@@ -1,6 +1,6 @@
1
- import { ElementsMap, ExcalidrawElement } from "./types";
2
- import { FrameNameBounds } from "../types";
3
- import { GeometricShape } from "../../utils/geometry/shape";
1
+ import type { ElementsMap, ExcalidrawElement } from "./types";
2
+ import type { FrameNameBounds } from "../types";
3
+ import type { GeometricShape } from "../../utils/geometry/shape";
4
4
  export declare const shouldTestInside: (element: ExcalidrawElement) => boolean;
5
5
  export type HitTestArgs = {
6
6
  x: number;
@@ -1,6 +1,6 @@
1
1
  import { isPathALoop, isPointWithinBounds } from "../math";
2
2
  import { getElementBounds } from "./bounds";
3
- import { getPolygonShape, } from "../../utils/geometry/shape";
3
+ import { getPolygonShape } from "../../utils/geometry/shape";
4
4
  import { isPointInShape, isPointOnShape } from "../../utils/collision";
5
5
  import { isTransparent } from "../utils";
6
6
  import { hasBoundTextElement, isIframeLikeElement, isImageElement, isTextElement, } from "./typeChecks";
@@ -1,4 +1,4 @@
1
- import { ExcalidrawTextContainer } from "./types";
1
+ import type { ExcalidrawTextContainer } from "./types";
2
2
  export declare const originalContainerCache: {
3
3
  [id: ExcalidrawTextContainer["id"]]: {
4
4
  height: ExcalidrawTextContainer["height"];
@@ -1,6 +1,6 @@
1
- import { NonDeletedExcalidrawElement } from "./types";
2
- import { AppState, PointerDownState } from "../types";
3
- import Scene from "../scene/Scene";
1
+ import type { NonDeletedExcalidrawElement } from "./types";
2
+ import type { AppState, NormalizedZoomValue, PointerDownState } from "../types";
3
+ import type Scene from "../scene/Scene";
4
4
  export declare const dragSelectedElements: (pointerDownState: PointerDownState, selectedElements: NonDeletedExcalidrawElement[], offset: {
5
5
  x: number;
6
6
  y: number;
@@ -9,7 +9,7 @@ export declare const dragSelectedElements: (pointerDownState: PointerDownState,
9
9
  y: number;
10
10
  }, gridSize: AppState["gridSize"]) => void;
11
11
  export declare const getDragOffsetXY: (selectedElements: NonDeletedExcalidrawElement[], x: number, y: number) => [number, number];
12
- export declare const dragNewElement: (draggingElement: NonDeletedExcalidrawElement, elementType: AppState["activeTool"]["type"], originX: number, originY: number, x: number, y: number, width: number, height: number, shouldMaintainAspectRatio: boolean, shouldResizeFromCenter: boolean, widthAspectRatio?: number | null, originOffset?: {
12
+ export declare const dragNewElement: (draggingElement: NonDeletedExcalidrawElement, elementType: AppState["activeTool"]["type"], originX: number, originY: number, x: number, y: number, width: number, height: number, shouldMaintainAspectRatio: boolean, shouldResizeFromCenter: boolean, zoom: NormalizedZoomValue, widthAspectRatio?: number | null, originOffset?: {
13
13
  x: number;
14
14
  y: number;
15
15
  } | null) => void;
@@ -2,9 +2,11 @@ import { updateBoundElements } from "./binding";
2
2
  import { getCommonBounds } from "./bounds";
3
3
  import { mutateElement } from "./mutateElement";
4
4
  import { getPerfectElementSize } from "./sizeHelpers";
5
- import { getBoundTextElement } from "./textElement";
5
+ import { getBoundTextElement, getMinTextElementWidth } from "./textElement";
6
6
  import { getGridPoint } from "../math";
7
- import { isArrowElement, isFrameLikeElement } from "./typeChecks";
7
+ import { isArrowElement, isFrameLikeElement, isTextElement, } from "./typeChecks";
8
+ import { getFontString } from "../utils";
9
+ import { TEXT_AUTOWRAP_THRESHOLD } from "../constants";
8
10
  export const dragSelectedElements = (pointerDownState, selectedElements, offset, appState, scene, snapOffset, gridSize) => {
9
11
  // we do not want a frame and its elements to be selected at the same time
10
12
  // but when it happens (due to some bug), we want to avoid updating element
@@ -68,7 +70,7 @@ export const getDragOffsetXY = (selectedElements, x, y) => {
68
70
  const [x1, y1] = getCommonBounds(selectedElements);
69
71
  return [x - x1, y - y1];
70
72
  };
71
- export const dragNewElement = (draggingElement, elementType, originX, originY, x, y, width, height, shouldMaintainAspectRatio, shouldResizeFromCenter,
73
+ export const dragNewElement = (draggingElement, elementType, originX, originY, x, y, width, height, shouldMaintainAspectRatio, shouldResizeFromCenter, zoom,
72
74
  /** whether to keep given aspect ratio when `isResizeWithSidesSameLength` is
73
75
  true */
74
76
  widthAspectRatio, originOffset = null) => {
@@ -99,12 +101,34 @@ widthAspectRatio, originOffset = null) => {
99
101
  newX = originX - width / 2;
100
102
  newY = originY - height / 2;
101
103
  }
104
+ let textAutoResize = null;
105
+ // NOTE this should apply only to creating text elements, not existing
106
+ // (once we rewrite appState.draggingElement to actually mean dragging
107
+ // elements)
108
+ if (isTextElement(draggingElement)) {
109
+ height = draggingElement.height;
110
+ const minWidth = getMinTextElementWidth(getFontString({
111
+ fontSize: draggingElement.fontSize,
112
+ fontFamily: draggingElement.fontFamily,
113
+ }), draggingElement.lineHeight);
114
+ width = Math.max(width, minWidth);
115
+ if (Math.abs(x - originX) > TEXT_AUTOWRAP_THRESHOLD / zoom) {
116
+ textAutoResize = {
117
+ autoResize: false,
118
+ };
119
+ }
120
+ newY = originY;
121
+ if (shouldResizeFromCenter) {
122
+ newX = originX - width / 2;
123
+ }
124
+ }
102
125
  if (width !== 0 && height !== 0) {
103
126
  mutateElement(draggingElement, {
104
127
  x: newX + (originOffset?.x ?? 0),
105
128
  y: newY + (originOffset?.y ?? 0),
106
129
  width,
107
130
  height,
131
+ ...textAutoResize,
108
132
  });
109
133
  }
110
134
  };
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
- import { ExcalidrawProps } from "../types";
3
- import { ExcalidrawElement, ExcalidrawIframeLikeElement, IframeData } from "./types";
4
- import { MarkRequired } from "../utility-types";
2
+ import type { ExcalidrawProps } from "../types";
3
+ import type { ExcalidrawElement, ExcalidrawIframeLikeElement, IframeData } from "./types";
4
+ import type { MarkRequired } from "../utility-types";
5
5
  type IframeDataWithSandbox = MarkRequired<IframeData, "sandbox">;
6
6
  export declare const createSrcDoc: (body: string) => string;
7
7
  export declare const getEmbedLink: (link: string | null | undefined) => IframeDataWithSandbox | null;
@@ -167,7 +167,7 @@ export declare const actionSetEmbeddableAsActiveTool: {
167
167
  userToFollow: import("../types").UserToFollow | null;
168
168
  followedBy: Set<import("../types").SocketId>;
169
169
  };
170
- storeAction: import("../store").StoreActionType;
170
+ storeAction: "none";
171
171
  };
172
172
  } & {
173
173
  keyTest?: undefined;
@@ -1,5 +1,5 @@
1
- import { AppClassProperties, DataURL, BinaryFiles } from "../types";
2
- import { ExcalidrawElement, FileId, InitializedExcalidrawImageElement } from "./types";
1
+ import type { AppClassProperties, DataURL, BinaryFiles } from "../types";
2
+ import type { ExcalidrawElement, FileId, InitializedExcalidrawImageElement } from "./types";
3
3
  export declare const loadHTMLImageElement: (dataURL: DataURL) => Promise<HTMLImageElement>;
4
4
  /** NOTE: updates cache even if already populated with given image. Thus,
5
5
  * you should filter out the images upstream if you want to optimize this. */
@@ -1,5 +1,5 @@
1
- import { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted } from "./types";
2
- export { newElement, newTextElement, updateTextElement, refreshTextDimensions, newLinearElement, newImageElement, duplicateElement, } from "./newElement";
1
+ import type { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted } from "./types";
2
+ export { newElement, newTextElement, refreshTextDimensions, newLinearElement, newImageElement, duplicateElement, } from "./newElement";
3
3
  export { getElementAbsoluteCoords, getElementBounds, getCommonBounds, getDiamondPoints, getArrowheadPoints, getClosestElementBounds, } from "./bounds";
4
4
  export { OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransformHandlesFromCoords, getTransformHandles, } from "./transformHandles";
5
5
  export { resizeTest, getCursorForResizingElement, getElementWithTransformHandleType, getTransformHandleTypeFromCoords, } from "./resizeTest";
@@ -1,6 +1,6 @@
1
1
  import { isInvisiblySmallElement } from "./sizeHelpers";
2
2
  import { isLinearElementType } from "./typeChecks";
3
- export { newElement, newTextElement, updateTextElement, refreshTextDimensions, newLinearElement, newImageElement, duplicateElement, } from "./newElement";
3
+ export { newElement, newTextElement, refreshTextDimensions, newLinearElement, newImageElement, duplicateElement, } from "./newElement";
4
4
  export { getElementAbsoluteCoords, getElementBounds, getCommonBounds, getDiamondPoints, getArrowheadPoints, getClosestElementBounds, } from "./bounds";
5
5
  export { OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransformHandlesFromCoords, getTransformHandles, } from "./transformHandles";
6
6
  export { resizeTest, getCursorForResizingElement, getElementWithTransformHandleType, getTransformHandleTypeFromCoords, } from "./resizeTest";
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
- import { NonDeleted, ExcalidrawLinearElement, ExcalidrawElement, PointBinding, ExcalidrawBindableElement, ExcalidrawTextElementWithContainer, ElementsMap, NonDeletedSceneElementsMap } from "./types";
3
- import { Bounds } from "./bounds";
4
- import { Point, AppState, PointerCoords, InteractiveCanvasAppState, AppClassProperties } from "../types";
5
- import { Store } from "../store";
2
+ import type { NonDeleted, ExcalidrawLinearElement, ExcalidrawElement, PointBinding, ExcalidrawBindableElement, ExcalidrawTextElementWithContainer, ElementsMap, NonDeletedSceneElementsMap } from "./types";
3
+ import type { Bounds } from "./bounds";
4
+ import type { Point, AppState, PointerCoords, InteractiveCanvasAppState, AppClassProperties } from "../types";
5
+ import type { Store } from "../store";
6
6
  declare const editorMidPointsCache: {
7
7
  version: number | null;
8
8
  points: (Point | null)[];
@@ -1,8 +1,8 @@
1
- import { ExcalidrawElement } from "./types";
2
- import { Mutable } from "../utility-types";
1
+ import type { ExcalidrawElement } from "./types";
2
+ import type { Mutable } from "../utility-types";
3
3
  export type ElementUpdate<TElement extends ExcalidrawElement> = Omit<Partial<TElement>, "id" | "version" | "versionNonce" | "updated">;
4
4
  export declare const mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, informMutation?: boolean) => TElement;
5
- export declare const newElementWith: <TElement extends ExcalidrawElement>(element: TElement, updates: ElementUpdate<TElement>) => TElement;
5
+ export declare const newElementWith: <TElement extends ExcalidrawElement>(element: TElement, updates: ElementUpdate<TElement>, force?: boolean) => TElement;
6
6
  /**
7
7
  * Mutates element, bumping `version`, `versionNonce`, and `updated`.
8
8
  *
@@ -71,11 +71,13 @@ export const mutateElement = (element, updates, informMutation = true) => {
71
71
  element.versionNonce = randomInteger();
72
72
  element.updated = getUpdatedTimestamp();
73
73
  if (informMutation) {
74
- Scene.getScene(element)?.informMutation();
74
+ Scene.getScene(element)?.triggerUpdate();
75
75
  }
76
76
  return element;
77
77
  };
78
- export const newElementWith = (element, updates) => {
78
+ export const newElementWith = (element, updates,
79
+ /** pass `true` to always regenerate */
80
+ force = false) => {
79
81
  let didChange = false;
80
82
  for (const key in updates) {
81
83
  const value = updates[key];
@@ -88,7 +90,7 @@ export const newElementWith = (element, updates) => {
88
90
  didChange = true;
89
91
  }
90
92
  }
91
- if (!didChange) {
93
+ if (!didChange && !force) {
92
94
  return element;
93
95
  }
94
96
  return {