@dwelle/excalidraw 0.5.0-bb58eff → 0.5.0-bcfbd91

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 (235) hide show
  1. package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-9cddb37f-5K5MMBTZ.js → c4Diagram-9cddb37f-Z2BVR4KG.js} +4 -4
  2. package/dist/browser/dev/excalidraw-assets-dev/{chunk-YLFK45LY.js → chunk-2R746FJ3.js} +21 -21
  3. package/dist/browser/dev/excalidraw-assets-dev/{chunk-HPE2QM6Z.js → chunk-4YGSGIMJ.js} +3 -3
  4. package/dist/browser/dev/excalidraw-assets-dev/{chunk-FG5PX37Z.js → chunk-7ZK24NYG.js} +398 -930
  5. package/dist/browser/dev/excalidraw-assets-dev/chunk-7ZK24NYG.js.map +7 -0
  6. package/dist/browser/dev/excalidraw-assets-dev/{chunk-VJWYXZRD.js → chunk-A4L3DQO2.js} +3 -3
  7. package/dist/browser/dev/excalidraw-assets-dev/{chunk-LARCHXKL.js → chunk-CWUUGB6C.js} +3 -3
  8. package/dist/browser/dev/excalidraw-assets-dev/{chunk-PTRCE3YZ.js → chunk-DLCKQH3C.js} +4 -4
  9. package/dist/browser/dev/excalidraw-assets-dev/{chunk-ABU3Y4P6.js → chunk-IVZGHBP3.js} +5 -5
  10. package/dist/browser/dev/excalidraw-assets-dev/{chunk-VVJS3CBB.js → chunk-J3RT3AEL.js} +3 -3
  11. package/dist/browser/dev/excalidraw-assets-dev/{chunk-AQ5OI7FF.js → chunk-KN673SBB.js} +3 -3
  12. package/dist/browser/dev/excalidraw-assets-dev/{chunk-OBKV4VWD.js → chunk-OGN4DE2Q.js} +2 -2
  13. package/dist/browser/dev/excalidraw-assets-dev/{chunk-JRHEG4KR.js → chunk-P3NJMBHG.js} +3 -3
  14. package/dist/browser/dev/excalidraw-assets-dev/{chunk-UN4RKPVH.js → chunk-QP4L67PY.js} +3 -3
  15. package/dist/browser/dev/excalidraw-assets-dev/{chunk-AU5UG6FO.js → chunk-U7QYLFAH.js} +6 -6
  16. package/dist/browser/dev/excalidraw-assets-dev/{chunk-FSI24XHB.js → chunk-ULL4JVA4.js} +7 -7
  17. package/dist/browser/dev/excalidraw-assets-dev/{chunk-2WPXONHI.js → chunk-WFIY45QO.js} +2 -5
  18. package/dist/browser/dev/excalidraw-assets-dev/{chunk-2WPXONHI.js.map → chunk-WFIY45QO.js.map} +2 -2
  19. package/dist/browser/dev/excalidraw-assets-dev/{chunk-RMILGNZX.js → chunk-WWRYLVJC.js} +4 -4
  20. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-bc733c3b-NWRL2CDH.js → classDiagram-bc733c3b-K5SPPM5G.js} +7 -7
  21. package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-8931bdaf-Y5FPX4CT.js → classDiagram-v2-8931bdaf-LMQ4MBCJ.js} +10 -10
  22. package/dist/browser/dev/excalidraw-assets-dev/{directory-open-01563666-VWSBJ543.js → directory-open-01563666-HET5VGVW.js} +2 -2
  23. package/dist/browser/dev/excalidraw-assets-dev/{directory-open-4ed118d0-FYNYOZXP.js → directory-open-4ed118d0-EEZTUAOR.js} +2 -2
  24. package/dist/browser/dev/excalidraw-assets-dev/dist-MMLCHBGE.js +10 -0
  25. package/dist/browser/dev/excalidraw-assets-dev/{en-OFPNSLTO.js → en-CJBKYSM5.js} +2 -2
  26. package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-f6946109-URHWBVQF.js → erDiagram-f6946109-T5ZYWW62.js} +5 -5
  27. package/dist/browser/dev/excalidraw-assets-dev/{file-open-002ab408-K7UWK3UX.js → file-open-002ab408-2OQEKDVS.js} +2 -2
  28. package/dist/browser/dev/excalidraw-assets-dev/{file-open-7c801643-PUS6AQBV.js → file-open-7c801643-7IDWBVQC.js} +2 -2
  29. package/dist/browser/dev/excalidraw-assets-dev/{file-save-3189631c-AVBJT4K7.js → file-save-3189631c-D66DZOSK.js} +2 -2
  30. package/dist/browser/dev/excalidraw-assets-dev/{file-save-745eba88-FCWOWXVA.js → file-save-745eba88-3NARDH2Z.js} +2 -2
  31. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-93327f21-ARY24FIN.js → flowDiagram-93327f21-OFTBRZYD.js} +11 -11
  32. package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-476db779-Y3LYCDLM.js → flowDiagram-v2-476db779-VVUICW5U.js} +11 -11
  33. package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5082a990-DTGYPOS7.js → flowchart-elk-definition-5082a990-KDDK5LFE.js} +8 -8
  34. package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-7ce12d6b-GWKDCJYX.js → ganttDiagram-7ce12d6b-XW6BLNYB.js} +3 -3
  35. package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-1e960c50-A4SIEE63.js → gitGraphDiagram-1e960c50-WAVVX7YE.js} +3 -3
  36. package/dist/browser/dev/excalidraw-assets-dev/{image-ZQHNSB7P.css → image-BMBZMPAN.css} +20 -99
  37. package/dist/browser/dev/excalidraw-assets-dev/image-BMBZMPAN.css.map +7 -0
  38. package/dist/browser/dev/excalidraw-assets-dev/{image-J27XZPQC.js → image-DG6G3CCZ.js} +6 -6
  39. package/dist/browser/dev/excalidraw-assets-dev/{image-blob-reduce.esm-BDWVJKFQ.js → image-blob-reduce.esm-OJYOZNL4.js} +2 -2
  40. package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-264bed3e-AUF35UHX.js → infoDiagram-264bed3e-SMYVWNAJ.js} +3 -3
  41. package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-31be0096-ADAT3O42.js → journeyDiagram-31be0096-IXIWAKJV.js} +4 -4
  42. package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-4fc2557c-YC2LM75P.js → mindmap-definition-4fc2557c-H5WTPEBY.js} +4 -4
  43. package/dist/browser/dev/excalidraw-assets-dev/{pica-GXUQBC7B.js → pica-RRHXYZO2.js} +2 -2
  44. package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-157505fe-4XR6DLIZ.js → pieDiagram-157505fe-3LXENDEP.js} +3 -3
  45. package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-fd70f2d0-LIR55Z6M.js → quadrantDiagram-fd70f2d0-CBA7LD4X.js} +3 -3
  46. package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-19c99588-NKRCRRBM.js → requirementDiagram-19c99588-53JLZTYM.js} +5 -5
  47. package/dist/browser/dev/excalidraw-assets-dev/{roundRect-ZNZYUVWJ.js → roundRect-5HI6M3OA.js} +2 -2
  48. package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-5dfd0049-VUKNRO5G.js → sequenceDiagram-5dfd0049-XJRLBGS7.js} +4 -4
  49. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-133e3642-3NYPG4IW.js → stateDiagram-133e3642-ZVPN2MPZ.js} +6 -6
  50. package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-6371a76b-YINZI7AG.js → stateDiagram-v2-6371a76b-QIW3VCSC.js} +10 -10
  51. package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-5ed366f4-KWC42LPI.js → timeline-definition-5ed366f4-LGCWVNZT.js} +3 -3
  52. package/dist/browser/dev/index.css +19 -98
  53. package/dist/browser/dev/index.css.map +2 -2
  54. package/dist/browser/dev/index.js +5 -5
  55. package/dist/browser/prod/excalidraw-assets/{c4Diagram-9cddb37f-UIUBGLLC.js → c4Diagram-9cddb37f-CSAXQUMT.js} +1 -1
  56. package/dist/browser/prod/excalidraw-assets/{chunk-I32TF3FD.js → chunk-56HIV6N6.js} +1 -1
  57. package/dist/browser/prod/excalidraw-assets/{chunk-X3V4W6Y3.js → chunk-5PG4MN6E.js} +1 -1
  58. package/dist/browser/prod/excalidraw-assets/{chunk-XXT5RS66.js → chunk-5PXNTGLF.js} +1 -1
  59. package/dist/browser/prod/excalidraw-assets/{chunk-EQDCUI7P.js → chunk-6LDES2GZ.js} +1 -1
  60. package/dist/browser/prod/excalidraw-assets/{chunk-4C6GEPVI.js → chunk-BWJEY7EX.js} +1 -1
  61. package/dist/browser/prod/excalidraw-assets/{chunk-LOWTGNCV.js → chunk-CP5W5ACF.js} +1 -1
  62. package/dist/browser/prod/excalidraw-assets/chunk-DBUEOZT5.js +269 -0
  63. package/dist/browser/prod/excalidraw-assets/{chunk-MJ2YKZ3B.js → chunk-DF24HG3F.js} +1 -1
  64. package/dist/browser/prod/excalidraw-assets/{chunk-FVDUD6XA.js → chunk-DVVGVVYL.js} +1 -1
  65. package/dist/browser/prod/excalidraw-assets/{chunk-7CLKPETF.js → chunk-GTO2REC5.js} +1 -1
  66. package/dist/browser/prod/excalidraw-assets/{chunk-YGSQT3TE.js → chunk-KQZZ435A.js} +2 -2
  67. package/dist/browser/prod/excalidraw-assets/{chunk-RVQN2TTU.js → chunk-ONH2E3HD.js} +3 -3
  68. package/dist/browser/prod/excalidraw-assets/{chunk-FGOIQKRL.js → chunk-QK2I4STK.js} +1 -1
  69. package/dist/browser/prod/excalidraw-assets/{chunk-VZ5ZGWAN.js → chunk-TGFMJVS6.js} +1 -1
  70. package/dist/browser/prod/excalidraw-assets/{chunk-5EY4KGYU.js → chunk-V6GEKVIM.js} +1 -1
  71. package/dist/browser/prod/excalidraw-assets/{chunk-VI6ARPX6.js → chunk-W7OUYNQP.js} +1 -1
  72. package/dist/browser/prod/excalidraw-assets/{classDiagram-bc733c3b-6BX33ZTH.js → classDiagram-bc733c3b-FZUH7HPQ.js} +1 -1
  73. package/dist/browser/prod/excalidraw-assets/{classDiagram-v2-8931bdaf-ACBVEHQO.js → classDiagram-v2-8931bdaf-LRVGH5BD.js} +1 -1
  74. package/dist/browser/prod/excalidraw-assets/{directory-open-01563666-C2PFQBKL.js → directory-open-01563666-WBDEPWFN.js} +1 -1
  75. package/dist/browser/prod/excalidraw-assets/{directory-open-4ed118d0-E55HNHTS.js → directory-open-4ed118d0-SHTOCZXQ.js} +1 -1
  76. package/dist/browser/prod/excalidraw-assets/dist-JMLVFQ4W.js +1 -0
  77. package/dist/browser/prod/excalidraw-assets/{en-46OXMRU6.js → en-6EOGX47W.js} +1 -1
  78. package/dist/browser/prod/excalidraw-assets/{erDiagram-f6946109-TYWREFGK.js → erDiagram-f6946109-IIBR3HHT.js} +1 -1
  79. package/dist/browser/prod/excalidraw-assets/{file-open-002ab408-FQU3HANB.js → file-open-002ab408-7YMAGCE3.js} +1 -1
  80. package/dist/browser/prod/excalidraw-assets/{file-open-7c801643-BCD55L36.js → file-open-7c801643-2UIR6WEW.js} +1 -1
  81. package/dist/browser/prod/excalidraw-assets/{file-save-3189631c-TAXV2OAM.js → file-save-3189631c-UAJTEO5I.js} +1 -1
  82. package/dist/browser/prod/excalidraw-assets/{file-save-745eba88-DPWZ3VE6.js → file-save-745eba88-TOUSYUTX.js} +1 -1
  83. package/dist/browser/prod/excalidraw-assets/{flowDiagram-93327f21-4VGGLTSV.js → flowDiagram-93327f21-XIY3FFTU.js} +1 -1
  84. package/dist/browser/prod/excalidraw-assets/flowDiagram-v2-476db779-EQMWJJEV.js +1 -0
  85. package/dist/browser/prod/excalidraw-assets/{flowchart-elk-definition-5082a990-DWI3JPDY.js → flowchart-elk-definition-5082a990-LJBHN7JH.js} +1 -1
  86. package/dist/browser/prod/excalidraw-assets/{ganttDiagram-7ce12d6b-FGLMWLXT.js → ganttDiagram-7ce12d6b-CBM3PKRU.js} +1 -1
  87. package/dist/browser/prod/excalidraw-assets/{gitGraphDiagram-1e960c50-6PYRBTDK.js → gitGraphDiagram-1e960c50-TZDQTV4Y.js} +1 -1
  88. package/dist/browser/prod/excalidraw-assets/image-NFLQBKBU.js +1 -0
  89. package/dist/browser/prod/excalidraw-assets/image-TGGHFJHC.css +1 -0
  90. package/dist/browser/prod/excalidraw-assets/{image-blob-reduce.esm-7C326NDW.js → image-blob-reduce.esm-NOK55Z4R.js} +1 -1
  91. package/dist/browser/prod/excalidraw-assets/{infoDiagram-264bed3e-B3RQYU4J.js → infoDiagram-264bed3e-VTVTW2PT.js} +1 -1
  92. package/dist/browser/prod/excalidraw-assets/{journeyDiagram-31be0096-SPHJ2Z6S.js → journeyDiagram-31be0096-3RXCXFNL.js} +1 -1
  93. package/dist/browser/prod/excalidraw-assets/{mindmap-definition-4fc2557c-EKE5IPT5.js → mindmap-definition-4fc2557c-U2MTITUZ.js} +1 -1
  94. package/dist/browser/prod/excalidraw-assets/{pica-WBNTBMON.js → pica-FN4U5BBA.js} +1 -1
  95. package/dist/browser/prod/excalidraw-assets/{pieDiagram-157505fe-R3GPKUOS.js → pieDiagram-157505fe-UPOKDCDE.js} +1 -1
  96. package/dist/browser/prod/excalidraw-assets/{quadrantDiagram-fd70f2d0-E6DDN2FC.js → quadrantDiagram-fd70f2d0-G6SC76BN.js} +1 -1
  97. package/dist/browser/prod/excalidraw-assets/{requirementDiagram-19c99588-EDK37RW4.js → requirementDiagram-19c99588-OPA5Q2CG.js} +1 -1
  98. package/dist/browser/prod/excalidraw-assets/{roundRect-P4IDSYXR.js → roundRect-YDYZGRTK.js} +1 -1
  99. package/dist/browser/prod/excalidraw-assets/{sequenceDiagram-5dfd0049-SDPAZI6N.js → sequenceDiagram-5dfd0049-RLLGIVI3.js} +1 -1
  100. package/dist/browser/prod/excalidraw-assets/{stateDiagram-133e3642-2GOIU2WH.js → stateDiagram-133e3642-POU4VV6D.js} +1 -1
  101. package/dist/browser/prod/excalidraw-assets/{stateDiagram-v2-6371a76b-HIFSCSY4.js → stateDiagram-v2-6371a76b-TI5DGF27.js} +1 -1
  102. package/dist/browser/prod/excalidraw-assets/{timeline-definition-5ed366f4-KTXR6TKT.js → timeline-definition-5ed366f4-RRRA7YP4.js} +1 -1
  103. package/dist/browser/prod/index.css +1 -1
  104. package/dist/browser/prod/index.js +1 -1
  105. package/dist/{prod/en-54AU74IP.json → dev/en-JBWHKG2R.json} +1 -4
  106. package/dist/dev/index.css +19 -98
  107. package/dist/dev/index.css.map +2 -2
  108. package/dist/dev/index.js +524 -863
  109. package/dist/dev/index.js.map +4 -4
  110. package/dist/excalidraw/actions/actionAddToLibrary.d.ts +0 -9
  111. package/dist/excalidraw/actions/actionBoundText.d.ts +0 -6
  112. package/dist/excalidraw/actions/actionBoundText.js +1 -4
  113. package/dist/excalidraw/actions/actionCanvas.d.ts +0 -36
  114. package/dist/excalidraw/actions/actionClipboard.d.ts +0 -21
  115. package/dist/excalidraw/actions/actionDeleteSelected.d.ts +0 -9
  116. package/dist/excalidraw/actions/actionDuplicateSelection.js +0 -4
  117. package/dist/excalidraw/actions/actionElementLock.d.ts +0 -6
  118. package/dist/excalidraw/actions/actionExport.d.ts +1 -28
  119. package/dist/excalidraw/actions/actionFinalize.d.ts +0 -6
  120. package/dist/excalidraw/actions/actionFrame.d.ts +0 -9
  121. package/dist/excalidraw/actions/actionGroup.d.ts +0 -6
  122. package/dist/excalidraw/actions/actionGroup.js +2 -4
  123. package/dist/excalidraw/actions/actionHistory.js +0 -3
  124. package/dist/excalidraw/actions/actionLinearEditor.d.ts +0 -3
  125. package/dist/excalidraw/actions/actionLink.d.ts +0 -3
  126. package/dist/excalidraw/actions/actionMenu.d.ts +0 -9
  127. package/dist/excalidraw/actions/actionNavigate.d.ts +0 -6
  128. package/dist/excalidraw/actions/actionNavigate.js +6 -15
  129. package/dist/excalidraw/actions/actionProperties.d.ts +0 -39
  130. package/dist/excalidraw/actions/actionSelectAll.d.ts +0 -3
  131. package/dist/excalidraw/actions/actionStyles.d.ts +0 -3
  132. package/dist/excalidraw/actions/actionToggleGridMode.d.ts +0 -3
  133. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +0 -3
  134. package/dist/excalidraw/actions/actionToggleStats.d.ts +0 -3
  135. package/dist/excalidraw/actions/actionToggleViewMode.d.ts +0 -3
  136. package/dist/excalidraw/actions/actionToggleZenMode.d.ts +0 -3
  137. package/dist/excalidraw/actions/actionZindex.d.ts +11 -11
  138. package/dist/excalidraw/clients.d.ts +1 -10
  139. package/dist/excalidraw/clients.js +6 -153
  140. package/dist/excalidraw/components/App.d.ts +3 -3
  141. package/dist/excalidraw/components/App.js +38 -20
  142. package/dist/excalidraw/components/Avatar.d.ts +3 -2
  143. package/dist/excalidraw/components/Avatar.js +5 -2
  144. package/dist/excalidraw/components/UserList.d.ts +7 -3
  145. package/dist/excalidraw/components/UserList.js +34 -63
  146. package/dist/excalidraw/components/canvases/InteractiveCanvas.js +22 -19
  147. package/dist/excalidraw/components/icons.d.ts +0 -2
  148. package/dist/excalidraw/components/icons.js +1 -3
  149. package/dist/excalidraw/constants.d.ts +3 -2
  150. package/dist/excalidraw/constants.js +3 -3
  151. package/dist/excalidraw/data/restore.d.ts +3 -3
  152. package/dist/excalidraw/data/restore.js +6 -5
  153. package/dist/excalidraw/data/transform.d.ts +1 -1
  154. package/dist/excalidraw/data/transform.js +3 -4
  155. package/dist/excalidraw/element/embeddable.d.ts +0 -3
  156. package/dist/excalidraw/element/linearElementEditor.d.ts +1 -5
  157. package/dist/excalidraw/element/newElement.d.ts +1 -1
  158. package/dist/excalidraw/element/newElement.js +1 -2
  159. package/dist/excalidraw/element/types.d.ts +2 -14
  160. package/dist/excalidraw/errors.d.ts +0 -3
  161. package/dist/excalidraw/errors.js +0 -3
  162. package/dist/excalidraw/frame.d.ts +1 -1
  163. package/dist/excalidraw/laser-trails.js +1 -1
  164. package/dist/excalidraw/locales/en.json +1 -4
  165. package/dist/excalidraw/renderer/interactiveScene.js +119 -13
  166. package/dist/excalidraw/renderer/staticScene.js +4 -5
  167. package/dist/excalidraw/scene/Scene.d.ts +6 -7
  168. package/dist/excalidraw/scene/Scene.js +13 -28
  169. package/dist/excalidraw/scene/export.js +1 -2
  170. package/dist/excalidraw/scene/types.d.ts +21 -10
  171. package/dist/excalidraw/types.d.ts +4 -7
  172. package/dist/excalidraw/utils.js +0 -3
  173. package/dist/excalidraw/zindex.d.ts +2 -2
  174. package/dist/excalidraw/zindex.js +13 -9
  175. package/dist/{dev/en-54AU74IP.json → prod/en-JBWHKG2R.json} +1 -4
  176. package/dist/prod/index.css +1 -1
  177. package/dist/prod/index.js +39 -39
  178. package/package.json +3 -4
  179. package/dist/browser/dev/excalidraw-assets-dev/chunk-FG5PX37Z.js.map +0 -7
  180. package/dist/browser/dev/excalidraw-assets-dev/dist-HOOQ44NM.js +0 -10
  181. package/dist/browser/dev/excalidraw-assets-dev/image-ZQHNSB7P.css.map +0 -7
  182. package/dist/browser/prod/excalidraw-assets/chunk-D2I3QE7U.js +0 -269
  183. package/dist/browser/prod/excalidraw-assets/dist-XTBKPFET.js +0 -1
  184. package/dist/browser/prod/excalidraw-assets/flowDiagram-v2-476db779-KLWICWG3.js +0 -1
  185. package/dist/browser/prod/excalidraw-assets/image-M662KTMJ.css +0 -1
  186. package/dist/browser/prod/excalidraw-assets/image-XP52XYUU.js +0 -1
  187. package/dist/excalidraw/data/reconcile.d.ts +0 -6
  188. package/dist/excalidraw/data/reconcile.js +0 -49
  189. package/dist/excalidraw/fractionalIndex.d.ts +0 -40
  190. package/dist/excalidraw/fractionalIndex.js +0 -241
  191. /package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-9cddb37f-5K5MMBTZ.js.map → c4Diagram-9cddb37f-Z2BVR4KG.js.map} +0 -0
  192. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-YLFK45LY.js.map → chunk-2R746FJ3.js.map} +0 -0
  193. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-HPE2QM6Z.js.map → chunk-4YGSGIMJ.js.map} +0 -0
  194. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-VJWYXZRD.js.map → chunk-A4L3DQO2.js.map} +0 -0
  195. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-LARCHXKL.js.map → chunk-CWUUGB6C.js.map} +0 -0
  196. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-PTRCE3YZ.js.map → chunk-DLCKQH3C.js.map} +0 -0
  197. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-ABU3Y4P6.js.map → chunk-IVZGHBP3.js.map} +0 -0
  198. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-VVJS3CBB.js.map → chunk-J3RT3AEL.js.map} +0 -0
  199. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-AQ5OI7FF.js.map → chunk-KN673SBB.js.map} +0 -0
  200. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-OBKV4VWD.js.map → chunk-OGN4DE2Q.js.map} +0 -0
  201. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-JRHEG4KR.js.map → chunk-P3NJMBHG.js.map} +0 -0
  202. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-UN4RKPVH.js.map → chunk-QP4L67PY.js.map} +0 -0
  203. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-AU5UG6FO.js.map → chunk-U7QYLFAH.js.map} +0 -0
  204. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-FSI24XHB.js.map → chunk-ULL4JVA4.js.map} +0 -0
  205. /package/dist/browser/dev/excalidraw-assets-dev/{chunk-RMILGNZX.js.map → chunk-WWRYLVJC.js.map} +0 -0
  206. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-bc733c3b-NWRL2CDH.js.map → classDiagram-bc733c3b-K5SPPM5G.js.map} +0 -0
  207. /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-8931bdaf-Y5FPX4CT.js.map → classDiagram-v2-8931bdaf-LMQ4MBCJ.js.map} +0 -0
  208. /package/dist/browser/dev/excalidraw-assets-dev/{directory-open-01563666-VWSBJ543.js.map → directory-open-01563666-HET5VGVW.js.map} +0 -0
  209. /package/dist/browser/dev/excalidraw-assets-dev/{directory-open-4ed118d0-FYNYOZXP.js.map → directory-open-4ed118d0-EEZTUAOR.js.map} +0 -0
  210. /package/dist/browser/dev/excalidraw-assets-dev/{dist-HOOQ44NM.js.map → dist-MMLCHBGE.js.map} +0 -0
  211. /package/dist/browser/dev/excalidraw-assets-dev/{en-OFPNSLTO.js.map → en-CJBKYSM5.js.map} +0 -0
  212. /package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-f6946109-URHWBVQF.js.map → erDiagram-f6946109-T5ZYWW62.js.map} +0 -0
  213. /package/dist/browser/dev/excalidraw-assets-dev/{file-open-002ab408-K7UWK3UX.js.map → file-open-002ab408-2OQEKDVS.js.map} +0 -0
  214. /package/dist/browser/dev/excalidraw-assets-dev/{file-open-7c801643-PUS6AQBV.js.map → file-open-7c801643-7IDWBVQC.js.map} +0 -0
  215. /package/dist/browser/dev/excalidraw-assets-dev/{file-save-3189631c-AVBJT4K7.js.map → file-save-3189631c-D66DZOSK.js.map} +0 -0
  216. /package/dist/browser/dev/excalidraw-assets-dev/{file-save-745eba88-FCWOWXVA.js.map → file-save-745eba88-3NARDH2Z.js.map} +0 -0
  217. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-93327f21-ARY24FIN.js.map → flowDiagram-93327f21-OFTBRZYD.js.map} +0 -0
  218. /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-476db779-Y3LYCDLM.js.map → flowDiagram-v2-476db779-VVUICW5U.js.map} +0 -0
  219. /package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5082a990-DTGYPOS7.js.map → flowchart-elk-definition-5082a990-KDDK5LFE.js.map} +0 -0
  220. /package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-7ce12d6b-GWKDCJYX.js.map → ganttDiagram-7ce12d6b-XW6BLNYB.js.map} +0 -0
  221. /package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-1e960c50-A4SIEE63.js.map → gitGraphDiagram-1e960c50-WAVVX7YE.js.map} +0 -0
  222. /package/dist/browser/dev/excalidraw-assets-dev/{image-J27XZPQC.js.map → image-DG6G3CCZ.js.map} +0 -0
  223. /package/dist/browser/dev/excalidraw-assets-dev/{image-blob-reduce.esm-BDWVJKFQ.js.map → image-blob-reduce.esm-OJYOZNL4.js.map} +0 -0
  224. /package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-264bed3e-AUF35UHX.js.map → infoDiagram-264bed3e-SMYVWNAJ.js.map} +0 -0
  225. /package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-31be0096-ADAT3O42.js.map → journeyDiagram-31be0096-IXIWAKJV.js.map} +0 -0
  226. /package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-4fc2557c-YC2LM75P.js.map → mindmap-definition-4fc2557c-H5WTPEBY.js.map} +0 -0
  227. /package/dist/browser/dev/excalidraw-assets-dev/{pica-GXUQBC7B.js.map → pica-RRHXYZO2.js.map} +0 -0
  228. /package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-157505fe-4XR6DLIZ.js.map → pieDiagram-157505fe-3LXENDEP.js.map} +0 -0
  229. /package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-fd70f2d0-LIR55Z6M.js.map → quadrantDiagram-fd70f2d0-CBA7LD4X.js.map} +0 -0
  230. /package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-19c99588-NKRCRRBM.js.map → requirementDiagram-19c99588-53JLZTYM.js.map} +0 -0
  231. /package/dist/browser/dev/excalidraw-assets-dev/{roundRect-ZNZYUVWJ.js.map → roundRect-5HI6M3OA.js.map} +0 -0
  232. /package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-5dfd0049-VUKNRO5G.js.map → sequenceDiagram-5dfd0049-XJRLBGS7.js.map} +0 -0
  233. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-133e3642-3NYPG4IW.js.map → stateDiagram-133e3642-ZVPN2MPZ.js.map} +0 -0
  234. /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-6371a76b-YINZI7AG.js.map → stateDiagram-v2-6371a76b-QIW3VCSC.js.map} +0 -0
  235. /package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-5ed366f4-KWC42LPI.js.map → timeline-definition-5ed366f4-LGCWVNZT.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  define_import_meta_env_default,
