@excalidraw/excalidraw 0.18.0-b9d27d3 → 0.18.0-c141960

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 (411) hide show
  1. package/dist/dev/{chunk-QF5FRM6O.js → chunk-AWYOLLYX.js} +49 -26
  2. package/dist/dev/chunk-AWYOLLYX.js.map +7 -0
  3. package/dist/dev/chunk-PMQWN2AA.js +69 -0
  4. package/dist/dev/chunk-PMQWN2AA.js.map +7 -0
  5. package/dist/dev/{chunk-WWDIUJ2Q.js → chunk-SJTAY27F.js} +159 -366
  6. package/dist/dev/chunk-SJTAY27F.js.map +7 -0
  7. package/dist/dev/data/{image-VTYIFRQE.js → image-S2GFZH7W.js} +2 -2
  8. package/dist/dev/index.css +1107 -665
  9. package/dist/dev/index.css.map +3 -3
  10. package/dist/dev/index.js +9974 -7038
  11. package/dist/dev/index.js.map +4 -4
  12. package/dist/dev/locales/{ar-SA-XORAP2EK.js → ar-SA-USQAA427.js} +299 -142
  13. package/dist/dev/locales/ar-SA-USQAA427.js.map +7 -0
  14. package/dist/dev/locales/{az-AZ-NAUU3Z4Y.js → az-AZ-CVQRXULV.js} +240 -83
  15. package/dist/dev/locales/az-AZ-CVQRXULV.js.map +7 -0
  16. package/dist/dev/locales/{bg-BG-AAABLFCY.js → bg-BG-E4I2JVOQ.js} +228 -71
  17. package/dist/dev/locales/bg-BG-E4I2JVOQ.js.map +7 -0
  18. package/dist/dev/locales/{bn-BD-PM4AC5WG.js → bn-BD-O55ROP2R.js} +208 -51
  19. package/dist/dev/locales/bn-BD-O55ROP2R.js.map +7 -0
  20. package/dist/dev/locales/bn-IN-OL7OUKTP.js +743 -0
  21. package/dist/dev/locales/bn-IN-OL7OUKTP.js.map +7 -0
  22. package/dist/dev/locales/{ca-ES-YNNMFRQX.js → ca-ES-73KY52DM.js} +274 -117
  23. package/dist/dev/locales/ca-ES-73KY52DM.js.map +7 -0
  24. package/dist/dev/locales/{cs-CZ-DGZA5IKG.js → cs-CZ-2YGHPQ24.js} +228 -71
  25. package/dist/dev/locales/cs-CZ-2YGHPQ24.js.map +7 -0
  26. package/dist/dev/locales/{da-DK-N76F4QAJ.js → da-DK-OEIZIPJU.js} +297 -140
  27. package/dist/dev/locales/da-DK-OEIZIPJU.js.map +7 -0
  28. package/dist/dev/locales/de-CH-4GJTW23D.js +743 -0
  29. package/dist/dev/locales/de-CH-4GJTW23D.js.map +7 -0
  30. package/dist/dev/locales/{de-DE-DMRXZ2SZ.js → de-DE-YRH6WMM5.js} +198 -41
  31. package/dist/dev/locales/de-DE-YRH6WMM5.js.map +7 -0
  32. package/dist/dev/locales/{el-GR-HIKPLEXI.js → el-GR-W7S64QNM.js} +273 -116
  33. package/dist/dev/locales/el-GR-W7S64QNM.js.map +7 -0
  34. package/dist/dev/locales/{en-SMAPCEOQ.js → en-ZO6QSABV.js} +4 -2
  35. package/dist/dev/locales/{es-ES-AQYVXC32.js → es-ES-7JEN5PTZ.js} +211 -54
  36. package/dist/dev/locales/es-ES-7JEN5PTZ.js.map +7 -0
  37. package/dist/dev/locales/{eu-ES-3TOEU5DE.js → eu-ES-HQNHU6VR.js} +209 -52
  38. package/dist/dev/locales/eu-ES-HQNHU6VR.js.map +7 -0
  39. package/dist/dev/locales/{fa-IR-527GAKUP.js → fa-IR-IN6XOPA6.js} +285 -128
  40. package/dist/dev/locales/fa-IR-IN6XOPA6.js.map +7 -0
  41. package/dist/dev/locales/{fi-FI-M3WLVDFP.js → fi-FI-5BAAYJDZ.js} +239 -82
  42. package/dist/dev/locales/fi-FI-5BAAYJDZ.js.map +7 -0
  43. package/dist/dev/locales/{fr-FR-YE4VDJFI.js → fr-FR-KCXBY2R4.js} +202 -45
  44. package/dist/dev/locales/fr-FR-KCXBY2R4.js.map +7 -0
  45. package/dist/dev/locales/{gl-ES-KMXUYGUN.js → gl-ES-5OPGWS6N.js} +211 -54
  46. package/dist/dev/locales/gl-ES-5OPGWS6N.js.map +7 -0
  47. package/dist/dev/locales/he-IL-3A6ZWK6L.js +743 -0
  48. package/dist/dev/locales/he-IL-3A6ZWK6L.js.map +7 -0
  49. package/dist/dev/locales/hi-IN-HZTBH6EG.js +743 -0
  50. package/dist/dev/locales/hi-IN-HZTBH6EG.js.map +7 -0
  51. package/dist/dev/locales/{hu-HU-VIYZI3X4.js → hu-HU-52IRZEAZ.js} +237 -80
  52. package/dist/dev/locales/hu-HU-52IRZEAZ.js.map +7 -0
  53. package/dist/dev/locales/{id-ID-22TWZNLA.js → id-ID-W6HBGXTS.js} +244 -87
  54. package/dist/dev/locales/id-ID-W6HBGXTS.js.map +7 -0
  55. package/dist/dev/locales/{it-IT-MDEQ2SG3.js → it-IT-AV75ICYT.js} +201 -44
  56. package/dist/dev/locales/it-IT-AV75ICYT.js.map +7 -0
  57. package/dist/dev/locales/{ja-JP-K2DI4W6B.js → ja-JP-SS4G3ZXF.js} +246 -89
  58. package/dist/dev/locales/ja-JP-SS4G3ZXF.js.map +7 -0
  59. package/dist/dev/locales/{kaa-6BPSNM3R.js → kaa-Y5BBB3IW.js} +201 -44
  60. package/dist/dev/locales/kaa-Y5BBB3IW.js.map +7 -0
  61. package/dist/dev/locales/{kab-KAB-2S7ZURK7.js → kab-KAB-KDVZQXBT.js} +209 -52
  62. package/dist/dev/locales/kab-KAB-KDVZQXBT.js.map +7 -0
  63. package/dist/dev/locales/{kk-KZ-UJPYGRQQ.js → kk-KZ-762YODLJ.js} +174 -17
  64. package/dist/dev/locales/kk-KZ-762YODLJ.js.map +7 -0
  65. package/dist/dev/locales/{km-KH-M5T5JKUE.js → km-KH-K2TE5MIK.js} +197 -40
  66. package/dist/dev/locales/km-KH-K2TE5MIK.js.map +7 -0
  67. package/dist/dev/locales/{ko-KR-RQX37SNF.js → ko-KR-75RUMBCO.js} +217 -60
  68. package/dist/dev/locales/ko-KR-75RUMBCO.js.map +7 -0
  69. package/dist/dev/locales/{ku-TR-5XJDIERL.js → ku-TR-E6DJ6LYM.js} +197 -40
  70. package/dist/dev/locales/ku-TR-E6DJ6LYM.js.map +7 -0
  71. package/dist/dev/locales/{lt-LT-MGUBX6CA.js → lt-LT-BYS5DA45.js} +178 -21
  72. package/dist/dev/locales/lt-LT-BYS5DA45.js.map +7 -0
  73. package/dist/dev/locales/{lv-LV-MD7N5VHD.js → lv-LV-SPQ2VWX3.js} +195 -38
  74. package/dist/dev/locales/lv-LV-SPQ2VWX3.js.map +7 -0
  75. package/dist/dev/locales/{mr-IN-4XWMNGQC.js → mr-IN-2HLK6LUA.js} +203 -46
  76. package/dist/dev/locales/mr-IN-2HLK6LUA.js.map +7 -0
  77. package/dist/dev/locales/{my-MM-O4Z74GN5.js → my-MM-P2LR44WR.js} +180 -23
  78. package/dist/dev/locales/my-MM-P2LR44WR.js.map +7 -0
  79. package/dist/dev/locales/{nb-NO-BMB73KRH.js → nb-NO-7YZHFFVS.js} +219 -62
  80. package/dist/dev/locales/nb-NO-7YZHFFVS.js.map +7 -0
  81. package/dist/dev/locales/{nl-NL-F2257BLQ.js → nl-NL-TF2OVIKN.js} +217 -60
  82. package/dist/dev/locales/nl-NL-TF2OVIKN.js.map +7 -0
  83. package/dist/dev/locales/{nn-NO-NCORG7TS.js → nn-NO-2BWEL2IS.js} +200 -43
  84. package/dist/dev/locales/nn-NO-2BWEL2IS.js.map +7 -0
  85. package/dist/dev/locales/{oc-FR-ATFBDMF6.js → oc-FR-5JYIFGLE.js} +212 -55
  86. package/dist/dev/locales/oc-FR-5JYIFGLE.js.map +7 -0
  87. package/dist/dev/locales/{pa-IN-D2I375G4.js → pa-IN-KBBGER76.js} +189 -32
  88. package/dist/dev/locales/pa-IN-KBBGER76.js.map +7 -0
  89. package/dist/dev/locales/{percentages-YKFLWNK2.js → percentages-2RAYDWNS.js} +2 -2
  90. package/dist/dev/locales/{pl-PL-YJHOWAAW.js → pl-PL-BWZ2X734.js} +213 -56
  91. package/dist/dev/locales/pl-PL-BWZ2X734.js.map +7 -0
  92. package/dist/dev/locales/{pt-BR-APOPYZJ7.js → pt-BR-ERVIQI63.js} +236 -79
  93. package/dist/dev/locales/pt-BR-ERVIQI63.js.map +7 -0
  94. package/dist/dev/locales/pt-PT-ZNJ5NB5S.js +743 -0
  95. package/dist/dev/locales/pt-PT-ZNJ5NB5S.js.map +7 -0
  96. package/dist/dev/locales/{ro-RO-L575VRQA.js → ro-RO-UYNXGUB7.js} +202 -45
  97. package/dist/dev/locales/ro-RO-UYNXGUB7.js.map +7 -0
  98. package/dist/dev/locales/{ru-RU-BLG6HZG5.js → ru-RU-F7LPIMGQ.js} +252 -95
  99. package/dist/dev/locales/ru-RU-F7LPIMGQ.js.map +7 -0
  100. package/dist/dev/locales/si-LK-5GF2DJUH.js +743 -0
  101. package/dist/dev/locales/si-LK-5GF2DJUH.js.map +7 -0
  102. package/dist/dev/locales/{sk-SK-DY6IPO5U.js → sk-SK-H6WE7IJX.js} +199 -42
  103. package/dist/dev/locales/sk-SK-H6WE7IJX.js.map +7 -0
  104. package/dist/dev/locales/{sl-SI-5DZSRA47.js → sl-SI-4PJ6LBI7.js} +196 -39
  105. package/dist/dev/locales/sl-SI-4PJ6LBI7.js.map +7 -0
  106. package/dist/dev/locales/{sv-SE-V32YHALQ.js → sv-SE-E5VQLCRE.js} +201 -44
  107. package/dist/dev/locales/sv-SE-E5VQLCRE.js.map +7 -0
  108. package/dist/dev/locales/{ta-IN-5JRAGQAO.js → ta-IN-2YWIVLKF.js} +256 -99
  109. package/dist/dev/locales/ta-IN-2YWIVLKF.js.map +7 -0
  110. package/dist/dev/locales/{th-TH-55ACRHDJ.js → th-TH-IV7RUTDK.js} +288 -131
  111. package/dist/dev/locales/th-TH-IV7RUTDK.js.map +7 -0
  112. package/dist/dev/locales/{tr-TR-7QYBXDBO.js → tr-TR-LEQWIQH7.js} +256 -99
  113. package/dist/dev/locales/tr-TR-LEQWIQH7.js.map +7 -0
  114. package/dist/dev/locales/{uk-UA-TJS2TMRH.js → uk-UA-DWVOQPTB.js} +228 -71
  115. package/dist/dev/locales/uk-UA-DWVOQPTB.js.map +7 -0
  116. package/dist/dev/locales/{si-LK-KT7GGO6D.js → uz-UZ-CKXQ3QKG.js} +211 -54
  117. package/dist/dev/locales/uz-UZ-CKXQ3QKG.js.map +7 -0
  118. package/dist/dev/locales/vi-VN-3P6DZOGS.js +743 -0
  119. package/dist/dev/locales/vi-VN-3P6DZOGS.js.map +7 -0
  120. package/dist/dev/locales/{zh-CN-4MXUOFTH.js → zh-CN-XXVG53TQ.js} +198 -41
  121. package/dist/dev/locales/zh-CN-XXVG53TQ.js.map +7 -0
  122. package/dist/dev/locales/{zh-HK-RBTGIU3U.js → zh-HK-JCHGKEUE.js} +174 -17
  123. package/dist/dev/locales/zh-HK-JCHGKEUE.js.map +7 -0
  124. package/dist/dev/locales/{zh-TW-U5VF4CCU.js → zh-TW-ARVT7RZU.js} +203 -46
  125. package/dist/dev/locales/zh-TW-ARVT7RZU.js.map +7 -0
  126. package/dist/prod/chunk-KRJFZ5JQ.js +1 -0
  127. package/dist/prod/chunk-N7QNUCIG.js +12 -0
  128. package/dist/prod/chunk-XJNFOLHK.js +4 -0
  129. package/dist/prod/data/{image-YQ6UXXDA.js → image-SMWA6JLH.js} +1 -1
  130. package/dist/prod/index.css +1 -1
  131. package/dist/prod/index.js +23 -23
  132. package/dist/prod/locales/ar-SA-F62BVQMB.js +8 -0
  133. package/dist/prod/locales/az-AZ-7PGSKYOB.js +1 -0
  134. package/dist/prod/locales/bg-BG-AAEXMUQ4.js +5 -0
  135. package/dist/prod/locales/bn-BD-ONOFQYIQ.js +3 -0
  136. package/dist/prod/locales/bn-IN-YT3I2M3F.js +3 -0
  137. package/dist/prod/locales/ca-ES-GG4YH2FN.js +8 -0
  138. package/dist/prod/locales/cs-CZ-IS5VTBOP.js +7 -0
  139. package/dist/prod/locales/da-DK-VPQ2KWAY.js +2 -0
  140. package/dist/prod/locales/de-CH-G4Y2G6IS.js +7 -0
  141. package/dist/prod/locales/de-DE-RAT2LIDI.js +7 -0
  142. package/dist/prod/locales/el-GR-DNJB2AZO.js +7 -0
  143. package/dist/prod/locales/en-FOCNVEEU.js +1 -0
  144. package/dist/prod/locales/es-ES-IMTENLBU.js +7 -0
  145. package/dist/prod/locales/eu-ES-XLOS36YS.js +7 -0
  146. package/dist/prod/locales/fa-IR-J6Z2YOGX.js +9 -0
  147. package/dist/prod/locales/fi-FI-B2IQ7SBP.js +6 -0
  148. package/dist/prod/locales/fr-FR-N5BRDCMI.js +12 -0
  149. package/dist/prod/locales/gl-ES-BOYALFRN.js +6 -0
  150. package/dist/prod/locales/he-IL-H7M7HGY5.js +8 -0
  151. package/dist/prod/locales/hi-IN-7AB5CA2Q.js +3 -0
  152. package/dist/prod/locales/hu-HU-ZZM7UJLP.js +3 -0
  153. package/dist/prod/locales/id-ID-RZ7JNCXA.js +8 -0
  154. package/dist/prod/locales/it-IT-ZX7HN56D.js +8 -0
  155. package/dist/prod/locales/ja-JP-NBNBUHIR.js +7 -0
  156. package/dist/prod/locales/kaa-QWYSGEM7.js +1 -0
  157. package/dist/prod/locales/kab-KAB-Q3HBKQ5I.js +4 -0
  158. package/dist/prod/locales/kk-KZ-HF2NTCRX.js +1 -0
  159. package/dist/prod/locales/km-KH-CN6HHF5U.js +7 -0
  160. package/dist/prod/locales/ko-KR-SJQMUXM7.js +5 -0
  161. package/dist/prod/locales/ku-TR-VM4BHTPC.js +6 -0
  162. package/dist/prod/locales/lt-LT-QIWZQ7AG.js +3 -0
  163. package/dist/prod/locales/lv-LV-YQFCB4WZ.js +4 -0
  164. package/dist/prod/locales/mr-IN-GR2ZJPSQ.js +9 -0
  165. package/dist/prod/locales/my-MM-M5XJDJQ2.js +1 -0
  166. package/dist/prod/locales/nb-NO-2RU2YF7H.js +8 -0
  167. package/dist/prod/locales/nl-NL-MUHXDQFK.js +7 -0
  168. package/dist/prod/locales/nn-NO-72RCA552.js +4 -0
  169. package/dist/prod/locales/oc-FR-65ITQYQ2.js +4 -0
  170. package/dist/prod/locales/pa-IN-WESENMFH.js +4 -0
  171. package/dist/prod/locales/percentages-OEPNEGCM.js +1 -0
  172. package/dist/prod/locales/pl-PL-7C4NGVUA.js +12 -0
  173. package/dist/prod/locales/pt-BR-QH23C2IX.js +6 -0
  174. package/dist/prod/locales/pt-PT-O5XBATXI.js +8 -0
  175. package/dist/prod/locales/ro-RO-QHCHEGM5.js +12 -0
  176. package/dist/prod/locales/ru-RU-FUMQ2LLB.js +6 -0
  177. package/dist/prod/locales/si-LK-JYUINGNN.js +1 -0
  178. package/dist/prod/locales/sk-SK-R25O52BS.js +7 -0
  179. package/dist/prod/locales/sl-SI-5KPVX4FS.js +6 -0
  180. package/dist/prod/locales/sv-SE-MVMXV6O4.js +8 -0
  181. package/dist/prod/locales/ta-IN-A32FQB4D.js +6 -0
  182. package/dist/prod/locales/th-TH-CXMWNVBY.js +1 -0
  183. package/dist/prod/locales/tr-TR-YHFI3W2D.js +4 -0
  184. package/dist/prod/locales/uk-UA-UTJIIKT5.js +6 -0
  185. package/dist/prod/locales/uz-UZ-H4EGTR7D.js +1 -0
  186. package/dist/prod/locales/vi-VN-XBV2ESZM.js +7 -0
  187. package/dist/prod/locales/zh-CN-CKCJ4HAO.js +11 -0
  188. package/dist/prod/locales/zh-HK-ISASRRMF.js +1 -0
  189. package/dist/prod/locales/zh-TW-KYRW5V3R.js +9 -0
  190. package/dist/types/common/src/constants.d.ts +9 -13
  191. package/dist/types/common/src/editorInterface.d.ts +34 -0
  192. package/dist/types/common/src/index.d.ts +2 -0
  193. package/dist/types/common/src/utils.d.ts +9 -3
  194. package/dist/types/common/src/visualdebug.d.ts +41 -0
  195. package/dist/types/element/src/binding.d.ts +55 -43
  196. package/dist/types/element/src/collision.d.ts +6 -2
  197. package/dist/types/element/src/index.d.ts +0 -3
  198. package/dist/types/element/src/linearElementEditor.d.ts +15 -18
  199. package/dist/types/element/src/renderElement.d.ts +5 -2
  200. package/dist/types/element/src/resizeTest.d.ts +5 -4
  201. package/dist/types/element/src/transformHandles.d.ts +5 -4
  202. package/dist/types/element/src/typeChecks.d.ts +2 -3
  203. package/dist/types/element/src/types.d.ts +7 -11
  204. package/dist/types/element/src/utils.d.ts +2 -1
  205. package/dist/types/element/src/zindex.d.ts +7 -1
  206. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +34 -13
  207. package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
  208. package/dist/types/excalidraw/actions/actionBoundText.d.ts +25 -11
  209. package/dist/types/excalidraw/actions/actionCanvas.d.ts +152 -275
  210. package/dist/types/excalidraw/actions/actionClipboard.d.ts +46 -773
  211. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +12 -5
  212. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +42 -23
  213. package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -2
  214. package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +2 -2
  215. package/dist/types/excalidraw/actions/actionElementLink.d.ts +11 -6
  216. package/dist/types/excalidraw/actions/actionElementLock.d.ts +23 -9
  217. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +12 -5
  218. package/dist/types/excalidraw/actions/actionExport.d.ts +68 -943
  219. package/dist/types/excalidraw/actions/actionFinalize.d.ts +10 -393
  220. package/dist/types/excalidraw/actions/actionFlip.d.ts +2 -2
  221. package/dist/types/excalidraw/actions/actionFrame.d.ts +50 -24
  222. package/dist/types/excalidraw/actions/actionGroup.d.ts +24 -10
  223. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +22 -19
  224. package/dist/types/excalidraw/actions/actionLink.d.ts +9 -2
  225. package/dist/types/excalidraw/actions/actionMenu.d.ts +10 -371
  226. package/dist/types/excalidraw/actions/actionNavigate.d.ts +21 -359
  227. package/dist/types/excalidraw/actions/actionProperties.d.ts +87 -2403
  228. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +12 -5
  229. package/dist/types/excalidraw/actions/actionStyles.d.ts +13 -6
  230. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
  231. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +11 -4
  232. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +11 -4
  233. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +10 -5
  234. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
  235. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +11 -4
  236. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +11 -4
  237. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +12 -5
  238. package/dist/types/excalidraw/actions/actionZindex.d.ts +2 -2
  239. package/dist/types/excalidraw/actions/index.d.ts +2 -2
  240. package/dist/types/excalidraw/actions/manager.d.ts +1 -1
  241. package/dist/types/excalidraw/actions/register.d.ts +1 -1
  242. package/dist/types/excalidraw/actions/types.d.ts +4 -4
  243. package/dist/types/excalidraw/appState.d.ts +9 -4
  244. package/dist/types/excalidraw/clipboard.d.ts +2 -0
  245. package/dist/types/excalidraw/components/Actions.d.ts +21 -4
  246. package/dist/types/excalidraw/components/App.d.ts +26 -19
  247. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +2 -0
  248. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +2 -1
  249. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +2 -1
  250. package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
  251. package/dist/types/excalidraw/components/CommandPalette/types.d.ts +1 -2
  252. package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +1 -1
  253. package/dist/types/excalidraw/components/FilledButton.d.ts +1 -1
  254. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +2 -1
  255. package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +3 -1
  256. package/dist/types/excalidraw/components/HintViewer.d.ts +4 -3
  257. package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
  258. package/dist/types/excalidraw/components/LayerUI.d.ts +2 -1
  259. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +1 -1
  260. package/dist/types/excalidraw/components/LinkButton.d.ts +4 -0
  261. package/dist/types/excalidraw/components/MobileMenu.d.ts +3 -5
  262. package/dist/types/excalidraw/components/MobileToolBar.d.ts +11 -0
  263. package/dist/types/excalidraw/components/Popover.d.ts +2 -1
  264. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -0
  265. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  266. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -2
  267. package/dist/types/excalidraw/components/TextField.d.ts +1 -0
  268. package/dist/types/excalidraw/components/ToolPopover.d.ts +25 -0
  269. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +6 -3
  270. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +4 -2
  271. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +2 -1
  272. package/dist/types/excalidraw/components/icons.d.ts +10 -0
  273. package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +13 -1
  274. package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +0 -3
  275. package/dist/types/excalidraw/data/blob.d.ts +2 -2
  276. package/dist/types/excalidraw/data/restore.d.ts +3 -3
  277. package/dist/types/excalidraw/data/types.d.ts +4 -1
  278. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  279. package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +3 -1
  280. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
  281. package/dist/types/excalidraw/index.d.ts +2 -3
  282. package/dist/types/excalidraw/renderer/animation.d.ts +12 -0
  283. package/dist/types/excalidraw/renderer/helpers.d.ts +1 -5
  284. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +5 -13
  285. package/dist/types/excalidraw/scene/types.d.ts +15 -3
  286. package/dist/types/excalidraw/shortcut.d.ts +1 -0
  287. package/dist/types/excalidraw/types.d.ts +31 -21
  288. package/dist/types/math/src/segment.d.ts +1 -0
  289. package/package.json +5 -5
  290. package/dist/dev/chunk-MFAYKRVR.js +0 -66
  291. package/dist/dev/chunk-MFAYKRVR.js.map +0 -7
  292. package/dist/dev/chunk-QF5FRM6O.js.map +0 -7
  293. package/dist/dev/chunk-WWDIUJ2Q.js.map +0 -7
  294. package/dist/dev/locales/ar-SA-XORAP2EK.js.map +0 -7
  295. package/dist/dev/locales/az-AZ-NAUU3Z4Y.js.map +0 -7
  296. package/dist/dev/locales/bg-BG-AAABLFCY.js.map +0 -7
  297. package/dist/dev/locales/bn-BD-PM4AC5WG.js.map +0 -7
  298. package/dist/dev/locales/ca-ES-YNNMFRQX.js.map +0 -7
  299. package/dist/dev/locales/cs-CZ-DGZA5IKG.js.map +0 -7
  300. package/dist/dev/locales/da-DK-N76F4QAJ.js.map +0 -7
  301. package/dist/dev/locales/de-DE-DMRXZ2SZ.js.map +0 -7
  302. package/dist/dev/locales/el-GR-HIKPLEXI.js.map +0 -7
  303. package/dist/dev/locales/es-ES-AQYVXC32.js.map +0 -7
  304. package/dist/dev/locales/eu-ES-3TOEU5DE.js.map +0 -7
  305. package/dist/dev/locales/fa-IR-527GAKUP.js.map +0 -7
  306. package/dist/dev/locales/fi-FI-M3WLVDFP.js.map +0 -7
  307. package/dist/dev/locales/fr-FR-YE4VDJFI.js.map +0 -7
  308. package/dist/dev/locales/gl-ES-KMXUYGUN.js.map +0 -7
  309. package/dist/dev/locales/he-IL-4MU5N22B.js +0 -586
  310. package/dist/dev/locales/he-IL-4MU5N22B.js.map +0 -7
  311. package/dist/dev/locales/hi-IN-ZHZNZWFC.js +0 -586
  312. package/dist/dev/locales/hi-IN-ZHZNZWFC.js.map +0 -7
  313. package/dist/dev/locales/hu-HU-VIYZI3X4.js.map +0 -7
  314. package/dist/dev/locales/id-ID-22TWZNLA.js.map +0 -7
  315. package/dist/dev/locales/it-IT-MDEQ2SG3.js.map +0 -7
  316. package/dist/dev/locales/ja-JP-K2DI4W6B.js.map +0 -7
  317. package/dist/dev/locales/kaa-6BPSNM3R.js.map +0 -7
  318. package/dist/dev/locales/kab-KAB-2S7ZURK7.js.map +0 -7
  319. package/dist/dev/locales/kk-KZ-UJPYGRQQ.js.map +0 -7
  320. package/dist/dev/locales/km-KH-M5T5JKUE.js.map +0 -7
  321. package/dist/dev/locales/ko-KR-RQX37SNF.js.map +0 -7
  322. package/dist/dev/locales/ku-TR-5XJDIERL.js.map +0 -7
  323. package/dist/dev/locales/lt-LT-MGUBX6CA.js.map +0 -7
  324. package/dist/dev/locales/lv-LV-MD7N5VHD.js.map +0 -7
  325. package/dist/dev/locales/mr-IN-4XWMNGQC.js.map +0 -7
  326. package/dist/dev/locales/my-MM-O4Z74GN5.js.map +0 -7
  327. package/dist/dev/locales/nb-NO-BMB73KRH.js.map +0 -7
  328. package/dist/dev/locales/nl-NL-F2257BLQ.js.map +0 -7
  329. package/dist/dev/locales/nn-NO-NCORG7TS.js.map +0 -7
  330. package/dist/dev/locales/oc-FR-ATFBDMF6.js.map +0 -7
  331. package/dist/dev/locales/pa-IN-D2I375G4.js.map +0 -7
  332. package/dist/dev/locales/pl-PL-YJHOWAAW.js.map +0 -7
  333. package/dist/dev/locales/pt-BR-APOPYZJ7.js.map +0 -7
  334. package/dist/dev/locales/pt-PT-W56WCN7P.js +0 -586
  335. package/dist/dev/locales/pt-PT-W56WCN7P.js.map +0 -7
  336. package/dist/dev/locales/ro-RO-L575VRQA.js.map +0 -7
  337. package/dist/dev/locales/ru-RU-BLG6HZG5.js.map +0 -7
  338. package/dist/dev/locales/si-LK-KT7GGO6D.js.map +0 -7
  339. package/dist/dev/locales/sk-SK-DY6IPO5U.js.map +0 -7
  340. package/dist/dev/locales/sl-SI-5DZSRA47.js.map +0 -7
  341. package/dist/dev/locales/sv-SE-V32YHALQ.js.map +0 -7
  342. package/dist/dev/locales/ta-IN-5JRAGQAO.js.map +0 -7
  343. package/dist/dev/locales/th-TH-55ACRHDJ.js.map +0 -7
  344. package/dist/dev/locales/tr-TR-7QYBXDBO.js.map +0 -7
  345. package/dist/dev/locales/uk-UA-TJS2TMRH.js.map +0 -7
  346. package/dist/dev/locales/vi-VN-Y5CQ2EKQ.js +0 -586
  347. package/dist/dev/locales/vi-VN-Y5CQ2EKQ.js.map +0 -7
  348. package/dist/dev/locales/zh-CN-4MXUOFTH.js.map +0 -7
  349. package/dist/dev/locales/zh-HK-RBTGIU3U.js.map +0 -7
  350. package/dist/dev/locales/zh-TW-U5VF4CCU.js.map +0 -7
  351. package/dist/prod/chunk-I4UNSFV6.js +0 -12
  352. package/dist/prod/chunk-VTWWEYSQ.js +0 -4
  353. package/dist/prod/chunk-Z3N5DIM6.js +0 -1
  354. package/dist/prod/locales/ar-SA-G6X2FPQ2.js +0 -10
  355. package/dist/prod/locales/az-AZ-76LH7QW2.js +0 -1
  356. package/dist/prod/locales/bg-BG-XCXSNQG7.js +0 -5
  357. package/dist/prod/locales/bn-BD-2XOGV67Q.js +0 -5
  358. package/dist/prod/locales/ca-ES-6MX7JW3Y.js +0 -8
  359. package/dist/prod/locales/cs-CZ-2BRQDIVT.js +0 -11
  360. package/dist/prod/locales/da-DK-5WZEPLOC.js +0 -5
  361. package/dist/prod/locales/de-DE-XR44H4JA.js +0 -8
  362. package/dist/prod/locales/el-GR-BZB4AONW.js +0 -10
  363. package/dist/prod/locales/en-TYY6KWIJ.js +0 -1
  364. package/dist/prod/locales/es-ES-U4NZUMDT.js +0 -9
  365. package/dist/prod/locales/eu-ES-A7QVB2H4.js +0 -11
  366. package/dist/prod/locales/fa-IR-HGAKTJCU.js +0 -8
  367. package/dist/prod/locales/fi-FI-Z5N7JZ37.js +0 -6
  368. package/dist/prod/locales/fr-FR-RHASNOE6.js +0 -9
  369. package/dist/prod/locales/gl-ES-HMX3MZ6V.js +0 -10
  370. package/dist/prod/locales/he-IL-6SHJWFNN.js +0 -10
  371. package/dist/prod/locales/hi-IN-IWLTKZ5I.js +0 -4
  372. package/dist/prod/locales/hu-HU-A5ZG7DT2.js +0 -7
  373. package/dist/prod/locales/id-ID-SAP4L64H.js +0 -10
  374. package/dist/prod/locales/it-IT-JPQ66NNP.js +0 -11
  375. package/dist/prod/locales/ja-JP-DBVTYXUO.js +0 -8
  376. package/dist/prod/locales/kaa-6HZHGXH3.js +0 -1
  377. package/dist/prod/locales/kab-KAB-ZGHBKWFO.js +0 -8
  378. package/dist/prod/locales/kk-KZ-P5N5QNE5.js +0 -1
  379. package/dist/prod/locales/km-KH-HSX4SM5Z.js +0 -11
  380. package/dist/prod/locales/ko-KR-MTYHY66A.js +0 -9
  381. package/dist/prod/locales/ku-TR-6OUDTVRD.js +0 -9
  382. package/dist/prod/locales/lt-LT-XHIRWOB4.js +0 -3
  383. package/dist/prod/locales/lv-LV-5QDEKY6T.js +0 -7
  384. package/dist/prod/locales/mr-IN-CRQNXWMA.js +0 -13
  385. package/dist/prod/locales/my-MM-5M5IBNSE.js +0 -1
  386. package/dist/prod/locales/nb-NO-T6EIAALU.js +0 -10
  387. package/dist/prod/locales/nl-NL-IS3SIHDZ.js +0 -8
  388. package/dist/prod/locales/nn-NO-6E72VCQL.js +0 -8
  389. package/dist/prod/locales/oc-FR-POXYY2M6.js +0 -8
  390. package/dist/prod/locales/pa-IN-N4M65BXN.js +0 -4
  391. package/dist/prod/locales/percentages-BXMCSKIN.js +0 -1
  392. package/dist/prod/locales/pl-PL-T2D74RX3.js +0 -9
  393. package/dist/prod/locales/pt-BR-5N22H2LF.js +0 -9
  394. package/dist/prod/locales/pt-PT-UZXXM6DQ.js +0 -9
  395. package/dist/prod/locales/ro-RO-JPDTUUEW.js +0 -11
  396. package/dist/prod/locales/ru-RU-B4JR7IUQ.js +0 -9
  397. package/dist/prod/locales/si-LK-N5RQ5JYF.js +0 -1
  398. package/dist/prod/locales/sk-SK-C5VTKIMK.js +0 -6
  399. package/dist/prod/locales/sl-SI-NN7IZMDC.js +0 -6
  400. package/dist/prod/locales/sv-SE-XGPEYMSR.js +0 -10
  401. package/dist/prod/locales/ta-IN-2NMHFXQM.js +0 -9
  402. package/dist/prod/locales/th-TH-HPSO5L25.js +0 -2
  403. package/dist/prod/locales/tr-TR-DEFEU3FU.js +0 -7
  404. package/dist/prod/locales/uk-UA-QMV73CPH.js +0 -6
  405. package/dist/prod/locales/vi-VN-M7AON7JQ.js +0 -5
  406. package/dist/prod/locales/zh-CN-LNUGB5OW.js +0 -10
  407. package/dist/prod/locales/zh-HK-E62DVLB3.js +0 -1
  408. package/dist/prod/locales/zh-TW-RAJ6MFWO.js +0 -9
  409. /package/dist/dev/data/{image-VTYIFRQE.js.map → image-S2GFZH7W.js.map} +0 -0
  410. /package/dist/dev/locales/{en-SMAPCEOQ.js.map → en-ZO6QSABV.js.map} +0 -0
  411. /package/dist/dev/locales/{percentages-YKFLWNK2.js.map → percentages-2RAYDWNS.js.map} +0 -0
