@excalidraw/excalidraw 0.18.0-b9d27d3 → 0.18.0-c158187

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 (518) hide show
  1. package/dist/dev/{chunk-WWDIUJ2Q.js → chunk-5A4X24JB.js} +277 -456
  2. package/dist/dev/chunk-5A4X24JB.js.map +7 -0
  3. package/dist/dev/{chunk-FB2NA5UG.js → chunk-6JJSWC4C.js} +1 -1
  4. package/dist/dev/{chunk-FB2NA5UG.js.map → chunk-6JJSWC4C.js.map} +2 -2
  5. package/dist/dev/chunk-DJHLEOOZ.js +69 -0
  6. package/dist/dev/chunk-DJHLEOOZ.js.map +7 -0
  7. package/dist/dev/{chunk-QF5FRM6O.js → chunk-OCFTI2BU.js} +49 -26
  8. package/dist/dev/chunk-OCFTI2BU.js.map +7 -0
  9. package/dist/dev/data/{image-VTYIFRQE.js → image-Q6JHR7OE.js} +2 -2
  10. package/dist/dev/index.css +1042 -602
  11. package/dist/dev/index.css.map +3 -3
  12. package/dist/dev/index.js +10053 -7628
  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-ZRDYEPMS.js} +199 -41
  33. package/dist/dev/locales/de-DE-ZRDYEPMS.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-VLQBB7FJ.js} +212 -54
  38. package/dist/dev/locales/es-ES-VLQBB7FJ.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-A72LKGCO.js} +203 -45
  46. package/dist/dev/locales/fr-FR-A72LKGCO.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-X34PIOJ2.js} +202 -44
  58. package/dist/dev/locales/it-IT-X34PIOJ2.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-XGZJ7V2V.js} +297 -139
  84. package/dist/dev/locales/nl-NL-XGZJ7V2V.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-OGWD7R2K.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-RWC6UWGY.js} +200 -42
  105. package/dist/dev/locales/sk-SK-RWC6UWGY.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-KBZAVWP5.js +744 -0
  121. package/dist/dev/locales/vi-VN-KBZAVWP5.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-AJI3LATG.js +1 -0
  131. package/dist/prod/chunk-QNG5NH6R.js +12 -0
  132. package/dist/prod/chunk-TIFXQFVB.js +4 -0
  133. package/dist/prod/{chunk-LS7FJGPW.js → chunk-Z5NKEFVG.js} +8 -8
  134. package/dist/prod/data/{image-YQ6UXXDA.js → image-OPZV5J37.js} +1 -1
  135. package/dist/prod/index.css +1 -1
  136. package/dist/prod/index.js +26 -26
  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-G3JVZ4MQ.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-ART7BI3G.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-XEFNCM4I.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-GIGIGIBJ.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-R4C4SUIG.js +13 -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-OL6W367U.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-MC7UOHQO.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-K34TWHF7.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/bounds.d.ts +10 -0
  198. package/dist/types/common/src/colors.d.ts +5 -2
  199. package/dist/types/common/src/constants.d.ts +22 -24
  200. package/dist/types/common/src/editorInterface.d.ts +34 -0
  201. package/dist/types/common/src/font-metadata.d.ts +1 -3
  202. package/dist/types/common/src/index.d.ts +3 -0
  203. package/dist/types/common/src/keys.d.ts +1 -1
  204. package/dist/types/common/src/utility-types.d.ts +0 -1
  205. package/dist/types/common/src/utils.d.ts +49 -33
  206. package/dist/types/common/src/visualdebug.d.ts +41 -0
  207. package/dist/types/element/src/Scene.d.ts +3 -3
  208. package/dist/types/element/src/binding.d.ts +58 -44
  209. package/dist/types/element/src/bounds.d.ts +2 -10
  210. package/dist/types/element/src/collision.d.ts +6 -2
  211. package/dist/types/element/src/comparisons.d.ts +7 -7
  212. package/dist/types/element/src/dragElements.d.ts +3 -3
  213. package/dist/types/element/src/duplicate.d.ts +3 -3
  214. package/dist/types/element/src/fractionalIndex.d.ts +2 -2
  215. package/dist/types/element/src/frame.d.ts +5 -1
  216. package/dist/types/element/src/heading.d.ts +2 -1
  217. package/dist/types/element/src/image.d.ts +1 -11
  218. package/dist/types/element/src/index.d.ts +1 -3
  219. package/dist/types/element/src/linearElementEditor.d.ts +16 -20
  220. package/dist/types/element/src/mutateElement.d.ts +3 -1
  221. package/dist/types/element/src/newElement.d.ts +6 -6
  222. package/dist/types/element/src/renderElement.d.ts +4 -7
  223. package/dist/types/element/src/resizeElements.d.ts +10 -10
  224. package/dist/types/element/src/resizeTest.d.ts +6 -5
  225. package/dist/types/element/src/selection.d.ts +3 -7
  226. package/dist/types/element/src/shape.d.ts +8 -7
  227. package/dist/types/element/src/textMeasurements.d.ts +1 -3
  228. package/dist/types/{excalidraw/data → element/src}/transform.d.ts +3 -3
  229. package/dist/types/element/src/transformHandles.d.ts +8 -27
  230. package/dist/types/element/src/typeChecks.d.ts +4 -7
  231. package/dist/types/element/src/types.d.ts +7 -11
  232. package/dist/types/element/src/utils.d.ts +5 -2
  233. package/dist/types/element/src/zindex.d.ts +7 -1
  234. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +93 -136
  235. package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -7
  236. package/dist/types/excalidraw/actions/actionBoundText.d.ts +67 -96
  237. package/dist/types/excalidraw/actions/actionCanvas.d.ts +401 -771
  238. package/dist/types/excalidraw/actions/actionClipboard.d.ts +86 -856
  239. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +32 -47
  240. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +107 -156
  241. package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -3
  242. package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +2 -3
  243. package/dist/types/excalidraw/actions/actionElementLink.d.ts +28 -45
  244. package/dist/types/excalidraw/actions/actionElementLock.d.ts +66 -95
  245. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +33 -48
  246. package/dist/types/excalidraw/actions/actionExport.d.ts +144 -1104
  247. package/dist/types/excalidraw/actions/actionFinalize.d.ts +10 -394
  248. package/dist/types/excalidraw/actions/actionFlip.d.ts +2 -3
  249. package/dist/types/excalidraw/actions/actionFrame.d.ts +213 -308
  250. package/dist/types/excalidraw/actions/actionGroup.d.ts +70 -107
  251. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +123 -178
  252. package/dist/types/excalidraw/actions/actionLink.d.ts +30 -45
  253. package/dist/types/excalidraw/actions/actionMenu.d.ts +27 -410
  254. package/dist/types/excalidraw/actions/actionNavigate.d.ts +18 -359
  255. package/dist/types/excalidraw/actions/actionProperties.d.ts +129 -2488
  256. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +35 -54
  257. package/dist/types/excalidraw/actions/actionStyles.d.ts +32 -47
  258. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
  259. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +32 -47
  260. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +32 -47
  261. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +25 -42
  262. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
  263. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +32 -47
  264. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +32 -47
  265. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +33 -48
  266. package/dist/types/excalidraw/actions/actionZindex.d.ts +2 -3
  267. package/dist/types/excalidraw/actions/index.d.ts +2 -2
  268. package/dist/types/excalidraw/actions/register.d.ts +2 -2
  269. package/dist/types/excalidraw/actions/types.d.ts +4 -4
  270. package/dist/types/excalidraw/appState.d.ts +12 -7
  271. package/dist/types/excalidraw/clipboard.d.ts +7 -29
  272. package/dist/types/excalidraw/components/Actions.d.ts +22 -5
  273. package/dist/types/excalidraw/components/App.d.ts +58 -59
  274. package/dist/types/excalidraw/components/ButtonIconCycle.d.ts +1 -1
  275. package/dist/types/excalidraw/components/Card.d.ts +0 -1
  276. package/dist/types/excalidraw/components/ColorPicker/ColorInput.d.ts +7 -4
  277. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +0 -1
  278. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +2 -0
  279. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +2 -1
  280. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +2 -1
  281. package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +0 -1
  282. package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
  283. package/dist/types/excalidraw/components/CommandPalette/types.d.ts +1 -3
  284. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +2 -2
  285. package/dist/types/excalidraw/components/DarkModeToggle.d.ts +1 -1
  286. package/dist/types/excalidraw/components/DefaultSidebar.d.ts +9 -13
  287. package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +1 -1
  288. package/dist/types/excalidraw/components/Ellipsify.d.ts +1 -2
  289. package/dist/types/excalidraw/components/ErrorDialog.d.ts +1 -1
  290. package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +1 -2
  291. package/dist/types/excalidraw/components/EyeDropper.d.ts +0 -1
  292. package/dist/types/excalidraw/components/FilledButton.d.ts +1 -1
  293. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +2 -1
  294. package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +3 -1
  295. package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +0 -1
  296. package/dist/types/excalidraw/components/HelpDialog.d.ts +1 -1
  297. package/dist/types/excalidraw/components/HintViewer.d.ts +4 -3
  298. package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
  299. package/dist/types/excalidraw/components/LayerUI.d.ts +2 -1
  300. package/dist/types/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  301. package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +1 -2
  302. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +1 -1
  303. package/dist/types/excalidraw/components/LibraryUnit.d.ts +2 -3
  304. package/dist/types/excalidraw/components/LinkButton.d.ts +4 -0
  305. package/dist/types/excalidraw/components/LoadingMessage.d.ts +0 -1
  306. package/dist/types/excalidraw/components/MobileMenu.d.ts +3 -5
  307. package/dist/types/excalidraw/components/MobileToolBar.d.ts +10 -0
  308. package/dist/types/excalidraw/components/Modal.d.ts +0 -1
  309. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +1 -1
  310. package/dist/types/excalidraw/components/Popover.d.ts +2 -1
  311. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -0
  312. package/dist/types/excalidraw/components/RadioGroup.d.ts +0 -1
  313. package/dist/types/excalidraw/components/RadioSelection.d.ts +4 -4
  314. package/dist/types/excalidraw/components/ScrollableList.d.ts +0 -1
  315. package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +15 -21
  316. package/dist/types/excalidraw/components/Sidebar/SidebarHeader.d.ts +1 -1
  317. package/dist/types/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -2
  318. package/dist/types/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -2
  319. package/dist/types/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +1 -2
  320. package/dist/types/excalidraw/components/Sidebar/SidebarTabs.d.ts +1 -2
  321. package/dist/types/excalidraw/components/Spinner.d.ts +4 -4
  322. package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +0 -1
  323. package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +0 -1
  324. package/dist/types/excalidraw/components/Stats/DragInput.d.ts +0 -1
  325. package/dist/types/excalidraw/components/Stats/index.d.ts +7 -8
  326. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  327. package/dist/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +1 -2
  328. package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +0 -1
  329. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +1 -2
  330. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +1 -2
  331. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +1 -2
  332. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +2 -3
  333. package/dist/types/excalidraw/components/TTDDialog/common.d.ts +2 -3
  334. package/dist/types/excalidraw/components/TextField.d.ts +1 -0
  335. package/dist/types/excalidraw/components/Toast.d.ts +3 -3
  336. package/dist/types/excalidraw/components/ToolPopover.d.ts +25 -0
  337. package/dist/types/excalidraw/components/Trans.d.ts +2 -2
  338. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +6 -3
  339. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +30 -32
  340. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +6 -5
  341. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +3 -3
  342. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +10 -18
  343. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +3 -3
  344. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +0 -1
  345. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +2 -2
  346. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +6 -6
  347. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +3 -4
  348. package/dist/types/excalidraw/components/dropdownMenu/common.d.ts +1 -1
  349. package/dist/types/excalidraw/components/hoc/withInternalFallback.d.ts +1 -1
  350. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +1 -1
  351. package/dist/types/excalidraw/components/icons.d.ts +21 -11
  352. package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +4 -3
  353. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +2 -2
  354. package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +25 -30
  355. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +6 -6
  356. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +15 -16
  357. package/dist/types/excalidraw/data/blob.d.ts +323 -5
  358. package/dist/types/excalidraw/data/encode.d.ts +4 -4
  359. package/dist/types/excalidraw/data/encryption.d.ts +5 -5
  360. package/dist/types/excalidraw/data/filesystem.d.ts +2 -2
  361. package/dist/types/excalidraw/data/index.d.ts +3 -3
  362. package/dist/types/excalidraw/data/json.d.ts +159 -2
  363. package/dist/types/excalidraw/data/library.d.ts +24 -9
  364. package/dist/types/excalidraw/data/restore.d.ts +25 -10
  365. package/dist/types/excalidraw/data/types.d.ts +4 -1
  366. package/dist/types/excalidraw/editor-jotai.d.ts +11 -11
  367. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  368. package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +4 -3
  369. package/dist/types/excalidraw/hooks/useScrollPosition.d.ts +1 -2
  370. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
  371. package/dist/types/excalidraw/i18n.d.ts +2 -2
  372. package/dist/types/excalidraw/index.d.ts +4 -7
  373. package/dist/types/excalidraw/renderer/animation.d.ts +12 -0
  374. package/dist/types/excalidraw/renderer/helpers.d.ts +6 -8
  375. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +8 -14
  376. package/dist/types/excalidraw/scene/Renderer.d.ts +5 -2
  377. package/dist/types/excalidraw/scene/export.d.ts +2 -2
  378. package/dist/types/excalidraw/scene/scroll.d.ts +1 -6
  379. package/dist/types/excalidraw/scene/types.d.ts +22 -5
  380. package/dist/types/excalidraw/shortcut.d.ts +1 -0
  381. package/dist/types/excalidraw/snapping.d.ts +5 -5
  382. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-bindings.d.ts +1 -1
  383. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-loader.d.ts +1 -1
  384. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-wasm.d.ts +1 -1
  385. package/dist/types/excalidraw/subset/woff2/woff2-loader.d.ts +2 -2
  386. package/dist/types/excalidraw/subset/woff2/woff2-wasm.d.ts +1 -1
  387. package/dist/types/excalidraw/types.d.ts +31 -21
  388. package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +2 -2
  389. package/dist/types/math/src/polygon.d.ts +2 -2
  390. package/dist/types/math/src/range.d.ts +1 -3
  391. package/dist/types/math/src/segment.d.ts +4 -3
  392. package/dist/types/utils/src/bbox.d.ts +1 -1
  393. package/dist/types/utils/src/export.d.ts +5 -5
  394. package/dist/types/utils/src/shape.d.ts +6 -6
  395. package/dist/types/utils/src/withinBounds.d.ts +2 -2
  396. package/package.json +6 -6
  397. package/dist/dev/chunk-MFAYKRVR.js +0 -66
  398. package/dist/dev/chunk-MFAYKRVR.js.map +0 -7
  399. package/dist/dev/chunk-QF5FRM6O.js.map +0 -7
  400. package/dist/dev/chunk-WWDIUJ2Q.js.map +0 -7
  401. package/dist/dev/locales/ar-SA-XORAP2EK.js.map +0 -7
  402. package/dist/dev/locales/az-AZ-NAUU3Z4Y.js.map +0 -7
  403. package/dist/dev/locales/bg-BG-AAABLFCY.js.map +0 -7
  404. package/dist/dev/locales/bn-BD-PM4AC5WG.js.map +0 -7
  405. package/dist/dev/locales/ca-ES-YNNMFRQX.js.map +0 -7
  406. package/dist/dev/locales/cs-CZ-DGZA5IKG.js.map +0 -7
  407. package/dist/dev/locales/da-DK-N76F4QAJ.js.map +0 -7
  408. package/dist/dev/locales/de-DE-DMRXZ2SZ.js.map +0 -7
  409. package/dist/dev/locales/el-GR-HIKPLEXI.js.map +0 -7
  410. package/dist/dev/locales/es-ES-AQYVXC32.js.map +0 -7
  411. package/dist/dev/locales/eu-ES-3TOEU5DE.js.map +0 -7
  412. package/dist/dev/locales/fa-IR-527GAKUP.js.map +0 -7
  413. package/dist/dev/locales/fi-FI-M3WLVDFP.js.map +0 -7
  414. package/dist/dev/locales/fr-FR-YE4VDJFI.js.map +0 -7
  415. package/dist/dev/locales/gl-ES-KMXUYGUN.js.map +0 -7
  416. package/dist/dev/locales/he-IL-4MU5N22B.js +0 -586
  417. package/dist/dev/locales/he-IL-4MU5N22B.js.map +0 -7
  418. package/dist/dev/locales/hi-IN-ZHZNZWFC.js +0 -586
  419. package/dist/dev/locales/hi-IN-ZHZNZWFC.js.map +0 -7
  420. package/dist/dev/locales/hu-HU-VIYZI3X4.js.map +0 -7
  421. package/dist/dev/locales/id-ID-22TWZNLA.js.map +0 -7
  422. package/dist/dev/locales/it-IT-MDEQ2SG3.js.map +0 -7
  423. package/dist/dev/locales/ja-JP-K2DI4W6B.js.map +0 -7
  424. package/dist/dev/locales/kaa-6BPSNM3R.js.map +0 -7
  425. package/dist/dev/locales/kab-KAB-2S7ZURK7.js.map +0 -7
  426. package/dist/dev/locales/kk-KZ-UJPYGRQQ.js.map +0 -7
  427. package/dist/dev/locales/km-KH-M5T5JKUE.js.map +0 -7
  428. package/dist/dev/locales/ko-KR-RQX37SNF.js.map +0 -7
  429. package/dist/dev/locales/ku-TR-5XJDIERL.js.map +0 -7
  430. package/dist/dev/locales/lt-LT-MGUBX6CA.js.map +0 -7
  431. package/dist/dev/locales/lv-LV-MD7N5VHD.js.map +0 -7
  432. package/dist/dev/locales/mr-IN-4XWMNGQC.js.map +0 -7
  433. package/dist/dev/locales/my-MM-O4Z74GN5.js.map +0 -7
  434. package/dist/dev/locales/nb-NO-BMB73KRH.js.map +0 -7
  435. package/dist/dev/locales/nl-NL-F2257BLQ.js.map +0 -7
  436. package/dist/dev/locales/nn-NO-NCORG7TS.js.map +0 -7
  437. package/dist/dev/locales/oc-FR-ATFBDMF6.js.map +0 -7
  438. package/dist/dev/locales/pa-IN-D2I375G4.js.map +0 -7
  439. package/dist/dev/locales/pl-PL-YJHOWAAW.js.map +0 -7
  440. package/dist/dev/locales/pt-BR-APOPYZJ7.js.map +0 -7
  441. package/dist/dev/locales/pt-PT-W56WCN7P.js +0 -586
  442. package/dist/dev/locales/pt-PT-W56WCN7P.js.map +0 -7
  443. package/dist/dev/locales/ro-RO-L575VRQA.js.map +0 -7
  444. package/dist/dev/locales/ru-RU-BLG6HZG5.js.map +0 -7
  445. package/dist/dev/locales/si-LK-KT7GGO6D.js.map +0 -7
  446. package/dist/dev/locales/sk-SK-DY6IPO5U.js.map +0 -7
  447. package/dist/dev/locales/sl-SI-5DZSRA47.js.map +0 -7
  448. package/dist/dev/locales/sv-SE-V32YHALQ.js.map +0 -7
  449. package/dist/dev/locales/ta-IN-5JRAGQAO.js.map +0 -7
  450. package/dist/dev/locales/th-TH-55ACRHDJ.js.map +0 -7
  451. package/dist/dev/locales/tr-TR-7QYBXDBO.js.map +0 -7
  452. package/dist/dev/locales/uk-UA-TJS2TMRH.js.map +0 -7
  453. package/dist/dev/locales/vi-VN-Y5CQ2EKQ.js +0 -586
  454. package/dist/dev/locales/vi-VN-Y5CQ2EKQ.js.map +0 -7
  455. package/dist/dev/locales/zh-CN-4MXUOFTH.js.map +0 -7
  456. package/dist/dev/locales/zh-HK-RBTGIU3U.js.map +0 -7
  457. package/dist/dev/locales/zh-TW-U5VF4CCU.js.map +0 -7
  458. package/dist/prod/chunk-I4UNSFV6.js +0 -12
  459. package/dist/prod/chunk-VTWWEYSQ.js +0 -4
  460. package/dist/prod/chunk-Z3N5DIM6.js +0 -1
  461. package/dist/prod/locales/ar-SA-G6X2FPQ2.js +0 -10
  462. package/dist/prod/locales/az-AZ-76LH7QW2.js +0 -1
  463. package/dist/prod/locales/bg-BG-XCXSNQG7.js +0 -5
  464. package/dist/prod/locales/bn-BD-2XOGV67Q.js +0 -5
  465. package/dist/prod/locales/ca-ES-6MX7JW3Y.js +0 -8
  466. package/dist/prod/locales/cs-CZ-2BRQDIVT.js +0 -11
  467. package/dist/prod/locales/da-DK-5WZEPLOC.js +0 -5
  468. package/dist/prod/locales/de-DE-XR44H4JA.js +0 -8
  469. package/dist/prod/locales/el-GR-BZB4AONW.js +0 -10
  470. package/dist/prod/locales/en-TYY6KWIJ.js +0 -1
  471. package/dist/prod/locales/es-ES-U4NZUMDT.js +0 -9
  472. package/dist/prod/locales/eu-ES-A7QVB2H4.js +0 -11
  473. package/dist/prod/locales/fa-IR-HGAKTJCU.js +0 -8
  474. package/dist/prod/locales/fi-FI-Z5N7JZ37.js +0 -6
  475. package/dist/prod/locales/fr-FR-RHASNOE6.js +0 -9
  476. package/dist/prod/locales/gl-ES-HMX3MZ6V.js +0 -10
  477. package/dist/prod/locales/he-IL-6SHJWFNN.js +0 -10
  478. package/dist/prod/locales/hi-IN-IWLTKZ5I.js +0 -4
  479. package/dist/prod/locales/hu-HU-A5ZG7DT2.js +0 -7
  480. package/dist/prod/locales/id-ID-SAP4L64H.js +0 -10
  481. package/dist/prod/locales/it-IT-JPQ66NNP.js +0 -11
  482. package/dist/prod/locales/ja-JP-DBVTYXUO.js +0 -8
  483. package/dist/prod/locales/kaa-6HZHGXH3.js +0 -1
  484. package/dist/prod/locales/kab-KAB-ZGHBKWFO.js +0 -8
  485. package/dist/prod/locales/kk-KZ-P5N5QNE5.js +0 -1
  486. package/dist/prod/locales/km-KH-HSX4SM5Z.js +0 -11
  487. package/dist/prod/locales/ko-KR-MTYHY66A.js +0 -9
  488. package/dist/prod/locales/ku-TR-6OUDTVRD.js +0 -9
  489. package/dist/prod/locales/lt-LT-XHIRWOB4.js +0 -3
  490. package/dist/prod/locales/lv-LV-5QDEKY6T.js +0 -7
  491. package/dist/prod/locales/mr-IN-CRQNXWMA.js +0 -13
  492. package/dist/prod/locales/my-MM-5M5IBNSE.js +0 -1
  493. package/dist/prod/locales/nb-NO-T6EIAALU.js +0 -10
  494. package/dist/prod/locales/nl-NL-IS3SIHDZ.js +0 -8
  495. package/dist/prod/locales/nn-NO-6E72VCQL.js +0 -8
  496. package/dist/prod/locales/oc-FR-POXYY2M6.js +0 -8
  497. package/dist/prod/locales/pa-IN-N4M65BXN.js +0 -4
  498. package/dist/prod/locales/percentages-BXMCSKIN.js +0 -1
  499. package/dist/prod/locales/pl-PL-T2D74RX3.js +0 -9
  500. package/dist/prod/locales/pt-BR-5N22H2LF.js +0 -9
  501. package/dist/prod/locales/pt-PT-UZXXM6DQ.js +0 -9
  502. package/dist/prod/locales/ro-RO-JPDTUUEW.js +0 -11
  503. package/dist/prod/locales/ru-RU-B4JR7IUQ.js +0 -9
  504. package/dist/prod/locales/si-LK-N5RQ5JYF.js +0 -1
  505. package/dist/prod/locales/sk-SK-C5VTKIMK.js +0 -6
  506. package/dist/prod/locales/sl-SI-NN7IZMDC.js +0 -6
  507. package/dist/prod/locales/sv-SE-XGPEYMSR.js +0 -10
  508. package/dist/prod/locales/ta-IN-2NMHFXQM.js +0 -9
  509. package/dist/prod/locales/th-TH-HPSO5L25.js +0 -2
  510. package/dist/prod/locales/tr-TR-DEFEU3FU.js +0 -7
  511. package/dist/prod/locales/uk-UA-QMV73CPH.js +0 -6
  512. package/dist/prod/locales/vi-VN-M7AON7JQ.js +0 -5
  513. package/dist/prod/locales/zh-CN-LNUGB5OW.js +0 -10
  514. package/dist/prod/locales/zh-HK-E62DVLB3.js +0 -1
  515. package/dist/prod/locales/zh-TW-RAJ6MFWO.js +0 -9
  516. /package/dist/dev/data/{image-VTYIFRQE.js.map → image-Q6JHR7OE.js.map} +0 -0
  517. /package/dist/dev/locales/{en-SMAPCEOQ.js.map → en-MLZIHOCR.js.map} +0 -0
  518. /package/dist/dev/locales/{percentages-YKFLWNK2.js.map → percentages-OGWD7R2K.js.map} +0 -0
