@excalidraw/excalidraw 0.18.0-508de2f3a → 0.18.0-51ad895

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/dist/dev/{chunk-BVDPDK7J.js → chunk-CP5DND7P.js} +2 -2
  2. package/dist/dev/{chunk-BVDPDK7J.js.map → chunk-CP5DND7P.js.map} +1 -1
  3. package/dist/dev/{chunk-QF5FRM6O.js → chunk-OCFTI2BU.js} +49 -26
  4. package/dist/dev/chunk-OCFTI2BU.js.map +7 -0
  5. package/dist/dev/{chunk-3JWCK6AW.js → chunk-SJTAY27F.js} +164 -376
  6. package/dist/dev/chunk-SJTAY27F.js.map +7 -0
  7. package/dist/dev/chunk-WCM2OLWY.js +69 -0
  8. package/dist/dev/chunk-WCM2OLWY.js.map +7 -0
  9. package/dist/dev/data/{image-CNYZRAWA.js → image-S2GFZH7W.js} +3 -3
  10. package/dist/dev/index.css +1107 -665
  11. package/dist/dev/index.css.map +3 -3
  12. package/dist/dev/index.js +10020 -6943
  13. package/dist/dev/index.js.map +4 -4
  14. package/dist/dev/locales/{ar-SA-XORAP2EK.js → ar-SA-JK5MQ7TT.js} +300 -142
  15. package/dist/dev/locales/ar-SA-JK5MQ7TT.js.map +7 -0
  16. package/dist/dev/locales/{az-AZ-NAUU3Z4Y.js → az-AZ-2PAD62G4.js} +241 -83
  17. package/dist/dev/locales/az-AZ-2PAD62G4.js.map +7 -0
  18. package/dist/dev/locales/{bg-BG-AAABLFCY.js → bg-BG-HUKVYCRK.js} +229 -71
  19. package/dist/dev/locales/bg-BG-HUKVYCRK.js.map +7 -0
  20. package/dist/dev/locales/{bn-BD-PM4AC5WG.js → bn-BD-V2CQI46P.js} +209 -51
  21. package/dist/dev/locales/bn-BD-V2CQI46P.js.map +7 -0
  22. package/dist/dev/locales/bn-IN-MBEO4C3J.js +744 -0
  23. package/dist/dev/locales/bn-IN-MBEO4C3J.js.map +7 -0
  24. package/dist/dev/locales/{ca-ES-YNNMFRQX.js → ca-ES-KWEKW4C3.js} +275 -117
  25. package/dist/dev/locales/ca-ES-KWEKW4C3.js.map +7 -0
  26. package/dist/dev/locales/{cs-CZ-DGZA5IKG.js → cs-CZ-W5AHZB5H.js} +229 -71
  27. package/dist/dev/locales/cs-CZ-W5AHZB5H.js.map +7 -0
  28. package/dist/dev/locales/{da-DK-N76F4QAJ.js → da-DK-ITTM6YM4.js} +298 -140
  29. package/dist/dev/locales/da-DK-ITTM6YM4.js.map +7 -0
  30. package/dist/dev/locales/de-CH-OAWPDQFJ.js +744 -0
  31. package/dist/dev/locales/de-CH-OAWPDQFJ.js.map +7 -0
  32. package/dist/dev/locales/{de-DE-DMRXZ2SZ.js → de-DE-HE4SJIAA.js} +199 -41
  33. package/dist/dev/locales/de-DE-HE4SJIAA.js.map +7 -0
  34. package/dist/dev/locales/{el-GR-HIKPLEXI.js → el-GR-QXASZLPE.js} +274 -116
  35. package/dist/dev/locales/el-GR-QXASZLPE.js.map +7 -0
  36. package/dist/dev/locales/{en-SMAPCEOQ.js → en-MLZIHOCR.js} +4 -2
  37. package/dist/dev/locales/{es-ES-AQYVXC32.js → es-ES-EDA76ZAF.js} +212 -54
  38. package/dist/dev/locales/es-ES-EDA76ZAF.js.map +7 -0
  39. package/dist/dev/locales/{eu-ES-3TOEU5DE.js → eu-ES-TF2DGTZU.js} +210 -52
  40. package/dist/dev/locales/eu-ES-TF2DGTZU.js.map +7 -0
  41. package/dist/dev/locales/{fa-IR-527GAKUP.js → fa-IR-ITKFQ7QV.js} +286 -128
  42. package/dist/dev/locales/fa-IR-ITKFQ7QV.js.map +7 -0
  43. package/dist/dev/locales/{fi-FI-M3WLVDFP.js → fi-FI-UWZRVXFI.js} +240 -82
  44. package/dist/dev/locales/fi-FI-UWZRVXFI.js.map +7 -0
  45. package/dist/dev/locales/{fr-FR-YE4VDJFI.js → fr-FR-Z3SBW42Y.js} +203 -45
  46. package/dist/dev/locales/fr-FR-Z3SBW42Y.js.map +7 -0
  47. package/dist/dev/locales/{gl-ES-KMXUYGUN.js → gl-ES-2QCVIBFP.js} +212 -54
  48. package/dist/dev/locales/gl-ES-2QCVIBFP.js.map +7 -0
  49. package/dist/dev/locales/he-IL-WJNUHU26.js +744 -0
  50. package/dist/dev/locales/he-IL-WJNUHU26.js.map +7 -0
  51. package/dist/dev/locales/hi-IN-XGMO235V.js +744 -0
  52. package/dist/dev/locales/hi-IN-XGMO235V.js.map +7 -0
  53. package/dist/dev/locales/{hu-HU-VIYZI3X4.js → hu-HU-37FDQFIS.js} +238 -80
  54. package/dist/dev/locales/hu-HU-37FDQFIS.js.map +7 -0
  55. package/dist/dev/locales/{id-ID-22TWZNLA.js → id-ID-EJIDCO4E.js} +245 -87
  56. package/dist/dev/locales/id-ID-EJIDCO4E.js.map +7 -0
  57. package/dist/dev/locales/{it-IT-MDEQ2SG3.js → it-IT-HD26UZNF.js} +202 -44
  58. package/dist/dev/locales/it-IT-HD26UZNF.js.map +7 -0
  59. package/dist/dev/locales/{ja-JP-K2DI4W6B.js → ja-JP-37FC23PR.js} +247 -89
  60. package/dist/dev/locales/ja-JP-37FC23PR.js.map +7 -0
  61. package/dist/dev/locales/{kaa-6BPSNM3R.js → kaa-7ZYDFVKA.js} +202 -44
  62. package/dist/dev/locales/kaa-7ZYDFVKA.js.map +7 -0
  63. package/dist/dev/locales/{kab-KAB-2S7ZURK7.js → kab-KAB-MILWXBA6.js} +210 -52
  64. package/dist/dev/locales/kab-KAB-MILWXBA6.js.map +7 -0
  65. package/dist/dev/locales/{kk-KZ-UJPYGRQQ.js → kk-KZ-7BWTPIAV.js} +175 -17
  66. package/dist/dev/locales/kk-KZ-7BWTPIAV.js.map +7 -0
  67. package/dist/dev/locales/{km-KH-M5T5JKUE.js → km-KH-BV4P2KSZ.js} +198 -40
  68. package/dist/dev/locales/km-KH-BV4P2KSZ.js.map +7 -0
  69. package/dist/dev/locales/{ko-KR-RQX37SNF.js → ko-KR-TSXE5P7B.js} +218 -60
  70. package/dist/dev/locales/ko-KR-TSXE5P7B.js.map +7 -0
  71. package/dist/dev/locales/{ku-TR-5XJDIERL.js → ku-TR-ASSXNN3U.js} +198 -40
  72. package/dist/dev/locales/ku-TR-ASSXNN3U.js.map +7 -0
  73. package/dist/dev/locales/{lt-LT-MGUBX6CA.js → lt-LT-G7RZYQQU.js} +179 -21
  74. package/dist/dev/locales/lt-LT-G7RZYQQU.js.map +7 -0
  75. package/dist/dev/locales/{lv-LV-MD7N5VHD.js → lv-LV-DXNPBJZU.js} +196 -38
  76. package/dist/dev/locales/lv-LV-DXNPBJZU.js.map +7 -0
  77. package/dist/dev/locales/{mr-IN-4XWMNGQC.js → mr-IN-7F2ZCTCF.js} +204 -46
  78. package/dist/dev/locales/mr-IN-7F2ZCTCF.js.map +7 -0
  79. package/dist/dev/locales/{my-MM-O4Z74GN5.js → my-MM-NBI3KQGW.js} +181 -23
  80. package/dist/dev/locales/my-MM-NBI3KQGW.js.map +7 -0
  81. package/dist/dev/locales/{nb-NO-BMB73KRH.js → nb-NO-4DCTQT6L.js} +220 -62
  82. package/dist/dev/locales/nb-NO-4DCTQT6L.js.map +7 -0
  83. package/dist/dev/locales/{nl-NL-F2257BLQ.js → nl-NL-RCSOXLW3.js} +218 -60
  84. package/dist/dev/locales/nl-NL-RCSOXLW3.js.map +7 -0
  85. package/dist/dev/locales/{nn-NO-NCORG7TS.js → nn-NO-FR534JV5.js} +201 -43
  86. package/dist/dev/locales/nn-NO-FR534JV5.js.map +7 -0
  87. package/dist/dev/locales/{oc-FR-ATFBDMF6.js → oc-FR-YQCIKZIK.js} +220 -62
  88. package/dist/dev/locales/oc-FR-YQCIKZIK.js.map +7 -0
  89. package/dist/dev/locales/{pa-IN-D2I375G4.js → pa-IN-UM43JGD2.js} +190 -32
  90. package/dist/dev/locales/pa-IN-UM43JGD2.js.map +7 -0
  91. package/dist/dev/locales/{percentages-YKFLWNK2.js → percentages-TR7IWPFY.js} +2 -2
  92. package/dist/dev/locales/{pl-PL-YJHOWAAW.js → pl-PL-2UGKA6HK.js} +214 -56
  93. package/dist/dev/locales/pl-PL-2UGKA6HK.js.map +7 -0
  94. package/dist/dev/locales/{pt-BR-APOPYZJ7.js → pt-BR-H23QFYE3.js} +237 -79
  95. package/dist/dev/locales/pt-BR-H23QFYE3.js.map +7 -0
  96. package/dist/dev/locales/pt-PT-RHKJH5I5.js +744 -0
  97. package/dist/dev/locales/pt-PT-RHKJH5I5.js.map +7 -0
  98. package/dist/dev/locales/{ro-RO-L575VRQA.js → ro-RO-IIFONL3T.js} +203 -45
  99. package/dist/dev/locales/ro-RO-IIFONL3T.js.map +7 -0
  100. package/dist/dev/locales/{ru-RU-BLG6HZG5.js → ru-RU-QEP6D7GK.js} +253 -95
  101. package/dist/dev/locales/ru-RU-QEP6D7GK.js.map +7 -0
  102. package/dist/dev/locales/si-LK-LZYJQLHF.js +744 -0
  103. package/dist/dev/locales/si-LK-LZYJQLHF.js.map +7 -0
  104. package/dist/dev/locales/{sk-SK-DY6IPO5U.js → sk-SK-G2J6PSCB.js} +200 -42
  105. package/dist/dev/locales/sk-SK-G2J6PSCB.js.map +7 -0
  106. package/dist/dev/locales/{sl-SI-5DZSRA47.js → sl-SI-QJT2CAUO.js} +197 -39
  107. package/dist/dev/locales/sl-SI-QJT2CAUO.js.map +7 -0
  108. package/dist/dev/locales/{sv-SE-V32YHALQ.js → sv-SE-3MAT3NDX.js} +202 -44
  109. package/dist/dev/locales/sv-SE-3MAT3NDX.js.map +7 -0
  110. package/dist/dev/locales/{ta-IN-5JRAGQAO.js → ta-IN-J7XOYF2T.js} +257 -99
  111. package/dist/dev/locales/ta-IN-J7XOYF2T.js.map +7 -0
  112. package/dist/dev/locales/{th-TH-55ACRHDJ.js → th-TH-2OI52EOQ.js} +289 -131
  113. package/dist/dev/locales/th-TH-2OI52EOQ.js.map +7 -0
  114. package/dist/dev/locales/{tr-TR-7QYBXDBO.js → tr-TR-G7TAUHUI.js} +257 -99
  115. package/dist/dev/locales/tr-TR-G7TAUHUI.js.map +7 -0
  116. package/dist/dev/locales/{uk-UA-TJS2TMRH.js → uk-UA-IVSVBJIG.js} +229 -71
  117. package/dist/dev/locales/uk-UA-IVSVBJIG.js.map +7 -0
  118. package/dist/dev/locales/{si-LK-KT7GGO6D.js → uz-UZ-KCVDUVDE.js} +212 -54
  119. package/dist/dev/locales/uz-UZ-KCVDUVDE.js.map +7 -0
  120. package/dist/dev/locales/vi-VN-XF3AYKJ7.js +744 -0
  121. package/dist/dev/locales/vi-VN-XF3AYKJ7.js.map +7 -0
  122. package/dist/dev/locales/{zh-CN-4MXUOFTH.js → zh-CN-IS26RG2D.js} +199 -41
  123. package/dist/dev/locales/zh-CN-IS26RG2D.js.map +7 -0
  124. package/dist/dev/locales/{zh-HK-RBTGIU3U.js → zh-HK-KBWQ6SJC.js} +175 -17
  125. package/dist/dev/locales/zh-HK-KBWQ6SJC.js.map +7 -0
  126. package/dist/dev/locales/{zh-TW-U5VF4CCU.js → zh-TW-JKJWJQ4J.js} +204 -46
  127. package/dist/dev/locales/zh-TW-JKJWJQ4J.js.map +7 -0
  128. package/dist/dev/subset-shared.chunk.js +1 -1
  129. package/dist/dev/subset-worker.chunk.js +1 -1
  130. package/dist/prod/{chunk-XRPJNYI4.js → chunk-A66AFZZU.js} +1 -1
  131. package/dist/prod/chunk-Q7BNPSJU.js +1 -0
  132. package/dist/prod/chunk-QNG5NH6R.js +12 -0
  133. package/dist/prod/chunk-XJNFOLHK.js +4 -0
  134. package/dist/prod/data/image-SMWA6JLH.js +1 -0
  135. package/dist/prod/index.css +1 -1
  136. package/dist/prod/index.js +23 -23
  137. package/dist/prod/locales/ar-SA-IYHKZRSE.js +8 -0
  138. package/dist/prod/locales/az-AZ-WL5GYRHK.js +1 -0
  139. package/dist/prod/locales/bg-BG-FXZYTRPD.js +5 -0
  140. package/dist/prod/locales/bn-BD-KO6YL5G2.js +3 -0
  141. package/dist/prod/locales/bn-IN-PC6JHKYB.js +3 -0
  142. package/dist/prod/locales/ca-ES-AREX5NEO.js +8 -0
  143. package/dist/prod/locales/cs-CZ-HXAZMFYH.js +7 -0
  144. package/dist/prod/locales/da-DK-5X7ZLFU3.js +2 -0
  145. package/dist/prod/locales/de-CH-76ZNVSOF.js +7 -0
  146. package/dist/prod/locales/de-DE-KU2ABQRN.js +7 -0
  147. package/dist/prod/locales/el-GR-4AZTZGY6.js +7 -0
  148. package/dist/prod/locales/en-BARVNJLJ.js +1 -0
  149. package/dist/prod/locales/es-ES-MXQVAWTQ.js +7 -0
  150. package/dist/prod/locales/eu-ES-BIF4XBMT.js +7 -0
  151. package/dist/prod/locales/fa-IR-D4HHKAAI.js +9 -0
  152. package/dist/prod/locales/fi-FI-O35ZY7UI.js +6 -0
  153. package/dist/prod/locales/fr-FR-PJOMXPCV.js +12 -0
  154. package/dist/prod/locales/gl-ES-U4NYM3X5.js +6 -0
  155. package/dist/prod/locales/he-IL-656ABAVQ.js +8 -0
  156. package/dist/prod/locales/hi-IN-Z55GAFFR.js +3 -0
  157. package/dist/prod/locales/hu-HU-UJ62DVIW.js +3 -0
  158. package/dist/prod/locales/id-ID-FLZFU3OO.js +8 -0
  159. package/dist/prod/locales/it-IT-DQZT3VFE.js +12 -0
  160. package/dist/prod/locales/ja-JP-43VXGDWI.js +7 -0
  161. package/dist/prod/locales/kaa-L3IMSDYL.js +1 -0
  162. package/dist/prod/locales/kab-KAB-XKPWJLNL.js +4 -0
  163. package/dist/prod/locales/kk-KZ-SXPDDY2H.js +1 -0
  164. package/dist/prod/locales/km-KH-DOS4CPGC.js +7 -0
  165. package/dist/prod/locales/ko-KR-BGC6VCY4.js +5 -0
  166. package/dist/prod/locales/ku-TR-J7IUITIA.js +6 -0
  167. package/dist/prod/locales/lt-LT-AC3LV5KG.js +3 -0
  168. package/dist/prod/locales/lv-LV-I6AY7QG2.js +4 -0
  169. package/dist/prod/locales/mr-IN-5SP4HV5B.js +9 -0
  170. package/dist/prod/locales/my-MM-S7ECRBYZ.js +1 -0
  171. package/dist/prod/locales/nb-NO-6PNHTF4R.js +8 -0
  172. package/dist/prod/locales/nl-NL-AVTAYVB7.js +7 -0
  173. package/dist/prod/locales/nn-NO-3TFXTM7Y.js +4 -0
  174. package/dist/prod/locales/oc-FR-IK6GIE7H.js +4 -0
  175. package/dist/prod/locales/pa-IN-YAKHYJET.js +4 -0
  176. package/dist/prod/locales/percentages-FZSTHYWV.js +1 -0
  177. package/dist/prod/locales/pl-PL-BIY22ZWU.js +12 -0
  178. package/dist/prod/locales/pt-BR-Q23NUPD6.js +6 -0
  179. package/dist/prod/locales/pt-PT-LOPEJLPJ.js +8 -0
  180. package/dist/prod/locales/ro-RO-W3D2ZATV.js +12 -0
  181. package/dist/prod/locales/ru-RU-DCTW7QSH.js +10 -0
  182. package/dist/prod/locales/si-LK-FYRRHO3C.js +1 -0
  183. package/dist/prod/locales/sk-SK-2KAMKFW5.js +7 -0
  184. package/dist/prod/locales/sl-SI-L6B6HFY5.js +6 -0
  185. package/dist/prod/locales/sv-SE-KMY6L2BA.js +8 -0
  186. package/dist/prod/locales/ta-IN-ZQCYE2JK.js +6 -0
  187. package/dist/prod/locales/th-TH-WS7ECBAV.js +1 -0
  188. package/dist/prod/locales/tr-TR-S5FI7JRW.js +4 -0
  189. package/dist/prod/locales/uk-UA-4EZUWUSQ.js +6 -0
  190. package/dist/prod/locales/uz-UZ-OKHL6AFA.js +1 -0
  191. package/dist/prod/locales/vi-VN-I6Q2YS4S.js +7 -0
  192. package/dist/prod/locales/zh-CN-JE4UZWNO.js +11 -0
  193. package/dist/prod/locales/zh-HK-RM35YDXX.js +1 -0
  194. package/dist/prod/locales/zh-TW-ONGLV6Y5.js +9 -0
  195. package/dist/prod/subset-shared.chunk.js +1 -1
  196. package/dist/prod/subset-worker.chunk.js +1 -1
  197. package/dist/types/common/src/constants.d.ts +20 -15
  198. package/dist/types/common/src/editorInterface.d.ts +34 -0
  199. package/dist/types/common/src/index.d.ts +2 -0
  200. package/dist/types/common/src/utils.d.ts +9 -3
  201. package/dist/types/common/src/visualdebug.d.ts +41 -0
  202. package/dist/types/element/src/binding.d.ts +55 -43
  203. package/dist/types/element/src/bounds.d.ts +1 -1
  204. package/dist/types/element/src/collision.d.ts +6 -2
  205. package/dist/types/element/src/delta.d.ts +4 -5
  206. package/dist/types/element/src/index.d.ts +1 -3
  207. package/dist/types/element/src/linearElementEditor.d.ts +15 -18
  208. package/dist/types/element/src/mutateElement.d.ts +0 -1
  209. package/dist/types/element/src/positionElementsOnGrid.d.ts +2 -0
  210. package/dist/types/element/src/renderElement.d.ts +5 -2
  211. package/dist/types/element/src/resizeTest.d.ts +5 -4
  212. package/dist/types/element/src/store.d.ts +5 -0
  213. package/dist/types/element/src/textElement.d.ts +1 -1
  214. package/dist/types/element/src/transformHandles.d.ts +5 -4
  215. package/dist/types/element/src/typeChecks.d.ts +2 -3
  216. package/dist/types/element/src/types.d.ts +7 -11
  217. package/dist/types/element/src/utils.d.ts +2 -1
  218. package/dist/types/element/src/zindex.d.ts +7 -1
  219. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +34 -13
  220. package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
  221. package/dist/types/excalidraw/actions/actionBoundText.d.ts +25 -11
  222. package/dist/types/excalidraw/actions/actionCanvas.d.ts +153 -262
  223. package/dist/types/excalidraw/actions/actionClipboard.d.ts +46 -773
  224. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +12 -5
  225. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +42 -23
  226. package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -2
  227. package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +2 -2
  228. package/dist/types/excalidraw/actions/actionElementLink.d.ts +11 -6
  229. package/dist/types/excalidraw/actions/actionElementLock.d.ts +23 -9
  230. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +12 -5
  231. package/dist/types/excalidraw/actions/actionExport.d.ts +68 -943
  232. package/dist/types/excalidraw/actions/actionFinalize.d.ts +10 -393
  233. package/dist/types/excalidraw/actions/actionFlip.d.ts +2 -2
  234. package/dist/types/excalidraw/actions/actionFrame.d.ts +50 -24
  235. package/dist/types/excalidraw/actions/actionGroup.d.ts +24 -10
  236. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +22 -19
  237. package/dist/types/excalidraw/actions/actionLink.d.ts +9 -2
  238. package/dist/types/excalidraw/actions/actionMenu.d.ts +10 -371
  239. package/dist/types/excalidraw/actions/actionNavigate.d.ts +21 -359
  240. package/dist/types/excalidraw/actions/actionProperties.d.ts +87 -2403
  241. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +12 -5
  242. package/dist/types/excalidraw/actions/actionStyles.d.ts +13 -6
  243. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
  244. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +11 -4
  245. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +11 -4
  246. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +10 -5
  247. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
  248. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +11 -4
  249. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +11 -4
  250. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +12 -5
  251. package/dist/types/excalidraw/actions/actionZindex.d.ts +2 -2
  252. package/dist/types/excalidraw/actions/index.d.ts +2 -2
  253. package/dist/types/excalidraw/actions/manager.d.ts +1 -1
  254. package/dist/types/excalidraw/actions/register.d.ts +1 -1
  255. package/dist/types/excalidraw/actions/types.d.ts +4 -4
  256. package/dist/types/excalidraw/appState.d.ts +9 -4
  257. package/dist/types/excalidraw/clipboard.d.ts +64 -1
  258. package/dist/types/excalidraw/components/Actions.d.ts +21 -4
  259. package/dist/types/excalidraw/components/App.d.ts +36 -27
  260. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +2 -0
  261. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +2 -1
  262. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +2 -1
  263. package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
  264. package/dist/types/excalidraw/components/CommandPalette/types.d.ts +1 -2
  265. package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +1 -1
  266. package/dist/types/excalidraw/components/FilledButton.d.ts +1 -1
  267. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +2 -1
  268. package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +3 -1
  269. package/dist/types/excalidraw/components/HintViewer.d.ts +4 -3
  270. package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
  271. package/dist/types/excalidraw/components/LayerUI.d.ts +2 -1
  272. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +1 -1
  273. package/dist/types/excalidraw/components/LinkButton.d.ts +4 -0
  274. package/dist/types/excalidraw/components/MobileMenu.d.ts +3 -5
  275. package/dist/types/excalidraw/components/MobileToolBar.d.ts +11 -0
  276. package/dist/types/excalidraw/components/Popover.d.ts +2 -1
  277. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -0
  278. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  279. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -2
  280. package/dist/types/excalidraw/components/TextField.d.ts +1 -0
  281. package/dist/types/excalidraw/components/ToolPopover.d.ts +25 -0
  282. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +6 -3
  283. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +4 -2
  284. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +2 -1
  285. package/dist/types/excalidraw/components/icons.d.ts +10 -0
  286. package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +13 -1
  287. package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +0 -3
  288. package/dist/types/excalidraw/components/shapes.d.ts +129 -1
  289. package/dist/types/excalidraw/data/blob.d.ts +3 -7
  290. package/dist/types/excalidraw/data/restore.d.ts +3 -3
  291. package/dist/types/excalidraw/data/types.d.ts +4 -1
  292. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  293. package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +3 -1
  294. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
  295. package/dist/types/excalidraw/index.d.ts +2 -3
  296. package/dist/types/excalidraw/renderer/animation.d.ts +12 -0
  297. package/dist/types/excalidraw/renderer/helpers.d.ts +1 -5
  298. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +5 -13
  299. package/dist/types/excalidraw/scene/types.d.ts +15 -3
  300. package/dist/types/excalidraw/shortcut.d.ts +1 -0
  301. package/dist/types/excalidraw/types.d.ts +32 -21
  302. package/dist/types/math/src/segment.d.ts +1 -0
  303. package/package.json +6 -6
  304. package/dist/dev/chunk-3JWCK6AW.js.map +0 -7
  305. package/dist/dev/chunk-MFAYKRVR.js +0 -66
  306. package/dist/dev/chunk-MFAYKRVR.js.map +0 -7
  307. package/dist/dev/chunk-QF5FRM6O.js.map +0 -7
  308. package/dist/dev/locales/ar-SA-XORAP2EK.js.map +0 -7
  309. package/dist/dev/locales/az-AZ-NAUU3Z4Y.js.map +0 -7
  310. package/dist/dev/locales/bg-BG-AAABLFCY.js.map +0 -7
  311. package/dist/dev/locales/bn-BD-PM4AC5WG.js.map +0 -7
  312. package/dist/dev/locales/ca-ES-YNNMFRQX.js.map +0 -7
  313. package/dist/dev/locales/cs-CZ-DGZA5IKG.js.map +0 -7
  314. package/dist/dev/locales/da-DK-N76F4QAJ.js.map +0 -7
  315. package/dist/dev/locales/de-DE-DMRXZ2SZ.js.map +0 -7
  316. package/dist/dev/locales/el-GR-HIKPLEXI.js.map +0 -7
  317. package/dist/dev/locales/es-ES-AQYVXC32.js.map +0 -7
  318. package/dist/dev/locales/eu-ES-3TOEU5DE.js.map +0 -7
  319. package/dist/dev/locales/fa-IR-527GAKUP.js.map +0 -7
  320. package/dist/dev/locales/fi-FI-M3WLVDFP.js.map +0 -7
  321. package/dist/dev/locales/fr-FR-YE4VDJFI.js.map +0 -7
  322. package/dist/dev/locales/gl-ES-KMXUYGUN.js.map +0 -7
  323. package/dist/dev/locales/he-IL-4MU5N22B.js +0 -586
  324. package/dist/dev/locales/he-IL-4MU5N22B.js.map +0 -7
  325. package/dist/dev/locales/hi-IN-ZHZNZWFC.js +0 -586
  326. package/dist/dev/locales/hi-IN-ZHZNZWFC.js.map +0 -7
  327. package/dist/dev/locales/hu-HU-VIYZI3X4.js.map +0 -7
  328. package/dist/dev/locales/id-ID-22TWZNLA.js.map +0 -7
  329. package/dist/dev/locales/it-IT-MDEQ2SG3.js.map +0 -7
  330. package/dist/dev/locales/ja-JP-K2DI4W6B.js.map +0 -7
  331. package/dist/dev/locales/kaa-6BPSNM3R.js.map +0 -7
  332. package/dist/dev/locales/kab-KAB-2S7ZURK7.js.map +0 -7
  333. package/dist/dev/locales/kk-KZ-UJPYGRQQ.js.map +0 -7
  334. package/dist/dev/locales/km-KH-M5T5JKUE.js.map +0 -7
  335. package/dist/dev/locales/ko-KR-RQX37SNF.js.map +0 -7
  336. package/dist/dev/locales/ku-TR-5XJDIERL.js.map +0 -7
  337. package/dist/dev/locales/lt-LT-MGUBX6CA.js.map +0 -7
  338. package/dist/dev/locales/lv-LV-MD7N5VHD.js.map +0 -7
  339. package/dist/dev/locales/mr-IN-4XWMNGQC.js.map +0 -7
  340. package/dist/dev/locales/my-MM-O4Z74GN5.js.map +0 -7
  341. package/dist/dev/locales/nb-NO-BMB73KRH.js.map +0 -7
  342. package/dist/dev/locales/nl-NL-F2257BLQ.js.map +0 -7
  343. package/dist/dev/locales/nn-NO-NCORG7TS.js.map +0 -7
  344. package/dist/dev/locales/oc-FR-ATFBDMF6.js.map +0 -7
  345. package/dist/dev/locales/pa-IN-D2I375G4.js.map +0 -7
  346. package/dist/dev/locales/pl-PL-YJHOWAAW.js.map +0 -7
  347. package/dist/dev/locales/pt-BR-APOPYZJ7.js.map +0 -7
  348. package/dist/dev/locales/pt-PT-W56WCN7P.js +0 -586
  349. package/dist/dev/locales/pt-PT-W56WCN7P.js.map +0 -7
  350. package/dist/dev/locales/ro-RO-L575VRQA.js.map +0 -7
  351. package/dist/dev/locales/ru-RU-BLG6HZG5.js.map +0 -7
  352. package/dist/dev/locales/si-LK-KT7GGO6D.js.map +0 -7
  353. package/dist/dev/locales/sk-SK-DY6IPO5U.js.map +0 -7
  354. package/dist/dev/locales/sl-SI-5DZSRA47.js.map +0 -7
  355. package/dist/dev/locales/sv-SE-V32YHALQ.js.map +0 -7
  356. package/dist/dev/locales/ta-IN-5JRAGQAO.js.map +0 -7
  357. package/dist/dev/locales/th-TH-55ACRHDJ.js.map +0 -7
  358. package/dist/dev/locales/tr-TR-7QYBXDBO.js.map +0 -7
  359. package/dist/dev/locales/uk-UA-TJS2TMRH.js.map +0 -7
  360. package/dist/dev/locales/vi-VN-Y5CQ2EKQ.js +0 -586
  361. package/dist/dev/locales/vi-VN-Y5CQ2EKQ.js.map +0 -7
  362. package/dist/dev/locales/zh-CN-4MXUOFTH.js.map +0 -7
  363. package/dist/dev/locales/zh-HK-RBTGIU3U.js.map +0 -7
  364. package/dist/dev/locales/zh-TW-U5VF4CCU.js.map +0 -7
  365. package/dist/prod/chunk-2HQY2INW.js +0 -4
  366. package/dist/prod/chunk-I4UNSFV6.js +0 -12
  367. package/dist/prod/chunk-Z3N5DIM6.js +0 -1
  368. package/dist/prod/data/image-DYRE7ZKS.js +0 -1
  369. package/dist/prod/locales/ar-SA-G6X2FPQ2.js +0 -10
  370. package/dist/prod/locales/az-AZ-76LH7QW2.js +0 -1
  371. package/dist/prod/locales/bg-BG-XCXSNQG7.js +0 -5
  372. package/dist/prod/locales/bn-BD-2XOGV67Q.js +0 -5
  373. package/dist/prod/locales/ca-ES-6MX7JW3Y.js +0 -8
  374. package/dist/prod/locales/cs-CZ-2BRQDIVT.js +0 -11
  375. package/dist/prod/locales/da-DK-5WZEPLOC.js +0 -5
  376. package/dist/prod/locales/de-DE-XR44H4JA.js +0 -8
  377. package/dist/prod/locales/el-GR-BZB4AONW.js +0 -10
  378. package/dist/prod/locales/en-TYY6KWIJ.js +0 -1
  379. package/dist/prod/locales/es-ES-U4NZUMDT.js +0 -9
  380. package/dist/prod/locales/eu-ES-A7QVB2H4.js +0 -11
  381. package/dist/prod/locales/fa-IR-HGAKTJCU.js +0 -8
  382. package/dist/prod/locales/fi-FI-Z5N7JZ37.js +0 -6
  383. package/dist/prod/locales/fr-FR-RHASNOE6.js +0 -9
  384. package/dist/prod/locales/gl-ES-HMX3MZ6V.js +0 -10
  385. package/dist/prod/locales/he-IL-6SHJWFNN.js +0 -10
  386. package/dist/prod/locales/hi-IN-IWLTKZ5I.js +0 -4
  387. package/dist/prod/locales/hu-HU-A5ZG7DT2.js +0 -7
  388. package/dist/prod/locales/id-ID-SAP4L64H.js +0 -10
  389. package/dist/prod/locales/it-IT-JPQ66NNP.js +0 -11
  390. package/dist/prod/locales/ja-JP-DBVTYXUO.js +0 -8
  391. package/dist/prod/locales/kaa-6HZHGXH3.js +0 -1
  392. package/dist/prod/locales/kab-KAB-ZGHBKWFO.js +0 -8
  393. package/dist/prod/locales/kk-KZ-P5N5QNE5.js +0 -1
  394. package/dist/prod/locales/km-KH-HSX4SM5Z.js +0 -11
  395. package/dist/prod/locales/ko-KR-MTYHY66A.js +0 -9
  396. package/dist/prod/locales/ku-TR-6OUDTVRD.js +0 -9
  397. package/dist/prod/locales/lt-LT-XHIRWOB4.js +0 -3
  398. package/dist/prod/locales/lv-LV-5QDEKY6T.js +0 -7
  399. package/dist/prod/locales/mr-IN-CRQNXWMA.js +0 -13
  400. package/dist/prod/locales/my-MM-5M5IBNSE.js +0 -1
  401. package/dist/prod/locales/nb-NO-T6EIAALU.js +0 -10
  402. package/dist/prod/locales/nl-NL-IS3SIHDZ.js +0 -8
  403. package/dist/prod/locales/nn-NO-6E72VCQL.js +0 -8
  404. package/dist/prod/locales/oc-FR-POXYY2M6.js +0 -8
  405. package/dist/prod/locales/pa-IN-N4M65BXN.js +0 -4
  406. package/dist/prod/locales/percentages-BXMCSKIN.js +0 -1
  407. package/dist/prod/locales/pl-PL-T2D74RX3.js +0 -9
  408. package/dist/prod/locales/pt-BR-5N22H2LF.js +0 -9
  409. package/dist/prod/locales/pt-PT-UZXXM6DQ.js +0 -9
  410. package/dist/prod/locales/ro-RO-JPDTUUEW.js +0 -11
  411. package/dist/prod/locales/ru-RU-B4JR7IUQ.js +0 -9
  412. package/dist/prod/locales/si-LK-N5RQ5JYF.js +0 -1
  413. package/dist/prod/locales/sk-SK-C5VTKIMK.js +0 -6
  414. package/dist/prod/locales/sl-SI-NN7IZMDC.js +0 -6
  415. package/dist/prod/locales/sv-SE-XGPEYMSR.js +0 -10
  416. package/dist/prod/locales/ta-IN-2NMHFXQM.js +0 -9
  417. package/dist/prod/locales/th-TH-HPSO5L25.js +0 -2
  418. package/dist/prod/locales/tr-TR-DEFEU3FU.js +0 -7
  419. package/dist/prod/locales/uk-UA-QMV73CPH.js +0 -6
  420. package/dist/prod/locales/vi-VN-M7AON7JQ.js +0 -5
  421. package/dist/prod/locales/zh-CN-LNUGB5OW.js +0 -10
  422. package/dist/prod/locales/zh-HK-E62DVLB3.js +0 -1
  423. package/dist/prod/locales/zh-TW-RAJ6MFWO.js +0 -9
  424. /package/dist/dev/data/{image-CNYZRAWA.js.map → image-S2GFZH7W.js.map} +0 -0
  425. /package/dist/dev/locales/{en-SMAPCEOQ.js.map → en-MLZIHOCR.js.map} +0 -0
  426. /package/dist/dev/locales/{percentages-YKFLWNK2.js.map → percentages-TR7IWPFY.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  define_import_meta_env_default
3
- } from "./chunk-BVDPDK7J.js";
3
+ } from "./chunk-CP5DND7P.js";
4
4
  import {
5
5
  __publicField
6
6
  } from "./chunk-XDFCUUT6.js";