@@ -19,7 +19,6 @@ import {
19
19
  bytesToHexString,
20
20
  isPromiseLike
21
21
  } from "@excalidraw/common";
22
- import { clearElementsForExport as clearElementsForExport2 } from "@excalidraw/element";
23
22
 
24
23
  // appState.ts
25
24
  import {
@@ -70,6 +69,10 @@ var getDefaultAppState = () => {
70
69
  fromSelection: false,
71
70
  lastActiveTool: null
72
71
  },
72
+ preferredSelectionTool: {
73
+ type: "selection",
74
+ initialized: false
75
+ },
73
76
  penMode: false,
74
77
  penDetected: false,
75
78
  errorMessage: null,
@@ -111,7 +114,7 @@ var getDefaultAppState = () => {
111
114
  panels: STATS_PANELS.generalStats | STATS_PANELS.elementProperties
112
115
  },
113
116
  startBoundElement: null,
114
- suggestedBindings: [],
117
+ suggestedBinding: null,
115
118
  frameRendering: { enabled: true, clip: true, name: true, outline: true },
116
119
  frameToHighlight: null,
117
120
  editingFrame: null,
@@ -137,7 +140,8 @@ var getDefaultAppState = () => {
137
140
  croppingElementId: null,
138
141
  searchMatches: null,
139
142
  lockedMultiSelections: {},
140
- activeLockedId: null
143
+ activeLockedId: null,
144
+ bindMode: "orbit"
141
145
  };
142
146
  };