3
3
  init_define_import_meta_env
4
- } from "./chunk-OBKV4VWD.js";
4
+ } from "./chunk-OGN4DE2Q.js";
5
5
  import {
6
6
  en_default
7
- } from "./chunk-2WPXONHI.js";
7
+ } from "./chunk-WFIY45QO.js";
8
8
  import {
9
9
  percentages_default
10
10
  } from "./chunk-YZTYRBEQ.js";
@@ -5588,7 +5588,7 @@ var require_use_sync_external_store_shim_development = __commonJS({
5588
5588
  return x3 === y3 && (x3 !== 0 || 1 / x3 === 1 / y3) || x3 !== x3 && y3 !== y3;
5589
5589
  }
5590
5590
  var objectIs = typeof Object.is === "function" ? Object.is : is;
5591
- var useState35 = React49.useState, useEffect37 = React49.useEffect, useLayoutEffect11 = React49.useLayoutEffect, useDebugValue3 = React49.useDebugValue;
5591
+ var useState35 = React49.useState, useEffect37 = React49.useEffect, useLayoutEffect10 = React49.useLayoutEffect, useDebugValue3 = React49.useDebugValue;
5592
5592
  var didWarnOld18Alpha = false;
5593
5593
  var didWarnUncachedGetSnapshot = false;
5594
5594
  function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
@@ -5616,7 +5616,7 @@ var require_use_sync_external_store_shim_development = __commonJS({
5616
5616
  getSnapshot
5617
5617
  }
5618
5618
  }), inst = _useState[0].inst, forceUpdate = _useState[1];
