@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
@@ -11,7 +11,7 @@ import { actions } from "../actions/register";
11
11
  import { trackEvent } from "../analytics";
12
12
  import { getDefaultAppState, isEraserActive, isHandToolActive, } from "../appState";
13
13
  import { copyTextToSystemClipboard, parseClipboard, } from "../clipboard";
14
- import { APP_NAME, CURSOR_TYPE, DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT, DEFAULT_VERTICAL_ALIGN, DRAGGING_THRESHOLD, ELEMENT_SHIFT_TRANSLATE_AMOUNT, ELEMENT_TRANSLATE_AMOUNT, ENV, EVENT, FRAME_STYLE, GRID_SIZE, IMAGE_MIME_TYPES, IMAGE_RENDER_TIMEOUT, isBrave, LINE_CONFIRM_THRESHOLD, MAX_ALLOWED_FILE_BYTES, MIME_TYPES, MQ_MAX_HEIGHT_LANDSCAPE, MQ_MAX_WIDTH_LANDSCAPE, MQ_MAX_WIDTH_PORTRAIT, MQ_RIGHT_SIDEBAR_MIN_WIDTH, POINTER_BUTTON, ROUNDNESS, SCROLL_TIMEOUT, TAP_TWICE_TIMEOUT, TEXT_TO_CENTER_SNAP_THRESHOLD, THEME, THEME_FILTER, TOUCH_CTX_MENU_TIMEOUT, VERTICAL_ALIGN, YOUTUBE_STATES, ZOOM_STEP, POINTER_EVENTS, TOOL_TYPE, EDITOR_LS_KEYS, isIOS, supportsResizeObserver, } from "../constants";
14
+ import { APP_NAME, CURSOR_TYPE, DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT, DEFAULT_VERTICAL_ALIGN, DRAGGING_THRESHOLD, ELEMENT_SHIFT_TRANSLATE_AMOUNT, ELEMENT_TRANSLATE_AMOUNT, ENV, EVENT, FRAME_STYLE, GRID_SIZE, IMAGE_MIME_TYPES, IMAGE_RENDER_TIMEOUT, isBrave, LINE_CONFIRM_THRESHOLD, MAX_ALLOWED_FILE_BYTES, MIME_TYPES, MQ_MAX_HEIGHT_LANDSCAPE, MQ_MAX_WIDTH_LANDSCAPE, MQ_MAX_WIDTH_PORTRAIT, MQ_RIGHT_SIDEBAR_MIN_WIDTH, POINTER_BUTTON, ROUNDNESS, SCROLL_TIMEOUT, TAP_TWICE_TIMEOUT, TEXT_TO_CENTER_SNAP_THRESHOLD, THEME, THEME_FILTER, TOUCH_CTX_MENU_TIMEOUT, VERTICAL_ALIGN, YOUTUBE_STATES, ZOOM_STEP, POINTER_EVENTS, TOOL_TYPE, EDITOR_LS_KEYS, isIOS, } from "../constants";
15
15
  import { exportAsImage, loadFromBlob } from "../data";
16
16
  import Library, { distributeLibraryItemsOnSquareGrid } from "../data/library";
17
17
  import { restore, restoreElements } from "../data/restore";
@@ -33,7 +33,7 @@ import { calculateScrollCenter, getElementsAtPosition, getElementsWithinSelectio
33
33
  import Scene from "../scene/Scene";
34
34
  import { getStateForZoom } from "../scene/zoom";
35
35
  import { findShapeByKey } from "../shapes";
36
- import { debounce, distance, getFontString, getNearestScrollableContainer, isInputLike, isToolIcon, isWritableElement, sceneCoordsToViewportCoords, tupleToCoors, viewportCoordsToSceneCoords, wrapEvent, updateObject, updateActiveTool, getShortcutKey, isTransparent, easeToValuesRAF, muteFSAbortError, isTestEnv, easeOut, arrayToMap, updateStable, addEventListener, normalizeEOL, getDateTime, } from "../utils";
36
+ import { debounce, distance, getFontString, getNearestScrollableContainer, isInputLike, isToolIcon, isWritableElement, sceneCoordsToViewportCoords, tupleToCoors, viewportCoordsToSceneCoords, wrapEvent, updateObject, updateActiveTool, getShortcutKey, isTransparent, easeToValuesRAF, muteFSAbortError, isTestEnv, easeOut, updateStable, addEventListener, normalizeEOL, getDateTime, } from "../utils";
37
37
  import { createSrcDoc, embeddableURLValidator, maybeParseEmbedSrc, getEmbedLink, } from "../element/embeddable";
38
38
  import { ContextMenu, CONTEXT_MENU_SEPARATOR, } from "./ContextMenu";
39
39
  import LayerUI from "./LayerUI";
@@ -85,7 +85,6 @@ import { withBatchedUpdates, withBatchedUpdatesThrottled } from "../reactUtils";
85
85
  import { getRenderOpacity } from "../renderer/renderElement";
86
86
  import { textWysiwyg } from "../element/textWysiwyg";
87
87
  import { isOverScrollBars } from "../scene/scrollbars";
88
- import { syncInvalidIndices, syncMovedIndices } from "../fractionalIndex";
89
88
  import { isPointHittingLink, isPointHittingLinkIcon, } from "./hyperlink/helpers";
90
89
  const AppContext = React.createContext(null);
91
90
  const AppPropsContext = React.createContext(null);
@@ -128,6 +127,7 @@ export const useExcalidrawElements = () => useContext(ExcalidrawElementsContext)
128
127
  export const useExcalidrawAppState = () => useContext(ExcalidrawAppStateContext);
129
128
  export const useExcalidrawSetAppState = () => useContext(ExcalidrawSetAppStateContext);
130
129
  export const useExcalidrawActionManager = () => useContext(ExcalidrawActionManagerContext);
130
+ const supportsResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
131
131
  let didTapTwice = false;
132
132
  let tappedTwiceTimer = 0;
133
133
  let isHoldingSpace = false;
@@ -1139,7 +1139,7 @@ class App extends React.Component {
1139
1139
  opacity: 100,
1140
1140
  locked: false,
1141
1141
  });
