@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
@@ -3,10 +3,9 @@ import { getCommonBounds, newElement, newLinearElement, redrawTextBoundingBox, }
3
3
  import { bindLinearElement } from "../element/binding";
4
4
  import { newFrameElement, newImageElement, newMagicFrameElement, newTextElement, } from "../element/newElement";
5
5
  import { getDefaultLineHeight, measureText, normalizeText, } from "../element/textElement";
6
- import { arrayToMap, assertNever, cloneJSON, getFontString, toBrandedType, } from "../utils";
6
+ import { assertNever, cloneJSON, getFontString, toBrandedType } from "../utils";
7
7
  import { getSizeFromPoints } from "../points";
8
8
  import { randomId } from "../random";
9
- import { syncInvalidIndices } from "../fractionalIndex";
10
9
  const DEFAULT_LINEAR_ELEMENT_PROPS = {
11
10
  width: 100,
12
11
  height: 0,
@@ -207,10 +206,10 @@ class ElementStore {
207
206
  this.excalidrawElements.set(ele.id, ele);
208
207
  };
209
208
  getElements = () => {
210
- return syncInvalidIndices(Array.from(this.excalidrawElements.values()));
209
+ return Array.from(this.excalidrawElements.values());
211
210
  };
212
211
  getElementsMap = () => {
213
- return toBrandedType(arrayToMap(this.getElements()));
212
+ return toBrandedType(this.excalidrawElements);
214
213
  };
215
214
  getElement = (id) => {
216
215
  return this.excalidrawElements.get(id);
@@ -136,9 +136,6 @@ export declare const actionSetEmbeddableAsActiveTool: {
136
136
  id?: string | undefined;
137
137
  socketId?: import("../types").SocketId | undefined;
138
138
  isCurrentUser?: boolean | undefined;
139
- isInCall?: boolean | undefined;
140
- isSpeaking?: boolean | undefined;
141
- isMuted?: boolean | undefined;
142
139
  }>>;
143
140
  showStats: boolean;
144
141
  currentChartType: import("./types").ChartType;
@@ -242,15 +242,11 @@ export declare class LinearElementEditor {
242
242
  color?: {
243
243
  background: string;
244
244
  stroke: string;
245
- } | undefined; /** index */
245
+ } | undefined;
246
246
  avatarUrl?: string | undefined;
247
247
  id?: string | undefined;
248
- /** whether you're dragging a point */
249
248
  socketId?: import("../types").SocketId | undefined;
250
249
  isCurrentUser?: boolean | undefined;
251
- isInCall?: boolean | undefined;
252
- isSpeaking?: boolean | undefined;
253
- isMuted?: boolean | undefined;
254
250
  }>>;
255
251
  showStats: boolean;
256
252
  currentChartType: import("./types").ChartType;
@@ -1,7 +1,7 @@
1
1
  import { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap } from "./types";
2
2
  import { AppState } from "../types";
3
3
  import { MarkOptional, Mutable } from "../utility-types";
4
- export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "index" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData">;
4
+ export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData">;
5
5
  export declare const newElement: (opts: {
6
6
  type: ExcalidrawGenericElement["type"];
7
7
  } & ElementConstructorOpts) => NonDeleted<ExcalidrawGenericElement>;
@@ -7,7 +7,7 @@ import { adjustXYWithRotation } from "../math";
7
7
  import { getResizedElementAbsoluteCoords } from "./bounds";
8
8
  import { measureText, normalizeText, wrapText, getBoundTextMaxWidth, getDefaultLineHeight, } from "./textElement";
9
9
  import { DEFAULT_ELEMENT_PROPS, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, VERTICAL_ALIGN, } from "../constants";
10
- const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strokeColor, backgroundColor = DEFAULT_ELEMENT_PROPS.backgroundColor, fillStyle = DEFAULT_ELEMENT_PROPS.fillStyle, strokeWidth = DEFAULT_ELEMENT_PROPS.strokeWidth, strokeStyle = DEFAULT_ELEMENT_PROPS.strokeStyle, roughness = DEFAULT_ELEMENT_PROPS.roughness, opacity = DEFAULT_ELEMENT_PROPS.opacity, width = 0, height = 0, angle = 0, groupIds = [], frameId = null, index = null, roundness = null, boundElements = null, link = null, locked = DEFAULT_ELEMENT_PROPS.locked, ...rest }) => {
10
+ const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strokeColor, backgroundColor = DEFAULT_ELEMENT_PROPS.backgroundColor, fillStyle = DEFAULT_ELEMENT_PROPS.fillStyle, strokeWidth = DEFAULT_ELEMENT_PROPS.strokeWidth, strokeStyle = DEFAULT_ELEMENT_PROPS.strokeStyle, roughness = DEFAULT_ELEMENT_PROPS.roughness, opacity = DEFAULT_ELEMENT_PROPS.opacity, width = 0, height = 0, angle = 0, groupIds = [], frameId = null, roundness = null, boundElements = null, link = null, locked = DEFAULT_ELEMENT_PROPS.locked, ...rest }) => {
11
11
  // assign type to guard against excess properties
12
12
  const element = {
13
13
  id: rest.id || randomId(),
@@ -26,7 +26,6 @@ const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strok
26
26
  opacity,
27
27
  groupIds,
28
28
  frameId,
29
- index,
30
29
  roundness,
31
30
  seed: rest.seed ?? randomInteger(),
32
31
  version: rest.version || 1,
@@ -18,9 +18,6 @@ export type StrokeStyle = "solid" | "dashed" | "dotted";
18
18
  export type TextAlign = typeof TEXT_ALIGN[keyof typeof TEXT_ALIGN];
19
19
  type VerticalAlignKeys = keyof typeof VERTICAL_ALIGN;
20
20
  export type VerticalAlign = typeof VERTICAL_ALIGN[VerticalAlignKeys];
21
- export type FractionalIndex = string & {
22
- _brand: "franctionalIndex";
23
- };
24
21
  type _ExcalidrawElementBase = Readonly<{
25
22
  id: string;
26
23
  x: number;
@@ -49,11 +46,6 @@ type _ExcalidrawElementBase = Readonly<{
49
46
  Used for deterministic reconciliation of updates during collaboration,
50
47
  in case the versions (see above) are identical. */
51
48
  versionNonce: number;
52
- /** String in a fractional form defined by https://github.com/rocicorp/fractional-indexing.
53
- Used for ordering in multiplayer scenarios, such as during reconciliation or undo / redo.
54
- Always kept in sync with the array order by `syncMovedIndices` and `syncInvalidIndices`.
55
- Could be null, i.e. for new elements which were not yet assigned to the scene. */
56
- index: FractionalIndex | null;
57
49
  isDeleted: boolean;
58
50
  /** List of groups the element belongs to.
59
51
  Ordered from deepest to shallowest. */
@@ -133,10 +125,6 @@ export type ExcalidrawGenericElement = ExcalidrawSelectionElement | ExcalidrawRe
133
125
  * between peers and contain no state local to the peer.
134
126
  */
135
127
  export type ExcalidrawElement = ExcalidrawGenericElement | ExcalidrawTextElement | ExcalidrawLinearElement | ExcalidrawFreeDrawElement | ExcalidrawImageElement | ExcalidrawFrameElement | ExcalidrawMagicFrameElement | ExcalidrawIframeElement | ExcalidrawEmbeddableElement;
136
- export type Ordered<TElement extends ExcalidrawElement> = TElement & {
137
- index: FractionalIndex;
138
- };
139
- export type OrderedExcalidrawElement = Ordered<ExcalidrawElement>;
140
128
  export type NonDeleted<TElement extends ExcalidrawElement> = TElement & {
141
129
  isDeleted: boolean;
142
130
  };
@@ -207,11 +195,11 @@ export type NonDeletedElementsMap = Map<ExcalidrawElement["id"], NonDeletedExcal
207
195
  * Map of all excalidraw Scene elements, including deleted.
208
196
  * Not a subset. Use this type when you need access to current Scene elements.
209
197
  */
210
- export type SceneElementsMap = Map<ExcalidrawElement["id"], Ordered<ExcalidrawElement>> & MakeBrand<"SceneElementsMap">;
198
+ export type SceneElementsMap = Map<ExcalidrawElement["id"], ExcalidrawElement> & MakeBrand<"SceneElementsMap">;
211
199
  /**
212
200
  * Map of all non-deleted Scene elements.
213
201
  * Not a subset. Use this type when you need access to current Scene elements.
214
202
  */
215
- export type NonDeletedSceneElementsMap = Map<ExcalidrawElement["id"], Ordered<NonDeletedExcalidrawElement>> & MakeBrand<"NonDeletedSceneElementsMap">;
203
+ export type NonDeletedSceneElementsMap = Map<ExcalidrawElement["id"], NonDeletedExcalidrawElement> & MakeBrand<"NonDeletedSceneElementsMap">;
216
204
  export type ElementsMapOrArray = readonly ExcalidrawElement[] | Readonly<ElementsMap>;
217
205
  export {};
@@ -10,7 +10,4 @@ export declare class ImageSceneDataError extends Error {
10
10
  code: ImageSceneDataErrorCode;
11
11
  constructor(message?: string, code?: ImageSceneDataErrorCode);
12
12
  }
13
- export declare class InvalidFractionalIndexError extends Error {
14
- code: "ELEMENT_HAS_INVALID_INDEX";
15
- }
16
13
  export {};
@@ -18,6 +18,3 @@ export class ImageSceneDataError extends Error {
18
18
  this.code = code;
19
19
  }
20
20
  }
21
- export class InvalidFractionalIndexError extends Error {
22
- code = "ELEMENT_HAS_INVALID_INDEX";
23
- }
@@ -2,7 +2,7 @@ import { ElementsMap, ElementsMapOrArray, ExcalidrawElement, ExcalidrawFrameLike
2
2
  import { AppClassProperties, AppState, StaticCanvasAppState } from "./types";
3
3
  import type { ExcalidrawElementsIncludingDeleted } from "./scene/Scene";
4
4
  import { ReadonlySetLike } from "./utility-types";
5
- export declare const bindElementsToFramesAfterDuplication: (nextElements: readonly ExcalidrawElement[], oldElements: readonly ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
5
+ export declare const bindElementsToFramesAfterDuplication: (nextElements: ExcalidrawElement[], oldElements: readonly ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
6
6
  export declare function isElementIntersectingFrame(element: ExcalidrawElement, frame: ExcalidrawFrameLikeElement, elementsMap: ElementsMap): boolean;
7
7
  export declare const getElementsCompletelyInFrame: (elements: readonly ExcalidrawElement[], frame: ExcalidrawFrameLikeElement, elementsMap: ElementsMap) => ExcalidrawElement[];
8
8
  export declare const isElementContainingFrame: (elements: readonly ExcalidrawElement[], element: ExcalidrawElement, frame: ExcalidrawFrameLikeElement, elementsMap: ElementsMap) => boolean;
@@ -63,7 +63,7 @@ export class LaserTrails {
63
63
  trail = new AnimatedTrail(this.animationFrameHandler, this.app, {
64
64
  ...this.getTrailOptions(),
65
65
  fill: () => collaborator.pointer?.laserColor ||
66
- getClientColor(key, collaborator),
66
+ getClientColor(collaborator.id || key),
67
67
  });
68
68
  trail.start(this.container);
69
69
  this.collabTrails.set(key, trail);
@@ -536,10 +536,7 @@
536
536
  },
537
537
  "hint": {
538
538
  "text": "Click on user to follow",
539
- "followStatus": "You're currently following this user",
540
- "inCall": "User is in a voice call",
541
- "micMuted": "User's microphone is muted",
542
- "isSpeaking": "User is speaking"
539
+ "followStatus": "You're currently following this user"
543
540
  }
544
541
  }
545
542
  }
@@ -2,10 +2,11 @@ import { getElementAbsoluteCoords, OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransfor
2
2
  import { roundRect } from "../renderer/roundRect";
3
3
  import { getScrollBars, SCROLLBAR_COLOR, SCROLLBAR_WIDTH, } from "../scene/scrollbars";
4
4
  import { renderSelectionElement } from "../renderer/renderElement";
5
- import { getClientColor, renderRemoteCursors } from "../clients";
5
+ import { getClientColor } from "../clients";
6
6
  import { isSelectedViaGroup, getSelectedGroupIds, getElementsInGroup, selectGroupsFromGivenElements, } from "../groups";
7
7
  import { OMIT_SIDES_FOR_FRAME, shouldShowBoundingBox, } from "../element/transformHandles";
8
8
  import { arrayToMap, throttleRAF } from "../utils";
9
+ import { UserIdleState } from "../types";
9
10
  import { DEFAULT_TRANSFORM_HANDLE_SPACING, FRAME_STYLE } from "../constants";
10
11
  import { renderSnaps } from "../renderer/renderSnaps";
11
12
  import { maxBindingGap } from "../element/collision";
@@ -349,10 +350,10 @@ const _renderInteractiveScene = ({ canvas, elementsMap, visibleElements, selecte
349
350
  selectionColors.push(selectionColor);
350
351
  }
351
352
  // remote users
352
- const remoteClients = renderConfig.remoteSelectedElementIds.get(element.id);
353
- if (remoteClients) {
354
- selectionColors.push(...remoteClients.map((socketId) => {
355
- const background = getClientColor(socketId, appState.collaborators.get(socketId));
353
+ if (renderConfig.remoteSelectedElementIds[element.id]) {
354
+ selectionColors.push(...renderConfig.remoteSelectedElementIds[element.id].map((socketId) => {
355
+ const { id } = renderConfig.remotePointerViewportCoords[socketId];
356
+ const background = getClientColor(id);
356
357
  return background;
357
358
  }));
358
359
  }
@@ -365,7 +366,7 @@ const _renderInteractiveScene = ({ canvas, elementsMap, visibleElements, selecte
365
366
  elementX2,
366
367
  elementY2,
367
368
  selectionColors,
368
- dashed: !!remoteClients,
369
+ dashed: !!renderConfig.remoteSelectedElementIds[element.id],
369
370
  cx,
370
371
  cy,
371
372
  activeEmbeddable: appState.activeEmbeddable?.element === element &&
@@ -432,13 +433,118 @@ const _renderInteractiveScene = ({ canvas, elementsMap, visibleElements, selecte
432
433
  renderSnaps(context, appState);
433
434
  // Reset zoom
434
435
  context.restore();
435
- renderRemoteCursors({
436
- context,
437
- renderConfig,
438
- appState,
439
- normalizedWidth,
440
- normalizedHeight,
441
- });
436
+ // Paint remote pointers
437
+ for (const clientId in renderConfig.remotePointerViewportCoords) {
438
+ let { x, y, id } = renderConfig.remotePointerViewportCoords[clientId];
439
+ x -= appState.offsetLeft;
440
+ y -= appState.offsetTop;
441
+ const width = 11;
442
+ const height = 14;
443
+ const isOutOfBounds = x < 0 ||
444
+ x > normalizedWidth - width ||
445
+ y < 0 ||
446
+ y > normalizedHeight - height;
447
+ x = Math.max(x, 0);
448
+ x = Math.min(x, normalizedWidth - width);
449
+ y = Math.max(y, 0);
450
+ y = Math.min(y, normalizedHeight - height);
451
+ const background = getClientColor(id);
452
+ context.save();
453
+ context.strokeStyle = background;
454
+ context.fillStyle = background;
455
+ const userState = renderConfig.remotePointerUserStates[clientId];
456
+ const isInactive = isOutOfBounds ||
457
+ userState === UserIdleState.IDLE ||
458
+ userState === UserIdleState.AWAY;
459
+ if (isInactive) {
460
+ context.globalAlpha = 0.3;
461
+ }
462
+ if (renderConfig.remotePointerButton &&
463
+ renderConfig.remotePointerButton[clientId] === "down") {
464
+ context.beginPath();
465
+ context.arc(x, y, 15, 0, 2 * Math.PI, false);
466
+ context.lineWidth = 3;
467
+ context.strokeStyle = "#ffffff88";
468
+ context.stroke();
469
+ context.closePath();
470
+ context.beginPath();
471
+ context.arc(x, y, 15, 0, 2 * Math.PI, false);
472
+ context.lineWidth = 1;
473
+ context.strokeStyle = background;
474
+ context.stroke();
475
+ context.closePath();
476
+ }
477
+ // Background (white outline) for arrow
478
+ context.fillStyle = oc.white;
479
+ context.strokeStyle = oc.white;
480
+ context.lineWidth = 6;
481
+ context.lineJoin = "round";
482
+ context.beginPath();
483
+ context.moveTo(x, y);
484
+ context.lineTo(x + 0, y + 14);
485
+ context.lineTo(x + 4, y + 9);
486
+ context.lineTo(x + 11, y + 8);
487
+ context.closePath();
488
+ context.stroke();
489
+ context.fill();
490
+ // Arrow
491
+ context.fillStyle = background;
492
+ context.strokeStyle = background;
493
+ context.lineWidth = 2;
494
+ context.lineJoin = "round";
495
+ context.beginPath();
496
+ if (isInactive) {
497
+ context.moveTo(x - 1, y - 1);
498
+ context.lineTo(x - 1, y + 15);
499
+ context.lineTo(x + 5, y + 10);
500
+ context.lineTo(x + 12, y + 9);
501
+ context.closePath();
502
+ context.fill();
503
+ }
504
+ else {
505
+ context.moveTo(x, y);
506
+ context.lineTo(x + 0, y + 14);
507
+ context.lineTo(x + 4, y + 9);
508
+ context.lineTo(x + 11, y + 8);
509
+ context.closePath();
510
+ context.fill();
511
+ context.stroke();
512
+ }
513
+ const username = renderConfig.remotePointerUsernames[clientId] || "";
514
+ if (!isOutOfBounds && username) {
515
+ context.font = "600 12px sans-serif"; // font has to be set before context.measureText()
516
+ const offsetX = x + width / 2;
517
+ const offsetY = y + height + 2;
518
+ const paddingHorizontal = 5;
519
+ const paddingVertical = 3;
520
+ const measure = context.measureText(username);
521
+ const measureHeight = measure.actualBoundingBoxDescent + measure.actualBoundingBoxAscent;
522
+ const finalHeight = Math.max(measureHeight, 12);
523
+ const boxX = offsetX - 1;
524
+ const boxY = offsetY - 1;
525
+ const boxWidth = measure.width + 2 + paddingHorizontal * 2 + 2;
526
+ const boxHeight = finalHeight + 2 + paddingVertical * 2 + 2;
527
+ if (context.roundRect) {
528
+ context.beginPath();
529
+ context.roundRect(boxX, boxY, boxWidth, boxHeight, 8);
530
+ context.fillStyle = background;
531
+ context.fill();
532
+ context.strokeStyle = oc.white;
533
+ context.stroke();
534
+ }
535
+ else {
536
+ roundRect(context, boxX, boxY, boxWidth, boxHeight, 8, oc.white);
537
+ }
538
+ context.fillStyle = oc.black;
539
+ context.fillText(username, offsetX + paddingHorizontal + 1, offsetY +
540
+ paddingVertical +
541
+ measure.actualBoundingBoxAscent +
542
+ Math.floor((finalHeight - measureHeight) / 2) +
543
+ 2);
544
+ }
545
+ context.restore();
546
+ context.closePath();
547
+ }
442
548
  // Paint scrollbars
443
549
  let scrollBars;
444
550
  if (renderConfig.renderScrollbars) {
@@ -9,11 +9,10 @@ import { bootstrapCanvas, getNormalizedCanvasDimensions } from "./helpers";
9
9
  import { throttleRAF } from "../utils";
10
10
  const strokeGrid = (context, gridSize, scrollX, scrollY, zoom, width, height) => {
11
11
  const BOLD_LINE_FREQUENCY = 5;
12
- let GridLineColor;
13
- (function (GridLineColor) {
14
- GridLineColor["Bold"] = "#cccccc";
15
- GridLineColor["Regular"] = "#e5e5e5";
16
- })(GridLineColor || (GridLineColor = {}));
12
+ const GridLineColor = {
13
+ Bold: "#cccccc",
14
+ Regular: "#e5e5e5",
15
+ };
17
16
  const offsetX = -Math.round(zoom.value / gridSize) * gridSize + (scrollX % gridSize);
18
17
  const offsetY = -Math.round(zoom.value / gridSize) * gridSize + (scrollY % gridSize);
19
18
  const lineWidth = Math.min(1 / zoom.value, 1);
@@ -1,4 +1,4 @@
1
- import { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted, ExcalidrawFrameLikeElement, ElementsMapOrArray, OrderedExcalidrawElement, Ordered } from "../element/types";
1
+ import { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted, ExcalidrawFrameLikeElement, ElementsMapOrArray } from "../element/types";
2
2
  import { LinearElementEditor } from "../element/linearElementEditor";
3
3
  import { AppState } from "../types";
4
4
  type ElementIdKey = InstanceType<typeof LinearElementEditor>["elementId"];
@@ -20,10 +20,10 @@ declare class Scene {
20
20
  private elementsMap;
21
21
  private selectedElementsCache;
22
22
  private versionNonce;
23
- getElementsMapIncludingDeleted(): Map<string, Ordered<ExcalidrawElement>> & import("../utility-types").MakeBrand<"SceneElementsMap">;
24
- getNonDeletedElementsMap(): Map<string, Ordered<NonDeletedExcalidrawElement>> & import("../utility-types").MakeBrand<"NonDeletedSceneElementsMap">;
25
- getElementsIncludingDeleted(): readonly OrderedExcalidrawElement[];
26
- getNonDeletedElements(): readonly Ordered<NonDeletedExcalidrawElement>[];
23
+ getElementsMapIncludingDeleted(): Map<string, ExcalidrawElement> & import("../utility-types").MakeBrand<"SceneElementsMap">;
24
+ getNonDeletedElementsMap(): Map<string, NonDeletedExcalidrawElement> & import("../utility-types").MakeBrand<"NonDeletedSceneElementsMap">;
25
+ getElementsIncludingDeleted(): readonly ExcalidrawElement[];
26
+ getNonDeletedElements(): readonly NonDeletedExcalidrawElement[];
27
27
  getFramesIncludingDeleted(): readonly ExcalidrawFrameLikeElement[];
28
28
  getSelectedElements(opts: {
29
29
  selectedElementIds: AppState["selectedElementIds"];
@@ -59,8 +59,7 @@ declare class Scene {
59
59
  destroy(): void;
60
60
  insertElementAtIndex(element: ExcalidrawElement, index: number): void;
61
61
  insertElementsAtIndex(elements: ExcalidrawElement[], index: number): void;
62
- insertElement: (element: ExcalidrawElement) => void;
63
- insertElements: (elements: ExcalidrawElement[]) => void;
62
+ addNewElement: (element: ExcalidrawElement) => void;
64
63
  getElementIndex(elementId: string): number;
65
64
  getContainerElement: (element: (ExcalidrawElement & {
66
65
  containerId: ExcalidrawElement["id"] | null;
@@ -2,10 +2,7 @@ import { isNonDeletedElement } from "../element";
2
2
  import { isFrameLikeElement } from "../element/typeChecks";
3
3
  import { getSelectedElements } from "./selection";
4
4
  import { randomInteger } from "../random";
5
- import { syncInvalidIndices, syncMovedIndices, validateFractionalIndices, } from "../fractionalIndex";
6
- import { arrayToMap } from "../utils";
7
5
  import { toBrandedType } from "../utils";
8
- import { ENV } from "../constants";
9
6
  const getNonDeletedElements = (allElements) => {
10
7
  const elementsMap = new Map();
11
8
  const elements = [];
@@ -62,7 +59,6 @@ class Scene {
62
59
  callbacks = new Set();
63
60
  nonDeletedElements = [];
64
61
  nonDeletedElementsMap = toBrandedType(new Map());
65
- // ideally all elements within the scene should be wrapped around with `Ordered` type, but right now there is no real benefit doing so
66
62
  elements = [];
67
63
  nonDeletedFramesLikes = [];
68
64
  frames = [];
@@ -155,17 +151,12 @@ class Scene {
155
151
  return didChange;
156
152
  }
157
153
  replaceAllElements(nextElements) {
158
- const _nextElements =
159
- // ts doesn't like `Array.isArray` of `instanceof Map`
160
- nextElements instanceof Array
161
- ? nextElements
162
- : Array.from(nextElements.values());
154
+ this.elements =
155
+ // ts doesn't like `Array.isArray` of `instanceof Map`
156
+ nextElements instanceof Array
157
+ ? nextElements
158
+ : Array.from(nextElements.values());
163
159
  const nextFrameLikes = [];
164
- if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) {
165
- // throw on invalid indices in test / dev to potentially detect cases were we forgot to sync moved elements
166
- validateFractionalIndices(_nextElements.map((x) => x.index));
167
- }
168
- this.elements = syncInvalidIndices(_nextElements);
169
160
  this.elementsMap.clear();
170
161
  this.elements.forEach((element) => {
171
162
  if (isFrameLikeElement(element)) {
@@ -200,8 +191,8 @@ class Scene {
200
191
  };
201
192
  }
202
193
  destroy() {
203
- this.elements = [];
204
194
  this.nonDeletedElements = [];
195
+ this.elements = [];
205
196
  this.nonDeletedFramesLikes = [];
206
197
  this.frames = [];
207
198
  this.elementsMap.clear();
@@ -226,7 +217,6 @@ class Scene {
226
217
  element,
227
218
  ...this.elements.slice(index),
228
219
  ];
229
- syncMovedIndices(nextElements, arrayToMap([element]));
230
220
  this.replaceAllElements(nextElements);
231
221
  }
232
222
  insertElementsAtIndex(elements, index) {
@@ -238,20 +228,15 @@ class Scene {
238
228
  ...elements,
239
229
  ...this.elements.slice(index),
240
230
  ];
241
- syncMovedIndices(nextElements, arrayToMap(elements));
242
231
  this.replaceAllElements(nextElements);
243
232
  }
244
- insertElement = (element) => {
245
- const index = element.frameId
246
- ? this.getElementIndex(element.frameId)
247
- : this.elements.length;
248
- this.insertElementAtIndex(element, index);
249
- };
250
- insertElements = (elements) => {
251
- const index = elements[0].frameId
252
- ? this.getElementIndex(elements[0].frameId)
253
- : this.elements.length;
254
- this.insertElementsAtIndex(elements, index);
233
+ addNewElement = (element) => {
234
+ if (element.frameId) {
235
+ this.insertElementAtIndex(element, this.getElementIndex(element.frameId));
236
+ }
237
+ else {
238
+ this.replaceAllElements([...this.elements, element]);
239
+ }
255
240
  };
256
241
  getElementIndex(elementId) {
257
242
  return this.elements.findIndex((element) => element.id === elementId);
@@ -11,7 +11,6 @@ import { getElementsOverlappingFrame, getFrameLikeElements, getFrameLikeTitle, g
11
11
  import { newTextElement } from "../element";
12
12
  import { newElementWith } from "../element/mutateElement";
13
13
  import { isFrameElement, isFrameLikeElement } from "../element/typeChecks";
14
- import { syncInvalidIndices } from "../fractionalIndex";
15
14
  import { renderStaticScene } from "../renderer/staticScene";
16
15
  const SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;
17
16
  const truncateText = (element, maxWidth) => {
@@ -301,7 +300,7 @@ export const exportToCanvas = async ({ data, config, }) => {
301
300
  canvas,
302
301
  rc: rough.canvas(canvas),
303
302
  elementsMap: toBrandedType(arrayToMap(elementsForRender)),
304
- allElementsMap: toBrandedType(arrayToMap(syncInvalidIndices(elements))),
303
+ allElementsMap: toBrandedType(arrayToMap(elements)),
305
304
  visibleElements: elementsForRender,
306
305
  appState: {
307
306
  ...appState,
@@ -1,7 +1,7 @@
1
1
  import type { RoughCanvas } from "roughjs/bin/canvas";
2
2
  import { Drawable } from "roughjs/bin/core";
3
- import { ExcalidrawElement, ExcalidrawTextElement, NonDeletedElementsMap, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "../element/types";
4
- import { AppClassProperties, AppState, EmbedsValidationStatus, ElementsPendingErasure, InteractiveCanvasAppState, StaticCanvasAppState, SocketId, UserIdleState } from "../types";
3
+ import { ExcalidrawTextElement, NonDeletedElementsMap, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "../element/types";
4
+ import { AppClassProperties, AppState, EmbedsValidationStatus, ElementsPendingErasure, InteractiveCanvasAppState, StaticCanvasAppState } from "../types";
5
5
  import { MakeBrand } from "../utility-types";
6
6
  export type RenderableElementsMap = NonDeletedElementsMap & MakeBrand<"RenderableElementsMap">;
7
7
  export type StaticCanvasRenderConfig = {
@@ -26,14 +26,25 @@ export type SVGRenderConfig = {
26
26
  embedsValidationStatus: EmbedsValidationStatus;
27
27
  };
28
28
  export type InteractiveCanvasRenderConfig = {
29
- remoteSelectedElementIds: Map<ExcalidrawElement["id"], SocketId[]>;
30
- remotePointerViewportCoords: Map<SocketId, {
31
- x: number;
32
- y: number;
33
- }>;
34
- remotePointerUserStates: Map<SocketId, UserIdleState>;
35
- remotePointerUsernames: Map<SocketId, string>;
36
- remotePointerButton: Map<SocketId, string | undefined>;
29
+ remoteSelectedElementIds: {
30
+ [elementId: string]: string[];
31
+ };
32
+ remotePointerViewportCoords: {
33
+ [id: string]: {
34
+ x: number;
35
+ y: number;
36
+ id: string;
37
+ };
38
+ };
39
+ remotePointerUserStates: {
40
+ [id: string]: string;
41
+ };
42
+ remotePointerUsernames: {
43
+ [id: string]: string;
44
+ };
45
+ remotePointerButton?: {
46
+ [id: string]: string | undefined;
47
+ };
37
48
  selectionColor?: string;
38
49
  renderScrollbars?: boolean;
39
50
  };
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, FileId, ExcalidrawImageElement, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement } from "./element/types";
2
+ import { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, FileId, ExcalidrawImageElement, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement } from "./element/types";
3
3
  import { Action } from "./actions/types";
4
4
  import { Point as RoughPoint } from "roughjs/bin/geometry";
5
5
  import { LinearElementEditor } from "./element/linearElementEditor";
@@ -36,9 +36,6 @@ export type Collaborator = Readonly<{
36
36
  id?: string;
37
37
  socketId?: SocketId;
38
38
  isCurrentUser?: boolean;
39
- isInCall?: boolean;
40
- isSpeaking?: boolean;
41
- isMuted?: boolean;
42
39
  }>;
43
40
  export type CollaboratorPointer = {
44
41
  x: number;
@@ -273,9 +270,9 @@ export interface AppState {
273
270
  y: number;
274
271
  } | null;
275
272
  objectsSnapModeEnabled: boolean;
276
- /** the user's socket id & username who is being followed on the canvas */
273
+ /** the user's clientId & username who is being followed on the canvas */
277
274
  userToFollow: UserToFollow | null;
278
- /** the socket ids of the users following the current user */
275
+ /** the clientIds of the users following the current user */
279
276
  followedBy: Set<SocketId>;
280
277
  }
281
278
  export type UIAppState = Omit<AppState, "suggestedBindings" | "startBoundElement" | "cursorButton" | "scrollX" | "scrollY">;
@@ -330,7 +327,7 @@ export type OnUserFollowedPayload = {
330
327
  };
331
328
  export interface ExcalidrawProps {
332
329
  id?: string | null;
333
- onChange?: (elements: readonly OrderedExcalidrawElement[], appState: AppState, files: BinaryFiles, id?: string | null) => void;
330
+ onChange?: (elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles, id?: string | null) => void;
334
331
  initialData?: MaybePromise<ExcalidrawInitialDataState | null>;
335
332
  excalidrawAPI?: (api: ExcalidrawImperativeAPI) => void;
336
333
  onHomeButtonClick?: () => void;
@@ -517,9 +517,6 @@ export const isShallowEqual = (objA, objB, comparators, debug = false) => {
517
517
  const aKeys = Object.keys(objA);
518
518
  const bKeys = Object.keys(objB);
519
519
  if (aKeys.length !== bKeys.length) {
520
- if (debug) {
521
- console.warn(`%cisShallowEqual: objects don't have same properties ->`, "color: #8B4000", objA, objB);
522
- }
523
520
  return false;
524
521
  }
525
522
  if (comparators && Array.isArray(comparators)) {
@@ -1,6 +1,6 @@
1
1
  import { ExcalidrawElement } from "./element/types";
2
2
  import { AppState } from "./types";
3
- export declare const moveOneLeft: (allElements: readonly ExcalidrawElement[], appState: AppState) => readonly ExcalidrawElement[];
4
- export declare const moveOneRight: (allElements: readonly ExcalidrawElement[], appState: AppState) => readonly ExcalidrawElement[];
3
+ export declare const moveOneLeft: (allElements: readonly ExcalidrawElement[], appState: AppState) => ExcalidrawElement[];
4
+ export declare const moveOneRight: (allElements: readonly ExcalidrawElement[], appState: AppState) => ExcalidrawElement[];
5
5
  export declare const moveAllLeft: (allElements: readonly ExcalidrawElement[], appState: AppState) => readonly ExcalidrawElement[] | ExcalidrawElement[];
6
6
  export declare const moveAllRight: (allElements: readonly ExcalidrawElement[], appState: AppState) => readonly ExcalidrawElement[] | ExcalidrawElement[];