5619
- useLayoutEffect11(function() {
5619
+ useLayoutEffect10(function() {
5620
5620
  inst.value = value;
5621
5621
  inst.getSnapshot = getSnapshot;
5622
5622
  if (checkIfSnapshotChanged(inst)) {
@@ -5959,7 +5959,6 @@ var isSafari = !isChrome && navigator.userAgent.indexOf("Safari") !== -1;
5959
5959
  var isIOS = /iPad|iPhone/.test(navigator.platform) || // iPadOS 13+
5960
5960
  navigator.userAgent.includes("Mac") && "ontouchend" in document;
5961
5961
  var isBrave = () => navigator.brave?.isBrave?.name === "isBrave";
5962
- var supportsResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
5963
5962
  var APP_NAME = "Excalidraw";
5964
5963
  var DRAGGING_THRESHOLD = 10;
5965
5964
  var LINE_CONFIRM_THRESHOLD = 8;
@@ -6041,7 +6040,6 @@ var DEFAULT_ZOOM_VALUE = 1;
6041
6040
  var COLOR_WHITE = "#ffffff";
6042
6041
  var COLOR_CHARCOAL_BLACK = "#1e1e1e";
6043
6042
  var COLOR_TRANSPARENT = "transparent";
6044
- var COLOR_VOICE_CALL = "#a2f1a6";
6045
6043
  var GRID_SIZE = 20;
6046
6044
  var IMAGE_MIME_TYPES = {
6047
6045
  svg: "image/svg+xml",
@@ -6155,6 +6153,7 @@ var ROUNDNESS = {
6155
6153
  // (see DEFAULT_ADAPTIVE_RADIUS constant)
6156
6154
  ADAPTIVE_RADIUS: 3
6157
6155
  };
6156
+ var PRECEDING_ELEMENT_KEY = "__precedingElement__";
6158
6157
  var ROUGHNESS = {
6159
6158
  architect: 0,
6160
6159
  artist: 1,
@@ -6863,14 +6862,6 @@ var isShallowEqual = (objA, objB, comparators, debug = false) => {
6863
6862
  const aKeys = Object.keys(objA);
6864
6863
  const bKeys = Object.keys(objB);
6865
6864
  if (aKeys.length !== bKeys.length) {
6866
- if (debug) {
6867
- console.warn(
6868
- `%cisShallowEqual: objects don't have same properties ->`,
6869
- "color: #8B4000",
6870
- objA,
6871
- objB
6872
- );
6873
- }
6874
6865
  return false;
6875
6866
  }
6876
6867
  if (comparators && Array.isArray(comparators)) {
@@ -12520,7 +12511,7 @@ var LinearElementEditor = class _LinearElementEditor {
12520
12511
  pointerDownState: linearElementEditor.pointerDownState,
12521
12512
  selectedPointsIndices: linearElementEditor.selectedPointsIndices
12522
12513
  };
12523
- const midpoint2 = _LinearElementEditor.createPointAt(
12514
+ const midpoint = _LinearElementEditor.createPointAt(
12524
12515
  element,
12525
12516
  elementsMap,
12526
12517
  pointerCoords.x,
@@ -12529,7 +12520,7 @@ var LinearElementEditor = class _LinearElementEditor {
12529
12520
  );
12530
12521
  const points = [
12531
12522
  ...element.points.slice(0, segmentMidpoint.index),
12532
- midpoint2,
12523
+ midpoint,
12533
12524
  ...element.points.slice(segmentMidpoint.index)
12534
12525
  ];
12535
12526
  mutateElement(element, {
@@ -15540,7 +15531,6 @@ var _newElementBase = (type, {
15540
15531
  angle = 0,
15541
15532
  groupIds = [],
15542
15533
  frameId = null,
15543
- index: index2 = null,
15544
15534
  roundness = null,
15545
15535
  boundElements = null,
15546
15536
  link = null,
@@ -15564,7 +15554,6 @@ var _newElementBase = (type, {
15564
15554
  opacity,
15565
15555
  groupIds,
15566
15556
  frameId,
15567
- index: index2,
15568
15557
  roundness,
15569
15558
  seed: rest.seed ?? randomInteger(),
15570
15559
  version: rest.version || 1,
@@ -16674,12 +16663,12 @@ var e = (() => {
16674
16663
  return "showOpenFilePicker";
16675
16664
  return false;
16676
16665
  })();
16677
- var t = e ? import("./file-open-002ab408-K7UWK3UX.js") : import("./file-open-7c801643-PUS6AQBV.js");
16666
+ var t = e ? import("./file-open-002ab408-2OQEKDVS.js") : import("./file-open-7c801643-7IDWBVQC.js");
16678
16667
  async function n(...e3) {
16679
16668
  return (await t).default(...e3);
16680
16669
  }
16681
- var i = e ? import("./directory-open-4ed118d0-FYNYOZXP.js") : import("./directory-open-01563666-VWSBJ543.js");
16682
- var o = e ? import("./file-save-745eba88-FCWOWXVA.js") : import("./file-save-3189631c-AVBJT4K7.js");
16670
+ var i = e ? import("./directory-open-4ed118d0-EEZTUAOR.js") : import("./directory-open-01563666-HET5VGVW.js");
16671
+ var o = e ? import("./file-save-745eba88-3NARDH2Z.js") : import("./file-save-3189631c-D66DZOSK.js");
16683
16672
  async function s(...e3) {
16684
16673
  return (await o).default(...e3);
16685
16674
  }
@@ -16706,9 +16695,6 @@ var ImageSceneDataError = class extends Error {
16706
16695
  this.code = code;
16707
16696
  }
16708
16697
  };
16709
- var InvalidFractionalIndexError = class extends Error {
16710
- code = "ELEMENT_HAS_INVALID_INDEX";
16711
- };
16712
16698
 
16713
16699
  // data/filesystem.ts
16714
16700
  var INPUT_CHANGE_INTERVAL_MS = 500;
@@ -16946,376 +16932,6 @@ var normalizeSVG = async (SVGString) => {
16946
16932
 
16947
16933
  // data/restore.ts
16948
16934
  init_define_import_meta_env();
16949
-
16950
- // fractionalIndex.ts
16951
- init_define_import_meta_env();
16952
-
16953
- // ../../node_modules/fractional-indexing/src/index.js
16954
- init_define_import_meta_env();
16955
- var BASE_62_DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
16956
- function midpoint(a4, b4, digits) {
16957
- const zero = digits[0];
16958
- if (b4 != null && a4 >= b4) {
16959
- throw new Error(a4 + " >= " + b4);
16960
- }
16961
- if (a4.slice(-1) === zero || b4 && b4.slice(-1) === zero) {
16962
- throw new Error("trailing zero");
16963
- }
16964
- if (b4) {
16965
- let n4 = 0;
16966
- while ((a4[n4] || zero) === b4[n4]) {
16967
- n4++;
16968
- }
16969
- if (n4 > 0) {
16970
- return b4.slice(0, n4) + midpoint(a4.slice(n4), b4.slice(n4), digits);
16971
- }
16972
- }
16973
- const digitA = a4 ? digits.indexOf(a4[0]) : 0;
16974
- const digitB = b4 != null ? digits.indexOf(b4[0]) : digits.length;
16975
- if (digitB - digitA > 1) {
16976
- const midDigit = Math.round(0.5 * (digitA + digitB));
16977
- return digits[midDigit];
16978
- } else {
16979
- if (b4 && b4.length > 1) {
16980
- return b4.slice(0, 1);
16981
- } else {
16982
- return digits[digitA] + midpoint(a4.slice(1), null, digits);
16983
- }
16984
- }
16985
- }
16986
- function validateInteger(int) {
16987
- if (int.length !== getIntegerLength(int[0])) {
16988
- throw new Error("invalid integer part of order key: " + int);
16989
- }
16990
- }
16991
- function getIntegerLength(head) {
16992
- if (head >= "a" && head <= "z") {
16993
- return head.charCodeAt(0) - "a".charCodeAt(0) + 2;
16994
- } else if (head >= "A" && head <= "Z") {
16995
- return "Z".charCodeAt(0) - head.charCodeAt(0) + 2;
16996
- } else {
16997
- throw new Error("invalid order key head: " + head);
16998
- }
16999
- }
17000
- function getIntegerPart(key) {
17001
- const integerPartLength = getIntegerLength(key[0]);
17002
- if (integerPartLength > key.length) {
17003
- throw new Error("invalid order key: " + key);
17004
- }
17005
- return key.slice(0, integerPartLength);
17006
- }
17007
- function validateOrderKey(key, digits) {
17008
- if (key === "A" + digits[0].repeat(26)) {
17009
- throw new Error("invalid order key: " + key);
17010
- }
17011
- const i4 = getIntegerPart(key);
17012
- const f3 = key.slice(i4.length);
17013
- if (f3.slice(-1) === digits[0]) {
17014
- throw new Error("invalid order key: " + key);
17015
- }
17016
- }
17017
- function incrementInteger(x3, digits) {
17018
- validateInteger(x3);
17019
- const [head, ...digs] = x3.split("");
17020
- let carry = true;
17021
- for (let i4 = digs.length - 1; carry && i4 >= 0; i4--) {
17022
- const d3 = digits.indexOf(digs[i4]) + 1;
17023
- if (d3 === digits.length) {
17024
- digs[i4] = digits[0];
17025
- } else {
17026
- digs[i4] = digits[d3];
17027
- carry = false;
17028
- }
17029
- }
17030
- if (carry) {
17031
- if (head === "Z") {
17032
- return "a" + digits[0];
17033
- }
17034
- if (head === "z") {
17035
- return null;
17036
- }
17037
- const h3 = String.fromCharCode(head.charCodeAt(0) + 1);
17038
- if (h3 > "a") {
17039
- digs.push(digits[0]);
17040
- } else {
17041
- digs.pop();
17042
- }
17043
- return h3 + digs.join("");
17044
- } else {
17045
- return head + digs.join("");
17046
- }
17047
- }
17048
- function decrementInteger(x3, digits) {
17049
- validateInteger(x3);
17050
- const [head, ...digs] = x3.split("");
17051
- let borrow = true;
17052
- for (let i4 = digs.length - 1; borrow && i4 >= 0; i4--) {
17053
- const d3 = digits.indexOf(digs[i4]) - 1;
17054
- if (d3 === -1) {
17055
- digs[i4] = digits.slice(-1);
17056
- } else {
17057
- digs[i4] = digits[d3];
17058
- borrow = false;
17059
- }
17060
- }
17061
- if (borrow) {
17062
- if (head === "a") {
17063
- return "Z" + digits.slice(-1);
17064
- }
17065
- if (head === "A") {
17066
- return null;
17067
- }
17068
- const h3 = String.fromCharCode(head.charCodeAt(0) - 1);
17069
- if (h3 < "Z") {
17070
- digs.push(digits.slice(-1));
17071
- } else {
17072
- digs.pop();
17073
- }
17074
- return h3 + digs.join("");
17075
- } else {
17076
- return head + digs.join("");
17077
- }
17078
- }
17079
- function generateKeyBetween(a4, b4, digits = BASE_62_DIGITS) {
17080
- if (a4 != null) {
17081
- validateOrderKey(a4, digits);
17082
- }
17083
- if (b4 != null) {
17084
- validateOrderKey(b4, digits);
17085
- }
17086
- if (a4 != null && b4 != null && a4 >= b4) {
17087
- throw new Error(a4 + " >= " + b4);
17088
- }
17089
- if (a4 == null) {
17090
- if (b4 == null) {
17091
- return "a" + digits[0];
17092
- }
17093
- const ib2 = getIntegerPart(b4);
17094
- const fb2 = b4.slice(ib2.length);
17095
- if (ib2 === "A" + digits[0].repeat(26)) {
17096
- return ib2 + midpoint("", fb2, digits);
17097
- }
17098
- if (ib2 < b4) {
17099
- return ib2;
17100
- }
17101
- const res = decrementInteger(ib2, digits);
17102
- if (res == null) {
17103
- throw new Error("cannot decrement any more");
17104
- }
17105
- return res;
17106
- }
17107
- if (b4 == null) {
17108
- const ia2 = getIntegerPart(a4);
17109
- const fa2 = a4.slice(ia2.length);
17110
- const i5 = incrementInteger(ia2, digits);
17111
- return i5 == null ? ia2 + midpoint(fa2, null, digits) : i5;
17112
- }
17113
- const ia = getIntegerPart(a4);
17114
- const fa = a4.slice(ia.length);
17115
- const ib = getIntegerPart(b4);
17116
- const fb = b4.slice(ib.length);
17117
- if (ia === ib) {
17118
- return ia + midpoint(fa, fb, digits);
17119
- }
17120
- const i4 = incrementInteger(ia, digits);
17121
- if (i4 == null) {
17122
- throw new Error("cannot increment any more");
17123
- }
17124
- if (i4 < b4) {
17125
- return i4;
17126
- }
17127
- return ia + midpoint(fa, null, digits);
17128
- }
17129
- function generateNKeysBetween(a4, b4, n4, digits = BASE_62_DIGITS) {
17130
- if (n4 === 0) {
17131
- return [];
17132
- }
17133
- if (n4 === 1) {
17134
- return [generateKeyBetween(a4, b4, digits)];
17135
- }
17136
- if (b4 == null) {
17137
- let c4 = generateKeyBetween(a4, b4, digits);
17138
- const result = [c4];
17139
- for (let i4 = 0; i4 < n4 - 1; i4++) {
17140
- c4 = generateKeyBetween(c4, b4, digits);
17141
- result.push(c4);
17142
- }
17143
- return result;
17144
- }
17145
- if (a4 == null) {
17146
- let c4 = generateKeyBetween(a4, b4, digits);
17147
- const result = [c4];
17148
- for (let i4 = 0; i4 < n4 - 1; i4++) {
17149
- c4 = generateKeyBetween(a4, c4, digits);
17150
- result.push(c4);
17151
- }
17152
- result.reverse();
17153
- return result;
17154
- }
17155
- const mid = Math.floor(n4 / 2);
17156
- const c3 = generateKeyBetween(a4, b4, digits);
17157
- return [
17158
- ...generateNKeysBetween(a4, c3, mid, digits),
17159
- c3,
17160
- ...generateNKeysBetween(c3, b4, n4 - mid - 1, digits)
17161
- ];
17162
- }
17163
-
17164
- // fractionalIndex.ts
17165
- var validateFractionalIndices = (indices) => {
17166
- for (const [i4, index2] of indices.entries()) {
17167
- const predecessorIndex = indices[i4 - 1];
17168
- const successorIndex = indices[i4 + 1];
17169
- if (!isValidFractionalIndex(index2, predecessorIndex, successorIndex)) {
17170
- throw new InvalidFractionalIndexError(
17171
- `Fractional indices invariant for element has been compromised - ["${predecessorIndex}", "${index2}", "${successorIndex}"] [predecessor, current, successor]`
17172
- );
17173
- }
17174
- }
17175
- };
17176
- var syncMovedIndices = (elements, movedElements) => {
17177
- try {
17178
- const indicesGroups = getMovedIndicesGroups(elements, movedElements);
17179
- const elementsUpdates = generateIndices(elements, indicesGroups);
17180
- validateFractionalIndices(
17181
- elements.map((x3) => elementsUpdates.get(x3)?.index || x3.index)
17182
- );
17183
- for (const [element, update] of elementsUpdates) {
17184
- mutateElement(element, update, false);
17185
- }
17186
- } catch (e3) {
17187
- syncInvalidIndices(elements);
17188
- }
17189
- return elements;
17190
- };
17191
- var syncInvalidIndices = (elements) => {
17192
- const indicesGroups = getInvalidIndicesGroups(elements);
17193
- const elementsUpdates = generateIndices(elements, indicesGroups);
17194
- for (const [element, update] of elementsUpdates) {
17195
- mutateElement(element, update, false);
17196
- }
17197
- return elements;
17198
- };
17199
- var getMovedIndicesGroups = (elements, movedElements) => {
17200
- const indicesGroups = [];
17201
- let i4 = 0;
17202
- while (i4 < elements.length) {
17203
- if (movedElements.has(elements[i4].id) && !isValidFractionalIndex(
17204
- elements[i4]?.index,
17205
- elements[i4 - 1]?.index,
17206
- elements[i4 + 1]?.index
17207
- )) {
17208
- const indicesGroup = [i4 - 1, i4];
17209
- while (++i4 < elements.length) {
17210
- if (!(movedElements.has(elements[i4].id) && !isValidFractionalIndex(
17211
- elements[i4]?.index,
17212
- elements[i4 - 1]?.index,
17213
- elements[i4 + 1]?.index
17214
- ))) {
17215
- break;
17216
- }
17217
- indicesGroup.push(i4);
17218
- }
17219
- indicesGroup.push(i4);
17220
- indicesGroups.push(indicesGroup);
17221
- } else {
17222
- i4++;
17223
- }
17224
- }
17225
- return indicesGroups;
17226
- };
17227
- var getInvalidIndicesGroups = (elements) => {
17228
- const indicesGroups = [];
17229
- let lowerBound = void 0;
17230
- let upperBound = void 0;
17231
- let lowerBoundIndex = -1;
17232
- let upperBoundIndex = 0;
17233
- const getLowerBound = (index2) => {
17234
- const lowerBound2 = elements[lowerBoundIndex] ? elements[lowerBoundIndex].index : void 0;
17235
- const candidate = elements[index2 - 1]?.index;
17236
- if (!lowerBound2 && candidate || // first lowerBound
17237
- lowerBound2 && candidate && candidate > lowerBound2) {
17238
- return [candidate, index2 - 1];
17239
- }
17240
- return [lowerBound2, lowerBoundIndex];
17241
- };
17242
- const getUpperBound = (index2) => {
17243
- const upperBound2 = elements[upperBoundIndex] ? elements[upperBoundIndex].index : void 0;
17244
- if (upperBound2 && index2 < upperBoundIndex) {
17245
- return [upperBound2, upperBoundIndex];
17246
- }
17247
- let i5 = upperBoundIndex;
17248
- while (++i5 < elements.length) {
17249
- const candidate = elements[i5]?.index;
17250
- if (!upperBound2 && candidate || // first upperBound
17251
- upperBound2 && candidate && candidate > upperBound2) {
17252
- return [candidate, i5];
17253
- }
17254
- }
17255
- return [void 0, i5];
17256
- };
17257
- let i4 = 0;
17258
- while (i4 < elements.length) {
17259
- const current = elements[i4].index;
17260
- [lowerBound, lowerBoundIndex] = getLowerBound(i4);
17261
- [upperBound, upperBoundIndex] = getUpperBound(i4);
17262
- if (!isValidFractionalIndex(current, lowerBound, upperBound)) {
17263
- const indicesGroup = [lowerBoundIndex, i4];
17264
- while (++i4 < elements.length) {
17265
- const current2 = elements[i4].index;
17266
- const [nextLowerBound, nextLowerBoundIndex] = getLowerBound(i4);
17267
- const [nextUpperBound, nextUpperBoundIndex] = getUpperBound(i4);
17268
- if (isValidFractionalIndex(current2, nextLowerBound, nextUpperBound)) {
17269
- break;
17270
- }
17271
- [lowerBound, lowerBoundIndex] = [nextLowerBound, nextLowerBoundIndex];
17272
- [upperBound, upperBoundIndex] = [nextUpperBound, nextUpperBoundIndex];
17273
- indicesGroup.push(i4);
17274
- }
17275
- indicesGroup.push(upperBoundIndex);
17276
- indicesGroups.push(indicesGroup);
17277
- } else {
17278
- i4++;
17279
- }
17280
- }
17281
- return indicesGroups;
17282
- };
17283
- var isValidFractionalIndex = (index2, predecessor, successor) => {
17284
- if (!index2) {
17285
- return false;
17286
- }
17287
- if (predecessor && successor) {
17288
- return predecessor < index2 && index2 < successor;
17289
- }
17290
- if (!predecessor && successor) {
17291
- return index2 < successor;
17292
- }
17293
- if (predecessor && !successor) {
17294
- return predecessor < index2;
17295
- }
17296
- return !!index2;
17297
- };
17298
- var generateIndices = (elements, indicesGroups) => {
17299
- const elementsUpdates = /* @__PURE__ */ new Map();
17300
- for (const indices of indicesGroups) {
17301
- const lowerBoundIndex = indices.shift();
17302
- const upperBoundIndex = indices.pop();
17303
- const fractionalIndices = generateNKeysBetween(
17304
- elements[lowerBoundIndex]?.index,
17305
- elements[upperBoundIndex]?.index,
17306
- indices.length
17307
- );
17308
- for (let i4 = 0; i4 < indices.length; i4++) {
17309
- const element = elements[indices[i4]];
17310
- elementsUpdates.set(element, {
17311
- index: fractionalIndices[i4]
17312
- });
17313
- }
17314
- }
17315
- return elementsUpdates;
17316
- };
17317
-
17318
- // data/restore.ts
17319
16935
  var AllowedExcalidrawActiveTools = {
17320
16936
  selection: true,
17321
16937
  text: true,
@@ -17353,7 +16969,6 @@ var restoreElementWithProperties = (element, extra) => {
17353
16969
  // newly added elements
17354
16970
  version: element.version || 1,
17355
16971
  versionNonce: element.versionNonce ?? 0,
17356
- index: element.index ?? null,
17357
16972
  isDeleted: element.isDeleted ?? false,
17358
16973
  id: element.id || randomId(),
17359
16974
  fillStyle: element.fillStyle || DEFAULT_ELEMENT_PROPS.fillStyle,
@@ -17384,6 +16999,9 @@ var restoreElementWithProperties = (element, extra) => {
17384
16999
  if ("customData" in element || "customData" in extra) {
17385
17000
  base.customData = "customData" in extra ? extra.customData : element.customData;
17386
17001
  }
17002
+ if (PRECEDING_ELEMENT_KEY in element) {
17003
+ base[PRECEDING_ELEMENT_KEY] = element[PRECEDING_ELEMENT_KEY];
17004
+ }
17387
17005
  return {
17388
17006
  ...base,
17389
17007
  ...getNormalizedDimensions(base),
@@ -17534,28 +17152,23 @@ var repairFrameMembership = (element, elementsMap) => {
17534
17152
  var restoreElements = (elements, localElements, opts) => {
17535
17153
  const existingIds = /* @__PURE__ */ new Set();
17536
17154
  const localElementsMap = localElements ? arrayToMap(localElements) : null;
17537
- const restoredElements = syncInvalidIndices(
17538
- (elements || []).reduce((elements2, element) => {
17539
- if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
17540
- let migratedElement = restoreElement(element);
17541
- if (migratedElement) {
17542
- const localElement = localElementsMap?.get(element.id);
17543
- if (localElement && localElement.version > migratedElement.version) {
17544
- migratedElement = bumpVersion(
17545
- migratedElement,
17546
- localElement.version
17547
- );
17548
- }
17549
- if (existingIds.has(migratedElement.id)) {
17550
- migratedElement = { ...migratedElement, id: randomId() };
17551
- }
17552
- existingIds.add(migratedElement.id);
17553
- elements2.push(migratedElement);
17155
+ const restoredElements = (elements || []).reduce((elements2, element) => {
17156
+ if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
17157
+ let migratedElement = restoreElement(element);
17158
+ if (migratedElement) {
17159
+ const localElement = localElementsMap?.get(element.id);
17160
+ if (localElement && localElement.version > migratedElement.version) {
17161
+ migratedElement = bumpVersion(migratedElement, localElement.version);
17554
17162
  }
17163
+ if (existingIds.has(migratedElement.id)) {
17164
+ migratedElement = { ...migratedElement, id: randomId() };
17165
+ }
17166
+ existingIds.add(migratedElement.id);
17167
+ elements2.push(migratedElement);
17555
17168
  }
17556
- return elements2;
17557
- }, [])
17558
- );
17169
+ }
17170
+ return elements2;
17171
+ }, []);
17559
17172
  if (!opts?.repairBindings) {
17560
17173
  return restoredElements;
17561
17174
  }
@@ -17794,11 +17407,10 @@ var bootstrapCanvas = ({
17794
17407
  // renderer/staticScene.ts
17795
17408
  var strokeGrid = (context, gridSize, scrollX, scrollY, zoom, width, height) => {
17796
17409
  const BOLD_LINE_FREQUENCY = 5;
17797
- let GridLineColor;
17798
- ((GridLineColor2) => {
17799
- GridLineColor2["Bold"] = "#cccccc";
17800
- GridLineColor2["Regular"] = "#e5e5e5";
17801
- })(GridLineColor || (GridLineColor = {}));
17410
+ const GridLineColor = {
17411
+ Bold: "#cccccc",
17412
+ Regular: "#e5e5e5"
17413
+ };
17802
17414
  const offsetX = -Math.round(zoom.value / gridSize) * gridSize + scrollX % gridSize;
17803
17415
  const offsetY = -Math.round(zoom.value / gridSize) * gridSize + scrollY % gridSize;
17804
17416
  const lineWidth = Math.min(1 / zoom.value, 1);
@@ -17810,7 +17422,7 @@ var strokeGrid = (context, gridSize, scrollX, scrollY, zoom, width, height) => {
17810
17422
  const isBold = Math.round(x3 - scrollX) % (BOLD_LINE_FREQUENCY * gridSize) === 0;
17811
17423
  context.beginPath();
17812
17424
  context.setLineDash(isBold ? [] : lineDash);
17813
- context.strokeStyle = isBold ? "#cccccc" /* Bold */ : "#e5e5e5" /* Regular */;
17425
+ context.strokeStyle = isBold ? GridLineColor.Bold : GridLineColor.Regular;
17814
17426
  context.moveTo(x3, offsetY - gridSize);
17815
17427
  context.lineTo(x3, offsetY + height + gridSize * 2);
17816
17428
  context.stroke();
@@ -17819,7 +17431,7 @@ var strokeGrid = (context, gridSize, scrollX, scrollY, zoom, width, height) => {
17819
17431
  const isBold = Math.round(y3 - scrollY) % (BOLD_LINE_FREQUENCY * gridSize) === 0;
17820
17432
  context.beginPath();
17821
17433
  context.setLineDash(isBold ? [] : lineDash);
17822
- context.strokeStyle = isBold ? "#cccccc" /* Bold */ : "#e5e5e5" /* Regular */;
17434
+ context.strokeStyle = isBold ? GridLineColor.Bold : GridLineColor.Regular;
17823
17435
  context.moveTo(offsetX - gridSize, y3);
17824
17436
  context.lineTo(offsetX + width + gridSize * 2, y3);
17825
17437
  context.stroke();
@@ -18276,7 +17888,7 @@ var exportToCanvas = async ({
18276
17888
  arrayToMap(elementsForRender)
18277
17889
  ),
18278
17890
  allElementsMap: toBrandedType(
18279
- arrayToMap(syncInvalidIndices(elements))
17891
+ arrayToMap(elements)
18280
17892
  ),
18281
17893
  visibleElements: elementsForRender,
18282
17894
  appState: {
@@ -18338,7 +17950,7 @@ var exportToSvg = async ({
18338
17950
  let metadata = "";
18339
17951
  if (exportEmbedScene) {
18340
17952
  try {
18341
- metadata = await (await import("./image-J27XZPQC.js")).encodeSvgMetadata({
17953
+ metadata = await (await import("./image-DG6G3CCZ.js")).encodeSvgMetadata({
18342
17954
  // when embedding scene, we want to embed the origionally supplied
18343
17955
  // elements which don't contain the temp frame labels.
18344
17956
  // But it also requires that the exportToSvg is being supplied with
@@ -19999,7 +19611,7 @@ var globImport_locales_json = __glob({
19999
19611
  "./locales/da-DK.json": () => import("./da-DK-6OKJ2GQ6.js"),
20000
19612
  "./locales/de-DE.json": () => import("./de-DE-BD5ICOQ2.js"),
20001
19613
  "./locales/el-GR.json": () => import("./el-GR-JFDBTDHS.js"),
20002
- "./locales/en.json": () => import("./en-OFPNSLTO.js"),
19614
+ "./locales/en.json": () => import("./en-CJBKYSM5.js"),
20003
19615
  "./locales/es-ES.json": () => import("./es-ES-CBBTGYGR.js"),
20004
19616
  "./locales/eu-ES.json": () => import("./eu-ES-CHAPMSLE.js"),
20005
19617
  "./locales/fa-IR.json": () => import("./fa-IR-LOJOKEJO.js"),
@@ -20625,8 +20237,6 @@ __export(icons_exports, {
20625
20237
  laserPointerToolIcon: () => laserPointerToolIcon,
20626
20238
  menu: () => menu,
20627
20239
  mermaidLogoIcon: () => mermaidLogoIcon,
20628
- microphoneIcon: () => microphoneIcon,
20629
- microphoneMutedIcon: () => microphoneMutedIcon,
20630
20240
  palette: () => palette,
20631
20241
  playerPlayIcon: () => playerPlayIcon,
20632
20242
  playerStopFilledIcon: () => playerStopFilledIcon,
@@ -22436,7 +22046,7 @@ var fullscreenIcon = createIcon(
22436
22046
  tablerIconProps
22437
22047
  );
22438
22048
  var eyeIcon = createIcon(
22439
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("g", { stroke: "currentColor", fill: "none", strokeWidth: 1.5, children: [
22049
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("g", { stroke: "currentColor", fill: "none", children: [
22440
22050
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
22441
22051
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" }),
22442
22052
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6" })
@@ -22472,27 +22082,6 @@ var searchIcon = createIcon(
22472
22082
  ] }),
22473
22083
  tablerIconProps
22474
22084
  );
22475
- var microphoneIcon = createIcon(
22476
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("g", { strokeWidth: 1.5, children: [
22477
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
22478
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M9 2m0 3a3 3 0 0 1 3 -3h0a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3h0a3 3 0 0 1 -3 -3z" }),
22479
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M5 10a7 7 0 0 0 14 0" }),
22480
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M8 21l8 0" }),
22481
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M12 17l0 4" })
22482
- ] }),
22483
- tablerIconProps
22484
- );
22485
- var microphoneMutedIcon = createIcon(
22486
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("g", { strokeWidth: 1.5, children: [
22487
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
22488
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M3 3l18 18" }),
22489
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M9 5a3 3 0 0 1 6 0v5a3 3 0 0 1 -.13 .874m-2 2a3 3 0 0 1 -3.87 -2.872v-1" }),
22490
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M5 10a7 7 0 0 0 10.846 5.85m2 -2a6.967 6.967 0 0 0 1.152 -3.85" }),
22491
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M8 21l8 0" }),
22492
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("path", { d: "M12 17l0 4" })
22493
- ] }),
22494
- tablerIconProps
22495
- );
22496
22085
 
22497
22086
  // actions/actionDeleteSelected.tsx
22498
22087
  var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
@@ -22774,9 +22363,9 @@ var getTargetIndex = (appState, elements, boundaryIndex, direction, containingFr
22774
22363
  var getTargetElementsMap = (elements, indices) => {
22775
22364
  return indices.reduce((acc, index2) => {
22776
22365
  const element = elements[index2];
22777
- acc.set(element.id, element);
22366
+ acc[element.id] = element;
22778
22367
  return acc;
22779
- }, /* @__PURE__ */ new Map());
22368
+ }, {});
22780
22369
  };
22781
22370
  var shiftElementsByOne = (elements, appState, direction) => {
22782
22371
  const indicesToMove = getIndicesToMove(elements, appState);
@@ -22822,8 +22411,12 @@ var shiftElementsByOne = (elements, appState, direction) => {
22822
22411
  ...trailingElements
22823
22412
  ];
22824
22413
  });
22825
- syncMovedIndices(elements, targetElementsMap);
22826
- return elements;
22414
+ return elements.map((element) => {
22415
+ if (targetElementsMap[element.id]) {
22416
+ return bumpVersion(element);
22417
+ }
22418
+ return element;
22419
+ });
22827
22420
  };
22828
22421
  var shiftElementsToEnd = (elements, appState, direction, containingFrame, elementsToBeMoved) => {
22829
22422
  const indicesToMove = getIndicesToMove(elements, appState, elementsToBeMoved);
@@ -22878,10 +22471,12 @@ var shiftElementsToEnd = (elements, appState, direction, containingFrame, elemen
22878
22471
  displacedElements.push(elements[index2]);
22879
22472
  }
22880
22473
  }
22881
- const targetElements = Array.from(targetElementsMap.values());
22474
+ const targetElements = Object.values(targetElementsMap).map((element) => {
22475
+ return bumpVersion(element);
22476
+ });
22882
22477
  const leadingElements = elements.slice(0, leadingIndex);
22883
22478
  const trailingElements = elements.slice(trailingIndex + 1);
22884
- const nextElements = direction === "left" ? [
22479
+ return direction === "left" ? [
22885
22480
  ...leadingElements,
22886
22481
  ...targetElements,
22887
22482
  ...displacedElements,
@@ -22892,8 +22487,6 @@ var shiftElementsToEnd = (elements, appState, direction, containingFrame, elemen
22892
22487
  ...targetElements,
22893
22488
  ...trailingElements
22894
22489
  ];
22895
- syncMovedIndices(nextElements, targetElementsMap);
22896
- return nextElements;
22897
22490
  };
22898
22491
  function shiftElementsAccountingForFrames(allElements, appState, direction, shiftFunction) {
22899
22492
  const elementsToMove = arrayToMap(
@@ -23247,7 +22840,6 @@ var duplicateElements2 = (elements, appState) => {
23247
22840
  const newElements = [];
23248
22841
  const oldElements = [];
23249
22842
  const oldIdToDuplicatedId = /* @__PURE__ */ new Map();
23250
- const duplicatedElementsMap = /* @__PURE__ */ new Map();
23251
22843
  const duplicateAndOffsetElement = (element) => {
23252
22844
  const newElement2 = duplicateElement(
23253
22845
  appState.editingGroupId,
@@ -23258,7 +22850,6 @@ var duplicateElements2 = (elements, appState) => {
23258
22850
  y: element.y + GRID_SIZE / 2
23259
22851
  }
23260
22852
  );
23261
- duplicatedElementsMap.set(newElement2.id, newElement2);
23262
22853
  oldIdToDuplicatedId.set(element.id, newElement2.id);
23263
22854
  oldElements.push(element);
23264
22855
  newElements.push(newElement2);
@@ -23350,7 +22941,6 @@ var duplicateElements2 = (elements, appState) => {
23350
22941
  }
23351
22942
  }
23352
22943
  const finalElements = finalElementsReversed.reverse();
23353
- syncMovedIndices(finalElements, arrayToMap([...oldElements, ...newElements]));
23354
22944
  bindTextToShapeAfterDuplication(
23355
22945
  elementsWithClones,
23356
22946
  oldElements,
@@ -29805,7 +29395,7 @@ var exportAsImage = async ({
29805
29395
  const blob = canvasToBlob(tempCanvas);
29806
29396
  if (data.appState.exportEmbedScene) {
29807
29397
  blob.then(
29808
- (blob2) => import("./image-J27XZPQC.js").then(
29398
+ (blob2) => import("./image-DG6G3CCZ.js").then(
29809
29399
  ({ encodePngMetadata: encodePngMetadata2 }) => encodePngMetadata2({
29810
29400
  blob: blob2,
29811
29401
  metadata: serializeAsJSON(
@@ -30434,12 +30024,11 @@ var actionGroup = register({
30434
30024
  const elementsBeforeGroup = nextElements.slice(0, lastGroupElementIndex).filter(
30435
30025
  (updatedElement) => !isElementInGroup(updatedElement, newGroupId)
30436
30026
  );
30437
- const reorderedElements = [
30027
+ nextElements = [
30438
30028
  ...elementsBeforeGroup,
30439
30029
  ...elementsInGroup,
30440
30030
  ...elementsAfterGroup
30441
30031
  ];
30442
- syncMovedIndices(reorderedElements, arrayToMap(elementsInGroup));
30443
30032
  return {
30444
30033
  appState: {
30445
30034
  ...appState,
@@ -30449,7 +30038,7 @@ var actionGroup = register({
30449
30038
  getNonDeletedElements2(nextElements)
30450
30039
  )
30451
30040
  },
30452
- elements: reorderedElements,
30041
+ elements: nextElements,
30453
30042
  commitToHistory: true
30454
30043
  };
30455
30044
  },
@@ -30562,37 +30151,6 @@ init_define_import_meta_env();
30562
30151
 
30563
30152
  // clients.ts
30564
30153
  init_define_import_meta_env();
30565
-
30566
- // renderer/roundRect.ts
30567
- init_define_import_meta_env();
30568
- var roundRect = (context, x3, y3, width, height, radius, strokeColor) => {
30569
- context.beginPath();
30570
- context.moveTo(x3 + radius, y3);
30571
- context.lineTo(x3 + width - radius, y3);
30572
- context.quadraticCurveTo(x3 + width, y3, x3 + width, y3 + radius);
30573
- context.lineTo(x3 + width, y3 + height - radius);
30574
- context.quadraticCurveTo(
30575
- x3 + width,
30576
- y3 + height,
30577
- x3 + width - radius,
30578
- y3 + height
30579
- );
30580
- context.lineTo(x3 + radius, y3 + height);
30581
- context.quadraticCurveTo(x3, y3 + height, x3, y3 + height - radius);
30582
- context.lineTo(x3, y3 + radius);
30583
- context.quadraticCurveTo(x3, y3, x3 + radius, y3);
30584
- context.closePath();
30585
- context.fill();
30586
- if (strokeColor) {
30587
- context.strokeStyle = strokeColor;
30588
- }
30589
- context.stroke();
30590
- };
30591
-
30592
- // types.ts
30593
- init_define_import_meta_env();
30594
-
30595
- // clients.ts
30596
30154
  function hashToInteger(id) {
30597
30155
  let hash = 0;
30598
30156
  if (id.length === 0) {
@@ -30604,8 +30162,8 @@ function hashToInteger(id) {
30604
30162
  }
30605
30163
  return hash;
30606
30164
  }
30607
- var getClientColor = (socketId, collaborator) => {
30608
- const hash = Math.abs(hashToInteger(collaborator?.id || socketId));
30165
+ var getClientColor = (id) => {
30166
+ const hash = Math.abs(hashToInteger(id));
30609
30167
  const hue = hash % 37 * 10;
30610
30168
  const saturation = 100;
30611
30169
  const lightness = 83;
@@ -30615,162 +30173,6 @@ var getNameInitial = (name) => {
30615
30173
  const firstCodePoint = name?.trim()?.codePointAt(0);
30616
30174
  return (firstCodePoint ? String.fromCodePoint(firstCodePoint) : "?").toUpperCase();
30617
30175
  };
30618
- var renderRemoteCursors = ({
30619
- context,
30620
- renderConfig,
30621
- appState,
30622
- normalizedWidth,
30623
- normalizedHeight
30624
- }) => {
30625
- for (const [socketId, pointer] of renderConfig.remotePointerViewportCoords) {
30626
- let { x: x3, y: y3 } = pointer;
30627
- const collaborator = appState.collaborators.get(socketId);
30628
- x3 -= appState.offsetLeft;
30629
- y3 -= appState.offsetTop;
30630
- const width = 11;
30631
- const height = 14;
30632
- const isOutOfBounds = x3 < 0 || x3 > normalizedWidth - width || y3 < 0 || y3 > normalizedHeight - height;
30633
- x3 = Math.max(x3, 0);
30634
- x3 = Math.min(x3, normalizedWidth - width);
30635
- y3 = Math.max(y3, 0);
30636
- y3 = Math.min(y3, normalizedHeight - height);
30637
- const background = getClientColor(socketId, collaborator);
30638
- context.save();
30639
- context.strokeStyle = background;
30640
- context.fillStyle = background;
30641
- const userState = renderConfig.remotePointerUserStates.get(socketId);
30642
- const isInactive = isOutOfBounds || userState === "idle" /* IDLE */ || userState === "away" /* AWAY */;
30643
- if (isInactive) {
30644
- context.globalAlpha = 0.3;
30645
- }
30646
- if (renderConfig.remotePointerButton.get(socketId) === "down") {
30647
- context.beginPath();
30648
- context.arc(x3, y3, 15, 0, 2 * Math.PI, false);
30649
- context.lineWidth = 3;
30650
- context.strokeStyle = "#ffffff88";
30651
- context.stroke();
30652
- context.closePath();
30653
- context.beginPath();
30654
- context.arc(x3, y3, 15, 0, 2 * Math.PI, false);
30655
- context.lineWidth = 1;
30656
- context.strokeStyle = background;
30657
- context.stroke();
30658
- context.closePath();
30659
- }
30660
- const IS_SPEAKING_COLOR = appState.theme === THEME.DARK ? "#2f6330" : COLOR_VOICE_CALL;
30661
- const isSpeaking = collaborator?.isSpeaking;
30662
- if (isSpeaking) {
30663
- context.fillStyle = IS_SPEAKING_COLOR;
30664
- context.strokeStyle = IS_SPEAKING_COLOR;
30665
- context.lineWidth = 10;
30666
- context.lineJoin = "round";
30667
- context.beginPath();
30668
- context.moveTo(x3, y3);
30669
- context.lineTo(x3 + 0, y3 + 14);
30670
- context.lineTo(x3 + 4, y3 + 9);
30671
- context.lineTo(x3 + 11, y3 + 8);
30672
- context.closePath();
30673
- context.stroke();
30674
- context.fill();
30675
- }
30676
- context.fillStyle = COLOR_WHITE;
30677
- context.strokeStyle = COLOR_WHITE;
30678
- context.lineWidth = 6;
30679
- context.lineJoin = "round";
30680
- context.beginPath();
30681
- context.moveTo(x3, y3);
30682
- context.lineTo(x3 + 0, y3 + 14);
30683
- context.lineTo(x3 + 4, y3 + 9);
30684
- context.lineTo(x3 + 11, y3 + 8);
30685
- context.closePath();
30686
- context.stroke();
30687
- context.fill();
30688
- context.fillStyle = background;
30689
- context.strokeStyle = background;
30690
- context.lineWidth = 2;
30691
- context.lineJoin = "round";
30692
- context.beginPath();
30693
- if (isInactive) {
30694
- context.moveTo(x3 - 1, y3 - 1);
30695
- context.lineTo(x3 - 1, y3 + 15);
30696
- context.lineTo(x3 + 5, y3 + 10);
30697
- context.lineTo(x3 + 12, y3 + 9);
30698
- context.closePath();
30699
- context.fill();
30700
- } else {
30701
- context.moveTo(x3, y3);
30702
- context.lineTo(x3 + 0, y3 + 14);
30703
- context.lineTo(x3 + 4, y3 + 9);
30704
- context.lineTo(x3 + 11, y3 + 8);
30705
- context.closePath();
30706
- context.fill();
30707
- context.stroke();
30708
- }
30709
- const username = renderConfig.remotePointerUsernames.get(socketId) || "";
30710
- if (!isOutOfBounds && username) {
30711
- context.font = "600 12px sans-serif";
30712
- const offsetX = (isSpeaking ? x3 + 0 : x3) + width / 2;
30713
- const offsetY = (isSpeaking ? y3 + 0 : y3) + height + 2;
30714
- const paddingHorizontal = 5;
30715
- const paddingVertical = 3;
30716
- const measure = context.measureText(username);
30717
- const measureHeight = measure.actualBoundingBoxDescent + measure.actualBoundingBoxAscent;
30718
- const finalHeight = Math.max(measureHeight, 12);
30719
- const boxX = offsetX - 1;
30720
- const boxY = offsetY - 1;
30721
- const boxWidth = measure.width + 2 + paddingHorizontal * 2 + 2;
30722
- const boxHeight = finalHeight + 2 + paddingVertical * 2 + 2;
30723
- if (context.roundRect) {
30724
- context.beginPath();
30725
- context.roundRect(boxX, boxY, boxWidth, boxHeight, 8);
30726
- context.fillStyle = background;
30727
- context.fill();
30728
- context.strokeStyle = COLOR_WHITE;
30729
- context.stroke();
30730
- if (isSpeaking) {
30731
- context.beginPath();
30732
- context.roundRect(boxX - 2, boxY - 2, boxWidth + 4, boxHeight + 4, 8);
30733
- context.strokeStyle = IS_SPEAKING_COLOR;
30734
- context.stroke();
30735
- }
30736
- } else {
30737
- roundRect(context, boxX, boxY, boxWidth, boxHeight, 8, COLOR_WHITE);
30738
- }
30739
- context.fillStyle = COLOR_CHARCOAL_BLACK;
30740
- context.fillText(
30741
- username,
30742
- offsetX + paddingHorizontal + 1,
30743
- offsetY + paddingVertical + measure.actualBoundingBoxAscent + Math.floor((finalHeight - measureHeight) / 2) + 2
30744
- );
30745
- if (isSpeaking) {
30746
- context.fillStyle = IS_SPEAKING_COLOR;
30747
- const barheight = 8;
30748
- const margin = 8;
30749
- const gap = 5;
30750
- context.fillRect(
30751
- boxX + boxWidth + margin,
30752
- boxY + (boxHeight / 2 - barheight / 2),
30753
- 2,
30754
- barheight
30755
- );
30756
- context.fillRect(
30757
- boxX + boxWidth + margin + gap,
30758
- boxY + (boxHeight / 2 - barheight * 2 / 2),
30759
- 2,
30760
- barheight * 2
30761
- );
30762
- context.fillRect(
30763
- boxX + boxWidth + margin + gap * 2,
30764
- boxY + (boxHeight / 2 - barheight / 2),
30765
- 2,
30766
- barheight
30767
- );
30768
- }
30769
- }
30770
- context.restore();
30771
- context.closePath();
30772
- }
30773
- };
30774
30176
 
30775
30177
  // components/Avatar.tsx
30776
30178
  init_define_import_meta_env();
@@ -30781,22 +30183,34 @@ var Avatar = ({
30781
30183
  onClick,
30782
30184
  name,
30783
30185
  src,
30784
- className
30186
+ isBeingFollowed,
30187
+ isCurrentUser
30785
30188
  }) => {
30786
30189
  const shortName = getNameInitial(name);
30787
30190
  const [error, setError] = (0, import_react42.useState)(false);
30788
30191
  const loadImg = !error && src;
30789
30192
  const style = loadImg ? void 0 : { background: color };
30790
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: clsx_m_default("Avatar", className), style, onClick, children: loadImg ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
30791
- "img",
30193
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
30194
+ "div",
30792
30195
  {
30793
- className: "Avatar-img",
30794
- src,
30795
- alt: shortName,
30796
- referrerPolicy: "no-referrer",
30797
- onError: () => setError(true)
30196
+ className: clsx_m_default("Avatar", {
30197
+ "Avatar--is-followed": isBeingFollowed,
30198
+ "Avatar--is-current-user": isCurrentUser
30199
+ }),
30200
+ style,
30201
+ onClick,
30202
+ children: loadImg ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
30203
+ "img",
30204
+ {
30205
+ className: "Avatar-img",
30206
+ src,
30207
+ alt: shortName,
30208
+ referrerPolicy: "no-referrer",
30209
+ onError: () => setError(true)
30210
+ }
30211
+ ) : shortName
30798
30212
  }
30799
- ) : shortName });
30213
+ );
30800
30214
  };
30801
30215
 
30802
30216
  // actions/actionNavigate.tsx
@@ -30829,39 +30243,12 @@ var actionGoToCollaborator = register({
30829
30243
  };
30830
30244
  },
30831
30245
  PanelComponent: ({ updateData, data, appState }) => {
30832
- const { socketId, collaborator, withName, isBeingFollowed } = data;
30833
- const background = getClientColor(socketId, collaborator);
30834
- const statusClassNames = clsx_m_default({
30835
- "is-followed": isBeingFollowed,
30836
- "is-current-user": collaborator.isCurrentUser === true,
30837
- "is-speaking": collaborator.isSpeaking,
30838
- "is-in-call": collaborator.isInCall,
30839
- "is-muted": collaborator.isMuted
30840
- });
30841
- const statusIconJSX = collaborator.isInCall ? collaborator.isSpeaking ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
30842
- "div",
30843
- {
30844
- className: "UserList__collaborator-status-icon-speaking-indicator",
30845
- title: t2("userList.hint.isSpeaking"),
30846
- children: [
30847
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", {}),
30848
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", {}),
30849
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", {})
30850
- ]
30851
- }
30852
- ) : collaborator.isMuted ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
30853
- "div",
30854
- {
30855
- className: "UserList__collaborator-status-icon-microphone-muted",
30856
- title: t2("userList.hint.micMuted"),
30857
- children: microphoneMutedIcon
30858
- }
30859
- ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { title: t2("userList.hint.inCall"), children: microphoneIcon }) : null;
30246
+ const { clientId, collaborator, withName, isBeingFollowed } = data;
30247
+ const background = getClientColor(clientId);
30860
30248
  return withName ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
30861
30249
  "div",
30862
30250
  {
30863
- className: `dropdown-menu-item dropdown-menu-item-base UserList__collaborator ${statusClassNames}`,
30864
- style: { [`--avatar-size`]: "1.5rem" },
30251
+ className: "dropdown-menu-item dropdown-menu-item-base UserList__collaborator",
30865
30252
  onClick: () => updateData(collaborator),
30866
30253
  children: [
30867
30254
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
@@ -30872,43 +30259,35 @@ var actionGoToCollaborator = register({
30872
30259
  },
30873
30260
  name: collaborator.username || "",
30874
30261
  src: collaborator.avatarUrl,
30875
- className: statusClassNames
30262
+ isBeingFollowed,
30263
+ isCurrentUser: collaborator.isCurrentUser === true
30876
30264
  }
30877
30265
  ),
30878
30266
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "UserList__collaborator-name", children: collaborator.username }),
30879
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "UserList__collaborator-status-icons", "aria-hidden": true, children: [
30880
- isBeingFollowed && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
30881
- "div",
30882
- {
30883
- className: "UserList__collaborator-status-icon-is-followed",
30884
- title: t2("userList.hint.followStatus"),
30885
- children: eyeIcon
30886
- }
30887
- ),
30888
- statusIconJSX
30889
- ] })
30890
- ]
30891
- }
30892
- ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
30893
- "div",
30894
- {
30895
- className: `UserList__collaborator UserList__collaborator--avatar-only ${statusClassNames}`,
30896
- children: [
30897
30267
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
30898
- Avatar,
30268
+ "div",
30899
30269
  {
30900
- color: background,
30901
- onClick: () => {
30902
- updateData(collaborator);
30903
- },
30904
- name: collaborator.username || "",
30905
- src: collaborator.avatarUrl,
30906
- className: statusClassNames
30270
+ className: "UserList__collaborator-follow-status-icon",
30271
+ style: { visibility: isBeingFollowed ? "visible" : "hidden" },
30272
+ title: isBeingFollowed ? t2("userList.hint.followStatus") : void 0,
30273
+ "aria-hidden": true,
30274
+ children: eyeIcon
30907
30275
  }
30908
- ),
30909
- statusIconJSX && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "UserList__collaborator-status-icon", children: statusIconJSX })
30276
+ )
30910
30277
  ]
30911
30278
  }
30279
+ ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
30280
+ Avatar,
30281
+ {
30282
+ color: background,
30283
+ onClick: () => {
30284
+ updateData(collaborator);
30285
+ },
30286
+ name: collaborator.username || "",
30287
+ src: collaborator.avatarUrl,
30288
+ isBeingFollowed,
30289
+ isCurrentUser: collaborator.isCurrentUser === true
30290
+ }
30912
30291
  );
30913
30292
  }
30914
30293
  });
@@ -32537,7 +31916,6 @@ var pushTextAboveContainer = (elements, container, textElement) => {
32537
31916
  (ele) => ele.id === container.id
32538
31917
  );
32539
31918
  updatedElements.splice(containerIndex + 1, 0, textElement);
32540
- syncMovedIndices(updatedElements, arrayToMap([container, textElement]));
32541
31919
  return updatedElements;
32542
31920
  };
32543
31921
  var pushContainerBelowText = (elements, container, textElement) => {
@@ -32550,7 +31928,6 @@ var pushContainerBelowText = (elements, container, textElement) => {
32550
31928
  (ele) => ele.id === textElement.id
32551
31929
  );
32552
31930
  updatedElements.splice(textElementIndex, 0, container);
32553
- syncMovedIndices(updatedElements, arrayToMap([container, textElement]));
32554
31931
  return updatedElements;
32555
31932
  };
32556
31933
  var actionWrapTextInContainer = register({
@@ -33169,7 +32546,6 @@ var writeData = (prevElements, appState, updater) => {
33169
32546
  )
33170
32547
  );
33171
32548
  fixBindingsAfterDeletion(elements, deletedElements);
33172
- syncInvalidIndices(elements);
33173
32549
  return {
33174
32550
  elements,
33175
32551
  appState: { ...appState, ...data.appState },
@@ -38682,23 +38058,24 @@ var HelpDialog = ({ onClose }) => {
38682
38058
  init_define_import_meta_env();
38683
38059
  var import_react72 = __toESM(require_react(), 1);
38684
38060
  var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1);
38685
- var DEFAULT_MAX_AVATARS = 4;
38061
+ var FIRST_N_AVATARS = 3;
38686
38062
  var SHOW_COLLABORATORS_FILTER_AT = 8;
38687
38063
  var ConditionalTooltipWrapper = ({
38688
38064
  shouldWrap,
38689
38065
  children,
38066
+ clientId,
38690
38067
  username
38691
- }) => shouldWrap ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Tooltip, { label: username || "Unknown user", children }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_react72.default.Fragment, { children });
38068
+ }) => shouldWrap ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Tooltip, { label: username || "Unknown user", children }, clientId) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_react72.default.Fragment, { children }, clientId);
38692
38069
  var renderCollaborator = ({
38693
38070
  actionManager,
38694
38071
  collaborator,
38695
- socketId,
38072
+ clientId,
38696
38073
  withName = false,
38697
38074
  shouldWrapWithTooltip = false,
38698
38075
  isBeingFollowed
38699
38076
  }) => {
38700
38077
  const data = {
38701
- socketId,
38078
+ clientId,
38702
38079
  collaborator,
38703
38080
  withName,
38704
38081
  isBeingFollowed
@@ -38707,21 +38084,19 @@ var renderCollaborator = ({
38707
38084
  return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
38708
38085
  ConditionalTooltipWrapper,
38709
38086
  {
38087
+ clientId,
38710
38088
  username: collaborator.username,
38711
38089
  shouldWrap: shouldWrapWithTooltip,
38712
38090
  children: avatarJSX
38713
38091
  },
38714
- socketId
38092
+ clientId
38715
38093
  );
38716
38094
  };
38717
38095
  var collaboratorComparatorKeys = [
38718
38096
  "avatarUrl",
38719
38097
  "id",
38720
38098
  "socketId",
38721
- "username",
38722
- "isInCall",
38723
- "isSpeaking",
38724
- "isMuted"
38099
+ "username"
38725
38100
  ];
38726
38101
  var UserList = import_react72.default.memo(
38727
38102
  ({ className, mobile, collaborators, userToFollow }) => {
@@ -38735,138 +38110,107 @@ var UserList = import_react72.default.memo(
38735
38110
  { ...collaborator, socketId }
38736
38111
  );
38737
38112
  });
38738
- const uniqueCollaboratorsArray = Array.from(
38739
- uniqueCollaboratorsMap.values()
38740
- ).filter((collaborator) => collaborator.username?.trim());
38113
+ const uniqueCollaboratorsArray = Array.from(uniqueCollaboratorsMap).filter(
38114
+ ([_, collaborator]) => collaborator.username?.trim()
38115
+ );
38741
38116
  const [searchTerm, setSearchTerm] = import_react72.default.useState("");
38742
- const userListWrapper = import_react72.default.useRef(null);
38743
- (0, import_react72.useLayoutEffect)(() => {
38744
- if (userListWrapper.current) {
38745
- const updateMaxAvatars = (width) => {
38746
- const maxAvatars2 = Math.max(1, Math.min(8, Math.floor(width / 38)));
38747
- setMaxAvatars(maxAvatars2);
38748
- };
38749
- updateMaxAvatars(userListWrapper.current.clientWidth);
38750
- if (!supportsResizeObserver) {
38751
- return;
38752
- }
38753
- const resizeObserver = new ResizeObserver((entries) => {
38754
- for (const entry of entries) {
38755
- const { width } = entry.contentRect;
38756
- updateMaxAvatars(width);
38757
- }
38758
- });
38759
- resizeObserver.observe(userListWrapper.current);
38760
- return () => {
38761
- resizeObserver.disconnect();
38762
- };
38763
- }
38764
- }, []);
38765
- const [maxAvatars, setMaxAvatars] = import_react72.default.useState(DEFAULT_MAX_AVATARS);
38117
+ if (uniqueCollaboratorsArray.length === 0) {
38118
+ return null;
38119
+ }
38766
38120
  const searchTermNormalized = searchTerm.trim().toLowerCase();
38767
38121
  const filteredCollaborators = searchTermNormalized ? uniqueCollaboratorsArray.filter(
38768
- (collaborator) => collaborator.username?.toLowerCase().includes(searchTerm)
38122
+ ([, collaborator]) => collaborator.username?.toLowerCase().includes(searchTerm)
38769
38123
  ) : uniqueCollaboratorsArray;
38770
38124
  const firstNCollaborators = uniqueCollaboratorsArray.slice(
38771
38125
  0,
38772
- maxAvatars - 1
38126
+ FIRST_N_AVATARS
38773
38127
  );
38774
38128
  const firstNAvatarsJSX = firstNCollaborators.map(
38775
- (collaborator) => renderCollaborator({
38129
+ ([clientId, collaborator]) => renderCollaborator({
38776
38130
  actionManager,
38777
38131
  collaborator,
38778
- socketId: collaborator.socketId,
38132
+ clientId,
38779
38133
  shouldWrapWithTooltip: true,
38780
38134
  isBeingFollowed: collaborator.socketId === userToFollow
38781
38135
  })
38782
38136
  );
38783
38137
  return mobile ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: clsx_m_default("UserList UserList_mobile", className), children: uniqueCollaboratorsArray.map(
38784
- (collaborator) => renderCollaborator({
38138
+ ([clientId, collaborator]) => renderCollaborator({
38785
38139
  actionManager,
38786
38140
  collaborator,
38787
- socketId: collaborator.socketId,
38141
+ clientId,
38788
38142
  shouldWrapWithTooltip: true,
38789
38143
  isBeingFollowed: collaborator.socketId === userToFollow
38790
38144
  })
38791
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "UserList-wrapper", ref: userListWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
38792
- "div",
38793
- {
38794
- className: clsx_m_default("UserList", className),
38795
- style: { [`--max-avatars`]: maxAvatars },
38796
- children: [
38797
- firstNAvatarsJSX,
38798
- uniqueCollaboratorsArray.length > maxAvatars - 1 && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
38799
- $cb5cc270b50c6fcd$export$be92b6f5f03c0fe9,
38800
- {
38801
- onOpenChange: (isOpen) => {
38802
- if (!isOpen) {
38803
- setSearchTerm("");
38804
- }
38805
- },
38806
- children: [
38807
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)($cb5cc270b50c6fcd$export$41fb9f06171c75f4, { className: "UserList__more", children: [
38808
- "+",
38809
- uniqueCollaboratorsArray.length - maxAvatars + 1
38810
- ] }),
38811
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
38812
- $cb5cc270b50c6fcd$export$7c6e2c02157bb7d2,
38813
- {
38814
- style: {
38815
- zIndex: 2,
38816
- width: "15rem",
38817
- textAlign: "left"
38818
- },
38819
- align: "end",
38820
- sideOffset: 10,
38821
- children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Island, { style: { overflow: "hidden" }, children: [
38822
- uniqueCollaboratorsArray.length >= SHOW_COLLABORATORS_FILTER_AT && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "UserList__search-wrapper", children: [
38823
- searchIcon,
38824
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
38825
- "input",
38826
- {
38827
- className: "UserList__search",
38828
- type: "text",
38829
- placeholder: t2("userList.search.placeholder"),
38830
- value: searchTerm,
38831
- onChange: (e3) => {
38832
- setSearchTerm(e3.target.value);
38833
- }
38834
- }
38835
- )
38836
- ] }),
38837
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "dropdown-menu UserList__collaborators", children: [
38838
- filteredCollaborators.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "UserList__collaborators__empty", children: t2("userList.search.empty") }),
38839
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "UserList__hint", children: t2("userList.hint.text") }),
38840
- filteredCollaborators.map(
38841
- (collaborator) => renderCollaborator({
38842
- actionManager,
38843
- collaborator,
38844
- socketId: collaborator.socketId,
38845
- withName: true,
38846
- isBeingFollowed: collaborator.socketId === userToFollow
38847
- })
38848
- )
38849
- ] })
38850
- ] })
38851
- }
38852
- )
38853
- ]
38145
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: clsx_m_default("UserList", className), children: [
38146
+ firstNAvatarsJSX,
38147
+ uniqueCollaboratorsArray.length > FIRST_N_AVATARS && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
38148
+ $cb5cc270b50c6fcd$export$be92b6f5f03c0fe9,
38149
+ {
38150
+ onOpenChange: (isOpen) => {
38151
+ if (!isOpen) {
38152
+ setSearchTerm("");
38854
38153
  }
38855
- )
38856
- ]
38857
- }
38858
- ) });
38154
+ },
38155
+ children: [
38156
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)($cb5cc270b50c6fcd$export$41fb9f06171c75f4, { className: "UserList__more", children: [
38157
+ "+",
38158
+ uniqueCollaboratorsArray.length - FIRST_N_AVATARS
38159
+ ] }),
38160
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
38161
+ $cb5cc270b50c6fcd$export$7c6e2c02157bb7d2,
38162
+ {
38163
+ style: {
38164
+ zIndex: 2,
38165
+ width: "13rem",
38166
+ textAlign: "left"
38167
+ },
38168
+ align: "end",
38169
+ sideOffset: 10,
38170
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Island, { style: { overflow: "hidden" }, children: [
38171
+ uniqueCollaboratorsArray.length >= SHOW_COLLABORATORS_FILTER_AT && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "UserList__search-wrapper", children: [
38172
+ searchIcon,
38173
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
38174
+ "input",
38175
+ {
38176
+ className: "UserList__search",
38177
+ type: "text",
38178
+ placeholder: t2("userList.search.placeholder"),
38179
+ value: searchTerm,
38180
+ onChange: (e3) => {
38181
+ setSearchTerm(e3.target.value);
38182
+ }
38183
+ }
38184
+ )
38185
+ ] }),
38186
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "dropdown-menu UserList__collaborators", children: [
38187
+ filteredCollaborators.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "UserList__collaborators__empty", children: t2("userList.search.empty") }),
38188
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "UserList__hint", children: t2("userList.hint.text") }),
38189
+ filteredCollaborators.map(
38190
+ ([clientId, collaborator]) => renderCollaborator({
38191
+ actionManager,
38192
+ collaborator,
38193
+ clientId,
38194
+ withName: true,
38195
+ isBeingFollowed: collaborator.socketId === userToFollow
38196
+ })
38197
+ )
38198
+ ] })
38199
+ ] })
38200
+ }
38201
+ )
38202
+ ]
38203
+ }
38204
+ )
38205
+ ] });
38859
38206
  },
38860
38207
  (prev, next) => {
38861
38208
  if (prev.collaborators.size !== next.collaborators.size || prev.mobile !== next.mobile || prev.className !== next.className || prev.userToFollow !== next.userToFollow) {
38862
38209
  return false;
38863
38210
  }
38864
- const nextCollaboratorSocketIds = next.collaborators.keys();
38865
38211
  for (const [socketId, collaborator] of prev.collaborators) {
38866
38212
  const nextCollaborator = next.collaborators.get(socketId);
38867
- if (!nextCollaborator || // this checks order of collaborators in the map is the same
38868
- // as previous render
38869
- socketId !== nextCollaboratorSocketIds.next().value || !isShallowEqual(
38213
+ if (!nextCollaborator || !isShallowEqual(
38870
38214
  collaborator,
38871
38215
  nextCollaborator,
38872
38216
  collaboratorComparatorKeys
@@ -41348,7 +40692,7 @@ TTD mermaid definition render errror: ${error3.message}`,
41348
40692
  refOnGenerate.current = onGenerate;
41349
40693
  const [mermaidToExcalidrawLib, setMermaidToExcalidrawLib] = (0, import_react89.useState)({
41350
40694
  loaded: false,
41351
- api: import("./dist-HOOQ44NM.js")
40695
+ api: import("./dist-MMLCHBGE.js")
41352
40696
  });
41353
40697
  (0, import_react89.useEffect)(() => {
41354
40698
  const fn = async () => {
@@ -43464,12 +42808,10 @@ var ElementStore = class {
43464
42808
  this.excalidrawElements.set(ele.id, ele);
43465
42809
  };
43466
42810
  getElements = () => {
43467
- return syncInvalidIndices(Array.from(this.excalidrawElements.values()));
42811
+ return Array.from(this.excalidrawElements.values());
43468
42812
  };
43469
42813
  getElementsMap = () => {
43470
- return toBrandedType(
43471
- arrayToMap(this.getElements())
43472
- );
42814
+ return toBrandedType(this.excalidrawElements);
43473
42815
  };
43474
42816
  getElement = (id) => {
43475
42817
  return this.excalidrawElements.get(id);
@@ -43770,6 +43112,35 @@ var isRenderThrottlingEnabled = (() => {
43770
43112
  // renderer/interactiveScene.ts
43771
43113
  init_define_import_meta_env();
43772
43114
 
43115
+ // renderer/roundRect.ts
43116
+ init_define_import_meta_env();
43117
+ var roundRect = (context, x3, y3, width, height, radius, strokeColor) => {
43118
+ context.beginPath();
43119
+ context.moveTo(x3 + radius, y3);
43120
+ context.lineTo(x3 + width - radius, y3);
43121
+ context.quadraticCurveTo(x3 + width, y3, x3 + width, y3 + radius);
43122
+ context.lineTo(x3 + width, y3 + height - radius);
43123
+ context.quadraticCurveTo(
43124
+ x3 + width,
43125
+ y3 + height,
43126
+ x3 + width - radius,
43127
+ y3 + height
43128
+ );
43129
+ context.lineTo(x3 + radius, y3 + height);
43130
+ context.quadraticCurveTo(x3, y3 + height, x3, y3 + height - radius);
43131
+ context.lineTo(x3, y3 + radius);
43132
+ context.quadraticCurveTo(x3, y3, x3 + radius, y3);
43133
+ context.closePath();
43134
+ context.fill();
43135
+ if (strokeColor) {
43136
+ context.strokeStyle = strokeColor;
43137
+ }
43138
+ context.stroke();
43139
+ };
43140
+
43141
+ // types.ts
43142
+ init_define_import_meta_env();
43143
+
43773
43144
  // renderer/renderSnaps.ts
43774
43145
  init_define_import_meta_env();
43775
43146
  var SNAP_COLOR_LIGHT = "#ff6b6b";
@@ -44342,18 +43713,15 @@ var _renderInteractiveScene = ({
44342
43713
  if (locallySelectedIds.has(element.id) && !isSelectedViaGroup(appState, element)) {
44343
43714
  selectionColors.push(selectionColor);
44344
43715
  }
44345
- const remoteClients = renderConfig.remoteSelectedElementIds.get(
44346
- element.id
44347
- );
44348
- if (remoteClients) {
43716
+ if (renderConfig.remoteSelectedElementIds[element.id]) {
44349
43717
  selectionColors.push(
44350
- ...remoteClients.map((socketId) => {
44351
- const background = getClientColor(
44352
- socketId,
44353
- appState.collaborators.get(socketId)
44354
- );
44355
- return background;
44356
- })
43718
+ ...renderConfig.remoteSelectedElementIds[element.id].map(
43719
+ (socketId) => {
43720
+ const { id } = renderConfig.remotePointerViewportCoords[socketId];
43721
+ const background = getClientColor(id);
43722
+ return background;
43723
+ }
43724
+ )
44357
43725
  );
44358
43726
  }
44359
43727
  if (selectionColors.length) {
@@ -44365,7 +43733,7 @@ var _renderInteractiveScene = ({
44365
43733
  elementX2,
44366
43734
  elementY2,
44367
43735
  selectionColors,
44368
- dashed: !!remoteClients,
43736
+ dashed: !!renderConfig.remoteSelectedElementIds[element.id],
44369
43737
  cx,
44370
43738
  cy,
44371
43739
  activeEmbeddable: appState.activeEmbeddable?.element === element && appState.activeEmbeddable.state === "active"
@@ -44460,13 +43828,107 @@ var _renderInteractiveScene = ({
44460
43828
  }
44461
43829
  renderSnaps(context, appState);
44462
43830
  context.restore();
44463
- renderRemoteCursors({
44464
- context,
44465
- renderConfig,
44466
- appState,
44467
- normalizedWidth,
44468
- normalizedHeight
44469
- });
43831
+ for (const clientId in renderConfig.remotePointerViewportCoords) {
43832
+ let { x: x3, y: y3, id } = renderConfig.remotePointerViewportCoords[clientId];
43833
+ x3 -= appState.offsetLeft;
43834
+ y3 -= appState.offsetTop;
43835
+ const width = 11;
43836
+ const height = 14;
43837
+ const isOutOfBounds = x3 < 0 || x3 > normalizedWidth - width || y3 < 0 || y3 > normalizedHeight - height;
43838
+ x3 = Math.max(x3, 0);
43839
+ x3 = Math.min(x3, normalizedWidth - width);
43840
+ y3 = Math.max(y3, 0);
43841
+ y3 = Math.min(y3, normalizedHeight - height);
43842
+ const background = getClientColor(id);
43843
+ context.save();
43844
+ context.strokeStyle = background;
43845
+ context.fillStyle = background;
43846
+ const userState = renderConfig.remotePointerUserStates[clientId];
43847
+ const isInactive = isOutOfBounds || userState === "idle" /* IDLE */ || userState === "away" /* AWAY */;
43848
+ if (isInactive) {
43849
+ context.globalAlpha = 0.3;
43850
+ }
43851
+ if (renderConfig.remotePointerButton && renderConfig.remotePointerButton[clientId] === "down") {
43852
+ context.beginPath();
43853
+ context.arc(x3, y3, 15, 0, 2 * Math.PI, false);
43854
+ context.lineWidth = 3;
43855
+ context.strokeStyle = "#ffffff88";
43856
+ context.stroke();
43857
+ context.closePath();
43858
+ context.beginPath();
43859
+ context.arc(x3, y3, 15, 0, 2 * Math.PI, false);
43860
+ context.lineWidth = 1;
43861
+ context.strokeStyle = background;
43862
+ context.stroke();
43863
+ context.closePath();
43864
+ }
43865
+ context.fillStyle = open_color_default.white;
43866
+ context.strokeStyle = open_color_default.white;
43867
+ context.lineWidth = 6;
43868
+ context.lineJoin = "round";
43869
+ context.beginPath();
43870
+ context.moveTo(x3, y3);
43871
+ context.lineTo(x3 + 0, y3 + 14);
43872
+ context.lineTo(x3 + 4, y3 + 9);
43873
+ context.lineTo(x3 + 11, y3 + 8);
43874
+ context.closePath();
43875
+ context.stroke();
43876
+ context.fill();
43877
+ context.fillStyle = background;
43878
+ context.strokeStyle = background;
43879
+ context.lineWidth = 2;
43880
+ context.lineJoin = "round";
43881
+ context.beginPath();
43882
+ if (isInactive) {
43883
+ context.moveTo(x3 - 1, y3 - 1);
43884
+ context.lineTo(x3 - 1, y3 + 15);
43885
+ context.lineTo(x3 + 5, y3 + 10);
43886
+ context.lineTo(x3 + 12, y3 + 9);
43887
+ context.closePath();
43888
+ context.fill();
43889
+ } else {
43890
+ context.moveTo(x3, y3);
43891
+ context.lineTo(x3 + 0, y3 + 14);
43892
+ context.lineTo(x3 + 4, y3 + 9);
43893
+ context.lineTo(x3 + 11, y3 + 8);
43894
+ context.closePath();
43895
+ context.fill();
43896
+ context.stroke();
43897
+ }
43898
+ const username = renderConfig.remotePointerUsernames[clientId] || "";
43899
+ if (!isOutOfBounds && username) {
43900
+ context.font = "600 12px sans-serif";
43901
+ const offsetX = x3 + width / 2;
43902
+ const offsetY = y3 + height + 2;
43903
+ const paddingHorizontal = 5;
43904
+ const paddingVertical = 3;
43905
+ const measure = context.measureText(username);
43906
+ const measureHeight = measure.actualBoundingBoxDescent + measure.actualBoundingBoxAscent;
43907
+ const finalHeight = Math.max(measureHeight, 12);
43908
+ const boxX = offsetX - 1;
43909
+ const boxY = offsetY - 1;
43910
+ const boxWidth = measure.width + 2 + paddingHorizontal * 2 + 2;
43911
+ const boxHeight = finalHeight + 2 + paddingVertical * 2 + 2;
43912
+ if (context.roundRect) {
43913
+ context.beginPath();
43914
+ context.roundRect(boxX, boxY, boxWidth, boxHeight, 8);
43915
+ context.fillStyle = background;
43916
+ context.fill();
43917
+ context.strokeStyle = open_color_default.white;
43918
+ context.stroke();
43919
+ } else {
43920
+ roundRect(context, boxX, boxY, boxWidth, boxHeight, 8, open_color_default.white);
43921
+ }
43922
+ context.fillStyle = open_color_default.black;
43923
+ context.fillText(
43924
+ username,
43925
+ offsetX + paddingHorizontal + 1,
43926
+ offsetY + paddingVertical + measure.actualBoundingBoxAscent + Math.floor((finalHeight - measureHeight) / 2) + 2
43927
+ );
43928
+ }
43929
+ context.restore();
43930
+ context.closePath();
43931
+ }
44470
43932
  let scrollBars;
44471
43933
  if (renderConfig.renderScrollbars) {
44472
43934
  scrollBars = getScrollBars(
@@ -44524,40 +43986,40 @@ var InteractiveCanvas = (props) => {
44524
43986
  isComponentMounted.current = true;
44525
43987
  return;
44526
43988
  }
44527
- const remotePointerButton = /* @__PURE__ */ new Map();
44528
- const remotePointerViewportCoords = /* @__PURE__ */ new Map();
44529
- const remoteSelectedElementIds = /* @__PURE__ */ new Map();
44530
- const remotePointerUsernames = /* @__PURE__ */ new Map();
44531
- const remotePointerUserStates = /* @__PURE__ */ new Map();
43989
+ const cursorButton = {};
43990
+ const pointerViewportCoords = {};
43991
+ const remoteSelectedElementIds = {};
43992
+ const pointerUsernames = {};
43993
+ const pointerUserStates = {};
44532
43994
  props.appState.collaborators.forEach((user, socketId) => {
44533
43995
  if (user.selectedElementIds) {
44534
43996
  for (const id of Object.keys(user.selectedElementIds)) {
44535
- if (!remoteSelectedElementIds.has(id)) {
44536
- remoteSelectedElementIds.set(id, []);
43997
+ if (!(id in remoteSelectedElementIds)) {
43998
+ remoteSelectedElementIds[id] = [];
44537
43999
  }
44538
- remoteSelectedElementIds.get(id).push(socketId);
44000
+ remoteSelectedElementIds[id].push(socketId);
44539
44001
  }
44540
44002
  }
44541
44003
  if (!user.pointer || user.pointer.renderCursor === false) {
44542
44004
  return;
44543
44005
  }
44544
44006
  if (user.username) {
44545
- remotePointerUsernames.set(socketId, user.username);
44007
+ pointerUsernames[socketId] = user.username;
44546
44008
  }
44547
44009
  if (user.userState) {
44548
- remotePointerUserStates.set(socketId, user.userState);
44010
+ pointerUserStates[socketId] = user.userState;
44549
44011
  }
44550
- remotePointerViewportCoords.set(
44551
- socketId,
44552
- sceneCoordsToViewportCoords(
44012
+ pointerViewportCoords[socketId] = {
44013
+ ...sceneCoordsToViewportCoords(
44553
44014
  {
44554
44015
  sceneX: user.pointer.x,
44555
44016
  sceneY: user.pointer.y
44556
44017
  },
44557
44018
  props.appState
44558
- )
44559
- );
44560
- remotePointerButton.set(socketId, user.button);
44019
+ ),
44020
+ id: user.id || socketId
44021
+ };
44022
+ cursorButton[socketId] = user.button;
44561
44023
  });
44562
44024
  const selectionColor = props.containerRef?.current && getComputedStyle(props.containerRef.current).getPropertyValue(
44563
44025
  "--color-selection"
@@ -44571,11 +44033,11 @@ var InteractiveCanvas = (props) => {
44571
44033
  scale: window.devicePixelRatio,
44572
44034
  appState: props.appState,
44573
44035
  renderConfig: {
44574
- remotePointerViewportCoords,
44575
- remotePointerButton,
44036
+ remotePointerViewportCoords: pointerViewportCoords,
44037
+ remotePointerButton: cursorButton,
44576
44038
  remoteSelectedElementIds,
44577
- remotePointerUsernames,
44578
- remotePointerUserStates,
44039
+ remotePointerUsernames: pointerUsernames,
44040
+ remotePointerUserStates: pointerUserStates,
44579
44041
  selectionColor,
44580
44042
  renderScrollbars: false
44581
44043
  },
@@ -45611,7 +45073,7 @@ var LaserTrails = class {
45611
45073
  if (!this.collabTrails.has(key)) {
45612
45074
  trail = new AnimatedTrail(this.animationFrameHandler, this.app, {
45613
45075
  ...this.getTrailOptions(),
45614
- fill: () => collaborator.pointer?.laserColor || getClientColor(key, collaborator)
45076
+ fill: () => collaborator.pointer?.laserColor || getClientColor(collaborator.id || key)
45615
45077
  });
45616
45078
  trail.start(this.container);
45617
45079
  this.collabTrails.set(key, trail);
@@ -46156,6 +45618,7 @@ var useExcalidrawElements = () => (0, import_react96.useContext)(ExcalidrawEleme
46156
45618
  var useExcalidrawAppState = () => (0, import_react96.useContext)(ExcalidrawAppStateContext);
46157
45619
  var useExcalidrawSetAppState = () => (0, import_react96.useContext)(ExcalidrawSetAppStateContext);
46158
45620
  var useExcalidrawActionManager = () => (0, import_react96.useContext)(ExcalidrawActionManagerContext);
45621
+ var supportsResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
46159
45622
  var didTapTwice = false;
46160
45623
  var tappedTwiceTimer = 0;
46161
45624
  var isHoldingSpace = false;
@@ -47394,7 +46857,7 @@ var App = class _App extends import_react96.default.Component {
47394
46857
  opacity: 100,
47395
46858
  locked: false
47396
46859
  });
47397
- this.scene.insertElement(frame);
46860
+ this.scene.addNewElement(frame);
47398
46861
  for (const child of selectedElements) {
47399
46862
  mutateElement(child, { frameId: frame.id });
47400
46863
  }
@@ -48239,18 +47702,19 @@ var App = class _App extends import_react96.default.Component {
48239
47702
  randomizeSeed: !opts.retainSeed
48240
47703
  }
48241
47704
  );
48242
- const prevElements = this.scene.getElementsIncludingDeleted();
48243
- const nextElements = [...prevElements, ...newElements];
48244
- syncMovedIndices(nextElements, arrayToMap(newElements));
47705
+ const allElements = [
47706
+ ...this.scene.getElementsIncludingDeleted(),
47707
+ ...newElements
47708
+ ];
48245
47709
  const topLayerFrame = this.getTopLayerFrameAtSceneCoords({ x: x3, y: y3 });
48246
47710
  if (topLayerFrame) {
48247
47711
  const eligibleElements = filterElementsEligibleAsFrameChildren(
48248
47712
  newElements,
48249
47713
  topLayerFrame
48250
47714
  );
48251
- addElementsToFrame(nextElements, eligibleElements, topLayerFrame);
47715
+ addElementsToFrame(allElements, eligibleElements, topLayerFrame);
48252
47716
  }
48253
- this.scene.replaceAllElements(nextElements);
47717
+ this.scene.replaceAllElements(allElements);
48254
47718
  newElements.forEach((newElement2) => {
48255
47719
  if (isTextElement(newElement2) && isBoundToContainer(newElement2)) {
48256
47720
  const container = getContainerElement(
@@ -48438,7 +47902,18 @@ var App = class _App extends import_react96.default.Component {
48438
47902
  if (textElements.length === 0) {
48439
47903
  return;
48440
47904
  }
48441
- this.scene.insertElements(textElements);
47905
+ const frameId = textElements[0].frameId;
47906
+ if (frameId) {
47907
+ this.scene.insertElementsAtIndex(
47908
+ textElements,
47909
+ this.scene.getElementIndex(frameId)
47910
+ );
47911
+ } else {
47912
+ this.scene.replaceAllElements([
47913
+ ...this.scene.getElementsIncludingDeleted(),
47914
+ ...textElements
47915
+ ]);
47916
+ }
48442
47917
  this.setState({
48443
47918
  selectedElementIds: makeNextSelectedElementIds(
48444
47919
  Object.fromEntries(textElements.map((el) => [el.id, true])),
@@ -49301,7 +48776,7 @@ var App = class _App extends import_react96.default.Component {
49301
48776
  const containerIndex = this.scene.getElementIndex(container.id);
49302
48777
  this.scene.insertElementAtIndex(element, containerIndex + 1);
49303
48778
  } else {
49304
- this.scene.insertElement(element);
48779
+ this.scene.addNewElement(element);
49305
48780
  }
49306
48781
  }
49307
48782
  this.setState({
@@ -50693,7 +50168,7 @@ var App = class _App extends import_react96.default.Component {
50693
50168
  this.scene.getNonDeletedElements(),
50694
50169
  this.scene.getNonDeletedElementsMap()
50695
50170
  );
50696
- this.scene.insertElement(element);
50171
+ this.scene.addNewElement(element);
50697
50172
  this.setState({
50698
50173
  draggingElement: element,
50699
50174
  editingElement: element,
@@ -50728,7 +50203,10 @@ var App = class _App extends import_react96.default.Component {
50728
50203
  width,
50729
50204
  height
50730
50205
  });
50731
- this.scene.insertElement(element);
50206
+ this.scene.replaceAllElements([
50207
+ ...this.scene.getElementsIncludingDeleted(),
50208
+ element
50209
+ ]);
50732
50210
  return element;
50733
50211
  };
50734
50212
  //create rectangle element with youtube top left on nearest grid point width / hight 640/360
@@ -50769,7 +50247,10 @@ var App = class _App extends import_react96.default.Component {
50769
50247
  height: embedLink.intrinsicSize.h,
50770
50248
  link
50771
50249
  });
50772
- this.scene.insertElement(element);
50250
+ this.scene.replaceAllElements([
50251
+ ...this.scene.getElementsIncludingDeleted(),
50252
+ element
50253
+ ]);
50773
50254
  return element;
50774
50255
  };
50775
50256
  createImageElement = ({
@@ -50885,7 +50366,7 @@ var App = class _App extends import_react96.default.Component {
50885
50366
  this.scene.getNonDeletedElements(),
50886
50367
  this.scene.getNonDeletedElementsMap()
50887
50368
  );
50888
- this.scene.insertElement(element);
50369
+ this.scene.addNewElement(element);
50889
50370
  this.setState({
50890
50371
  draggingElement: element,
50891
50372
  editingElement: element,
@@ -50941,7 +50422,7 @@ var App = class _App extends import_react96.default.Component {
50941
50422
  draggingElement: element
50942
50423
  });
50943
50424
  } else {
50944
- this.scene.insertElement(element);
50425
+ this.scene.addNewElement(element);
50945
50426
  this.setState({
50946
50427
  multiElement: null,
50947
50428
  draggingElement: element,
@@ -50963,7 +50444,10 @@ var App = class _App extends import_react96.default.Component {
50963
50444
  ...FRAME_STYLE
50964
50445
  };
50965
50446
  const frame = type === TOOL_TYPE.magicframe ? newMagicFrameElement(constructorOpts) : newFrameElement(constructorOpts);
50966
- this.scene.insertElement(frame);
50447
+ this.scene.replaceAllElements([
50448
+ ...this.scene.getElementsIncludingDeleted(),
50449
+ frame
50450
+ ]);
50967
50451
  this.setState({
50968
50452
  multiElement: null,
50969
50453
  draggingElement: frame,
@@ -51251,7 +50735,6 @@ var App = class _App extends import_react96.default.Component {
51251
50735
  }
51252
50736
  }
51253
50737
  const nextSceneElements = [...nextElements, ...elementsToAppend];
51254
- syncMovedIndices(nextSceneElements, arrayToMap(elementsToAppend));
51255
50738
  bindTextToShapeAfterDuplication(
51256
50739
  nextElements,
51257
50740
  elementsToAppend,
@@ -52145,7 +51628,7 @@ var App = class _App extends import_react96.default.Component {
52145
51628
  this.setState({ errorMessage: t2("errors.imageToolNotSupported") });
52146
51629
  return;
52147
51630
  }
52148
- this.scene.insertElement(imageElement);
51631
+ this.scene.addNewElement(imageElement);
52149
51632
  try {
52150
51633
  return await this.initializeImage({
52151
51634
  imageFile,
@@ -53019,9 +52502,7 @@ var createTestHook = () => {
53019
52502
  return this.app?.scene.getElementsIncludingDeleted();
53020
52503
  },
53021
52504
  set(elements) {
53022
- return this.app?.scene.replaceAllElements(
53023
- syncInvalidIndices(elements)
53024
- );
52505
+ return this.app?.scene.replaceAllElements(elements);
53025
52506
  }
53026
52507
  }
53027
52508
  });
@@ -53556,7 +53037,7 @@ var ExcalidrawBase = (props) => {
53556
53037
  }
53557
53038
  (0, import_react97.useEffect)(() => {
53558
53039
  const importPolyfill = async () => {
53559
- await import("./roundRect-ZNZYUVWJ.js");
53040
+ await import("./roundRect-5HI6M3OA.js");
53560
53041
  };
53561
53042
  importPolyfill();
53562
53043
  const handleTouchMove = (event) => {
@@ -54314,10 +53795,7 @@ var getNonDeletedElements3 = (allElements) => {
54314
53795
  for (const element of allElements) {
54315
53796
  if (!element.isDeleted) {
54316
53797
  elements.push(element);
54317
- elementsMap.set(
54318
- element.id,
54319
- element
54320
- );
53798
+ elementsMap.set(element.id, element);
54321
53799
  }
54322
53800
  }
54323
53801
  return { elementsMap, elements };
@@ -54364,7 +53842,6 @@ var Scene = class _Scene {
54364
53842
  nonDeletedElementsMap = toBrandedType(
54365
53843
  /* @__PURE__ */ new Map()
54366
53844
  );
54367
- // ideally all elements within the scene should be wrapped around with `Ordered` type, but right now there is no real benefit doing so
54368
53845
  elements = [];
54369
53846
  nonDeletedFramesLikes = [];
54370
53847
  frames = [];
@@ -54456,15 +53933,9 @@ var Scene = class _Scene {
54456
53933
  return didChange;
54457
53934
  }
54458
53935
  replaceAllElements(nextElements) {
54459
- const _nextElements = (
54460
- // ts doesn't like `Array.isArray` of `instanceof Map`
54461
- nextElements instanceof Array ? nextElements : Array.from(nextElements.values())
54462
- );
53936
+ this.elements = // ts doesn't like `Array.isArray` of `instanceof Map`
53937
+ nextElements instanceof Array ? nextElements : Array.from(nextElements.values());
54463
53938
  const nextFrameLikes = [];
54464
- if (define_import_meta_env_default.DEV || define_import_meta_env_default.MODE === ENV.TEST) {
54465
- validateFractionalIndices(_nextElements.map((x3) => x3.index));
54466
- }
54467
- this.elements = syncInvalidIndices(_nextElements);
54468
53939
  this.elementsMap.clear();
54469
53940
  this.elements.forEach((element) => {
54470
53941
  if (isFrameLikeElement(element)) {
@@ -54499,8 +53970,8 @@ var Scene = class _Scene {
54499
53970
  };
54500
53971
  }
54501
53972
  destroy() {
54502
- this.elements = [];
54503
53973
  this.nonDeletedElements = [];
53974
+ this.elements = [];
54504
53975
  this.nonDeletedFramesLikes = [];
54505
53976
  this.frames = [];
54506
53977
  this.elementsMap.clear();
@@ -54525,7 +53996,6 @@ var Scene = class _Scene {
54525
53996
  element,
54526
53997
  ...this.elements.slice(index2)
54527
53998
  ];
54528
- syncMovedIndices(nextElements, arrayToMap([element]));
54529
53999
  this.replaceAllElements(nextElements);
54530
54000
  }
54531
54001
  insertElementsAtIndex(elements, index2) {
@@ -54539,16 +54009,14 @@ var Scene = class _Scene {
54539
54009
  ...elements,
54540
54010
  ...this.elements.slice(index2)
54541
54011
  ];
54542
- syncMovedIndices(nextElements, arrayToMap(elements));
54543
54012
  this.replaceAllElements(nextElements);
54544
54013
  }
54545
- insertElement = (element) => {
54546
- const index2 = element.frameId ? this.getElementIndex(element.frameId) : this.elements.length;
54547
- this.insertElementAtIndex(element, index2);
54548
- };
54549
- insertElements = (elements) => {
54550
- const index2 = elements[0].frameId ? this.getElementIndex(elements[0].frameId) : this.elements.length;
54551
- this.insertElementsAtIndex(elements, index2);
54014
+ addNewElement = (element) => {
54015
+ if (element.frameId) {
54016
+ this.insertElementAtIndex(element, this.getElementIndex(element.frameId));
54017
+ } else {
54018
+ this.replaceAllElements([...this.elements, element]);
54019
+ }
54552
54020
  };
54553
54021
  getElementIndex(elementId) {
54554
54022
  return this.elements.findIndex((element) => element.id === elementId);
@@ -54997,7 +54465,7 @@ var parseFileContents = async (blob) => {
54997
54465
  let contents;
54998
54466
  if (blob.type === MIME_TYPES.png) {
54999
54467
  try {
55000
- return await (await import("./image-J27XZPQC.js")).decodePngMetadata(blob);
54468
+ return await (await import("./image-DG6G3CCZ.js")).decodePngMetadata(blob);
55001
54469
  } catch (error) {
55002
54470
  if (error.message === "INVALID") {
55003
54471
  throw new ImageSceneDataError(
@@ -55024,7 +54492,7 @@ var parseFileContents = async (blob) => {
55024
54492
  }
55025
54493
  if (blob.type === MIME_TYPES.svg) {
55026
54494
  try {
55027
- return await (await import("./image-J27XZPQC.js")).decodeSvgMetadata({
54495
+ return await (await import("./image-DG6G3CCZ.js")).decodeSvgMetadata({
55028
54496
  svg: contents
55029
54497
  });
55030
54498
  } catch (error) {
@@ -55187,9 +54655,9 @@ var resizeImageFile = async (file2, opts) => {
55187
54655
  return file2;
55188
54656
  }
55189
54657
  const [pica, imageBlobReduce] = await Promise.all([
55190
- import("./pica-GXUQBC7B.js").then((res) => res.default),
54658
+ import("./pica-RRHXYZO2.js").then((res) => res.default),
55191
54659
  // a wrapper for pica for better API
55192
- import("./image-blob-reduce.esm-BDWVJKFQ.js").then((res) => res.default)
54660
+ import("./image-blob-reduce.esm-OJYOZNL4.js").then((res) => res.default)
55193
54661
  ]);
55194
54662
  const reduce = imageBlobReduce({
55195
54663
  pica: pica({ features: ["js", "wasm"] })
@@ -55589,4 +55057,4 @@ use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.developme
55589
55057
  * LICENSE file in the root directory of this source tree.
55590
55058
  *)
55591
55059
  */
55592
- //# sourceMappingURL=chunk-FG5PX37Z.js.map
55060
+ //# sourceMappingURL=chunk-7ZK24NYG.js.map