143
147
  var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
@@ -174,6 +178,7 @@ var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
174
178
  editingTextElement: { browser: false, export: false, server: false },
175
179
  editingGroupId: { browser: true, export: false, server: false },
176
180
  activeTool: { browser: true, export: false, server: false },
181
+ preferredSelectionTool: { browser: true, export: false, server: false },
177
182
  penMode: { browser: true, export: false, server: false },
178
183
  penDetected: { browser: true, export: false, server: false },
179
184
  errorMessage: { browser: false, export: false, server: false },
@@ -223,7 +228,7 @@ var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
223
228
  shouldCacheIgnoreZoom: { browser: true, export: false, server: false },
224
229
  stats: { browser: true, export: false, server: false },
225
230
  startBoundElement: { browser: false, export: false, server: false },
226
- suggestedBindings: { browser: false, export: false, server: false },
231
+ suggestedBinding: { browser: false, export: false, server: false },
227
232
  frameRendering: { browser: false, export: false, server: false },
228
233
  frameToHighlight: { browser: false, export: false, server: false },
229
234
  editingFrame: { browser: false, export: false, server: false },
@@ -245,7 +250,8 @@ var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
245
250
  croppingElementId: { browser: false, export: false, server: false },
246
251
  searchMatches: { browser: false, export: false, server: false },