@@ -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
- fixedSegments: element.fixedSegments,
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-CNYZRAWA.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,
@@ -5463,16 +5268,11 @@ var ImageURLToFile = async (imageUrl, filename = "") => {
5463
5268
  }
5464
5269
  throw new Error("Error: unsupported file type", { cause: "UNSUPPORTED" });
5465
5270
  };
5466
- var getFileFromEvent = async (event) => {
5467
- const file = event.dataTransfer.files.item(0);
5468
- const fileHandle = await getFileHandle(event);
5469
- return { file: file ? await normalizeFile(file) : null, fileHandle };
5470
- };
5471
5271
  var getFileHandle = async (event) => {
5472
5272
  if (nativeFileSystemSupported) {
5473
5273
  try {
5474
- const item = event.dataTransfer.items[0];
5475
- const handle = await item.getAsFileSystemHandle() || null;
5274
+ const dataTransferItem = event instanceof DataTransferItem ? event : event.dataTransfer?.items?.[0];
5275
+ const handle = await dataTransferItem.getAsFileSystemHandle() || null;
5476
5276
  return handle;
5477
5277
  } catch (error) {
5478
5278
  console.warn(error.name, error.message);
@@ -5481,61 +5281,52 @@ var getFileHandle = async (event) => {
5481
5281
  }
5482
5282
  return null;
5483
5283
  };
5484
- var getActualMimeTypeFromImage = (buffer) => {
5284
+ var getActualMimeTypeFromImage = async (file) => {
5485
5285
  let mimeType = null;
5486
- const first8Bytes = `${[...new Uint8Array(buffer).slice(0, 8)].join(" ")} `;
5487
- const headerBytes = {
5286
+ const leadingBytes = [
5287
+ ...new Uint8Array(await blobToArrayBuffer(file.slice(0, 15)))
5288
+ ].join(" ");
5289
+ const bytes = {
5488
5290
  // https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header
5489
- png: "137 80 78 71 13 10 26 10 ",
5291
+ png: /^137 80 78 71 13 10 26 10\b/,
5490
5292
  // https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure
5491
5293
  // jpg is a bit wonky. Checking the first three bytes should be enough,
5492
5294
  // but may yield false positives. (https://stackoverflow.com/a/23360709/927631)
5493
- jpg: "255 216 255 ",
5295
+ jpg: /^255 216 255\b/,
5494
5296
  // https://en.wikipedia.org/wiki/GIF#Example_GIF_file
5495
- 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/
5496
5300
  };
5497
- if (first8Bytes === headerBytes.png) {
5498
- mimeType = MIME_TYPES6.png;
5499
- } else if (first8Bytes.startsWith(headerBytes.jpg)) {
5500
- mimeType = MIME_TYPES6.jpg;
5501
- } else if (first8Bytes.startsWith(headerBytes.gif)) {
5502
- mimeType = MIME_TYPES6.gif;
5503
- }
5504
- 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;
5505
5308
  };
5506
5309
  var createFile = (blob, mimeType, name) => {
5507
5310
  return new File([blob], name || "", {
5508
5311
  type: mimeType
5509
5312
  });
5510
5313
  };
5314
+ var normalizedFileSymbol = Symbol("fileNormalized");
5511
5315
  var normalizeFile = async (file) => {
5512
- if (!file.type) {
5513
- if (file?.name?.endsWith(".excalidrawlib")) {
5514
- file = createFile(
5515
- await blobToArrayBuffer(file),
5516
- MIME_TYPES6.excalidrawlib,
5517
- file.name
5518
- );
5519
- } else if (file?.name?.endsWith(".excalidraw")) {
5520
- file = createFile(
5521
- await blobToArrayBuffer(file),
5522
- MIME_TYPES6.excalidraw,
5523
- file.name
5524
- );
5525
- } else {
5526
- const buffer = await blobToArrayBuffer(file);
5527
- const mimeType = getActualMimeTypeFromImage(buffer);
5528
- if (mimeType) {
5529
- file = createFile(buffer, mimeType, file.name);
5530
- }
5531
- }
5532
- } else if (isSupportedImageFile(file)) {
5533
- const buffer = await blobToArrayBuffer(file);
5534
- 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);
5535
5325
  if (mimeType && mimeType !== file.type) {
5536
- file = createFile(buffer, mimeType, file.name);
5326
+ file = createFile(file, mimeType, file.name);
5537
5327
  }
5538
5328
  }
5329
+ file[normalizedFileSymbol] = true;
5539
5330
  return file;
5540
5331
  };
5541
5332
  var blobToArrayBuffer = (blob) => {
@@ -5635,10 +5426,7 @@ export {
5635
5426
  fillCircle,
5636
5427
  getNormalizedCanvasDimensions,
5637
5428
  bootstrapCanvas,
5638
- drawHighlightForRectWithRotation,
5639
- strokeEllipseWithRotation,
5640
- strokeRectWithRotation,
5641
- drawHighlightForDiamondWithRotation,
5429
+ strokeRectWithRotation_simple,
5642
5430
  frameClip,
5643
5431
  renderStaticSceneThrottled,
5644
5432
  renderStaticScene,
@@ -5670,8 +5458,8 @@ export {
5670
5458
  resizeImageFile,
5671
5459
  SVGStringToFile,
5672
5460
  ImageURLToFile,
5673
- getFileFromEvent,
5461
+ getFileHandle,
5674
5462
  createFile,
5675
5463
  normalizeFile
5676
5464
  };
5677
- //# sourceMappingURL=chunk-3JWCK6AW.js.map
5465
+ //# sourceMappingURL=chunk-SJTAY27F.js.map