@@ -9,17 +9,16 @@ import {
9
9
  import tEXt from "png-chunk-text";
10
10
  import encodePng from "png-chunks-encode";
11
11
  import decodePng from "png-chunks-extract";
12
- import { EXPORT_DATA_TYPES as EXPORT_DATA_TYPES3, MIME_TYPES as MIME_TYPES7 } from "@excalidraw/common";
12
+ import { EXPORT_DATA_TYPES as EXPORT_DATA_TYPES3, MIME_TYPES as MIME_TYPES6 } from "@excalidraw/common";
13
13
 
14
14
  // data/blob.ts
15
15
  import { nanoid } from "nanoid";
16
16
  import {
17
17
  IMAGE_MIME_TYPES,
18
- MIME_TYPES as MIME_TYPES6,
18
+ MIME_TYPES as MIME_TYPES5,
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 = {};
@@ -416,14 +422,14 @@ import {
416
422
  FRAME_STYLE as FRAME_STYLE3,
417
423
  FONT_FAMILY as FONT_FAMILY2,
418
424
  SVG_NS as SVG_NS2,
419
- THEME as THEME3,
420
- THEME_FILTER as THEME_FILTER2,
421
- MIME_TYPES as MIME_TYPES5,
425
+ THEME as THEME5,
426
+ MIME_TYPES as MIME_TYPES4,
422
427
  EXPORT_DATA_TYPES as EXPORT_DATA_TYPES2,
423
428
  arrayToMap,
424
429
  distance,
425
430
  getFontString as getFontString2,
426
- toBrandedType
431
+ toBrandedType,
432
+ applyDarkModeFilter as applyDarkModeFilter4
427
433
  } from "@excalidraw/common";
428
434
  import { getCommonBounds as getCommonBounds2, getElementAbsoluteCoords as getElementAbsoluteCoords4 } from "@excalidraw/element";
429
435
  import {
@@ -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"));
@@ -679,7 +682,8 @@ import {
679
682
  FONT_FAMILY_FALLBACKS,
680
683
  CJK_HAND_DRAWN_FALLBACK_FONT,
681
684
  WINDOWS_EMOJI_FALLBACK_FONT,
682
- getFontFamilyFallbacks
685
+ getFontFamilyFallbacks,
686
+ FONT_SIZES
683
687
  } from "@excalidraw/common";
684
688
  import { getContainerElement } from "@excalidraw/element";
685
689
  import { charWidth } from "@excalidraw/element";
@@ -2908,7 +2912,7 @@ var _Fonts = class _Fonts {
2908
2912
  for (const [index, fontFamily] of fontFamilies.entries()) {
2909
2913
  const font = getFontString({
2910
2914
  fontFamily,
2911
- fontSize: 16
2915
+ fontSize: FONT_SIZES.sm
2912
2916
  });
2913
2917
  const text = _Fonts.getCharacters(charsPerFamily, fontFamily);
2914
2918
  if (!window.document.fonts.check(font, text)) {
@@ -3065,7 +3069,12 @@ __publicField(_Fonts, "loadElementsFonts", async (elements) => {
3065
3069
  var Fonts = _Fonts;
3066
3070
 
3067
3071
  // renderer/staticScene.ts
3068
- import { FRAME_STYLE, throttleRAF } from "@excalidraw/common";
3072
+ import {
3073
+ applyDarkModeFilter as applyDarkModeFilter2,
3074
+ FRAME_STYLE,
3075
+ THEME as THEME3,
3076
+ throttleRAF
3077
+ } from "@excalidraw/common";
3069
3078
  import { isElementLink } from "@excalidraw/element";
3070
3079
  import { createPlaceholderEmbeddableLabel } from "@excalidraw/element";
3071
3080
  import { getBoundTextElement } from "@excalidraw/element";
@@ -3147,19 +3156,7 @@ var isPointHittingLink = (element, elementsMap, appState, [x, y], isMobile) => {
3147
3156
  };
3148
3157
 
3149
3158
  // renderer/helpers.ts
3150
- 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";
3159
+ import { THEME as THEME2, applyDarkModeFilter } from "@excalidraw/common";
3163
3160
  var fillCircle = (context, cx, cy, radius, stroke, fill = true) => {
3164
3161
  context.beginPath();
3165
3162
  context.arc(cx, cy, radius, 0, Math.PI * 2);
@@ -3185,9 +3182,6 @@ var bootstrapCanvas = ({
3185
3182
  const context = canvas.getContext("2d");
3186
3183
  context.setTransform(1, 0, 0, 1, 0, 0);
3187
3184
  context.scale(scale, scale);
3188
- if (isExporting && theme === THEME2.DARK) {
3189
- context.filter = THEME_FILTER;
3190
- }
3191
3185
  if (typeof viewBackgroundColor === "string") {
3192
3186
  const hasTransparence = viewBackgroundColor === "transparent" || viewBackgroundColor.length === 5 || // #RGBA
3193
3187
  viewBackgroundColor.length === 9 || // #RRGGBBA
@@ -3196,7 +3190,7 @@ var bootstrapCanvas = ({
3196
3190
  context.clearRect(0, 0, normalizedWidth, normalizedHeight);
3197
3191
  }
3198
3192
  context.save();
3199
- context.fillStyle = viewBackgroundColor;
3193
+ context.fillStyle = theme === THEME2.DARK ? applyDarkModeFilter(viewBackgroundColor) : viewBackgroundColor;
3200
3194
  context.fillRect(0, 0, normalizedWidth, normalizedHeight);
3201
3195
  context.restore();
3202
3196
  } else {
@@ -3204,127 +3198,7 @@ var bootstrapCanvas = ({
3204
3198
  }
3205
3199
  return context;
3206
3200
  };
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) => {
3201
+ var strokeRectWithRotation_simple = (context, x, y, width, height, cx, cy, angle, fill = false, radius = 0) => {
3328
3202
  context.save();
3329
3203
  context.translate(cx, cy);
3330
3204
  context.rotate(angle);
@@ -3341,133 +3215,19 @@ var strokeRectWithRotation = (context, x, y, width, height, cx, cy, angle, fill
3341
3215
  }
3342
3216
  context.restore();
3343
3217
  };
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
3218
 
3465
3219
  // renderer/staticScene.ts
3466
3220
  var GridLineColor = {
3467
- Bold: "#dddddd",
3468
- Regular: "#e5e5e5"
3221
+ [THEME3.LIGHT]: {
3222
+ bold: "#dddddd",
3223
+ regular: "#e5e5e5"
3224
+ },
3225
+ [THEME3.DARK]: {
3226
+ bold: applyDarkModeFilter2("#dddddd"),
3227
+ regular: applyDarkModeFilter2("#e5e5e5")
3228
+ }
3469
3229
  };
3470
- var strokeGrid = (context, gridSize, gridStep, scrollX, scrollY, zoom, width, height) => {
3230
+ var strokeGrid = (context, gridSize, gridStep, scrollX, scrollY, zoom, theme, width, height) => {
3471
3231
  const offsetX = scrollX % gridSize - gridSize;
3472
3232
  const offsetY = scrollY % gridSize - gridSize;
3473
3233
  const actualGridSize = gridSize * zoom.value;
@@ -3486,7 +3246,7 @@ var strokeGrid = (context, gridSize, gridStep, scrollX, scrollY, zoom, width, he
3486
3246
  const lineDash = [lineWidth * 3, spaceWidth + (lineWidth + spaceWidth)];
3487
3247
  context.beginPath();
3488
3248
  context.setLineDash(isBold ? [] : lineDash);
3489
- context.strokeStyle = isBold ? GridLineColor.Bold : GridLineColor.Regular;
3249
+ context.strokeStyle = isBold ? GridLineColor[theme].bold : GridLineColor[theme].regular;
3490
3250
  context.moveTo(x, offsetY - gridSize);
3491
3251
  context.lineTo(x, Math.ceil(offsetY + height + gridSize * 2));
3492
3252
  context.stroke();
@@ -3501,7 +3261,7 @@ var strokeGrid = (context, gridSize, gridStep, scrollX, scrollY, zoom, width, he
3501
3261
  const lineDash = [lineWidth * 3, spaceWidth + (lineWidth + spaceWidth)];
3502
3262
  context.beginPath();
3503
3263
  context.setLineDash(isBold ? [] : lineDash);
3504
- context.strokeStyle = isBold ? GridLineColor.Bold : GridLineColor.Regular;
3264
+ context.strokeStyle = isBold ? GridLineColor[theme].bold : GridLineColor[theme].regular;
3505
3265
  context.moveTo(offsetX - gridSize, y);
3506
3266
  context.lineTo(Math.ceil(offsetX + width + gridSize * 2), y);
3507
3267
  context.stroke();
@@ -3614,6 +3374,7 @@ var _renderStaticScene = ({
3614
3374
  appState.scrollX,
3615
3375
  appState.scrollY,
3616
3376
  appState.zoom,
3377
+ renderConfig.theme,
3617
3378
  normalizedWidth / appState.zoom.value,
3618
3379
  normalizedHeight / appState.zoom.value
3619
3380
  );
@@ -3780,12 +3541,13 @@ var renderStaticScene = (renderConfig, throttle) => {
3780
3541
  import {
3781
3542
  FRAME_STYLE as FRAME_STYLE2,
3782
3543
  MAX_DECIMALS_FOR_SVG_EXPORT,
3783
- MIME_TYPES as MIME_TYPES4,
3784
3544
  SVG_NS,
3545
+ THEME as THEME4,
3785
3546
  getFontFamilyString,
3786
3547
  isRTL,
3787
3548
  isTestEnv as isTestEnv2,
3788
- getVerticalOffset
3549
+ getVerticalOffset,
3550
+ applyDarkModeFilter as applyDarkModeFilter3
3789
3551
  } from "@excalidraw/common";
3790
3552
  import { normalizeLink, toValidURL } from "@excalidraw/common";
3791
3553
  import { hashString } from "@excalidraw/element";
@@ -3804,9 +3566,8 @@ import {
3804
3566
  isTextElement as isTextElement3
3805
3567
  } from "@excalidraw/element";
3806
3568
  import { getContainingFrame } from "@excalidraw/element";
3807
- import { getCornerRadius as getCornerRadius2, isPathALoop } from "@excalidraw/element";
3569
+ import { getCornerRadius, isPathALoop } from "@excalidraw/element";
3808
3570
  import { ShapeCache as ShapeCache2 } from "@excalidraw/element";
3809
- import { getFreeDrawSvgPath, IMAGE_INVERT_FILTER } from "@excalidraw/element";
3810
3571
  import { getElementAbsoluteCoords as getElementAbsoluteCoords3 } from "@excalidraw/element";
3811
3572
  var roughSVGDrawWithPrecision = (rsvg, drawable, precision) => {
3812
3573
  if (typeof precision === "undefined") {
@@ -3874,7 +3635,7 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
3874
3635
  case "rectangle":
3875
3636
  case "diamond":
3876
3637
  case "ellipse": {
3877
- const shape = ShapeCache2.generateElementShape(element, null);
3638
+ const shape = ShapeCache2.generateElementShape(element, renderConfig);
3878
3639
  const node = roughSVGDrawWithPrecision(
3879
3640
  rsvg,
3880
3641
  shape,
@@ -3942,7 +3703,7 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
3942
3703
  while (embeddableNode.firstChild) {
3943
3704
  embeddableNode.removeChild(embeddableNode.firstChild);
3944
3705
  }
3945
- const radius = getCornerRadius2(
3706
+ const radius = getCornerRadius(
3946
3707
  Math.min(element.width, element.height),
3947
3708
  element
3948
3709
  );
@@ -4067,36 +3828,49 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
4067
3828
  break;
4068
3829
  }
4069
3830
  case "freedraw": {
4070
- const backgroundFillShape = ShapeCache2.generateElementShape(
4071
- element,
4072
- renderConfig
4073
- );
4074
- const node = backgroundFillShape ? roughSVGDrawWithPrecision(
4075
- rsvg,
4076
- backgroundFillShape,
4077
- MAX_DECIMALS_FOR_SVG_EXPORT
4078
- ) : svgRoot.ownerDocument.createElementNS(SVG_NS, "g");
3831
+ const wrapper = svgRoot.ownerDocument.createElementNS(SVG_NS, "g");
3832
+ const shapes = ShapeCache2.generateElementShape(element, renderConfig);
3833
+ for (const shape of shapes) {
3834
+ if (typeof shape === "string") {
3835
+ const path = svgRoot.ownerDocument.createElementNS(SVG_NS, "path");
3836
+ path.setAttribute(
3837
+ "fill",
3838
+ renderConfig.theme === THEME4.DARK ? applyDarkModeFilter3(element.strokeColor) : element.strokeColor
3839
+ );
3840
+ path.setAttribute("d", shape);
3841
+ wrapper.appendChild(path);
3842
+ } else {
3843
+ const bgNode = roughSVGDrawWithPrecision(
3844
+ rsvg,
3845
+ shape,
3846
+ MAX_DECIMALS_FOR_SVG_EXPORT
3847
+ );
3848
+ if (bgNode.nodeName === "g") {
3849
+ while (bgNode.firstChild) {
3850
+ wrapper.appendChild(bgNode.firstChild);
3851
+ }
3852
+ } else {
3853
+ wrapper.appendChild(bgNode);
3854
+ }
3855
+ }
3856
+ }
4079
3857
  if (opacity !== 1) {
4080
- node.setAttribute("stroke-opacity", `${opacity}`);
4081
- node.setAttribute("fill-opacity", `${opacity}`);
3858
+ wrapper.setAttribute("stroke-opacity", `${opacity}`);
3859
+ wrapper.setAttribute("fill-opacity", `${opacity}`);
4082
3860
  }
4083
- node.setAttribute(
3861
+ wrapper.setAttribute(
4084
3862
  "transform",
4085
3863
  `translate(${offsetX || 0} ${offsetY || 0}) rotate(${degree} ${cx} ${cy})`
4086
3864
  );
4087
- node.setAttribute("stroke", "none");
4088
- const path = svgRoot.ownerDocument.createElementNS(SVG_NS, "path");
4089
- path.setAttribute("fill", element.strokeColor);
4090
- path.setAttribute("d", getFreeDrawSvgPath(element));
4091
- node.appendChild(path);
3865
+ wrapper.setAttribute("stroke", "none");
4092
3866
  const g = maybeWrapNodesInFrameClipPath(
4093
3867
  element,
4094
3868
  root,
4095
- [node],
3869
+ [wrapper],
4096
3870
  renderConfig.frameRendering,
4097
3871
  elementsMap
4098
3872
  );
4099
- addToRoot(g || node, element);
3873
+ addToRoot(g || wrapper, element);
4100
3874
  break;
4101
3875
  }
4102
3876
  case "image": {
@@ -4136,9 +3910,6 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
4136
3910
  }
4137
3911
  const use = svgRoot.ownerDocument.createElementNS(SVG_NS, "use");
4138
3912
  use.setAttribute("href", `#${symbolId}`);
4139
- if (renderConfig.exportWithDarkMode && fileData.mimeType !== MIME_TYPES4.svg) {
4140
- use.setAttribute("filter", IMAGE_INVERT_FILTER);
4141
- }
4142
3913
  let normalizedCropX = 0;
4143
3914
  let normalizedCropY = 0;
4144
3915
  if (element.crop) {
@@ -4185,14 +3956,19 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
4185
3956
  "clipPath"
4186
3957
  );
4187
3958
  clipPath.id = `image-clipPath-${element.id}`;
3959
+ clipPath.setAttribute("clipPathUnits", "userSpaceOnUse");
4188
3960
  const clipRect = svgRoot.ownerDocument.createElementNS(
4189
3961
  SVG_NS,
4190
3962
  "rect"
4191
3963
  );
4192
- const radius = getCornerRadius2(
3964
+ const radius = getCornerRadius(
4193
3965
  Math.min(element.width, element.height),
4194
3966
  element
4195
3967
  );
3968
+ const clipOffsetX = element.crop ? normalizedCropX : 0;
3969
+ const clipOffsetY = element.crop ? normalizedCropY : 0;
3970
+ clipRect.setAttribute("x", `${clipOffsetX}`);
3971
+ clipRect.setAttribute("y", `${clipOffsetY}`);
4196
3972
  clipRect.setAttribute("width", `${element.width}`);
4197
3973
  clipRect.setAttribute("height", `${element.height}`);
4198
3974
  clipRect.setAttribute("rx", `${radius}`);
@@ -4225,7 +4001,10 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
4225
4001
  rect.setAttribute("rx", FRAME_STYLE2.radius.toString());
4226
4002
  rect.setAttribute("ry", FRAME_STYLE2.radius.toString());
4227
4003
  rect.setAttribute("fill", "none");
4228
- rect.setAttribute("stroke", FRAME_STYLE2.strokeColor);
4004
+ rect.setAttribute(
4005
+ "stroke",
4006
+ renderConfig.theme === THEME4.DARK ? applyDarkModeFilter3(FRAME_STYLE2.strokeColor) : FRAME_STYLE2.strokeColor
4007
+ );
4229
4008
  rect.setAttribute("stroke-width", FRAME_STYLE2.strokeWidth.toString());
4230
4009
  addToRoot(rect, element);
4231
4010
  }
@@ -4262,7 +4041,10 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
4262
4041
  text.setAttribute("y", `${i * lineHeightPx + verticalOffset}`);
4263
4042
  text.setAttribute("font-family", getFontFamilyString(element));
4264
4043
  text.setAttribute("font-size", `${element.fontSize}px`);
4265
- text.setAttribute("fill", element.strokeColor);
4044
+ text.setAttribute(
4045
+ "fill",
4046
+ renderConfig.theme === THEME4.DARK ? applyDarkModeFilter3(element.strokeColor) : element.strokeColor
4047
+ );
4266
4048
  text.setAttribute("text-anchor", textAnchor);
4267
4049
  text.setAttribute("style", "white-space: pre;");
4268
4050
  text.setAttribute("direction", direction);
@@ -4475,7 +4257,7 @@ var exportToCanvas = async (elements, appState, files, {
4475
4257
  scrollY: -minY + exportPadding,
4476
4258
  zoom: defaultAppState.zoom,
4477
4259
  shouldCacheIgnoreZoom: false,
4478
- theme: appState.exportWithDarkMode ? THEME3.DARK : THEME3.LIGHT
4260
+ theme: appState.exportWithDarkMode ? THEME5.DARK : THEME5.LIGHT
4479
4261
  },
4480
4262
  renderConfig: {
4481
4263
  canvasBackgroundColor: viewBackgroundColor,
@@ -4485,7 +4267,8 @@ var exportToCanvas = async (elements, appState, files, {
4485
4267
  // empty disables embeddable rendering
4486
4268
  embedsValidationStatus: /* @__PURE__ */ new Map(),
4487
4269
  elementsPendingErasure: /* @__PURE__ */ new Set(),
4488
- pendingFlowchartNodes: null
4270
+ pendingFlowchartNodes: null,
4271
+ theme: appState.exportWithDarkMode ? THEME5.DARK : THEME5.LIGHT
4489
4272
  }
4490
4273
  });
4491
4274
  return canvas;
@@ -4527,9 +4310,6 @@ var exportToSvg = async (elements, appState, files, opts) => {
4527
4310
  svgRoot.setAttribute("viewBox", `0 0 ${width} ${height}`);
4528
4311
  svgRoot.setAttribute("width", `${width * exportScale}`);
4529
4312
  svgRoot.setAttribute("height", `${height * exportScale}`);
4530
- if (exportWithDarkMode) {
4531
- svgRoot.setAttribute("filter", THEME_FILTER2);
4532
- }
4533
4313
  const defsElement = svgRoot.ownerDocument.createElementNS(SVG_NS2, "defs");
4534
4314
  const metadataElement = svgRoot.ownerDocument.createElementNS(
4535
4315
  SVG_NS2,
@@ -4593,7 +4373,10 @@ var exportToSvg = async (elements, appState, files, opts) => {
4593
4373
  rect.setAttribute("y", "0");
4594
4374
  rect.setAttribute("width", `${width}`);
4595
4375
  rect.setAttribute("height", `${height}`);
4596
- rect.setAttribute("fill", viewBackgroundColor);
4376
+ rect.setAttribute(
4377
+ "fill",
4378
+ exportWithDarkMode ? applyDarkModeFilter4(viewBackgroundColor) : viewBackgroundColor
4379
+ );
4597
4380
  svgRoot.appendChild(rect);
4598
4381
  }
4599
4382
  const rsvg = rough.svg(svgRoot);
@@ -4615,7 +4398,8 @@ var exportToSvg = async (elements, appState, files, opts) => {
4615
4398
  embedsValidationStatus: renderEmbeddables ? new Map(
4616
4399
  elementsForRender.filter((element) => isFrameLikeElement(element)).map((element) => [element.id, true])
4617
4400
  ) : /* @__PURE__ */ new Map(),
4618
- reuseImages: opts?.reuseImages ?? true
4401
+ reuseImages: opts?.reuseImages ?? true,
4402
+ theme: exportWithDarkMode ? THEME5.DARK : THEME5.LIGHT
4619
4403
  }
4620
4404
  );
4621
4405
  return svgRoot;
@@ -4629,7 +4413,7 @@ var encodeSvgBase64Payload = ({
4629
4413
  true
4630
4414
  );
4631
4415
  metadataElement.appendChild(
4632
- createHTMLComment(`payload-type:${MIME_TYPES5.excalidraw}`)
4416
+ createHTMLComment(`payload-type:${MIME_TYPES4.excalidraw}`)
4633
4417
  );
4634
4418
  metadataElement.appendChild(createHTMLComment("payload-version:2"));
4635
4419
  metadataElement.appendChild(createHTMLComment("payload-start"));
@@ -4637,7 +4421,7 @@ var encodeSvgBase64Payload = ({
4637
4421
  metadataElement.appendChild(createHTMLComment("payload-end"));
4638
4422
  };
4639
4423
  var decodeSvgBase64Payload = ({ svg }) => {
4640
- if (svg.includes(`payload-type:${MIME_TYPES5.excalidraw}`)) {
4424
+ if (svg.includes(`payload-type:${MIME_TYPES4.excalidraw}`)) {
4641
4425
  const match = svg.match(
4642
4426
  /<!-- payload-start -->\s*(.+?)\s*<!-- payload-end -->/
4643
4427
  );
@@ -4678,7 +4462,7 @@ var getExportSize = (elements, exportPadding, scale) => {
4678
4462
  };
4679
4463
 
4680
4464
  // data/restore.ts
4681
- import { isFiniteNumber, pointFrom as pointFrom3 } from "@excalidraw/math";
4465
+ import { isFiniteNumber, pointFrom as pointFrom2 } from "@excalidraw/math";
4682
4466
  import {
4683
4467
  DEFAULT_FONT_FAMILY as DEFAULT_FONT_FAMILY2,
4684
4468
  DEFAULT_TEXT_ALIGN as DEFAULT_TEXT_ALIGN2,
@@ -4697,7 +4481,13 @@ import {
4697
4481
  normalizeLink as normalizeLink2,
4698
4482
  getLineHeight
4699
4483
  } from "@excalidraw/common";
4700
- import { getNonDeletedElements, isValidPolygon } from "@excalidraw/element";
4484
+ import {
4485
+ calculateFixedPointForNonElbowArrowBinding,
4486
+ getNonDeletedElements,
4487
+ isPointInElement,
4488
+ isValidPolygon,
4489
+ projectFixedPointOntoDiagonal
4490
+ } from "@excalidraw/element";
4701
4491
  import { normalizeFixedPoint } from "@excalidraw/element";
4702
4492
  import {
4703
4493
  updateElbowArrowPoints,
@@ -4711,7 +4501,6 @@ import {
4711
4501
  isArrowBoundToElement,
4712
4502
  isArrowElement as isArrowElement2,
4713
4503
  isElbowArrow,
4714
- isFixedPointBinding,
4715
4504
  isLinearElement,
4716
4505
  isLineElement,
4717
4506
  isTextElement as isTextElement4,
@@ -4746,23 +4535,62 @@ var getFontFamilyByName = (fontFamilyName) => {
4746
4535
  }
4747
4536
  return DEFAULT_FONT_FAMILY2;
4748
4537
  };
4749
- var repairBinding = (element, binding) => {
4538
+ var repairBinding = (element, binding, targetElementsMap, existingElementsMap, startOrEnd) => {
4750
4539
  if (!binding) {
4751
4540
  return null;
4752
4541
  }
4753
- const focus = binding.focus || 0;
4754
4542
  if (isElbowArrow(element)) {
4755
- const fixedPointBinding = isFixedPointBinding(binding) ? {
4543
+ const fixedPointBinding = {
4756
4544
  ...binding,
4757
- focus,
4758
- fixedPoint: normalizeFixedPoint(binding.fixedPoint ?? [0, 0])
4759
- } : null;
4545
+ fixedPoint: normalizeFixedPoint(binding.fixedPoint ?? [0, 0]),
4546
+ mode: binding.mode || "orbit"
4547
+ };
4760
4548
  return fixedPointBinding;
4761
4549
  }
4762
- return {
4763
- ...binding,
4764
- focus
4765
- };
4550
+ if (binding.mode) {
4551
+ if (binding.elementId) {
4552
+ return {
4553
+ elementId: binding.elementId,
4554
+ mode: binding.mode,
4555
+ fixedPoint: normalizeFixedPoint(binding.fixedPoint || [0.5, 0.5])
4556
+ };
4557
+ }
4558
+ return null;
4559
+ }
4560
+ const targetBoundElement = targetElementsMap.get(binding.elementId) || void 0;
4561
+ const boundElement = targetBoundElement || existingElementsMap?.get(
4562
+ binding.elementId
4563
+ ) || void 0;
4564
+ const elementsMap = targetBoundElement ? targetElementsMap : existingElementsMap;
4565
+ if (boundElement && elementsMap) {
4566
+ const p = LinearElementEditor2.getPointAtIndexGlobalCoordinates(
4567
+ element,
4568
+ startOrEnd === "start" ? 0 : element.points.length - 1,
4569
+ elementsMap
4570
+ );
4571
+ const mode = isPointInElement(p, boundElement, elementsMap) ? "inside" : "orbit";
4572
+ const focusPoint = mode === "inside" ? p : projectFixedPointOntoDiagonal(
4573
+ element,
4574
+ p,
4575
+ boundElement,
4576
+ startOrEnd,
4577
+ elementsMap
4578
+ ) || p;
4579
+ const { fixedPoint } = calculateFixedPointForNonElbowArrowBinding(
4580
+ element,
4581
+ boundElement,
4582
+ startOrEnd,
4583
+ elementsMap,
4584
+ focusPoint
4585
+ );
4586
+ return {
4587
+ mode,
4588
+ elementId: binding.elementId,
4589
+ fixedPoint
4590
+ };
4591
+ }
4592
+ console.error(`could not repair binding for element`);
4593
+ return null;
4766
4594
  };
4767
4595
  var restoreElementWithProperties = (element, extra) => {
4768
4596
  const base = {
@@ -4815,7 +4643,7 @@ var restoreElementWithProperties = (element, extra) => {
4815
4643
  delete ret.boundElementIds;
4816
4644
  return ret;
4817
4645
  };
4818
- var restoreElement = (element, opts) => {
4646
+ var restoreElement = (element, targetElementsMap, existingElementsMap, opts) => {
4819
4647
  element = { ...element };
4820
4648
  switch (element.type) {
4821
4649
  case "text":
@@ -4855,7 +4683,6 @@ var restoreElement = (element, opts) => {
4855
4683
  case "freedraw": {
4856
4684
  return restoreElementWithProperties(element, {
4857
4685
  points: element.points,
4858
- lastCommittedPoint: null,
4859
4686
  simulatePressure: element.simulatePressure,
4860
4687
  pressures: element.pressures
4861
4688
  });
@@ -4874,16 +4701,15 @@ var restoreElement = (element, opts) => {
4874
4701
  let y = element.y;
4875
4702
  let points = (
4876
4703
  // 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
4704
+ !Array.isArray(element.points) || element.points.length < 2 ? [pointFrom2(0, 0), pointFrom2(element.width, element.height)] : element.points
4878
4705
  );
4879
4706
  if (points[0][0] !== 0 || points[0][1] !== 0) {
4880
4707
  ({ points, x, y } = LinearElementEditor2.getNormalizeElementPointsAndCoords(element));
4881
4708
  }
4882
4709
  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,
4710
+ type: "line",
4711
+ startBinding: null,
4712
+ endBinding: null,
4887
4713
  startArrowhead,
4888
4714
  endArrowhead,
4889
4715
  points,
@@ -4896,20 +4722,28 @@ var restoreElement = (element, opts) => {
4896
4722
  });
4897
4723
  case "arrow": {
4898
4724
  const { startArrowhead: startArrowhead2 = null, endArrowhead: endArrowhead2 = "arrow" } = element;
4899
- let x2 = element.x;
4900
- let y2 = element.y;
4901
- let points2 = (
4725
+ const x2 = element.x;
4726
+ const y2 = element.y;
4727
+ const points2 = (
4902
4728
  // 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
4729
+ !Array.isArray(element.points) || element.points.length < 2 ? [pointFrom2(0, 0), pointFrom2(element.width, element.height)] : element.points
4904
4730
  );
4905
- if (points2[0][0] !== 0 || points2[0][1] !== 0) {
4906
- ({ points: points2, x: x2, y: y2 } = LinearElementEditor2.getNormalizeElementPointsAndCoords(element));
4907
- }
4908
4731
  const base = {
4909
4732
  type: element.type,
4910
- startBinding: repairBinding(element, element.startBinding),
4911
- endBinding: repairBinding(element, element.endBinding),
4912
- lastCommittedPoint: null,
4733
+ startBinding: repairBinding(
4734
+ element,
4735
+ element.startBinding,
4736
+ targetElementsMap,
4737
+ existingElementsMap,
4738
+ "start"
4739
+ ),
4740
+ endBinding: repairBinding(
4741
+ element,
4742
+ element.endBinding,
4743
+ targetElementsMap,
4744
+ existingElementsMap,
4745
+ "end"
4746
+ ),
4913
4747
  startArrowhead: startArrowhead2,
4914
4748
  endArrowhead: endArrowhead2,
4915
4749
  points: points2,
@@ -4918,15 +4752,19 @@ var restoreElement = (element, opts) => {
4918
4752
  elbowed: element.elbowed,
4919
4753
  ...getSizeFromPoints(points2)
4920
4754
  };
4921
- return isElbowArrow(element) ? restoreElementWithProperties(element, {
4755
+ const restoredElement = isElbowArrow(element) ? restoreElementWithProperties(element, {
4922
4756
  ...base,
4923
4757
  elbowed: true,
4924
- startBinding: repairBinding(element, element.startBinding),
4925
- endBinding: repairBinding(element, element.endBinding),
4926
4758
  fixedSegments: element.fixedSegments?.length && base.points.length >= 4 ? element.fixedSegments : null,
4927
4759
  startIsSpecial: element.startIsSpecial,
4928
4760
  endIsSpecial: element.endIsSpecial
4929
4761
  }) : restoreElementWithProperties(element, base);
4762
+ return {
4763
+ ...restoredElement,
4764
+ ...LinearElementEditor2.getNormalizeElementPointsAndCoords(
4765
+ restoredElement
4766
+ )
4767
+ };
4930
4768
  }
4931
4769
  case "ellipse":
4932
4770
  case "rectangle":
@@ -4991,21 +4829,27 @@ var repairFrameMembership = (element, elementsMap) => {
4991
4829
  }
4992
4830
  }
4993
4831
  };
4994
- var restoreElements = (elements, localElements, opts) => {
4832
+ var restoreElements = (targetElements, existingElements, opts) => {
4995
4833
  const existingIds = /* @__PURE__ */ new Set();
4996
- const localElementsMap = localElements ? arrayToMap2(localElements) : null;
4834
+ const targetElementsMap = arrayToMap2(targetElements || []);
4835
+ const existingElementsMap = existingElements ? arrayToMap2(existingElements) : null;
4997
4836
  const restoredElements = syncInvalidIndices2(
4998
- (elements || []).reduce((elements2, element) => {
4837
+ (targetElements || []).reduce((elements, element) => {
4999
4838
  if (element.type === "selection") {
5000
- return elements2;
4839
+ return elements;
5001
4840
  }
5002
- let migratedElement = restoreElement(element, {
5003
- deleteInvisibleElements: opts?.deleteInvisibleElements
5004
- });
4841
+ let migratedElement = restoreElement(
4842
+ element,
4843
+ targetElementsMap,
4844
+ existingElementsMap,
4845
+ {
4846
+ deleteInvisibleElements: opts?.deleteInvisibleElements
4847
+ }
4848
+ );
5005
4849
  if (migratedElement) {
5006
- const localElement = localElementsMap?.get(element.id);
4850
+ const localElement = existingElementsMap?.get(element.id);
5007
4851
  const shouldMarkAsDeleted = opts?.deleteInvisibleElements && isInvisiblySmallElement(element);
5008
- if (shouldMarkAsDeleted || localElement && localElement.version > migratedElement.version) {
4852
+ if (shouldMarkAsDeleted) {
5009
4853
  migratedElement = bumpVersion(migratedElement, localElement?.version);
5010
4854
  }
5011
4855
  if (shouldMarkAsDeleted) {
@@ -5015,9 +4859,9 @@ var restoreElements = (elements, localElements, opts) => {
5015
4859
  migratedElement = { ...migratedElement, id: randomId() };
5016
4860
  }
5017
4861
  existingIds.add(migratedElement.id);
5018
- elements2.push(migratedElement);
4862
+ elements.push(migratedElement);
5019
4863
  }
5020
- return elements2;
4864
+ return elements;
5021
4865
  }, [])
5022
4866
  );
5023
4867
  if (!opts?.repairBindings) {
@@ -5061,7 +4905,7 @@ var restoreElements = (elements, localElements, opts) => {
5061
4905
  restoredElementsMap,
5062
4906
  {
5063
4907
  points: [
5064
- pointFrom3(0, 0),
4908
+ pointFrom2(0, 0),
5065
4909
  element.points[element.points.length - 1]
5066
4910
  ]
5067
4911
  }
@@ -5090,10 +4934,10 @@ var restoreElements = (elements, localElements, opts) => {
5090
4934
  width: boundElement.width,
5091
4935
  height: boundElement.height,
5092
4936
  points: [
5093
- pointFrom3(0, 0),
5094
- pointFrom3(0, -10),
5095
- pointFrom3(boundElement.width / 2 + 5, -10),
5096
- pointFrom3(
4937
+ pointFrom2(0, 0),
4938
+ pointFrom2(0, -10),
4939
+ pointFrom2(boundElement.width / 2 + 5, -10),
4940
+ pointFrom2(
5097
4941
  boundElement.width / 2 + 5,
5098
4942
  boundElement.height / 2 + 5
5099
4943
  )
@@ -5171,13 +5015,6 @@ var restoreAppState = (appState, localAppState) => {
5171
5015
  editingFrame: null
5172
5016
  };
5173
5017
  };
5174
- var restore = (data, localAppState, localElements, elementsConfig) => {
5175
- return {
5176
- elements: restoreElements(data?.elements, localElements, elementsConfig),
5177
- appState: restoreAppState(data?.appState, localAppState || null),
5178
- files: data?.files || {}
5179
- };
5180
- };
5181
5018
  var restoreLibraryItem = (libraryItem) => {
5182
5019
  const elements = restoreElements(
5183
5020
  getNonDeletedElements(libraryItem.elements),
@@ -5217,9 +5054,9 @@ var restoreLibraryItems = (libraryItems = [], defaultStatus) => {
5217
5054
  // data/blob.ts
5218
5055
  var parseFileContents = async (blob) => {
5219
5056
  let contents;
5220
- if (blob.type === MIME_TYPES6.png) {
5057
+ if (blob.type === MIME_TYPES5.png) {
5221
5058
  try {
5222
- return await (await import("./data/image-VTYIFRQE.js")).decodePngMetadata(blob);
5059
+ return await (await import("./data/image-Q6JHR7OE.js")).decodePngMetadata(blob);
5223
5060
  } catch (error) {
5224
5061
  if (error.message === "INVALID") {
5225
5062
  throw new ImageSceneDataError(
@@ -5244,7 +5081,7 @@ var parseFileContents = async (blob) => {
5244
5081
  };
5245
5082
  });
5246
5083
  }
5247
- if (blob.type === MIME_TYPES6.svg) {
5084
+ if (blob.type === MIME_TYPES5.svg) {
5248
5085
  try {
5249
5086
  return decodeSvgBase64Payload({
5250
5087
  svg: contents
@@ -5300,30 +5137,27 @@ var loadSceneOrLibraryFromBlob = async (blob, localAppState, localElements, file
5300
5137
  }
5301
5138
  if (isValidExcalidrawData(data)) {
5302
5139
  return {
5303
- type: MIME_TYPES6.excalidraw,
5304
- data: restore(
5305
- {
5306
- elements: clearElementsForExport2(data.elements || []),
5307
- appState: {
5140
+ type: MIME_TYPES5.excalidraw,
5141
+ data: {
5142
+ elements: restoreElements(data.elements, localElements, {
5143
+ repairBindings: true,
5144
+ deleteInvisibleElements: true
5145
+ }),
5146
+ appState: restoreAppState(
5147
+ {
5308
5148
  theme: localAppState?.theme,
5309
5149
  fileHandle: fileHandle || blob.handle || null,
5310
5150
  ...cleanAppStateForExport(data.appState || {}),
5311
5151
  ...localAppState ? calculateScrollCenter(data.elements || [], localAppState) : {}
5312
5152
  },
5313
- files: data.files
5314
- },
5315
- localAppState,
5316
- localElements,
5317
- {
5318
- repairBindings: true,
5319
- refreshDimensions: false,
5320
- deleteInvisibleElements: true
5321
- }
5322
- )
5153
+ localAppState
5154
+ ),
5155
+ files: data.files || {}
5156
+ }
5323
5157
  };
5324
5158
  } else if (isValidLibrary(data)) {
5325
5159
  return {
5326
- type: MIME_TYPES6.excalidrawlib,
5160
+ type: MIME_TYPES5.excalidrawlib,
5327
5161
  data
5328
5162
  };
5329
5163
  }
@@ -5342,7 +5176,7 @@ var loadFromBlob = async (blob, localAppState, localElements, fileHandle) => {
5342
5176
  localElements,
5343
5177
  fileHandle
5344
5178
  );
5345
- if (ret.type !== MIME_TYPES6.excalidraw) {
5179
+ if (ret.type !== MIME_TYPES5.excalidraw) {
5346
5180
  throw new Error("Error: invalid file");
5347
5181
  }
5348
5182
  return ret.data;
@@ -5410,7 +5244,7 @@ var dataURLToString = (dataURL) => {
5410
5244
  return base64ToString(dataURL.slice(dataURL.indexOf(",") + 1));
5411
5245
  };
5412
5246
  var resizeImageFile = async (file, opts) => {
5413
- if (file.type === MIME_TYPES6.svg) {
5247
+ if (file.type === MIME_TYPES5.svg) {
5414
5248
  return file;
5415
5249
  }
5416
5250
  const [pica, imageBlobReduce] = await Promise.all([
@@ -5443,7 +5277,7 @@ var resizeImageFile = async (file, opts) => {
5443
5277
  };
5444
5278
  var SVGStringToFile = (SVGString, filename = "") => {
5445
5279
  return new File([new TextEncoder().encode(SVGString)], filename, {
5446
- type: MIME_TYPES6.svg
5280
+ type: MIME_TYPES5.svg
5447
5281
  });
5448
5282
  };
5449
5283
  var ImageURLToFile = async (imageUrl, filename = "") => {
@@ -5476,61 +5310,52 @@ var getFileHandle = async (event) => {
5476
5310
  }
5477
5311
  return null;
5478
5312
  };
5479
- var getActualMimeTypeFromImage = (buffer) => {
5313
+ var getActualMimeTypeFromImage = async (file) => {
5480
5314
  let mimeType = null;
5481
- const first8Bytes = `${[...new Uint8Array(buffer).slice(0, 8)].join(" ")} `;
5482
- const headerBytes = {
5315
+ const leadingBytes = [
5316
+ ...new Uint8Array(await blobToArrayBuffer(file.slice(0, 15)))
5317
+ ].join(" ");
5318
+ const bytes = {
5483
5319
  // https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header
5484
- png: "137 80 78 71 13 10 26 10 ",
5320
+ png: /^137 80 78 71 13 10 26 10\b/,
5485
5321
  // https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure
5486
5322
  // jpg is a bit wonky. Checking the first three bytes should be enough,
5487
5323
  // but may yield false positives. (https://stackoverflow.com/a/23360709/927631)
5488
- jpg: "255 216 255 ",
5324
+ jpg: /^255 216 255\b/,
5489
5325
  // https://en.wikipedia.org/wiki/GIF#Example_GIF_file
5490
- gif: "71 73 70 56 57 97 "
5326
+ gif: /^71 73 70 56 57 97\b/,
5327
+ // 4 bytes for RIFF + 4 bytes for chunk size + WEBP identifier
5328
+ webp: /^82 73 70 70 \d+ \d+ \d+ \d+ 87 69 66 80 86 80 56\b/
5491
5329
  };
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;
5330
+ for (const type of Object.keys(bytes)) {
5331
+ if (leadingBytes.match(bytes[type])) {
5332
+ mimeType = MIME_TYPES5[type];
5333
+ break;
5334
+ }
5335
+ }
5336
+ return mimeType || file.type || null;
5500
5337
  };
5501
5338
  var createFile = (blob, mimeType, name) => {
5502
5339
  return new File([blob], name || "", {
5503
5340
  type: mimeType
5504
5341
  });
5505
5342
  };
5343
+ var normalizedFileSymbol = Symbol("fileNormalized");
5506
5344
  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);
5345
+ if (file[normalizedFileSymbol]) {
5346
+ return file;
5347
+ }
5348
+ if (file?.name?.endsWith(".excalidrawlib")) {
5349
+ file = createFile(file, MIME_TYPES5.excalidrawlib, file.name);
5350
+ } else if (file?.name?.endsWith(".excalidraw")) {
5351
+ file = createFile(file, MIME_TYPES5.excalidraw, file.name);
5352
+ } else if (!file.type || file.type?.startsWith("image/")) {
5353
+ const mimeType = await getActualMimeTypeFromImage(file);
5530
5354
  if (mimeType && mimeType !== file.type) {
5531
- file = createFile(buffer, mimeType, file.name);
5355
+ file = createFile(file, mimeType, file.name);
5532
5356
  }
5533
5357
  }
5358
+ file[normalizedFileSymbol] = true;
5534
5359
  return file;
5535
5360
  };
5536
5361
  var blobToArrayBuffer = (blob) => {
@@ -5564,7 +5389,7 @@ var encodePngMetadata = async ({
5564
5389
  }) => {
5565
5390
  const chunks = decodePng(new Uint8Array(await blobToArrayBuffer(blob)));
5566
5391
  const metadataChunk = tEXt.encode(
5567
- MIME_TYPES7.excalidraw,
5392
+ MIME_TYPES6.excalidraw,
5568
5393
  JSON.stringify(
5569
5394
  encode({
5570
5395
  text: metadata,
@@ -5573,11 +5398,11 @@ var encodePngMetadata = async ({
5573
5398
  )
5574
5399
  );
5575
5400
  chunks.splice(-1, 0, metadataChunk);
5576
- return new Blob([encodePng(chunks)], { type: MIME_TYPES7.png });
5401
+ return new Blob([encodePng(chunks)], { type: MIME_TYPES6.png });
5577
5402
  };
5578
5403
  var decodePngMetadata = async (blob) => {
5579
5404
  const metadata = await getTEXtChunk(blob);
5580
- if (metadata?.keyword === MIME_TYPES7.excalidraw) {
5405
+ if (metadata?.keyword === MIME_TYPES6.excalidraw) {
5581
5406
  try {
5582
5407
  const encodedData = JSON.parse(metadata.text);
5583
5408
  if (!("encoded" in encodedData)) {
@@ -5630,10 +5455,7 @@ export {
5630
5455
  fillCircle,
5631
5456
  getNormalizedCanvasDimensions,
5632
5457
  bootstrapCanvas,
5633
- drawHighlightForRectWithRotation,
5634
- strokeEllipseWithRotation,
5635
- strokeRectWithRotation,
5636
- drawHighlightForDiamondWithRotation,
5458
+ strokeRectWithRotation_simple,
5637
5459
  frameClip,
5638
5460
  renderStaticSceneThrottled,
5639
5461
  renderStaticScene,
@@ -5643,7 +5465,6 @@ export {
5643
5465
  restoreElement,
5644
5466
  restoreElements,
5645
5467
  restoreAppState,
5646
- restore,
5647
5468
  restoreLibraryItems,
5648
5469
  getTEXtChunk,
5649
5470
  encodePngMetadata,
@@ -5669,4 +5490,4 @@ export {
5669
5490
  createFile,
5670
5491
  normalizeFile
5671
5492
  };
5672
- //# sourceMappingURL=chunk-WWDIUJ2Q.js.map
5493
+ //# sourceMappingURL=chunk-5A4X24JB.js.map