247
252
  lockedMultiSelections: { browser: true, export: true, server: true },
248
- activeLockedId: { browser: false, export: false, server: false }
253
+ activeLockedId: { browser: false, export: false, server: false },
254
+ bindMode: { browser: true, export: false, server: false }
249
255
  });
250
256
  var _clearAppStateForStorage = (appState, exportType) => {
251
257
  const stateForExport = {};
@@ -517,10 +523,6 @@ import {
517
523
  MIME_TYPES as MIME_TYPES2,
518
524
  VERSIONS
519
525
  } from "@excalidraw/common";
520
- import {
521
- clearElementsForDatabase,
522
- clearElementsForExport
523
- } from "@excalidraw/element";
524
526
 
525
527
  // data/filesystem.ts
526
528
  import {
@@ -529,8 +531,8 @@ import {
529
531
  supported as nativeFileSystemSupported
530
532
  } from "browser-fs-access";
531
533
  import { EVENT, MIME_TYPES, debounce } from "@excalidraw/common";
532
- var INPUT_CHANGE_INTERVAL_MS = 500;
533
- var fileOpen = (opts) => {
534
+ var INPUT_CHANGE_INTERVAL_MS = 5e3;
535
+ var fileOpen = async (opts) => {
534
536
  const mimeTypes = opts.extensions?.reduce((mimeTypes2, type) => {
535
537
  mimeTypes2.push(MIME_TYPES[type]);
536
538
  return mimeTypes2;
@@ -541,7 +543,7 @@ var fileOpen = (opts) => {
541
543
  }
542
544
  return acc.concat(`.${ext}`);
543
545
  }, []);
544
- return _fileOpen({
546
+ const files = await _fileOpen({
545
547
  description: opts.description,
546
548
  extensions,
547
549
  mimeTypes,
@@ -579,6 +581,12 @@ var fileOpen = (opts) => {
579
581
  };
580
582
  }
581
583
  });
584
+ if (Array.isArray(files)) {
585
+ return await Promise.all(
586
+ files.map((file) => normalizeFile(file))
587
+ );
588
+ }
589
+ return await normalizeFile(files);
582
590
  };
583
591
  var fileSave = (blob, opts) => {
584
592
  return _fileSave(
@@ -608,7 +616,7 @@ var serializeAsJSON = (elements, appState, files, type) => {
608
616
  type: EXPORT_DATA_TYPES.excalidraw,
609
617
  version: VERSIONS.excalidraw,
610
618
  source: getExportSource(),
611
- elements: type === "local" ? clearElementsForExport(elements) : clearElementsForDatabase(elements),
619
+ elements,
612
620
  appState: type === "local" ? cleanAppStateForExport(appState) : clearAppStateForDatabase(appState),
613
621
  files: type === "local" ? filterOutDeletedFiles(elements, files) : (
614
622
  // will be stripped from JSON
@@ -637,12 +645,7 @@ var loadFromJSON = async (localAppState, localElements) => {
637
645
  // gets resolved. Else, iOS users cannot open `.excalidraw` files.
638
646
  // extensions: ["json", "excalidraw", "png", "svg"],
639
647
  });
640
- return loadFromBlob(
641
- await normalizeFile(file),
642
- localAppState,
643
- localElements,
644
- file.handle
645
- );
648
+ return loadFromBlob(file, localAppState, localElements, file.handle);
646
649
  };
647
650
  var isValidExcalidrawData = (data) => {
648
651
  return data?.type === EXPORT_DATA_TYPES.excalidraw && (!data.elements || Array.isArray(data.elements) && (!data.appState || typeof data.appState === "object"));
@@ -3148,18 +3151,6 @@ var isPointHittingLink = (element, elementsMap, appState, [x, y], isMobile) => {
3148
3151
 
3149
3152
  // renderer/helpers.ts
3150
3153
  import { THEME as THEME2, THEME_FILTER } from "@excalidraw/common";
3151
- import { FIXED_BINDING_DISTANCE } from "@excalidraw/element";
3152
- import { getDiamondPoints } from "@excalidraw/element";
3153
- import { elementCenterPoint, getCornerRadius } from "@excalidraw/element";
3154
- import {
3155
- curve,
3156
- curveCatmullRomCubicApproxPoints,
3157
- curveCatmullRomQuadraticApproxPoints,
3158
- curveOffsetPoints,
3159
- offsetPointsForQuadraticBezier,
3160
- pointFrom as pointFrom2,
3161
- pointRotateRads as pointRotateRads2
3162
- } from "@excalidraw/math";
3163
3154
  var fillCircle = (context, cx, cy, radius, stroke, fill = true) => {
3164
3155
  context.beginPath();
3165
3156
  context.arc(cx, cy, radius, 0, Math.PI * 2);
@@ -3204,127 +3195,7 @@ var bootstrapCanvas = ({
3204
3195
  }
3205
3196
  return context;
3206
3197
  };
3207
- function drawCatmullRomQuadraticApprox(ctx, points, tension = 0.5) {
3208
- const pointSets = curveCatmullRomQuadraticApproxPoints(points, tension);
3209
- if (pointSets) {
3210
- for (let i = 0; i < pointSets.length - 1; i++) {
3211
- const [[cpX, cpY], [p2X, p2Y]] = pointSets[i];
3212
- ctx.quadraticCurveTo(cpX, cpY, p2X, p2Y);
3213
- }
3214
- }
3215
- }
3216
- function drawCatmullRomCubicApprox(ctx, points, tension = 0.5) {
3217
- const pointSets = curveCatmullRomCubicApproxPoints(points, tension);
3218
- if (pointSets) {
3219
- for (let i = 0; i < pointSets.length; i++) {
3220
- const [[cp1x, cp1y], [cp2x, cp2y], [x, y]] = pointSets[i];
3221
- ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
3222
- }
3223
- }
3224
- }
3225
- var drawHighlightForRectWithRotation = (context, element, elementsMap, padding) => {
3226
- const [x, y] = pointRotateRads2(
3227
- pointFrom2(element.x, element.y),
3228
- elementCenterPoint(element, elementsMap),
3229
- element.angle
3230
- );
3231
- context.save();
3232
- context.translate(x, y);
3233
- context.rotate(element.angle);
3234
- let radius = getCornerRadius(
3235
- Math.min(element.width, element.height),
3236
- element
3237
- );
3238
- if (radius === 0) {
3239
- radius = 0.01;
3240
- }
3241
- context.beginPath();
3242
- {
3243
- const topLeftApprox = offsetPointsForQuadraticBezier(
3244
- pointFrom2(0, 0 + radius),
3245
- pointFrom2(0, 0),
3246
- pointFrom2(0 + radius, 0),
3247
- padding
3248
- );
3249
- const topRightApprox = offsetPointsForQuadraticBezier(
3250
- pointFrom2(element.width - radius, 0),
3251
- pointFrom2(element.width, 0),
3252
- pointFrom2(element.width, radius),
3253
- padding
3254
- );
3255
- const bottomRightApprox = offsetPointsForQuadraticBezier(
3256
- pointFrom2(element.width, element.height - radius),
3257
- pointFrom2(element.width, element.height),
3258
- pointFrom2(element.width - radius, element.height),
3259
- padding
3260
- );
3261
- const bottomLeftApprox = offsetPointsForQuadraticBezier(
3262
- pointFrom2(radius, element.height),
3263
- pointFrom2(0, element.height),
3264
- pointFrom2(0, element.height - radius),
3265
- padding
3266
- );
3267
- context.moveTo(
3268
- topLeftApprox[topLeftApprox.length - 1][0],
3269
- topLeftApprox[topLeftApprox.length - 1][1]
3270
- );
3271
- context.lineTo(topRightApprox[0][0], topRightApprox[0][1]);
3272
- drawCatmullRomQuadraticApprox(context, topRightApprox);
3273
- context.lineTo(bottomRightApprox[0][0], bottomRightApprox[0][1]);
3274
- drawCatmullRomQuadraticApprox(context, bottomRightApprox);
3275
- context.lineTo(bottomLeftApprox[0][0], bottomLeftApprox[0][1]);
3276
- drawCatmullRomQuadraticApprox(context, bottomLeftApprox);
3277
- context.lineTo(topLeftApprox[0][0], topLeftApprox[0][1]);
3278
- drawCatmullRomQuadraticApprox(context, topLeftApprox);
3279
- }
3280
- {
3281
- const topLeftApprox = offsetPointsForQuadraticBezier(
3282
- pointFrom2(0 + radius, 0),
3283
- pointFrom2(0, 0),
3284
- pointFrom2(0, 0 + radius),
3285
- -FIXED_BINDING_DISTANCE
3286
- );
3287
- const topRightApprox = offsetPointsForQuadraticBezier(
3288
- pointFrom2(element.width, radius),
3289
- pointFrom2(element.width, 0),
3290
- pointFrom2(element.width - radius, 0),
3291
- -FIXED_BINDING_DISTANCE
3292
- );
3293
- const bottomRightApprox = offsetPointsForQuadraticBezier(
3294
- pointFrom2(element.width - radius, element.height),
3295
- pointFrom2(element.width, element.height),
3296
- pointFrom2(element.width, element.height - radius),
3297
- -FIXED_BINDING_DISTANCE
3298
- );
3299
- const bottomLeftApprox = offsetPointsForQuadraticBezier(
3300
- pointFrom2(0, element.height - radius),
3301
- pointFrom2(0, element.height),
3302
- pointFrom2(radius, element.height),
3303
- -FIXED_BINDING_DISTANCE
3304
- );
3305
- context.moveTo(
3306
- topLeftApprox[topLeftApprox.length - 1][0],
3307
- topLeftApprox[topLeftApprox.length - 1][1]
3308
- );
3309
- context.lineTo(bottomLeftApprox[0][0], bottomLeftApprox[0][1]);
3310
- drawCatmullRomQuadraticApprox(context, bottomLeftApprox);
3311
- context.lineTo(bottomRightApprox[0][0], bottomRightApprox[0][1]);
3312
- drawCatmullRomQuadraticApprox(context, bottomRightApprox);
3313
- context.lineTo(topRightApprox[0][0], topRightApprox[0][1]);
3314
- drawCatmullRomQuadraticApprox(context, topRightApprox);
3315
- context.lineTo(topLeftApprox[0][0], topLeftApprox[0][1]);
3316
- drawCatmullRomQuadraticApprox(context, topLeftApprox);
3317
- }
3318
- context.closePath();
3319
- context.fill();
3320
- context.restore();
3321
- };
3322
- var strokeEllipseWithRotation = (context, width, height, cx, cy, angle) => {
3323
- context.beginPath();
3324
- context.ellipse(cx, cy, width / 2, height / 2, angle, 0, Math.PI * 2);
3325
- context.stroke();
3326
- };
3327
- var strokeRectWithRotation = (context, x, y, width, height, cx, cy, angle, fill = false, radius = 0) => {
3198
+ var strokeRectWithRotation_simple = (context, x, y, width, height, cx, cy, angle, fill = false, radius = 0) => {
3328
3199
  context.save();
3329
3200
  context.translate(cx, cy);
3330
3201
  context.rotate(angle);
@@ -3341,126 +3212,6 @@ var strokeRectWithRotation = (context, x, y, width, height, cx, cy, angle, fill
3341
3212
  }
3342
3213
  context.restore();
3343
3214
  };
3344
- var drawHighlightForDiamondWithRotation = (context, padding, element, elementsMap) => {
3345
- const [x, y] = pointRotateRads2(
3346
- pointFrom2(element.x, element.y),
3347
- elementCenterPoint(element, elementsMap),
3348
- element.angle
3349
- );
3350
- context.save();
3351
- context.translate(x, y);
3352
- context.rotate(element.angle);
3353
- {
3354
- context.beginPath();
3355
- const [topX, topY, rightX, rightY, bottomX, bottomY, leftX, leftY] = getDiamondPoints(element);
3356
- const verticalRadius = element.roundness ? getCornerRadius(Math.abs(topX - leftX), element) : (topX - leftX) * 0.01;
3357
- const horizontalRadius = element.roundness ? getCornerRadius(Math.abs(rightY - topY), element) : (rightY - topY) * 0.01;
3358
- const topApprox = curveOffsetPoints(
3359
- curve(
3360
- pointFrom2(topX - verticalRadius, topY + horizontalRadius),
3361
- pointFrom2(topX, topY),
3362
- pointFrom2(topX, topY),
3363
- pointFrom2(topX + verticalRadius, topY + horizontalRadius)
3364
- ),
3365
- padding
3366
- );
3367
- const rightApprox = curveOffsetPoints(
3368
- curve(
3369
- pointFrom2(rightX - verticalRadius, rightY - horizontalRadius),
3370
- pointFrom2(rightX, rightY),
3371
- pointFrom2(rightX, rightY),
3372
- pointFrom2(rightX - verticalRadius, rightY + horizontalRadius)
3373
- ),
3374
- padding
3375
- );
3376
- const bottomApprox = curveOffsetPoints(
3377
- curve(
3378
- pointFrom2(bottomX + verticalRadius, bottomY - horizontalRadius),
3379
- pointFrom2(bottomX, bottomY),
3380
- pointFrom2(bottomX, bottomY),
3381
- pointFrom2(bottomX - verticalRadius, bottomY - horizontalRadius)
3382
- ),
3383
- padding
3384
- );
3385
- const leftApprox = curveOffsetPoints(
3386
- curve(
3387
- pointFrom2(leftX + verticalRadius, leftY + horizontalRadius),
3388
- pointFrom2(leftX, leftY),
3389
- pointFrom2(leftX, leftY),
3390
- pointFrom2(leftX + verticalRadius, leftY - horizontalRadius)
3391
- ),
3392
- padding
3393
- );
3394
- context.moveTo(
3395
- topApprox[topApprox.length - 1][0],
3396
- topApprox[topApprox.length - 1][1]
3397
- );
3398
- context.lineTo(rightApprox[1][0], rightApprox[1][1]);
3399
- drawCatmullRomCubicApprox(context, rightApprox);
3400
- context.lineTo(bottomApprox[1][0], bottomApprox[1][1]);
3401
- drawCatmullRomCubicApprox(context, bottomApprox);
3402
- context.lineTo(leftApprox[1][0], leftApprox[1][1]);
3403
- drawCatmullRomCubicApprox(context, leftApprox);
3404
- context.lineTo(topApprox[1][0], topApprox[1][1]);
3405
- drawCatmullRomCubicApprox(context, topApprox);
3406
- }
3407
- {
3408
- const [topX, topY, rightX, rightY, bottomX, bottomY, leftX, leftY] = getDiamondPoints(element);
3409
- const verticalRadius = element.roundness ? getCornerRadius(Math.abs(topX - leftX), element) : (topX - leftX) * 0.01;
3410
- const horizontalRadius = element.roundness ? getCornerRadius(Math.abs(rightY - topY), element) : (rightY - topY) * 0.01;
3411
- const topApprox = curveOffsetPoints(
3412
- curve(
3413
- pointFrom2(topX + verticalRadius, topY + horizontalRadius),
3414
- pointFrom2(topX, topY),
3415
- pointFrom2(topX, topY),
3416
- pointFrom2(topX - verticalRadius, topY + horizontalRadius)
3417
- ),
3418
- -FIXED_BINDING_DISTANCE
3419
- );
3420
- const rightApprox = curveOffsetPoints(
3421
- curve(
3422
- pointFrom2(rightX - verticalRadius, rightY + horizontalRadius),
3423
- pointFrom2(rightX, rightY),
3424
- pointFrom2(rightX, rightY),
3425
- pointFrom2(rightX - verticalRadius, rightY - horizontalRadius)
3426
- ),
3427
- -FIXED_BINDING_DISTANCE
3428
- );
3429
- const bottomApprox = curveOffsetPoints(
3430
- curve(
3431
- pointFrom2(bottomX - verticalRadius, bottomY - horizontalRadius),
3432
- pointFrom2(bottomX, bottomY),
3433
- pointFrom2(bottomX, bottomY),
3434
- pointFrom2(bottomX + verticalRadius, bottomY - horizontalRadius)
3435
- ),
3436
- -FIXED_BINDING_DISTANCE
3437
- );
3438
- const leftApprox = curveOffsetPoints(
3439
- curve(
3440
- pointFrom2(leftX + verticalRadius, leftY - horizontalRadius),
3441
- pointFrom2(leftX, leftY),
3442
- pointFrom2(leftX, leftY),
3443
- pointFrom2(leftX + verticalRadius, leftY + horizontalRadius)
3444
- ),
3445
- -FIXED_BINDING_DISTANCE
3446
- );
3447
- context.moveTo(
3448
- topApprox[topApprox.length - 1][0],
3449
- topApprox[topApprox.length - 1][1]
3450
- );
3451
- context.lineTo(leftApprox[1][0], leftApprox[1][1]);
3452
- drawCatmullRomCubicApprox(context, leftApprox);
3453
- context.lineTo(bottomApprox[1][0], bottomApprox[1][1]);
3454
- drawCatmullRomCubicApprox(context, bottomApprox);
3455
- context.lineTo(rightApprox[1][0], rightApprox[1][1]);
3456
- drawCatmullRomCubicApprox(context, rightApprox);
3457
- context.lineTo(topApprox[1][0], topApprox[1][1]);
3458
- drawCatmullRomCubicApprox(context, topApprox);
3459
- }
3460
- context.closePath();
3461
- context.fill();
3462
- context.restore();
3463
- };
3464
3215
 
3465
3216
  // renderer/staticScene.ts
3466
3217
  var GridLineColor = {
@@ -3804,7 +3555,7 @@ import {
3804
3555
  isTextElement as isTextElement3
3805
3556
  } from "@excalidraw/element";
3806
3557
  import { getContainingFrame } from "@excalidraw/element";
3807
- import { getCornerRadius as getCornerRadius2, isPathALoop } from "@excalidraw/element";
3558
+ import { getCornerRadius, isPathALoop } from "@excalidraw/element";
3808
3559
  import { ShapeCache as ShapeCache2 } from "@excalidraw/element";
3809
3560
  import { getFreeDrawSvgPath, IMAGE_INVERT_FILTER } from "@excalidraw/element";
3810
3561
  import { getElementAbsoluteCoords as getElementAbsoluteCoords3 } from "@excalidraw/element";
@@ -3942,7 +3693,7 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
3942
3693
  while (embeddableNode.firstChild) {
3943
3694
  embeddableNode.removeChild(embeddableNode.firstChild);
3944
3695
  }
3945
- const radius = getCornerRadius2(
3696
+ const radius = getCornerRadius(
3946
3697
  Math.min(element.width, element.height),
3947
3698
  element
3948
3699
  );
@@ -4185,14 +3936,19 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
4185
3936
  "clipPath"
4186
3937
  );
4187
3938
  clipPath.id = `image-clipPath-${element.id}`;
3939
+ clipPath.setAttribute("clipPathUnits", "userSpaceOnUse");
4188
3940
  const clipRect = svgRoot.ownerDocument.createElementNS(
4189
3941
  SVG_NS,
4190
3942
  "rect"
4191
3943
  );
4192
- const radius = getCornerRadius2(
3944
+ const radius = getCornerRadius(
4193
3945
  Math.min(element.width, element.height),
4194
3946
  element
4195
3947
  );
3948
+ const clipOffsetX = element.crop ? normalizedCropX : 0;
3949
+ const clipOffsetY = element.crop ? normalizedCropY : 0;
3950
+ clipRect.setAttribute("x", `${clipOffsetX}`);
3951
+ clipRect.setAttribute("y", `${clipOffsetY}`);
4196
3952
  clipRect.setAttribute("width", `${element.width}`);
4197
3953
  clipRect.setAttribute("height", `${element.height}`);
4198
3954
  clipRect.setAttribute("rx", `${radius}`);
@@ -4678,7 +4434,7 @@ var getExportSize = (elements, exportPadding, scale) => {
4678
4434
  };
4679
4435
 
4680
4436
  // data/restore.ts
4681
- import { isFiniteNumber, pointFrom as pointFrom3 } from "@excalidraw/math";
4437
+ import { isFiniteNumber, pointFrom as pointFrom2 } from "@excalidraw/math";
4682
4438
  import {
4683
4439
  DEFAULT_FONT_FAMILY as DEFAULT_FONT_FAMILY2,
4684
4440
  DEFAULT_TEXT_ALIGN as DEFAULT_TEXT_ALIGN2,
@@ -4697,7 +4453,13 @@ import {
4697
4453
  normalizeLink as normalizeLink2,
4698
4454
  getLineHeight
4699
4455
  } from "@excalidraw/common";
4700
- import { getNonDeletedElements, isValidPolygon } from "@excalidraw/element";
4456
+ import {
4457
+ calculateFixedPointForNonElbowArrowBinding,
4458
+ getNonDeletedElements,
4459
+ isPointInElement,
4460
+ isValidPolygon,
4461
+ projectFixedPointOntoDiagonal
4462
+ } from "@excalidraw/element";
4701
4463
  import { normalizeFixedPoint } from "@excalidraw/element";
4702
4464
  import {
4703
4465
  updateElbowArrowPoints,
@@ -4711,7 +4473,6 @@ import {
4711
4473
  isArrowBoundToElement,
4712
4474
  isArrowElement as isArrowElement2,
4713
4475
  isElbowArrow,
4714
- isFixedPointBinding,
4715
4476
  isLinearElement,
4716
4477
  isLineElement,
4717
4478
  isTextElement as isTextElement4,
@@ -4746,23 +4507,54 @@ var getFontFamilyByName = (fontFamilyName) => {
4746
4507
  }
4747
4508
  return DEFAULT_FONT_FAMILY2;
4748
4509
  };
4749
- var repairBinding = (element, binding) => {
4510
+ var repairBinding = (element, binding, elementsMap, startOrEnd) => {
4750
4511
  if (!binding) {
4751
4512
  return null;
4752
4513
  }
4753
- const focus = binding.focus || 0;
4754
4514
  if (isElbowArrow(element)) {
4755
- const fixedPointBinding = isFixedPointBinding(binding) ? {
4515
+ const fixedPointBinding = {
4756
4516
  ...binding,
4757
- focus,
4758
- fixedPoint: normalizeFixedPoint(binding.fixedPoint ?? [0, 0])
4759
- } : null;
4517
+ fixedPoint: normalizeFixedPoint(binding.fixedPoint ?? [0, 0]),
4518
+ mode: binding.mode || "orbit"
4519
+ };
4760
4520
  return fixedPointBinding;
4761
4521
  }
4762
- return {
4763
- ...binding,
4764
- focus
4765
- };
4522
+ const boundElement = elementsMap.get(binding.elementId) || void 0;
4523
+ if (boundElement) {
4524
+ if (binding.mode) {
4525
+ return {
4526
+ elementId: binding.elementId,
4527
+ mode: binding.mode || "orbit",
4528
+ fixedPoint: normalizeFixedPoint(binding.fixedPoint || [0.5, 0.5])
4529
+ };
4530
+ }
4531
+ const p = LinearElementEditor2.getPointAtIndexGlobalCoordinates(
4532
+ element,
4533
+ startOrEnd === "start" ? 0 : element.points.length - 1,
4534
+ elementsMap
4535
+ );
4536
+ const mode = isPointInElement(p, boundElement, elementsMap) ? "inside" : "orbit";
4537
+ const focusPoint = mode === "inside" ? p : projectFixedPointOntoDiagonal(
4538
+ element,
4539
+ p,
4540
+ boundElement,
4541
+ startOrEnd,
4542
+ elementsMap
4543
+ ) || p;
4544
+ const { fixedPoint } = calculateFixedPointForNonElbowArrowBinding(
4545
+ element,
4546
+ boundElement,
4547
+ startOrEnd,
4548
+ elementsMap,
4549
+ focusPoint
4550
+ );
4551
+ return {
4552
+ mode,
4553
+ elementId: binding.elementId,
4554
+ fixedPoint
4555
+ };
4556
+ }
4557
+ return null;
4766
4558
  };
4767
4559
  var restoreElementWithProperties = (element, extra) => {
4768
4560
  const base = {
@@ -4815,7 +4607,7 @@ var restoreElementWithProperties = (element, extra) => {
4815
4607
  delete ret.boundElementIds;
4816
4608
  return ret;
4817
4609
  };
4818
- var restoreElement = (element, opts) => {
4610
+ var restoreElement = (element, elementsMap, opts) => {
4819
4611
  element = { ...element };
4820
4612
  switch (element.type) {
4821
4613
  case "text":
@@ -4855,7 +4647,6 @@ var restoreElement = (element, opts) => {
4855
4647
  case "freedraw": {
4856
4648
  return restoreElementWithProperties(element, {
4857
4649
  points: element.points,
4858
- lastCommittedPoint: null,
4859
4650
  simulatePressure: element.simulatePressure,
4860
4651
  pressures: element.pressures
4861
4652
  });
@@ -4874,16 +4665,15 @@ var restoreElement = (element, opts) => {
4874
4665
  let y = element.y;
4875
4666
  let points = (
4876
4667
  // migrate old arrow model to new one
4877
- !Array.isArray(element.points) || element.points.length < 2 ? [pointFrom3(0, 0), pointFrom3(element.width, element.height)] : element.points
4668
+ !Array.isArray(element.points) || element.points.length < 2 ? [pointFrom2(0, 0), pointFrom2(element.width, element.height)] : element.points
4878
4669
  );
4879
4670
  if (points[0][0] !== 0 || points[0][1] !== 0) {
4880
4671
  ({ points, x, y } = LinearElementEditor2.getNormalizeElementPointsAndCoords(element));
4881
4672
  }
4882
4673
  return restoreElementWithProperties(element, {
4883
- type: element.type === "draw" ? "line" : element.type,
4884
- startBinding: repairBinding(element, element.startBinding),
4885
- endBinding: repairBinding(element, element.endBinding),
4886
- lastCommittedPoint: null,
4674
+ type: "line",
4675
+ startBinding: null,
4676
+ endBinding: null,
4887
4677
  startArrowhead,
4888
4678
  endArrowhead,
4889
4679
  points,
@@ -4896,20 +4686,26 @@ var restoreElement = (element, opts) => {
4896
4686
  });
4897
4687
  case "arrow": {
4898
4688
  const { startArrowhead: startArrowhead2 = null, endArrowhead: endArrowhead2 = "arrow" } = element;
4899
- let x2 = element.x;
4900
- let y2 = element.y;
4901
- let points2 = (
4689
+ const x2 = element.x;
4690
+ const y2 = element.y;
4691
+ const points2 = (
4902
4692
  // migrate old arrow model to new one
4903
- !Array.isArray(element.points) || element.points.length < 2 ? [pointFrom3(0, 0), pointFrom3(element.width, element.height)] : element.points
4693
+ !Array.isArray(element.points) || element.points.length < 2 ? [pointFrom2(0, 0), pointFrom2(element.width, element.height)] : element.points
4904
4694
  );
4905
- if (points2[0][0] !== 0 || points2[0][1] !== 0) {
4906
- ({ points: points2, x: x2, y: y2 } = LinearElementEditor2.getNormalizeElementPointsAndCoords(element));
4907
- }
4908
4695
  const base = {
4909
4696
  type: element.type,
4910
- startBinding: repairBinding(element, element.startBinding),
4911
- endBinding: repairBinding(element, element.endBinding),
4912
- lastCommittedPoint: null,
4697
+ startBinding: repairBinding(
4698
+ element,
4699
+ element.startBinding,
4700
+ elementsMap,
4701
+ "start"
4702
+ ),
4703
+ endBinding: repairBinding(
4704
+ element,
4705
+ element.endBinding,
4706
+ elementsMap,
4707
+ "end"
4708
+ ),
4913
4709
  startArrowhead: startArrowhead2,
4914
4710
  endArrowhead: endArrowhead2,
4915
4711
  points: points2,
@@ -4918,15 +4714,19 @@ var restoreElement = (element, opts) => {
4918
4714
  elbowed: element.elbowed,
4919
4715
  ...getSizeFromPoints(points2)
4920
4716
  };
4921
- return isElbowArrow(element) ? restoreElementWithProperties(element, {
4717
+ const restoredElement = isElbowArrow(element) ? restoreElementWithProperties(element, {
4922
4718
  ...base,
4923
4719
  elbowed: true,
4924
- startBinding: repairBinding(element, element.startBinding),
4925
- endBinding: repairBinding(element, element.endBinding),
4926
4720
  fixedSegments: element.fixedSegments?.length && base.points.length >= 4 ? element.fixedSegments : null,
4927
4721
  startIsSpecial: element.startIsSpecial,
4928
4722
  endIsSpecial: element.endIsSpecial
4929
4723
  }) : restoreElementWithProperties(element, base);
4724
+ return {
4725
+ ...restoredElement,
4726
+ ...LinearElementEditor2.getNormalizeElementPointsAndCoords(
4727
+ restoredElement
4728
+ )
4729
+ };
4930
4730
  }
4931
4731
  case "ellipse":
4932
4732
  case "rectangle":
@@ -4991,17 +4791,22 @@ var repairFrameMembership = (element, elementsMap) => {
4991
4791
  }
4992
4792
  }
4993
4793
  };
4994
- var restoreElements = (elements, localElements, opts) => {
4794
+ var restoreElements = (targetElements, localElements, opts) => {
4995
4795
  const existingIds = /* @__PURE__ */ new Set();
4796
+ const elementsMap = arrayToMap2(targetElements || []);
4996
4797
  const localElementsMap = localElements ? arrayToMap2(localElements) : null;
4997
4798
  const restoredElements = syncInvalidIndices2(
4998
- (elements || []).reduce((elements2, element) => {
4799
+ (targetElements || []).reduce((elements, element) => {
4999
4800
  if (element.type === "selection") {
5000
- return elements2;
4801
+ return elements;
5001
4802
  }
5002
- let migratedElement = restoreElement(element, {
5003
- deleteInvisibleElements: opts?.deleteInvisibleElements
5004
- });
4803
+ let migratedElement = restoreElement(
4804
+ element,
4805
+ elementsMap,
4806
+ {
4807
+ deleteInvisibleElements: opts?.deleteInvisibleElements
4808
+ }
4809
+ );
5005
4810
  if (migratedElement) {
5006
4811
  const localElement = localElementsMap?.get(element.id);
5007
4812
  const shouldMarkAsDeleted = opts?.deleteInvisibleElements && isInvisiblySmallElement(element);
@@ -5015,9 +4820,9 @@ var restoreElements = (elements, localElements, opts) => {
5015
4820
  migratedElement = { ...migratedElement, id: randomId() };
5016
4821
  }
5017
4822
  existingIds.add(migratedElement.id);
5018
- elements2.push(migratedElement);
4823
+ elements.push(migratedElement);
5019
4824
  }
5020
- return elements2;
4825
+ return elements;
5021
4826
  }, [])
5022
4827
  );
5023
4828
  if (!opts?.repairBindings) {
@@ -5061,7 +4866,7 @@ var restoreElements = (elements, localElements, opts) => {
5061
4866
  restoredElementsMap,
5062
4867
  {
5063
4868
  points: [
5064
- pointFrom3(0, 0),
4869
+ pointFrom2(0, 0),
5065
4870
  element.points[element.points.length - 1]
5066
4871
  ]
5067
4872
  }
@@ -5090,10 +4895,10 @@ var restoreElements = (elements, localElements, opts) => {
5090
4895
  width: boundElement.width,
5091
4896
  height: boundElement.height,
5092
4897
  points: [
5093
- pointFrom3(0, 0),
5094
- pointFrom3(0, -10),
5095
- pointFrom3(boundElement.width / 2 + 5, -10),
5096
- pointFrom3(
4898
+ pointFrom2(0, 0),
4899
+ pointFrom2(0, -10),
4900
+ pointFrom2(boundElement.width / 2 + 5, -10),
4901
+ pointFrom2(
5097
4902
  boundElement.width / 2 + 5,
5098
4903
  boundElement.height / 2 + 5
5099
4904
  )
@@ -5219,7 +5024,7 @@ var parseFileContents = async (blob) => {
5219
5024
  let contents;
5220
5025
  if (blob.type === MIME_TYPES6.png) {
5221
5026
  try {
5222
- return await (await import("./data/image-VTYIFRQE.js")).decodePngMetadata(blob);
5027
+ return await (await import("./data/image-S2GFZH7W.js")).decodePngMetadata(blob);
5223
5028
  } catch (error) {
5224
5029
  if (error.message === "INVALID") {
5225
5030
  throw new ImageSceneDataError(
@@ -5303,7 +5108,7 @@ var loadSceneOrLibraryFromBlob = async (blob, localAppState, localElements, file
5303
5108
  type: MIME_TYPES6.excalidraw,
5304
5109
  data: restore(
5305
5110
  {
5306
- elements: clearElementsForExport2(data.elements || []),
5111
+ elements: data.elements || [],
5307
5112
  appState: {
5308
5113
  theme: localAppState?.theme,
5309
5114
  fileHandle: fileHandle || blob.handle || null,
@@ -5476,61 +5281,52 @@ var getFileHandle = async (event) => {
5476
5281
  }
5477
5282
  return null;
5478
5283
  };
5479
- var getActualMimeTypeFromImage = (buffer) => {
5284
+ var getActualMimeTypeFromImage = async (file) => {
5480
5285
  let mimeType = null;
5481
- const first8Bytes = `${[...new Uint8Array(buffer).slice(0, 8)].join(" ")} `;
5482
- const headerBytes = {
5286
+ const leadingBytes = [
5287
+ ...new Uint8Array(await blobToArrayBuffer(file.slice(0, 15)))
5288
+ ].join(" ");
5289
+ const bytes = {
5483
5290
  // https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header
5484
- png: "137 80 78 71 13 10 26 10 ",
5291
+ png: /^137 80 78 71 13 10 26 10\b/,
5485
5292
  // https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure
5486
5293
  // jpg is a bit wonky. Checking the first three bytes should be enough,
5487
5294
  // but may yield false positives. (https://stackoverflow.com/a/23360709/927631)
5488
- jpg: "255 216 255 ",
5295
+ jpg: /^255 216 255\b/,
5489
5296
  // https://en.wikipedia.org/wiki/GIF#Example_GIF_file
5490
- gif: "71 73 70 56 57 97 "
5297
+ gif: /^71 73 70 56 57 97\b/,
5298
+ // 4 bytes for RIFF + 4 bytes for chunk size + WEBP identifier
5299
+ webp: /^82 73 70 70 \d+ \d+ \d+ \d+ 87 69 66 80 86 80 56\b/
5491
5300
  };
5492
- if (first8Bytes === headerBytes.png) {
5493
- mimeType = MIME_TYPES6.png;
5494
- } else if (first8Bytes.startsWith(headerBytes.jpg)) {
5495
- mimeType = MIME_TYPES6.jpg;
5496
- } else if (first8Bytes.startsWith(headerBytes.gif)) {
5497
- mimeType = MIME_TYPES6.gif;
5498
- }
5499
- return mimeType;
5301
+ for (const type of Object.keys(bytes)) {
5302
+ if (leadingBytes.match(bytes[type])) {
5303
+ mimeType = MIME_TYPES6[type];
5304
+ break;
5305
+ }
5306
+ }
5307
+ return mimeType || file.type || null;
5500
5308
  };
5501
5309
  var createFile = (blob, mimeType, name) => {
5502
5310
  return new File([blob], name || "", {
5503
5311
  type: mimeType
5504
5312
  });
5505
5313
  };
5314
+ var normalizedFileSymbol = Symbol("fileNormalized");
5506
5315
  var normalizeFile = async (file) => {
5507
- if (!file.type) {
5508
- if (file?.name?.endsWith(".excalidrawlib")) {
5509
- file = createFile(
5510
- await blobToArrayBuffer(file),
5511
- MIME_TYPES6.excalidrawlib,
5512
- file.name
5513
- );
5514
- } else if (file?.name?.endsWith(".excalidraw")) {
5515
- file = createFile(
5516
- await blobToArrayBuffer(file),
5517
- MIME_TYPES6.excalidraw,
5518
- file.name
5519
- );
5520
- } else {
5521
- const buffer = await blobToArrayBuffer(file);
5522
- const mimeType = getActualMimeTypeFromImage(buffer);
5523
- if (mimeType) {
5524
- file = createFile(buffer, mimeType, file.name);
5525
- }
5526
- }
5527
- } else if (isSupportedImageFile(file)) {
5528
- const buffer = await blobToArrayBuffer(file);
5529
- const mimeType = getActualMimeTypeFromImage(buffer);
5316
+ if (file[normalizedFileSymbol]) {
5317
+ return file;
5318
+ }
5319
+ if (file?.name?.endsWith(".excalidrawlib")) {
5320
+ file = createFile(file, MIME_TYPES6.excalidrawlib, file.name);
5321
+ } else if (file?.name?.endsWith(".excalidraw")) {
5322
+ file = createFile(file, MIME_TYPES6.excalidraw, file.name);
5323
+ } else if (!file.type || file.type?.startsWith("image/")) {
5324
+ const mimeType = await getActualMimeTypeFromImage(file);
5530
5325
  if (mimeType && mimeType !== file.type) {
5531
- file = createFile(buffer, mimeType, file.name);
5326
+ file = createFile(file, mimeType, file.name);
5532
5327
  }
5533
5328
  }
5329
+ file[normalizedFileSymbol] = true;
5534
5330
  return file;
5535
5331
  };
5536
5332
  var blobToArrayBuffer = (blob) => {
@@ -5630,10 +5426,7 @@ export {
5630
5426
  fillCircle,
5631
5427
  getNormalizedCanvasDimensions,
5632
5428
  bootstrapCanvas,
5633
- drawHighlightForRectWithRotation,
5634
- strokeEllipseWithRotation,
5635
- strokeRectWithRotation,
5636
- drawHighlightForDiamondWithRotation,
5429
+ strokeRectWithRotation_simple,
5637
5430
  frameClip,
5638
5431
  renderStaticSceneThrottled,
5639
5432
  renderStaticScene,
@@ -5669,4 +5462,4 @@ export {
5669
5462
  createFile,
5670
5463
  normalizeFile
5671
5464
  };
5672
- //# sourceMappingURL=chunk-WWDIUJ2Q.js.map
5465
+ //# sourceMappingURL=chunk-SJTAY27F.js.map