1142
- this.scene.insertElement(frame);
1142
+ this.scene.addNewElement(frame);
1143
1143
  for (const child of selectedElements) {
1144
1144
  mutateElement(child, { frameId: frame.id });
1145
1145
  }
@@ -1952,15 +1952,16 @@ class App extends React.Component {
1952
1952
  }), {
1953
1953
  randomizeSeed: !opts.retainSeed,
1954
1954
  });
1955
- const prevElements = this.scene.getElementsIncludingDeleted();
1956
- const nextElements = [...prevElements, ...newElements];
1957
- syncMovedIndices(nextElements, arrayToMap(newElements));
1955
+ const allElements = [
1956
+ ...this.scene.getElementsIncludingDeleted(),
1957
+ ...newElements,
1958
+ ];
1958
1959
  const topLayerFrame = this.getTopLayerFrameAtSceneCoords({ x, y });
1959
1960
  if (topLayerFrame) {
1960
1961
  const eligibleElements = filterElementsEligibleAsFrameChildren(newElements, topLayerFrame);
1961
- addElementsToFrame(nextElements, eligibleElements, topLayerFrame);
1962
+ addElementsToFrame(allElements, eligibleElements, topLayerFrame);
1962
1963
  }
1963
- this.scene.replaceAllElements(nextElements);
1964
+ this.scene.replaceAllElements(allElements);
1964
1965
  newElements.forEach((newElement) => {
1965
1966
  if (isTextElement(newElement) && isBoundToContainer(newElement)) {
1966
1967
  const container = getContainerElement(newElement, this.scene.getElementsMapIncludingDeleted());
@@ -2128,7 +2129,16 @@ class App extends React.Component {
2128
2129
  if (textElements.length === 0) {
2129
2130
  return;
2130
2131
  }
2131
- this.scene.insertElements(textElements);
2132
+ const frameId = textElements[0].frameId;
2133
+ if (frameId) {
2134
+ this.scene.insertElementsAtIndex(textElements, this.scene.getElementIndex(frameId));
2135
+ }
2136
+ else {
2137
+ this.scene.replaceAllElements([
2138
+ ...this.scene.getElementsIncludingDeleted(),
2139
+ ...textElements,
2140
+ ]);
2141
+ }
2132
2142
  this.setState({
2133
2143
  selectedElementIds: makeNextSelectedElementIds(Object.fromEntries(textElements.map((el) => [el.id, true])), this.state),
2134
2144
  });
@@ -3012,7 +3022,7 @@ class App extends React.Component {
3012
3022
  this.scene.insertElementAtIndex(element, containerIndex + 1);
3013
3023
  }
3014
3024
  else {
3015
- this.scene.insertElement(element);
3025
+ this.scene.addNewElement(element);
3016
3026
  }
3017
3027
  }
3018
3028
  this.setState({
@@ -4308,7 +4318,7 @@ class App extends React.Component {
4308
4318
  pressures,
4309
4319
  });
4310
4320
  const boundElement = getHoveredElementForBinding(pointerDownState.origin, this.scene.getNonDeletedElements(), this.scene.getNonDeletedElementsMap());
4311
- this.scene.insertElement(element);
4321
+ this.scene.addNewElement(element);
4312
4322
  this.setState({
4313
4323
  draggingElement: element,
4314
4324
  editingElement: element,
@@ -4336,7 +4346,10 @@ class App extends React.Component {
4336
4346
  width,
4337
4347
  height,
4338
4348
  });
4339
- this.scene.insertElement(element);
4349
+ this.scene.replaceAllElements([
4350
+ ...this.scene.getElementsIncludingDeleted(),
4351
+ element,
4352
+ ]);
4340
4353
  return element;
4341
4354
  };
4342
4355
  //create rectangle element with youtube top left on nearest grid point width / hight 640/360
@@ -4371,7 +4384,10 @@ class App extends React.Component {
4371
4384
  height: embedLink.intrinsicSize.h,
4372
4385
  link,
4373
4386
  });
4374
- this.scene.insertElement(element);
4387
+ this.scene.replaceAllElements([
4388
+ ...this.scene.getElementsIncludingDeleted(),
4389
+ element,
4390
+ ]);
4375
4391
  return element;
4376
4392
  };
4377
4393
  createImageElement = ({ sceneX, sceneY, addToFrameUnderCursor = true, }) => {
@@ -4480,7 +4496,7 @@ class App extends React.Component {
4480
4496
  points: [...element.points, [0, 0]],
4481
4497
  });
4482
4498
  const boundElement = getHoveredElementForBinding(pointerDownState.origin, this.scene.getNonDeletedElements(), this.scene.getNonDeletedElementsMap());
4483
- this.scene.insertElement(element);
4499
+ this.scene.addNewElement(element);
4484
4500
  this.setState({
4485
4501
  draggingElement: element,
4486
4502
  editingElement: element,
@@ -4540,7 +4556,7 @@ class App extends React.Component {
4540
4556
  });
4541
4557
  }
4542
4558
  else {
4543
- this.scene.insertElement(element);
4559
+ this.scene.addNewElement(element);
4544
4560
  this.setState({
4545
4561
  multiElement: null,
4546
4562
  draggingElement: element,
@@ -4562,7 +4578,10 @@ class App extends React.Component {
4562
4578
  const frame = type === TOOL_TYPE.magicframe
4563
4579
  ? newMagicFrameElement(constructorOpts)
4564
4580
  : newFrameElement(constructorOpts);
4565
- this.scene.insertElement(frame);
4581
+ this.scene.replaceAllElements([
4582
+ ...this.scene.getElementsIncludingDeleted(),
4583
+ frame,
4584
+ ]);
4566
4585
  this.setState({
4567
4586
  multiElement: null,
4568
4587
  draggingElement: frame,
@@ -4820,7 +4839,6 @@ class App extends React.Component {
4820
4839
  }
4821
4840
  }
4822
4841
  const nextSceneElements = [...nextElements, ...elementsToAppend];
4823
- syncMovedIndices(nextSceneElements, arrayToMap(elementsToAppend));
4824
4842
  bindTextToShapeAfterDuplication(nextElements, elementsToAppend, oldIdToDuplicatedId);
4825
4843
  fixBindingsAfterDuplication(nextSceneElements, elementsToAppend, oldIdToDuplicatedId, "duplicatesServeAsOld");
4826
4844
  bindElementsToFramesAfterDuplication(nextSceneElements, elementsToAppend, oldIdToDuplicatedId);
@@ -5593,7 +5611,7 @@ class App extends React.Component {
5593
5611
  this.setState({ errorMessage: t("errors.imageToolNotSupported") });
5594
5612
  return;
5595
5613
  }
5596
- this.scene.insertElement(imageElement);
5614
+ this.scene.addNewElement(imageElement);
5597
5615
  try {
5598
5616
  return await this.initializeImage({
5599
5617
  imageFile,
@@ -6365,7 +6383,7 @@ export const createTestHook = () => {
6365
6383
  return this.app?.scene.getElementsIncludingDeleted();
6366
6384
  },
6367
6385
  set(elements) {
6368
- return this.app?.scene.replaceAllElements(syncInvalidIndices(elements));
6386
+ return this.app?.scene.replaceAllElements(elements);
6369
6387
  },
6370
6388
  },
6371
6389
  });
@@ -5,7 +5,8 @@ type AvatarProps = {
5
5
  color: string;
6
6
  name: string;
7
7
  src?: string;
8
- className?: string;
8
+ isBeingFollowed?: boolean;
9
+ isCurrentUser: boolean;
9
10
  };
10
- export declare const Avatar: ({ color, onClick, name, src, className, }: AvatarProps) => JSX.Element;
11
+ export declare const Avatar: ({ color, onClick, name, src, isBeingFollowed, isCurrentUser, }: AvatarProps) => JSX.Element;
11
12
  export {};
@@ -3,10 +3,13 @@ import "./Avatar.scss";
3
3
  import { useState } from "react";
4
4
  import { getNameInitial } from "../clients";
5
5
  import clsx from "clsx";
6
- export const Avatar = ({ color, onClick, name, src, className, }) => {
6
+ export const Avatar = ({ color, onClick, name, src, isBeingFollowed, isCurrentUser, }) => {
7
7
  const shortName = getNameInitial(name);
8
8
  const [error, setError] = useState(false);
9
9
  const loadImg = !error && src;
10
10
  const style = loadImg ? undefined : { background: color };
11
- return (_jsx("div", { className: clsx("Avatar", className), style: style, onClick: onClick, children: loadImg ? (_jsx("img", { className: "Avatar-img", src: src, alt: shortName, referrerPolicy: "no-referrer", onError: () => setError(true) })) : (shortName) }));
11
+ return (_jsx("div", { className: clsx("Avatar", {
12
+ "Avatar--is-followed": isBeingFollowed,
13
+ "Avatar--is-current-user": isCurrentUser,
14
+ }), style: style, onClick: onClick, children: loadImg ? (_jsx("img", { className: "Avatar-img", src: src, alt: shortName, referrerPolicy: "no-referrer", onError: () => setError(true) })) : (shortName) }));
12
15
  };
@@ -2,17 +2,21 @@ import "./UserList.scss";
2
2
  import React from "react";
3
3
  import { Collaborator, SocketId } from "../types";
4
4
  export type GoToCollaboratorComponentProps = {
5
- socketId: SocketId;
5
+ clientId: ClientId;
6
6
  collaborator: Collaborator;
7
7
  withName: boolean;
8
8
  isBeingFollowed: boolean;
9
9
  };
10
- type UserListUserObject = Pick<Collaborator, "avatarUrl" | "id" | "socketId" | "username" | "isInCall" | "isSpeaking" | "isMuted">;
10
+ /** collaborator user id or socket id (fallback) */
11
+ type ClientId = string & {
12
+ _brand: "UserId";
13
+ };
14
+ type UserListUserObject = Pick<Collaborator, "avatarUrl" | "id" | "socketId" | "username">;
11
15
  type UserListProps = {
12
16
  className?: string;
13
17
  mobile?: boolean;
14
18
  collaborators: Map<SocketId, UserListUserObject>;
15
19
  userToFollow: SocketId | null;
16
20
  };
17
- export declare const UserList: React.MemoExoticComponent<({ className, mobile, collaborators, userToFollow }: UserListProps) => JSX.Element>;
21
+ export declare const UserList: React.MemoExoticComponent<({ className, mobile, collaborators, userToFollow }: UserListProps) => JSX.Element | null>;
18
22
  export {};
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import "./UserList.scss";
3
- import React, { useLayoutEffect } from "react";
3
+ import React from "react";
4
4
  import clsx from "clsx";
5
5
  import { Tooltip } from "./Tooltip";
6
6
  import { useExcalidrawActionManager } from "./App";
@@ -9,28 +9,24 @@ import { Island } from "./Island";
9
9
  import { searchIcon } from "./icons";
10
10
  import { t } from "../i18n";
11
11
  import { isShallowEqual } from "../utils";
12
- import { supportsResizeObserver } from "../constants";
13
- const DEFAULT_MAX_AVATARS = 4;
12
+ const FIRST_N_AVATARS = 3;
14
13
  const SHOW_COLLABORATORS_FILTER_AT = 8;
15
- const ConditionalTooltipWrapper = ({ shouldWrap, children, username, }) => shouldWrap ? (_jsx(Tooltip, { label: username || "Unknown user", children: children })) : (_jsx(React.Fragment, { children: children }));
16
- const renderCollaborator = ({ actionManager, collaborator, socketId, withName = false, shouldWrapWithTooltip = false, isBeingFollowed, }) => {
14
+ const ConditionalTooltipWrapper = ({ shouldWrap, children, clientId, username, }) => shouldWrap ? (_jsx(Tooltip, { label: username || "Unknown user", children: children }, clientId)) : (_jsx(React.Fragment, { children: children }, clientId));
15
+ const renderCollaborator = ({ actionManager, collaborator, clientId, withName = false, shouldWrapWithTooltip = false, isBeingFollowed, }) => {
17
16
  const data = {
18
- socketId,
17
+ clientId,
19
18
  collaborator,
20
19
  withName,
21
20
  isBeingFollowed,
22
21
  };
23
22
  const avatarJSX = actionManager.renderAction("goToCollaborator", data);
24
- return (_jsx(ConditionalTooltipWrapper, { username: collaborator.username, shouldWrap: shouldWrapWithTooltip, children: avatarJSX }, socketId));
23
+ return (_jsx(ConditionalTooltipWrapper, { clientId: clientId, username: collaborator.username, shouldWrap: shouldWrapWithTooltip, children: avatarJSX }, clientId));
25
24
  };
26
25
  const collaboratorComparatorKeys = [
27
26
  "avatarUrl",
28
27
  "id",
29
28
  "socketId",
30
29
  "username",
31
- "isInCall",
32
- "isSpeaking",
33
- "isMuted",
34
30
  ];
35
31
  export const UserList = React.memo(({ className, mobile, collaborators, userToFollow }) => {
36
32
  const actionManager = useExcalidrawActionManager();
@@ -41,68 +37,47 @@ export const UserList = React.memo(({ className, mobile, collaborators, userToFo
41
37
  // filter on user id, else fall back on unique socketId
42
38
  userId, { ...collaborator, socketId });
43
39
  });
44
- const uniqueCollaboratorsArray = Array.from(uniqueCollaboratorsMap.values()).filter((collaborator) => collaborator.username?.trim());
40
+ const uniqueCollaboratorsArray = Array.from(uniqueCollaboratorsMap).filter(([_, collaborator]) => collaborator.username?.trim());
45
41
  const [searchTerm, setSearchTerm] = React.useState("");
46
- const userListWrapper = React.useRef(null);
47
- useLayoutEffect(() => {
48
- if (userListWrapper.current) {
49
- const updateMaxAvatars = (width) => {
50
- const maxAvatars = Math.max(1, Math.min(8, Math.floor(width / 38)));
51
- setMaxAvatars(maxAvatars);
52
- };
53
- updateMaxAvatars(userListWrapper.current.clientWidth);
54
- if (!supportsResizeObserver) {
55
- return;
56
- }
57
- const resizeObserver = new ResizeObserver((entries) => {
58
- for (const entry of entries) {
59
- const { width } = entry.contentRect;
60
- updateMaxAvatars(width);
61
- }
62
- });
63
- resizeObserver.observe(userListWrapper.current);
64
- return () => {
65
- resizeObserver.disconnect();
66
- };
67
- }
68
- }, []);
69
- const [maxAvatars, setMaxAvatars] = React.useState(DEFAULT_MAX_AVATARS);
42
+ if (uniqueCollaboratorsArray.length === 0) {
43
+ return null;
44
+ }
70
45
  const searchTermNormalized = searchTerm.trim().toLowerCase();
71
46
  const filteredCollaborators = searchTermNormalized
72
- ? uniqueCollaboratorsArray.filter((collaborator) => collaborator.username?.toLowerCase().includes(searchTerm))
47
+ ? uniqueCollaboratorsArray.filter(([, collaborator]) => collaborator.username?.toLowerCase().includes(searchTerm))
73
48
  : uniqueCollaboratorsArray;
74
- const firstNCollaborators = uniqueCollaboratorsArray.slice(0, maxAvatars - 1);
75
- const firstNAvatarsJSX = firstNCollaborators.map((collaborator) => renderCollaborator({
49
+ const firstNCollaborators = uniqueCollaboratorsArray.slice(0, FIRST_N_AVATARS);
50
+ const firstNAvatarsJSX = firstNCollaborators.map(([clientId, collaborator]) => renderCollaborator({
76
51
  actionManager,
77
52
  collaborator,
78
- socketId: collaborator.socketId,
53
+ clientId,
79
54
  shouldWrapWithTooltip: true,
80
55
  isBeingFollowed: collaborator.socketId === userToFollow,
81
56
  }));
82
- return mobile ? (_jsx("div", { className: clsx("UserList UserList_mobile", className), children: uniqueCollaboratorsArray.map((collaborator) => renderCollaborator({
57
+ return mobile ? (_jsx("div", { className: clsx("UserList UserList_mobile", className), children: uniqueCollaboratorsArray.map(([clientId, collaborator]) => renderCollaborator({
83
58
  actionManager,
84
59
  collaborator,
85
- socketId: collaborator.socketId,
60
+ clientId,
86
61
  shouldWrapWithTooltip: true,
87
62
  isBeingFollowed: collaborator.socketId === userToFollow,
88
- })) })) : (_jsx("div", { className: "UserList-wrapper", ref: userListWrapper, children: _jsxs("div", { className: clsx("UserList", className), style: { [`--max-avatars`]: maxAvatars }, children: [firstNAvatarsJSX, uniqueCollaboratorsArray.length > maxAvatars - 1 && (_jsxs(Popover.Root, { onOpenChange: (isOpen) => {
89
- if (!isOpen) {
90
- setSearchTerm("");
91
- }
92
- }, children: [_jsxs(Popover.Trigger, { className: "UserList__more", children: ["+", uniqueCollaboratorsArray.length - maxAvatars + 1] }), _jsx(Popover.Content, { style: {
93
- zIndex: 2,
94
- width: "15rem",
95
- textAlign: "left",
96
- }, align: "end", sideOffset: 10, children: _jsxs(Island, { style: { overflow: "hidden" }, children: [uniqueCollaboratorsArray.length >=
97
- SHOW_COLLABORATORS_FILTER_AT && (_jsxs("div", { className: "UserList__search-wrapper", children: [searchIcon, _jsx("input", { className: "UserList__search", type: "text", placeholder: t("userList.search.placeholder"), value: searchTerm, onChange: (e) => {
98
- setSearchTerm(e.target.value);
99
- } })] })), _jsxs("div", { className: "dropdown-menu UserList__collaborators", children: [filteredCollaborators.length === 0 && (_jsx("div", { className: "UserList__collaborators__empty", children: t("userList.search.empty") })), _jsx("div", { className: "UserList__hint", children: t("userList.hint.text") }), filteredCollaborators.map((collaborator) => renderCollaborator({
100
- actionManager,
101
- collaborator,
102
- socketId: collaborator.socketId,
103
- withName: true,
104
- isBeingFollowed: collaborator.socketId === userToFollow,
105
- }))] })] }) })] }))] }) }));
63
+ })) })) : (_jsxs("div", { className: clsx("UserList", className), children: [firstNAvatarsJSX, uniqueCollaboratorsArray.length > FIRST_N_AVATARS && (_jsxs(Popover.Root, { onOpenChange: (isOpen) => {
64
+ if (!isOpen) {
65
+ setSearchTerm("");
66
+ }
67
+ }, children: [_jsxs(Popover.Trigger, { className: "UserList__more", children: ["+", uniqueCollaboratorsArray.length - FIRST_N_AVATARS] }), _jsx(Popover.Content, { style: {
68
+ zIndex: 2,
69
+ width: "13rem",
70
+ textAlign: "left",
71
+ }, align: "end", sideOffset: 10, children: _jsxs(Island, { style: { overflow: "hidden" }, children: [uniqueCollaboratorsArray.length >=
72
+ SHOW_COLLABORATORS_FILTER_AT && (_jsxs("div", { className: "UserList__search-wrapper", children: [searchIcon, _jsx("input", { className: "UserList__search", type: "text", placeholder: t("userList.search.placeholder"), value: searchTerm, onChange: (e) => {
73
+ setSearchTerm(e.target.value);
74
+ } })] })), _jsxs("div", { className: "dropdown-menu UserList__collaborators", children: [filteredCollaborators.length === 0 && (_jsx("div", { className: "UserList__collaborators__empty", children: t("userList.search.empty") })), _jsx("div", { className: "UserList__hint", children: t("userList.hint.text") }), filteredCollaborators.map(([clientId, collaborator]) => renderCollaborator({
75
+ actionManager,
76
+ collaborator,
77
+ clientId,
78
+ withName: true,
79
+ isBeingFollowed: collaborator.socketId === userToFollow,
80
+ }))] })] }) })] }))] }));
106
81
  }, (prev, next) => {
107
82
  if (prev.collaborators.size !== next.collaborators.size ||
108
83
  prev.mobile !== next.mobile ||
@@ -110,13 +85,9 @@ export const UserList = React.memo(({ className, mobile, collaborators, userToFo
110
85
  prev.userToFollow !== next.userToFollow) {
111
86
  return false;
112
87
  }
113
- const nextCollaboratorSocketIds = next.collaborators.keys();
114
88
  for (const [socketId, collaborator] of prev.collaborators) {
115
89
  const nextCollaborator = next.collaborators.get(socketId);
116
90
  if (!nextCollaborator ||
117
- // this checks order of collaborators in the map is the same
118
- // as previous render
119
- socketId !== nextCollaboratorSocketIds.next().value ||
120
91
  !isShallowEqual(collaborator, nextCollaborator, collaboratorComparatorKeys)) {
121
92
  return false;
122
93
  }
@@ -12,34 +12,37 @@ const InteractiveCanvas = (props) => {
12
12
  isComponentMounted.current = true;
13
13
  return;
14
14
  }
15
- const remotePointerButton = new Map();
16
- const remotePointerViewportCoords = new Map();
17
- const remoteSelectedElementIds = new Map();
18
- const remotePointerUsernames = new Map();
19
- const remotePointerUserStates = new Map();
15
+ const cursorButton = {};
16
+ const pointerViewportCoords = {};
17
+ const remoteSelectedElementIds = {};
18
+ const pointerUsernames = {};
19
+ const pointerUserStates = {};
20
20
  props.appState.collaborators.forEach((user, socketId) => {
21
21
  if (user.selectedElementIds) {
22
22
  for (const id of Object.keys(user.selectedElementIds)) {
23
- if (!remoteSelectedElementIds.has(id)) {
24
- remoteSelectedElementIds.set(id, []);
23
+ if (!(id in remoteSelectedElementIds)) {
24
+ remoteSelectedElementIds[id] = [];
25
25
  }
26
- remoteSelectedElementIds.get(id).push(socketId);
26
+ remoteSelectedElementIds[id].push(socketId);
27
27
  }
28
28
  }
29
29
  if (!user.pointer || user.pointer.renderCursor === false) {
30
30
  return;
31
31
  }
32
32
  if (user.username) {
33
- remotePointerUsernames.set(socketId, user.username);
33
+ pointerUsernames[socketId] = user.username;
34
34
  }
35
35
  if (user.userState) {
36
- remotePointerUserStates.set(socketId, user.userState);
36
+ pointerUserStates[socketId] = user.userState;
37
37
  }
38
- remotePointerViewportCoords.set(socketId, sceneCoordsToViewportCoords({
39
- sceneX: user.pointer.x,
40
- sceneY: user.pointer.y,
41
- }, props.appState));
42
- remotePointerButton.set(socketId, user.button);
38
+ pointerViewportCoords[socketId] = {
39
+ ...sceneCoordsToViewportCoords({
40
+ sceneX: user.pointer.x,
41
+ sceneY: user.pointer.y,
42
+ }, props.appState),
43
+ id: user.id || socketId,
44
+ };
45
+ cursorButton[socketId] = user.button;
43
46
  });
44
47
  const selectionColor = (props.containerRef?.current &&
45
48
  getComputedStyle(props.containerRef.current).getPropertyValue("--color-selection")) ||
@@ -52,11 +55,11 @@ const InteractiveCanvas = (props) => {
52
55
  scale: window.devicePixelRatio,
53
56
  appState: props.appState,
54
57
  renderConfig: {
55
- remotePointerViewportCoords,
56
- remotePointerButton,
58
+ remotePointerViewportCoords: pointerViewportCoords,
59
+ remotePointerButton: cursorButton,
57
60
  remoteSelectedElementIds,
58
- remotePointerUsernames,
59
- remotePointerUserStates,
61
+ remotePointerUsernames: pointerUsernames,
62
+ remotePointerUserStates: pointerUserStates,
60
63
  selectionColor,
61
64
  renderScrollbars: false,
62
65
  },
@@ -173,6 +173,4 @@ export declare const eyeIcon: JSX.Element;
173
173
  export declare const eyeClosedIcon: JSX.Element;
174
174
  export declare const brainIcon: JSX.Element;
175
175
  export declare const searchIcon: JSX.Element;
176
- export declare const microphoneIcon: JSX.Element;
177
- export declare const microphoneMutedIcon: JSX.Element;
178
176
  export {};
@@ -215,9 +215,7 @@ export const laserPointerToolIcon = createIcon(_jsxs("g", { fill: "none", stroke
215
215
  export const MagicIcon = createIcon(_jsxs("g", { stroke: "currentColor", fill: "none", children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z" }), _jsx("path", { d: "M6 21l15 -15l-3 -3l-15 15l3 3" }), _jsx("path", { d: "M15 6l3 3" }), _jsx("path", { d: "M9 3a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2" }), _jsx("path", { d: "M19 13a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2" })] }), tablerIconProps);
216
216
  export const OpenAIIcon = createIcon(_jsxs("g", { stroke: "currentColor", fill: "none", children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M11.217 19.384a3.501 3.501 0 0 0 6.783 -1.217v-5.167l-6 -3.35" }), _jsx("path", { d: "M5.214 15.014a3.501 3.501 0 0 0 4.446 5.266l4.34 -2.534v-6.946" }), _jsx("path", { d: "M6 7.63c-1.391 -.236 -2.787 .395 -3.534 1.689a3.474 3.474 0 0 0 1.271 4.745l4.263 2.514l6 -3.348" }), _jsx("path", { d: "M12.783 4.616a3.501 3.501 0 0 0 -6.783 1.217v5.067l6 3.45" }), _jsx("path", { d: "M18.786 8.986a3.501 3.501 0 0 0 -4.446 -5.266l-4.34 2.534v6.946" }), _jsx("path", { d: "M18 16.302c1.391 .236 2.787 -.395 3.534 -1.689a3.474 3.474 0 0 0 -1.271 -4.745l-4.308 -2.514l-5.955 3.42" })] }), tablerIconProps);
217
217
  export const fullscreenIcon = createIcon(_jsxs("g", { stroke: "currentColor", fill: "none", children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M4 8v-2a2 2 0 0 1 2 -2h2" }), _jsx("path", { d: "M4 16v2a2 2 0 0 0 2 2h2" }), _jsx("path", { d: "M16 4h2a2 2 0 0 1 2 2v2" }), _jsx("path", { d: "M16 20h2a2 2 0 0 0 2 -2v-2" })] }), tablerIconProps);
218
- export const eyeIcon = createIcon(_jsxs("g", { stroke: "currentColor", fill: "none", strokeWidth: 1.5, children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" }), _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" })] }), tablerIconProps);
218
+ export const eyeIcon = createIcon(_jsxs("g", { stroke: "currentColor", fill: "none", children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" }), _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" })] }), tablerIconProps);
219
219
  export const eyeClosedIcon = createIcon(_jsxs("g", { stroke: "currentColor", fill: "none", children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M10.585 10.587a2 2 0 0 0 2.829 2.828" }), _jsx("path", { d: "M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87" }), _jsx("path", { d: "M3 3l18 18" })] }), tablerIconProps);
220
220
  export const brainIcon = createIcon(_jsxs("g", { stroke: "currentColor", fill: "none", children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8" }), _jsx("path", { d: "M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8" }), _jsx("path", { d: "M17.5 16a3.5 3.5 0 0 0 0 -7h-.5" }), _jsx("path", { d: "M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0" }), _jsx("path", { d: "M6.5 16a3.5 3.5 0 0 1 0 -7h.5" }), _jsx("path", { d: "M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10" })] }), tablerIconProps);
221
221
  export const searchIcon = createIcon(_jsxs("g", { strokeWidth: 1.5, children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" }), _jsx("path", { d: "M21 21l-6 -6" })] }), tablerIconProps);
222
- export const microphoneIcon = createIcon(_jsxs("g", { strokeWidth: 1.5, children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _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" }), _jsx("path", { d: "M5 10a7 7 0 0 0 14 0" }), _jsx("path", { d: "M8 21l8 0" }), _jsx("path", { d: "M12 17l0 4" })] }), tablerIconProps);
223
- export const microphoneMutedIcon = createIcon(_jsxs("g", { strokeWidth: 1.5, children: [_jsx("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), _jsx("path", { d: "M3 3l18 18" }), _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" }), _jsx("path", { d: "M5 10a7 7 0 0 0 10.846 5.85m2 -2a6.967 6.967 0 0 0 1.152 -3.85" }), _jsx("path", { d: "M8 21l8 0" }), _jsx("path", { d: "M12 17l0 4" })] }), tablerIconProps);
@@ -8,7 +8,6 @@ export declare const isChrome: boolean;
8
8
  export declare const isSafari: boolean;
9
9
  export declare const isIOS: boolean;
10
10
  export declare const isBrave: () => boolean;
11
- export declare const supportsResizeObserver: boolean;
12
11
  export declare const APP_NAME = "Excalidraw";
13
12
  export declare const DRAGGING_THRESHOLD = 10;
14
13
  export declare const LINE_CONFIRM_THRESHOLD = 8;
@@ -124,7 +123,6 @@ export declare const DEFAULT_ZOOM_VALUE: NormalizedZoomValue;
124
123
  export declare const COLOR_WHITE = "#ffffff";
125
124
  export declare const COLOR_CHARCOAL_BLACK = "#1e1e1e";
126
125
  export declare const COLOR_TRANSPARENT = "transparent";
127
- export declare const COLOR_VOICE_CALL = "#a2f1a6";
128
126
  export declare const CANVAS_ONLY_ACTIONS: string[];
129
127
  export declare const GRID_SIZE = 20;
130
128
  export declare const IMAGE_MIME_TYPES: {
@@ -224,6 +222,9 @@ export declare const ROUNDNESS: {
224
222
  readonly PROPORTIONAL_RADIUS: 2;
225
223
  readonly ADAPTIVE_RADIUS: 3;
226
224
  };
225
+ /** key containt id of precedeing elemnt id we use in reconciliation during
226
+ * collaboration */
227
+ export declare const PRECEDING_ELEMENT_KEY = "__precedingElement__";
227
228
  export declare const ROUGHNESS: {
228
229
  readonly architect: 0;
229
230
  readonly artist: 1;
@@ -11,7 +11,6 @@ export const isIOS = /iPad|iPhone/.test(navigator.platform) ||
11
11
  (navigator.userAgent.includes("Mac") && "ontouchend" in document);
12
12
  // keeping function so it can be mocked in test
13
13
  export const isBrave = () => navigator.brave?.isBrave?.name === "isBrave";
14
- export const supportsResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
15
14
  export const APP_NAME = "Excalidraw";
16
15
  export const DRAGGING_THRESHOLD = 10; // px
17
16
  export const LINE_CONFIRM_THRESHOLD = 8; // px
@@ -132,8 +131,6 @@ export const COLOR_WHITE = "#ffffff";
132
131
  export const COLOR_CHARCOAL_BLACK = "#1e1e1e";
133
132
  export const COLOR_TRANSPARENT = "transparent";
134
133
  // -----------------------------------------------
135
- // keep this in sync with CSS
136
- export const COLOR_VOICE_CALL = "#a2f1a6";
137
134
  export const CANVAS_ONLY_ACTIONS = ["selectAll"];
138
135
  export const GRID_SIZE = 20; // TODO make it configurable?
139
136
  export const IMAGE_MIME_TYPES = {
@@ -266,6 +263,9 @@ export const ROUNDNESS = {
266
263
  // (see DEFAULT_ADAPTIVE_RADIUS constant)
267
264
  ADAPTIVE_RADIUS: 3,
268
265
  };
266
+ /** key containt id of precedeing elemnt id we use in reconciliation during
267
+ * collaboration */
268
+ export const PRECEDING_ELEMENT_KEY = "__precedingElement__";
269
269
  export const ROUGHNESS = {
270
270
  architect: 0,
271
271
  artist: 1,
@@ -1,17 +1,17 @@
1
- import { ExcalidrawElement, OrderedExcalidrawElement } from "../element/types";
1
+ import { ExcalidrawElement } from "../element/types";
2
2
  import { AppState, BinaryFiles, LibraryItem } from "../types";
3
3
  import { ImportedDataState } from "./types";
4
4
  type RestoredAppState = Omit<AppState, "offsetTop" | "offsetLeft" | "width" | "height">;
5
5
  export declare const AllowedExcalidrawActiveTools: Record<AppState["activeTool"]["type"], boolean>;
6
6
  export type RestoredDataState = {
7
- elements: OrderedExcalidrawElement[];
7
+ elements: ExcalidrawElement[];
8
8
  appState: RestoredAppState;
9
9
  files: BinaryFiles;
10
10
  };
11
11
  export declare const restoreElements: (elements: ImportedDataState["elements"], localElements: readonly ExcalidrawElement[] | null | undefined, opts?: {
12
12
  refreshDimensions?: boolean;
13
13
  repairBindings?: boolean;
14
- } | undefined) => OrderedExcalidrawElement[];
14
+ } | undefined) => ExcalidrawElement[];
15
15
  export declare const restoreAppState: (appState: ImportedDataState["appState"], localAppState: Partial<AppState> | null | undefined) => RestoredAppState;
16
16
  export declare const restore: (data: Pick<ImportedDataState, "appState" | "elements" | "files"> | null, localAppState: Partial<AppState> | null | undefined, localElements: readonly ExcalidrawElement[] | null | undefined, elementsConfig?: {
17
17
  refreshDimensions?: boolean;
@@ -1,7 +1,7 @@
1
1
  import { getNonDeletedElements, getNormalizedDimensions, isInvisiblySmallElement, refreshTextDimensions, } from "../element";
2
2
  import { isTextElement, isUsingAdaptiveRadius } from "../element/typeChecks";
3
3
  import { randomId } from "../random";
4
- import { DEFAULT_FONT_FAMILY, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, FONT_FAMILY, ROUNDNESS, DEFAULT_SIDEBAR, DEFAULT_ELEMENT_PROPS, } from "../constants";
4
+ import { DEFAULT_FONT_FAMILY, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, PRECEDING_ELEMENT_KEY, FONT_FAMILY, ROUNDNESS, DEFAULT_SIDEBAR, DEFAULT_ELEMENT_PROPS, } from "../constants";
5
5
  import { getDefaultAppState } from "../appState";
6
6
  import { LinearElementEditor } from "../element/linearElementEditor";
7
7
  import { bumpVersion } from "../element/mutateElement";
@@ -9,7 +9,6 @@ import { getUpdatedTimestamp, updateActiveTool } from "../utils";
9
9
  import { arrayToMap } from "../utils";
10
10
  import { detectLineHeight, getContainerElement, getDefaultLineHeight, } from "../element/textElement";
11
11
  import { normalizeLink } from "./url";
12
- import { syncInvalidIndices } from "../fractionalIndex";
13
12
  export const AllowedExcalidrawActiveTools = {
14
13
  selection: true,
15
14
  text: true,
@@ -47,7 +46,6 @@ const restoreElementWithProperties = (element, extra) => {
47
46
  // newly added elements
48
47
  version: element.version || 1,
49
48
  versionNonce: element.versionNonce ?? 0,
50
- index: element.index ?? null,
51
49
  isDeleted: element.isDeleted ?? false,
52
50
  id: element.id || randomId(),
53
51
  fillStyle: element.fillStyle || DEFAULT_ELEMENT_PROPS.fillStyle,
@@ -87,6 +85,9 @@ const restoreElementWithProperties = (element, extra) => {
87
85
  base.customData =
88
86
  "customData" in extra ? extra.customData : element.customData;
89
87
  }
88
+ if (PRECEDING_ELEMENT_KEY in element) {
89
+ base[PRECEDING_ELEMENT_KEY] = element[PRECEDING_ELEMENT_KEY];
90
+ }
90
91
  return {
91
92
  ...base,
92
93
  ...getNormalizedDimensions(base),
@@ -274,7 +275,7 @@ localElements, opts) => {
274
275
  // used to detect duplicate top-level element ids
275
276
  const existingIds = new Set();
276
277
  const localElementsMap = localElements ? arrayToMap(localElements) : null;
277
- const restoredElements = syncInvalidIndices((elements || []).reduce((elements, element) => {
278
+ const restoredElements = (elements || []).reduce((elements, element) => {
278
279
  // filtering out selection, which is legacy, no longer kept in elements,
279
280
  // and causing issues if retained
280
281
  if (element.type !== "selection" && !isInvisiblySmallElement(element)) {
@@ -292,7 +293,7 @@ localElements, opts) => {
292
293
  }
293
294
  }
294
295
  return elements;
295
- }, []));
296
+ }, []);
296
297
  if (!opts?.repairBindings) {
297
298
  return restoredElements;
298
299
  }
@@ -78,4 +78,4 @@ export type ExcalidrawElementSkeleton = Extract<Exclude<ExcalidrawElement, Excal
78
78
  } & Partial<ExcalidrawMagicFrameElement>);
79
79
  export declare const convertToExcalidrawElements: (elementsSkeleton: ExcalidrawElementSkeleton[] | null, opts?: {
80
80
  regenerateIds: boolean;
81
- }) => import("../element/types").OrderedExcalidrawElement[];
81
+ }) => ExcalidrawElement[];