@dxos/plugin-space 0.8.1-staging.391c573 → 0.8.1-staging.9eaf14f

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 (253) hide show
  1. package/dist/lib/browser/{app-graph-builder-MGK5HWPZ.mjs → app-graph-builder-GMFCSOLG.mjs} +33 -6
  2. package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-FOWFLYGU.mjs → app-graph-serializer-DSF2U3A5.mjs} +7 -7
  4. package/dist/lib/browser/{app-graph-serializer-FOWFLYGU.mjs.map → app-graph-serializer-DSF2U3A5.mjs.map} +2 -2
  5. package/dist/lib/browser/{chunk-UDWHTKB5.mjs → chunk-5BDV575R.mjs} +22 -16
  6. package/dist/lib/browser/chunk-5BDV575R.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-ULA2UQJ4.mjs → chunk-AYW4IDRT.mjs} +15 -65
  8. package/dist/lib/browser/chunk-AYW4IDRT.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-OWVFWTX4.mjs → chunk-JZXWPMLA.mjs} +853 -588
  10. package/dist/lib/browser/chunk-JZXWPMLA.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-NU7WDVGN.mjs → chunk-KVRYWFZU.mjs} +3 -3
  12. package/dist/lib/browser/chunk-KVRYWFZU.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-23RVI5FZ.mjs → chunk-LO5UL6RU.mjs} +49 -16
  14. package/dist/lib/browser/chunk-LO5UL6RU.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-PQXZCNAU.mjs → chunk-PTKYMZWO.mjs} +1 -1
  16. package/dist/lib/browser/chunk-PTKYMZWO.mjs.map +7 -0
  17. package/dist/lib/browser/{identity-created-FYGS6TBH.mjs → identity-created-JR7BNXFH.mjs} +3 -3
  18. package/dist/lib/browser/index.mjs +34 -45
  19. package/dist/lib/browser/index.mjs.map +3 -3
  20. package/dist/lib/browser/{intent-resolver-7PY5WDYC.mjs → intent-resolver-RKYILWWQ.mjs} +69 -44
  21. package/dist/lib/browser/intent-resolver-RKYILWWQ.mjs.map +7 -0
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-root-EP4XP4IK.mjs → react-root-6H7NX2M2.mjs} +6 -6
  24. package/dist/lib/browser/{react-surface-VNNI5POA.mjs → react-surface-7AGLOVMK.mjs} +39 -38
  25. package/dist/lib/browser/react-surface-7AGLOVMK.mjs.map +7 -0
  26. package/dist/lib/browser/{schema-5W3DSY2E.mjs → schema-FHTA26SW.mjs} +3 -3
  27. package/dist/lib/browser/{schema-tools-6J5ZEDBC.mjs → schema-tools-YAXPRIXP.mjs} +3 -3
  28. package/dist/lib/browser/schema-tools-YAXPRIXP.mjs.map +7 -0
  29. package/dist/lib/browser/{settings-PHPCXX33.mjs → settings-PJPTJUPE.mjs} +3 -3
  30. package/dist/lib/browser/{spaces-ready-K47RR7N2.mjs → spaces-ready-BSSP7HHG.mjs} +8 -8
  31. package/dist/lib/browser/spaces-ready-BSSP7HHG.mjs.map +7 -0
  32. package/dist/lib/browser/{state-INJ63O57.mjs → state-X7VLCC6E.mjs} +5 -3
  33. package/dist/lib/browser/state-X7VLCC6E.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +2 -10
  35. package/dist/lib/node/{app-graph-builder-ZIUBXRPA.cjs → app-graph-builder-DPY7AUZE.cjs} +73 -46
  36. package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs.map +7 -0
  37. package/dist/lib/node/{app-graph-serializer-VQOGHKXL.cjs → app-graph-serializer-JELGJUAY.cjs} +21 -21
  38. package/dist/lib/node/{app-graph-serializer-VQOGHKXL.cjs.map → app-graph-serializer-JELGJUAY.cjs.map} +2 -2
  39. package/dist/lib/node/{chunk-53J7HLYX.cjs → chunk-3GKCNADA.cjs} +915 -656
  40. package/dist/lib/node/chunk-3GKCNADA.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-WZR6OAN3.cjs → chunk-6P2DB4QQ.cjs} +4 -4
  42. package/dist/lib/node/{chunk-WZR6OAN3.cjs.map → chunk-6P2DB4QQ.cjs.map} +2 -2
  43. package/dist/lib/node/{chunk-YZKNRFHU.cjs → chunk-IKIDS6XF.cjs} +10 -10
  44. package/dist/lib/node/chunk-IKIDS6XF.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-U6DYXAR3.cjs → chunk-PU2EYH4E.cjs} +27 -21
  46. package/dist/lib/node/chunk-PU2EYH4E.cjs.map +7 -0
  47. package/dist/lib/node/{chunk-OVGKWJOC.cjs → chunk-TUZWEPGX.cjs} +99 -66
  48. package/dist/lib/node/chunk-TUZWEPGX.cjs.map +7 -0
  49. package/dist/lib/node/{chunk-WAJKBO3J.cjs → chunk-WDEIFDTX.cjs} +19 -73
  50. package/dist/lib/node/chunk-WDEIFDTX.cjs.map +7 -0
  51. package/dist/lib/node/{identity-created-AXI64BLE.cjs → identity-created-XU4HFV2T.cjs} +7 -7
  52. package/dist/lib/node/index.cjs +102 -113
  53. package/dist/lib/node/index.cjs.map +3 -3
  54. package/dist/lib/node/{intent-resolver-QEIKJ5FR.cjs → intent-resolver-VJ7YV74L.cjs} +133 -107
  55. package/dist/lib/node/intent-resolver-VJ7YV74L.cjs.map +7 -0
  56. package/dist/lib/node/meta.json +1 -1
  57. package/dist/lib/node/{react-root-OW5NTN2U.cjs → react-root-TEL5RW3N.cjs} +12 -12
  58. package/dist/lib/node/{react-surface-JTIQUBHB.cjs → react-surface-2H3S5TY5.cjs} +78 -76
  59. package/dist/lib/node/react-surface-2H3S5TY5.cjs.map +7 -0
  60. package/dist/lib/node/{schema-YN7WVFRX.cjs → schema-PPJ5BZ3A.cjs} +7 -7
  61. package/dist/lib/node/{schema-tools-OZS4OC6X.cjs → schema-tools-BLIMOZYY.cjs} +5 -5
  62. package/dist/lib/node/schema-tools-BLIMOZYY.cjs.map +7 -0
  63. package/dist/lib/node/{settings-5QYFWNH7.cjs → settings-WVFP2UEP.cjs} +8 -8
  64. package/dist/lib/node/{spaces-ready-FQNAKR7G.cjs → spaces-ready-7DNZSUOG.cjs} +16 -16
  65. package/dist/lib/node/spaces-ready-7DNZSUOG.cjs.map +7 -0
  66. package/dist/lib/node/{state-57UE3DYE.cjs → state-5KX6WBJH.cjs} +10 -8
  67. package/dist/lib/node/state-5KX6WBJH.cjs.map +7 -0
  68. package/dist/lib/node/types/index.cjs +13 -21
  69. package/dist/lib/node/types/index.cjs.map +2 -2
  70. package/dist/lib/node-esm/{app-graph-builder-TERVM2SL.mjs → app-graph-builder-42IGWRPL.mjs} +33 -6
  71. package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs.map +7 -0
  72. package/dist/lib/node-esm/{app-graph-serializer-GZRSWHEN.mjs → app-graph-serializer-FXONFKOE.mjs} +7 -7
  73. package/dist/lib/node-esm/{app-graph-serializer-GZRSWHEN.mjs.map → app-graph-serializer-FXONFKOE.mjs.map} +2 -2
  74. package/dist/lib/node-esm/{chunk-2TQ2AJEZ.mjs → chunk-3ZOUV4DF.mjs} +22 -16
  75. package/dist/lib/node-esm/chunk-3ZOUV4DF.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-FDVNOFE3.mjs → chunk-BEWBZ4Q4.mjs} +853 -588
  77. package/dist/lib/node-esm/chunk-BEWBZ4Q4.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-TRNZQEEN.mjs → chunk-FC4UHDPL.mjs} +15 -65
  79. package/dist/lib/node-esm/chunk-FC4UHDPL.mjs.map +7 -0
  80. package/dist/lib/node-esm/{chunk-ICCM4YRJ.mjs → chunk-MSWEFAPD.mjs} +1 -1
  81. package/dist/lib/node-esm/chunk-MSWEFAPD.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-6RSVVEPS.mjs → chunk-PIYAWT5N.mjs} +3 -3
  83. package/dist/lib/node-esm/chunk-PIYAWT5N.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-PGH5L7MV.mjs → chunk-ZGLK25WQ.mjs} +49 -16
  85. package/dist/lib/node-esm/chunk-ZGLK25WQ.mjs.map +7 -0
  86. package/dist/lib/node-esm/{identity-created-3CGEXNPO.mjs → identity-created-WJKAS2PV.mjs} +3 -3
  87. package/dist/lib/node-esm/index.mjs +34 -45
  88. package/dist/lib/node-esm/index.mjs.map +3 -3
  89. package/dist/lib/node-esm/{intent-resolver-7EYVRN3R.mjs → intent-resolver-ZFNSA4CM.mjs} +69 -44
  90. package/dist/lib/node-esm/intent-resolver-ZFNSA4CM.mjs.map +7 -0
  91. package/dist/lib/node-esm/meta.json +1 -1
  92. package/dist/lib/node-esm/{react-root-RCKGZSZB.mjs → react-root-PRBJMWLQ.mjs} +6 -6
  93. package/dist/lib/node-esm/{react-surface-WKKBE5V4.mjs → react-surface-RCZG2PNF.mjs} +39 -38
  94. package/dist/lib/node-esm/react-surface-RCZG2PNF.mjs.map +7 -0
  95. package/dist/lib/node-esm/{schema-LOR2EVGY.mjs → schema-OUZKVYM5.mjs} +3 -3
  96. package/dist/lib/node-esm/{schema-tools-KJVXGDBO.mjs → schema-tools-IU7EX5A5.mjs} +3 -3
  97. package/dist/lib/node-esm/schema-tools-IU7EX5A5.mjs.map +7 -0
  98. package/dist/lib/node-esm/{settings-H6MXTEQM.mjs → settings-FJZPC2TV.mjs} +3 -3
  99. package/dist/lib/node-esm/{spaces-ready-HKAQG5SA.mjs → spaces-ready-7X5PGB2V.mjs} +8 -8
  100. package/dist/lib/node-esm/spaces-ready-7X5PGB2V.mjs.map +7 -0
  101. package/dist/lib/node-esm/{state-VYA6OFHD.mjs → state-Z6E2YTNC.mjs} +5 -3
  102. package/dist/lib/node-esm/state-Z6E2YTNC.mjs.map +7 -0
  103. package/dist/lib/node-esm/types/index.mjs +2 -10
  104. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/capabilities.d.ts +4 -3
  107. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/index.d.ts +0 -1
  109. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -2
  111. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  114. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  115. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  116. package/dist/types/src/components/MembersContainer.d.ts +7 -0
  117. package/dist/types/src/components/MembersContainer.d.ts.map +1 -0
  118. package/dist/types/src/components/MembersContainer.stories.d.ts +8 -0
  119. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -0
  120. package/dist/types/src/components/ObjectSettingsContainer/AdvancedObjectSettings.d.ts.map +1 -0
  121. package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts +8 -0
  122. package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts.map +1 -0
  123. package/dist/types/src/components/ObjectSettingsContainer/ForeignKeys.d.ts.map +1 -0
  124. package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts +8 -0
  125. package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts.map +1 -0
  126. package/dist/types/src/components/ObjectSettingsContainer/index.d.ts +2 -0
  127. package/dist/types/src/components/ObjectSettingsContainer/index.d.ts.map +1 -0
  128. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  129. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts +7 -0
  130. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts.map +1 -0
  131. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts +7 -0
  132. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +9 -0
  134. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -0
  135. package/dist/types/src/components/SpaceSettings/index.d.ts +2 -2
  136. package/dist/types/src/components/SpaceSettings/index.d.ts.map +1 -1
  137. package/dist/types/src/components/index.d.ts +2 -2
  138. package/dist/types/src/components/index.d.ts.map +1 -1
  139. package/dist/types/src/events.d.ts +1 -1
  140. package/dist/types/src/events.d.ts.map +1 -1
  141. package/dist/types/src/meta.d.ts +2 -5
  142. package/dist/types/src/meta.d.ts.map +1 -1
  143. package/dist/types/src/translations.d.ts +53 -36
  144. package/dist/types/src/translations.d.ts.map +1 -1
  145. package/dist/types/src/types/thread.d.ts +92 -197
  146. package/dist/types/src/types/thread.d.ts.map +1 -1
  147. package/dist/types/src/types/types.d.ts +10 -0
  148. package/dist/types/src/types/types.d.ts.map +1 -1
  149. package/dist/types/src/util.d.ts +12 -0
  150. package/dist/types/src/util.d.ts.map +1 -1
  151. package/package.json +44 -42
  152. package/src/SpacePlugin.tsx +6 -11
  153. package/src/capabilities/app-graph-builder.ts +20 -0
  154. package/src/capabilities/app-graph-serializer.ts +2 -2
  155. package/src/capabilities/capabilities.ts +3 -3
  156. package/src/capabilities/intent-resolver.ts +66 -38
  157. package/src/capabilities/react-surface.tsx +30 -28
  158. package/src/capabilities/schema-tools.ts +2 -2
  159. package/src/capabilities/spaces-ready.ts +3 -3
  160. package/src/capabilities/state.ts +2 -0
  161. package/src/components/CreateDialog/CreateObjectDialog.tsx +3 -6
  162. package/src/components/CreateDialog/CreateObjectPanel.tsx +6 -6
  163. package/src/components/JoinDialog.tsx +43 -27
  164. package/src/components/MembersContainer.stories.tsx +34 -0
  165. package/src/components/MembersContainer.tsx +257 -0
  166. package/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.tsx +2 -2
  167. package/src/components/ObjectSettingsContainer/BaseObjectSettings.tsx +47 -0
  168. package/src/components/ObjectSettingsContainer/ObjectSettingsContainer.tsx +36 -0
  169. package/src/components/ObjectSettingsContainer/index.ts +5 -0
  170. package/src/components/PopoverRenameObject.tsx +1 -1
  171. package/src/components/SpacePresence.tsx +25 -23
  172. package/src/components/SpaceSettings/{SpaceSettingsPanel.stories.tsx → SpacePropertiesForm.stories.tsx} +6 -6
  173. package/src/components/SpaceSettings/SpacePropertiesForm.tsx +136 -0
  174. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +63 -0
  175. package/src/components/SpaceSettings/index.ts +2 -2
  176. package/src/components/SyncStatus/SyncStatus.tsx +1 -1
  177. package/src/components/SyncStatus/save-tracker.ts +5 -5
  178. package/src/components/index.ts +2 -2
  179. package/src/events.ts +2 -2
  180. package/src/meta.ts +2 -2
  181. package/src/translations.ts +21 -12
  182. package/src/types/thread.ts +2 -56
  183. package/src/types/types.ts +15 -6
  184. package/src/util.tsx +30 -9
  185. package/dist/lib/browser/app-graph-builder-MGK5HWPZ.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-23RVI5FZ.mjs.map +0 -7
  187. package/dist/lib/browser/chunk-NU7WDVGN.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-OWVFWTX4.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-PQXZCNAU.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-UDWHTKB5.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-ULA2UQJ4.mjs.map +0 -7
  192. package/dist/lib/browser/intent-resolver-7PY5WDYC.mjs.map +0 -7
  193. package/dist/lib/browser/react-surface-VNNI5POA.mjs.map +0 -7
  194. package/dist/lib/browser/schema-tools-6J5ZEDBC.mjs.map +0 -7
  195. package/dist/lib/browser/spaces-ready-K47RR7N2.mjs.map +0 -7
  196. package/dist/lib/browser/state-INJ63O57.mjs.map +0 -7
  197. package/dist/lib/node/app-graph-builder-ZIUBXRPA.cjs.map +0 -7
  198. package/dist/lib/node/chunk-53J7HLYX.cjs.map +0 -7
  199. package/dist/lib/node/chunk-OVGKWJOC.cjs.map +0 -7
  200. package/dist/lib/node/chunk-U6DYXAR3.cjs.map +0 -7
  201. package/dist/lib/node/chunk-WAJKBO3J.cjs.map +0 -7
  202. package/dist/lib/node/chunk-YZKNRFHU.cjs.map +0 -7
  203. package/dist/lib/node/intent-resolver-QEIKJ5FR.cjs.map +0 -7
  204. package/dist/lib/node/react-surface-JTIQUBHB.cjs.map +0 -7
  205. package/dist/lib/node/schema-tools-OZS4OC6X.cjs.map +0 -7
  206. package/dist/lib/node/spaces-ready-FQNAKR7G.cjs.map +0 -7
  207. package/dist/lib/node/state-57UE3DYE.cjs.map +0 -7
  208. package/dist/lib/node-esm/app-graph-builder-TERVM2SL.mjs.map +0 -7
  209. package/dist/lib/node-esm/chunk-2TQ2AJEZ.mjs.map +0 -7
  210. package/dist/lib/node-esm/chunk-6RSVVEPS.mjs.map +0 -7
  211. package/dist/lib/node-esm/chunk-FDVNOFE3.mjs.map +0 -7
  212. package/dist/lib/node-esm/chunk-ICCM4YRJ.mjs.map +0 -7
  213. package/dist/lib/node-esm/chunk-PGH5L7MV.mjs.map +0 -7
  214. package/dist/lib/node-esm/chunk-TRNZQEEN.mjs.map +0 -7
  215. package/dist/lib/node-esm/intent-resolver-7EYVRN3R.mjs.map +0 -7
  216. package/dist/lib/node-esm/react-surface-WKKBE5V4.mjs.map +0 -7
  217. package/dist/lib/node-esm/schema-tools-KJVXGDBO.mjs.map +0 -7
  218. package/dist/lib/node-esm/spaces-ready-HKAQG5SA.mjs.map +0 -7
  219. package/dist/lib/node-esm/state-VYA6OFHD.mjs.map +0 -7
  220. package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
  221. package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts.map +0 -1
  222. package/dist/types/src/components/AdvancedObjectSettings/index.d.ts +0 -2
  223. package/dist/types/src/components/AdvancedObjectSettings/index.d.ts.map +0 -1
  224. package/dist/types/src/components/BaseObjectSettings.d.ts +0 -7
  225. package/dist/types/src/components/BaseObjectSettings.d.ts.map +0 -1
  226. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts +0 -11
  227. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +0 -1
  228. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.stories.d.ts +0 -7
  229. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.stories.d.ts.map +0 -1
  230. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts +0 -7
  231. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts.map +0 -1
  232. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts +0 -7
  233. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts.map +0 -1
  234. package/src/components/AdvancedObjectSettings/index.ts +0 -5
  235. package/src/components/BaseObjectSettings.tsx +0 -40
  236. package/src/components/SpaceSettings/SpaceSettingsDialog.stories.tsx +0 -43
  237. package/src/components/SpaceSettings/SpaceSettingsDialog.tsx +0 -120
  238. package/src/components/SpaceSettings/SpaceSettingsPanel.tsx +0 -83
  239. /package/dist/lib/browser/{identity-created-FYGS6TBH.mjs.map → identity-created-JR7BNXFH.mjs.map} +0 -0
  240. /package/dist/lib/browser/{react-root-EP4XP4IK.mjs.map → react-root-6H7NX2M2.mjs.map} +0 -0
  241. /package/dist/lib/browser/{schema-5W3DSY2E.mjs.map → schema-FHTA26SW.mjs.map} +0 -0
  242. /package/dist/lib/browser/{settings-PHPCXX33.mjs.map → settings-PJPTJUPE.mjs.map} +0 -0
  243. /package/dist/lib/node/{identity-created-AXI64BLE.cjs.map → identity-created-XU4HFV2T.cjs.map} +0 -0
  244. /package/dist/lib/node/{react-root-OW5NTN2U.cjs.map → react-root-TEL5RW3N.cjs.map} +0 -0
  245. /package/dist/lib/node/{schema-YN7WVFRX.cjs.map → schema-PPJ5BZ3A.cjs.map} +0 -0
  246. /package/dist/lib/node/{settings-5QYFWNH7.cjs.map → settings-WVFP2UEP.cjs.map} +0 -0
  247. /package/dist/lib/node-esm/{identity-created-3CGEXNPO.mjs.map → identity-created-WJKAS2PV.mjs.map} +0 -0
  248. /package/dist/lib/node-esm/{react-root-RCKGZSZB.mjs.map → react-root-PRBJMWLQ.mjs.map} +0 -0
  249. /package/dist/lib/node-esm/{schema-LOR2EVGY.mjs.map → schema-OUZKVYM5.mjs.map} +0 -0
  250. /package/dist/lib/node-esm/{settings-H6MXTEQM.mjs.map → settings-FJZPC2TV.mjs.map} +0 -0
  251. /package/dist/types/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.d.ts +0 -0
  252. /package/dist/types/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/ForeignKeys.d.ts +0 -0
  253. /package/src/components/{AdvancedObjectSettings → ObjectSettingsContainer}/ForeignKeys.tsx +0 -0
@@ -1,129 +1,35 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  SpaceCapabilities
4
- } from "./chunk-6RSVVEPS.mjs";
4
+ } from "./chunk-PIYAWT5N.mjs";
5
5
  import {
6
- COMPOSER_SPACE_LOCK,
7
6
  getSpaceDisplayName
8
- } from "./chunk-PGH5L7MV.mjs";
7
+ } from "./chunk-ZGLK25WQ.mjs";
9
8
  import {
10
9
  CollectionType,
11
10
  SpaceAction,
12
11
  SpaceForm
13
- } from "./chunk-TRNZQEEN.mjs";
12
+ } from "./chunk-FC4UHDPL.mjs";
14
13
  import {
15
- SPACE_PLUGIN
16
- } from "./chunk-ICCM4YRJ.mjs";
17
-
18
- // packages/plugins/plugin-space/src/components/AdvancedObjectSettings/AdvancedObjectSettings.tsx
19
- import React2, { useCallback as useCallback2, useState } from "react";
20
- import { ForeignKeySchema } from "@dxos/echo-schema";
21
- import { getMeta } from "@dxos/react-client/echo";
22
- import { IconButton as IconButton2, useTranslation as useTranslation2, Separator } from "@dxos/react-ui";
23
- import { Form } from "@dxos/react-ui-form";
24
-
25
- // packages/plugins/plugin-space/src/components/AdvancedObjectSettings/ForeignKeys.tsx
26
- import React, { useCallback } from "react";
27
- import { IconButton, List, ListItem, useTranslation } from "@dxos/react-ui";
28
- var ForeignKeys = ({ keys, onDelete }) => {
29
- return /* @__PURE__ */ React.createElement(List, {
30
- classNames: "flex flex-col gap-2"
31
- }, keys.map((key) => /* @__PURE__ */ React.createElement(KeyItem, {
32
- key: key.id,
33
- forignKey: key,
34
- onDelete
35
- })));
36
- };
37
- var KeyItem = ({ forignKey, onDelete }) => {
38
- const { t } = useTranslation(SPACE_PLUGIN);
39
- const handleDelete = useCallback(() => {
40
- onDelete?.(forignKey);
41
- }, [
42
- forignKey,
43
- onDelete
44
- ]);
45
- return /* @__PURE__ */ React.createElement(ListItem.Root, {
46
- classNames: "px-2"
47
- }, /* @__PURE__ */ React.createElement(ListItem.Heading, {
48
- classNames: "flex flex-col grow truncate"
49
- }, /* @__PURE__ */ React.createElement("div", null, forignKey.source), /* @__PURE__ */ React.createElement("div", {
50
- className: "text-description text-sm truncate"
51
- }, forignKey.id)), /* @__PURE__ */ React.createElement(ListItem.Endcap, null, /* @__PURE__ */ React.createElement(IconButton, {
52
- iconOnly: true,
53
- icon: "ph--x--regular",
54
- variant: "ghost",
55
- label: t("delete key"),
56
- onClick: handleDelete
57
- })));
58
- };
59
-
60
- // packages/plugins/plugin-space/src/components/AdvancedObjectSettings/AdvancedObjectSettings.tsx
61
- var initialValues = {
62
- source: "",
63
- id: ""
64
- };
65
- var AdvancedObjectSettings = ({ object }) => {
66
- const { t } = useTranslation2(SPACE_PLUGIN);
67
- const [adding, setAdding] = useState(false);
68
- const keys = getMeta(object).keys;
69
- const handleNew = useCallback2(() => setAdding(true), []);
70
- const handleCancel = useCallback2(() => setAdding(false), []);
71
- const handleSave = useCallback2((key) => {
72
- const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
73
- if (index === -1) {
74
- keys.push(key);
75
- }
76
- setAdding(false);
77
- }, [
78
- keys
79
- ]);
80
- const handleDelete = useCallback2((key) => {
81
- const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
82
- if (index !== -1) {
83
- keys.splice(index, 1);
84
- }
85
- }, [
86
- keys
87
- ]);
88
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Separator, null), /* @__PURE__ */ React2.createElement("div", {
89
- className: "p-2 flex flex-col gap-4"
90
- }, /* @__PURE__ */ React2.createElement("h2", null, t("advanced settings label")), /* @__PURE__ */ React2.createElement("div", {
91
- className: "flex items-center"
92
- }, /* @__PURE__ */ React2.createElement("h3", {
93
- className: "text-sm font-semibold"
94
- }, t("foreign keys")), /* @__PURE__ */ React2.createElement("div", {
95
- className: "grow"
96
- }), /* @__PURE__ */ React2.createElement(IconButton2, {
97
- classNames: adding && "invisible",
98
- icon: "ph--plus--regular",
99
- label: t("add key"),
100
- onClick: handleNew
101
- })), !adding && /* @__PURE__ */ React2.createElement(ForeignKeys, {
102
- keys,
103
- onDelete: handleDelete
104
- })), adding && /* @__PURE__ */ React2.createElement(Form, {
105
- schema: ForeignKeySchema,
106
- values: initialValues,
107
- onSave: handleSave,
108
- onCancel: handleCancel
109
- }));
110
- };
14
+ SPACE_PLUGIN,
15
+ meta
16
+ } from "./chunk-MSWEFAPD.mjs";
111
17
 
112
18
  // packages/plugins/plugin-space/src/components/AwaitingObject.tsx
113
19
  import { CheckCircle, CircleDashed, CircleNotch } from "@phosphor-icons/react";
114
- import React3, { useCallback as useCallback3, useEffect, useState as useState2 } from "react";
20
+ import React, { useCallback, useEffect, useState } from "react";
115
21
  import { createIntent, LayoutAction, useIntentDispatcher, useLayout } from "@dxos/app-framework";
116
22
  import { useClient } from "@dxos/react-client";
117
23
  import { Filter, fullyQualifiedId, useQuery } from "@dxos/react-client/echo";
118
- import { Button, Toast, useTranslation as useTranslation3 } from "@dxos/react-ui";
24
+ import { Button, Toast, useTranslation } from "@dxos/react-ui";
119
25
  import { getSize, mx } from "@dxos/react-ui-theme";
120
26
  var WAIT_FOR_OBJECT_TIMEOUT = 18e4;
121
27
  var TOAST_TIMEOUT = 24e4;
122
28
  var AwaitingObject = ({ id }) => {
123
- const [open, setOpen] = useState2(true);
124
- const [waiting, setWaiting] = useState2(true);
125
- const [found, setFound] = useState2(false);
126
- const { t } = useTranslation3(SPACE_PLUGIN);
29
+ const [open, setOpen] = useState(true);
30
+ const [waiting, setWaiting] = useState(true);
31
+ const [found, setFound] = useState(false);
32
+ const { t } = useTranslation(SPACE_PLUGIN);
127
33
  const { dispatchPromise: dispatch } = useIntentDispatcher();
128
34
  const layout = useLayout();
129
35
  const client = useClient();
@@ -151,12 +57,12 @@ var AwaitingObject = ({ id }) => {
151
57
  objects,
152
58
  layout
153
59
  ]);
154
- const handleClose = useCallback3(async () => dispatch(createIntent(SpaceAction.WaitForObject, {
60
+ const handleClose = useCallback(async () => dispatch(createIntent(SpaceAction.WaitForObject, {
155
61
  id: void 0
156
62
  })), [
157
63
  dispatch
158
64
  ]);
159
- const handleNavigate = useCallback3(() => {
65
+ const handleNavigate = useCallback(() => {
160
66
  void dispatch(createIntent(LayoutAction.Open, {
161
67
  part: "main",
162
68
  subject: [
@@ -169,86 +75,62 @@ var AwaitingObject = ({ id }) => {
169
75
  handleClose,
170
76
  dispatch
171
77
  ]);
172
- return /* @__PURE__ */ React3.createElement(Toast.Root, {
78
+ return /* @__PURE__ */ React.createElement(Toast.Root, {
173
79
  open,
174
80
  duration: TOAST_TIMEOUT,
175
81
  onOpenChange: setOpen
176
- }, /* @__PURE__ */ React3.createElement(Toast.Body, null, /* @__PURE__ */ React3.createElement(Toast.Title, {
82
+ }, /* @__PURE__ */ React.createElement(Toast.Body, null, /* @__PURE__ */ React.createElement(Toast.Title, {
177
83
  classNames: "flex items-center gap-2"
178
- }, found ? /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(CheckCircle, {
84
+ }, found ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(CheckCircle, {
179
85
  className: getSize(5)
180
- }), /* @__PURE__ */ React3.createElement("span", null, t("found object label"))) : waiting ? /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(CircleNotch, {
86
+ }), /* @__PURE__ */ React.createElement("span", null, t("found object label"))) : waiting ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(CircleNotch, {
181
87
  className: mx(getSize(5), "animate-spin")
182
- }), /* @__PURE__ */ React3.createElement("span", null, t("waiting for object label"))) : /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(CircleDashed, {
88
+ }), /* @__PURE__ */ React.createElement("span", null, t("waiting for object label"))) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(CircleDashed, {
183
89
  className: getSize(5)
184
- }), /* @__PURE__ */ React3.createElement("span", null, t("object not found label")))), /* @__PURE__ */ React3.createElement(Toast.Description, null, t(found ? "found object description" : waiting ? "waiting for object description" : "object not found description"))), /* @__PURE__ */ React3.createElement(Toast.Actions, null, found ? /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(Toast.Action, {
90
+ }), /* @__PURE__ */ React.createElement("span", null, t("object not found label")))), /* @__PURE__ */ React.createElement(Toast.Description, null, t(found ? "found object description" : waiting ? "waiting for object description" : "object not found description"))), /* @__PURE__ */ React.createElement(Toast.Actions, null, found ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Toast.Action, {
185
91
  altText: t("go to object alt"),
186
92
  asChild: true
187
- }, /* @__PURE__ */ React3.createElement(Button, {
93
+ }, /* @__PURE__ */ React.createElement(Button, {
188
94
  variant: "primary",
189
95
  onClick: handleNavigate
190
- }, t("go to object label"))), /* @__PURE__ */ React3.createElement(Toast.Close, {
96
+ }, t("go to object label"))), /* @__PURE__ */ React.createElement(Toast.Close, {
191
97
  asChild: true
192
- }, /* @__PURE__ */ React3.createElement(Button, {
98
+ }, /* @__PURE__ */ React.createElement(Button, {
193
99
  onClick: handleClose
194
100
  }, t("close label", {
195
101
  ns: "appkit"
196
- })))) : /* @__PURE__ */ React3.createElement(Toast.Close, {
102
+ })))) : /* @__PURE__ */ React.createElement(Toast.Close, {
197
103
  asChild: true
198
- }, /* @__PURE__ */ React3.createElement(Button, {
104
+ }, /* @__PURE__ */ React.createElement(Button, {
199
105
  onClick: handleClose
200
106
  }, t(waiting ? "close label" : "confirm label", {
201
107
  ns: "appkit"
202
108
  })))));
203
109
  };
204
110
 
205
- // packages/plugins/plugin-space/src/components/BaseObjectSettings.tsx
206
- import React4 from "react";
207
- import { Input, useTranslation as useTranslation4 } from "@dxos/react-ui";
208
- var BaseObjectSettings = ({ object }) => {
209
- const { t } = useTranslation4(SPACE_PLUGIN);
210
- const inputRef = React4.useRef(null);
211
- return /* @__PURE__ */ React4.createElement("div", {
212
- role: "form",
213
- className: "flex flex-col w-full p-2 gap-1"
214
- }, /* @__PURE__ */ React4.createElement(Input.Root, null, /* @__PURE__ */ React4.createElement(Input.Label, null, t("name label")), /* @__PURE__ */ React4.createElement(Input.TextInput, {
215
- ref: inputRef,
216
- placeholder: t("name placeholder"),
217
- value: object.name ?? "",
218
- onChange: (event) => {
219
- object.name = event.target.value;
220
- },
221
- onKeyDown: (event) => {
222
- if (event.key === "Enter") {
223
- inputRef.current?.blur();
224
- }
225
- }
226
- })));
227
- };
228
-
229
111
  // packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx
230
112
  import { pipe } from "effect";
231
- import React6, { useCallback as useCallback5, useRef } from "react";
113
+ import React3, { useCallback as useCallback3, useRef } from "react";
232
114
  import { Capabilities, chain, createIntent as createIntent2, LayoutAction as LayoutAction2, useCapabilities, useIntentDispatcher as useIntentDispatcher2, usePluginManager as usePluginManager2 } from "@dxos/app-framework";
233
115
  import { invariant as invariant2 } from "@dxos/invariant";
234
116
  import { useClient as useClient2 } from "@dxos/react-client";
235
117
  import { getSpace, isReactiveObject, isSpace, useSpaces } from "@dxos/react-client/echo";
236
- import { Button as Button2, Dialog, Icon as Icon2, useTranslation as useTranslation6 } from "@dxos/react-ui";
118
+ import { Button as Button2, Dialog, Icon as Icon2, useTranslation as useTranslation3 } from "@dxos/react-ui";
237
119
 
238
120
  // packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectPanel.tsx
239
- import React5, { useCallback as useCallback4, useState as useState3 } from "react";
121
+ import React2, { useCallback as useCallback2, useState as useState2 } from "react";
240
122
  import { Surface, isSurfaceAvailable, usePluginManager } from "@dxos/app-framework";
241
- import { getObjectAnnotation } from "@dxos/echo-schema";
123
+ import { getTypeAnnotation } from "@dxos/echo-schema";
242
124
  import { invariant } from "@dxos/invariant";
243
- import { Icon, toLocalizedString, useTranslation as useTranslation5 } from "@dxos/react-ui";
244
- import { Form as Form2 } from "@dxos/react-ui-form";
125
+ import { Icon, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
126
+ import { Form } from "@dxos/react-ui-form";
245
127
  import { SearchList } from "@dxos/react-ui-searchlist";
246
128
  import { mx as mx2 } from "@dxos/react-ui-theme";
247
129
  import { isNonNullable } from "@dxos/util";
248
130
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectPanel.tsx";
249
131
  var useInputSurfaceLookup = (baseData) => {
250
132
  const pluginManager = usePluginManager();
251
- return useCallback4(({ prop, schema, inputProps }) => {
133
+ return useCallback2(({ prop, schema, inputProps }) => {
252
134
  const composedData = {
253
135
  prop,
254
136
  schema,
@@ -260,7 +142,7 @@ var useInputSurfaceLookup = (baseData) => {
260
142
  })) {
261
143
  return void 0;
262
144
  }
263
- return /* @__PURE__ */ React5.createElement(Surface, {
145
+ return /* @__PURE__ */ React2.createElement(Surface, {
264
146
  role: "form-input",
265
147
  data: composedData,
266
148
  ...inputProps
@@ -271,11 +153,11 @@ var useInputSurfaceLookup = (baseData) => {
271
153
  ]);
272
154
  };
273
155
  var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename, target: initialTarget, name: initialName, defaultSpaceId, resolve, onCreateObject }) => {
274
- const { t } = useTranslation5(SPACE_PLUGIN);
275
- const [typename, setTypename] = useState3(initialTypename);
276
- const [target, setTarget] = useState3(initialTarget);
277
- const form = forms.find((form2) => getObjectAnnotation(form2.objectSchema)?.typename === typename);
278
- const options = forms.map((form2) => getObjectAnnotation(form2.objectSchema)).filter(isNonNullable).sort((a, b) => {
156
+ const { t } = useTranslation2(SPACE_PLUGIN);
157
+ const [typename, setTypename] = useState2(initialTypename);
158
+ const [target, setTarget] = useState2(initialTarget);
159
+ const form = forms.find((form2) => getTypeAnnotation(form2.objectSchema)?.typename === typename);
160
+ const options = forms.map((form2) => getTypeAnnotation(form2.objectSchema)).filter(isNonNullable).sort((a, b) => {
279
161
  const nameA = t("typename label", {
280
162
  ns: a.typename,
281
163
  defaultValue: a.typename
@@ -286,7 +168,7 @@ var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename,
286
168
  });
287
169
  return nameA.localeCompare(nameB);
288
170
  });
289
- const handleCreateObject = useCallback4(async (props) => {
171
+ const handleCreateObject = useCallback2(async (props) => {
290
172
  if (!form || !target) {
291
173
  return;
292
174
  }
@@ -300,7 +182,7 @@ var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename,
300
182
  form,
301
183
  target
302
184
  ]);
303
- const handleSetTypename = useCallback4(async (typename2) => {
185
+ const handleSetTypename = useCallback2(async (typename2) => {
304
186
  invariant(target, "target is required", {
305
187
  F: __dxlog_file,
306
188
  L: 94,
@@ -310,7 +192,7 @@ var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename,
310
192
  "'target is required'"
311
193
  ]
312
194
  });
313
- const form2 = forms.find((form3) => getObjectAnnotation(form3.objectSchema)?.typename === typename2);
195
+ const form2 = forms.find((form3) => getTypeAnnotation(form3.objectSchema)?.typename === typename2);
314
196
  if (form2 && !form2.formSchema) {
315
197
  await onCreateObject?.({
316
198
  form: form2,
@@ -327,18 +209,18 @@ var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename,
327
209
  const inputSurfaceLookup = useInputSurfaceLookup({
328
210
  target
329
211
  });
330
- return /* @__PURE__ */ React5.createElement("div", {
212
+ return /* @__PURE__ */ React2.createElement("div", {
331
213
  role: "form",
332
214
  className: mx2("flex flex-col gap-2", classNames)
333
- }, !form ? /* @__PURE__ */ React5.createElement(SelectSchema, {
215
+ }, !form ? /* @__PURE__ */ React2.createElement(SelectSchema, {
334
216
  options,
335
217
  resolve,
336
218
  onChange: handleSetTypename
337
- }) : !target ? /* @__PURE__ */ React5.createElement(SelectSpace, {
219
+ }) : !target ? /* @__PURE__ */ React2.createElement(SelectSpace, {
338
220
  spaces,
339
221
  defaultSpaceId,
340
222
  onChange: setTarget
341
- }) : form.formSchema ? /* @__PURE__ */ React5.createElement(Form2, {
223
+ }) : form.formSchema ? /* @__PURE__ */ React2.createElement(Form, {
342
224
  classNames: "!p-0",
343
225
  autoFocus: true,
344
226
  values: {
@@ -351,16 +233,16 @@ var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename,
351
233
  }) : void 0);
352
234
  };
353
235
  var SelectSpace = ({ spaces, defaultSpaceId, onChange }) => {
354
- const { t } = useTranslation5(SPACE_PLUGIN);
355
- return /* @__PURE__ */ React5.createElement(SearchList.Root, {
236
+ const { t } = useTranslation2(SPACE_PLUGIN);
237
+ return /* @__PURE__ */ React2.createElement(SearchList.Root, {
356
238
  label: t("space input label"),
357
239
  classNames: "flex flex-col grow overflow-hidden"
358
- }, /* @__PURE__ */ React5.createElement(SearchList.Input, {
240
+ }, /* @__PURE__ */ React2.createElement(SearchList.Input, {
359
241
  autoFocus: true,
360
242
  "data-testid": "create-object-form.space-input",
361
243
  placeholder: t("space input placeholder"),
362
244
  classNames: "px-1 my-2"
363
- }), /* @__PURE__ */ React5.createElement(SearchList.Content, {
245
+ }), /* @__PURE__ */ React2.createElement(SearchList.Content, {
364
246
  classNames: "max-bs-[24rem] overflow-auto"
365
247
  }, spaces.sort((a, b) => {
366
248
  const aName = toLocalizedString(getSpaceDisplayName(a, {
@@ -370,32 +252,32 @@ var SelectSpace = ({ spaces, defaultSpaceId, onChange }) => {
370
252
  personal: b.id === defaultSpaceId
371
253
  }), t);
372
254
  return aName.localeCompare(bName);
373
- }).map((space) => /* @__PURE__ */ React5.createElement(SearchList.Item, {
255
+ }).map((space) => /* @__PURE__ */ React2.createElement(SearchList.Item, {
374
256
  key: space.id,
375
257
  value: toLocalizedString(getSpaceDisplayName(space, {
376
258
  personal: space.id === defaultSpaceId
377
259
  }), t),
378
260
  onSelect: () => onChange(space),
379
261
  classNames: "flex items-center gap-2"
380
- }, /* @__PURE__ */ React5.createElement("span", {
262
+ }, /* @__PURE__ */ React2.createElement("span", {
381
263
  className: "grow truncate"
382
264
  }, toLocalizedString(getSpaceDisplayName(space, {
383
265
  personal: space.id === defaultSpaceId
384
266
  }), t))))));
385
267
  };
386
268
  var SelectSchema = ({ options, resolve, onChange }) => {
387
- const { t } = useTranslation5(SPACE_PLUGIN);
388
- return /* @__PURE__ */ React5.createElement(SearchList.Root, {
269
+ const { t } = useTranslation2(SPACE_PLUGIN);
270
+ return /* @__PURE__ */ React2.createElement(SearchList.Root, {
389
271
  label: t("schema input label"),
390
272
  classNames: "flex flex-col grow overflow-hidden"
391
- }, /* @__PURE__ */ React5.createElement(SearchList.Input, {
273
+ }, /* @__PURE__ */ React2.createElement(SearchList.Input, {
392
274
  autoFocus: true,
393
275
  "data-testid": "create-object-form.schema-input",
394
276
  placeholder: t("schema input placeholder"),
395
277
  classNames: "px-1 my-2"
396
- }), /* @__PURE__ */ React5.createElement(SearchList.Content, {
278
+ }), /* @__PURE__ */ React2.createElement(SearchList.Content, {
397
279
  classNames: "max-bs-[24rem] overflow-auto"
398
- }, options.map((option) => /* @__PURE__ */ React5.createElement(SearchList.Item, {
280
+ }, options.map((option) => /* @__PURE__ */ React2.createElement(SearchList.Item, {
399
281
  key: option.typename,
400
282
  value: t("typename label", {
401
283
  ns: option.typename,
@@ -403,9 +285,9 @@ var SelectSchema = ({ options, resolve, onChange }) => {
403
285
  }),
404
286
  onSelect: () => onChange(option.typename),
405
287
  classNames: "flex items-center gap-2"
406
- }, /* @__PURE__ */ React5.createElement("span", {
288
+ }, /* @__PURE__ */ React2.createElement("span", {
407
289
  className: "flex gap-2 items-center grow truncate"
408
- }, /* @__PURE__ */ React5.createElement(Icon, {
290
+ }, /* @__PURE__ */ React2.createElement(Icon, {
409
291
  icon: resolve?.(option.typename).icon ?? "ph--placeholder--regular",
410
292
  size: 5
411
293
  }), t("typename label", {
@@ -416,17 +298,17 @@ var SelectSchema = ({ options, resolve, onChange }) => {
416
298
 
417
299
  // packages/plugins/plugin-space/src/capabilities/index.ts
418
300
  import { lazy } from "@dxos/app-framework";
419
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-TERVM2SL.mjs"));
420
- var AppGraphSerializer = lazy(() => import("./app-graph-serializer-GZRSWHEN.mjs"));
421
- var IdentityCreated = lazy(() => import("./identity-created-3CGEXNPO.mjs"));
422
- var IntentResolver = lazy(() => import("./intent-resolver-7EYVRN3R.mjs"));
423
- var ReactRoot = lazy(() => import("./react-root-RCKGZSZB.mjs"));
424
- var ReactSurface = lazy(() => import("./react-surface-WKKBE5V4.mjs"));
425
- var Schema = lazy(() => import("./schema-LOR2EVGY.mjs"));
426
- var Tools = lazy(() => import("./schema-tools-KJVXGDBO.mjs"));
427
- var SpaceSettings = lazy(() => import("./settings-H6MXTEQM.mjs"));
428
- var SpaceState = lazy(() => import("./state-VYA6OFHD.mjs"));
429
- var SpacesReady = lazy(() => import("./spaces-ready-HKAQG5SA.mjs"));
301
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-42IGWRPL.mjs"));
302
+ var AppGraphSerializer = lazy(() => import("./app-graph-serializer-FXONFKOE.mjs"));
303
+ var IdentityCreated = lazy(() => import("./identity-created-WJKAS2PV.mjs"));
304
+ var IntentResolver = lazy(() => import("./intent-resolver-ZFNSA4CM.mjs"));
305
+ var ReactRoot = lazy(() => import("./react-root-PRBJMWLQ.mjs"));
306
+ var ReactSurface = lazy(() => import("./react-surface-RCZG2PNF.mjs"));
307
+ var Schema = lazy(() => import("./schema-OUZKVYM5.mjs"));
308
+ var Tools = lazy(() => import("./schema-tools-IU7EX5A5.mjs"));
309
+ var SpaceSettings = lazy(() => import("./settings-FJZPC2TV.mjs"));
310
+ var SpaceState = lazy(() => import("./state-Z6E2YTNC.mjs"));
311
+ var SpacesReady = lazy(() => import("./spaces-ready-7X5PGB2V.mjs"));
430
312
 
431
313
  // packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx
432
314
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx";
@@ -434,16 +316,15 @@ var CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
434
316
  var CreateObjectDialog = ({ target, typename, name, shouldNavigate: _shouldNavigate }) => {
435
317
  const closeRef = useRef(null);
436
318
  const manager = usePluginManager2();
437
- const { t } = useTranslation6(SPACE_PLUGIN);
319
+ const { t } = useTranslation3(SPACE_PLUGIN);
438
320
  const client = useClient2();
439
321
  const spaces = useSpaces();
440
322
  const { dispatchPromise: dispatch } = useIntentDispatcher2();
441
323
  const forms = useCapabilities(SpaceCapabilities.ObjectForm);
442
- const resolve = useCallback5((typename2) => manager.context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename2)?.metadata ?? {}, [
324
+ const resolve = useCallback3((typename2) => manager.context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename2)?.metadata ?? {}, [
443
325
  manager
444
326
  ]);
445
- const handleCreateObject = useCallback5(async ({ form, target: _target, data = {} }) => {
446
- const target2 = isSpace(_target) ? _target.properties[CollectionType.typename]?.target : _target;
327
+ const handleCreateObject = useCallback3(async ({ form, target: target2, data = {} }) => {
447
328
  if (!target2) {
448
329
  return;
449
330
  }
@@ -451,7 +332,7 @@ var CreateObjectDialog = ({ target, typename, name, shouldNavigate: _shouldNavig
451
332
  const space = isSpace(target2) ? target2 : getSpace(target2);
452
333
  invariant2(space, "Missing space", {
453
334
  F: __dxlog_file2,
454
- L: 75,
335
+ L: 72,
455
336
  S: void 0,
456
337
  A: [
457
338
  "space",
@@ -465,7 +346,8 @@ var CreateObjectDialog = ({ target, typename, name, shouldNavigate: _shouldNavig
465
346
  if (isReactiveObject(object)) {
466
347
  const addObjectIntent = createIntent2(SpaceAction.AddObject, {
467
348
  target: target2,
468
- object
349
+ object,
350
+ hidden: form.hidden
469
351
  });
470
352
  const shouldNavigate = _shouldNavigate ?? (() => true);
471
353
  if (shouldNavigate(object)) {
@@ -483,22 +365,22 @@ var CreateObjectDialog = ({ target, typename, name, shouldNavigate: _shouldNavig
483
365
  return (
484
366
  // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
485
367
  // Consider factoring it out to the tabs package.
486
- /* @__PURE__ */ React6.createElement(Dialog.Content, {
368
+ /* @__PURE__ */ React3.createElement(Dialog.Content, {
487
369
  classNames: "p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden"
488
- }, /* @__PURE__ */ React6.createElement("div", {
370
+ }, /* @__PURE__ */ React3.createElement("div", {
489
371
  role: "none",
490
372
  className: "flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4"
491
- }, /* @__PURE__ */ React6.createElement(Dialog.Title, null, t("create object dialog title")), /* @__PURE__ */ React6.createElement(Dialog.Close, {
373
+ }, /* @__PURE__ */ React3.createElement(Dialog.Title, null, t("create object dialog title")), /* @__PURE__ */ React3.createElement(Dialog.Close, {
492
374
  asChild: true
493
- }, /* @__PURE__ */ React6.createElement(Button2, {
375
+ }, /* @__PURE__ */ React3.createElement(Button2, {
494
376
  ref: closeRef,
495
377
  density: "fine",
496
378
  variant: "ghost",
497
379
  autoFocus: true
498
- }, /* @__PURE__ */ React6.createElement(Icon2, {
380
+ }, /* @__PURE__ */ React3.createElement(Icon2, {
499
381
  icon: "ph--x--regular",
500
382
  size: 4
501
- })))), /* @__PURE__ */ React6.createElement(CreateObjectPanel, {
383
+ })))), /* @__PURE__ */ React3.createElement(CreateObjectPanel, {
502
384
  classNames: "p-4",
503
385
  forms,
504
386
  spaces,
@@ -514,19 +396,19 @@ var CreateObjectDialog = ({ target, typename, name, shouldNavigate: _shouldNavig
514
396
 
515
397
  // packages/plugins/plugin-space/src/components/CreateDialog/CreateSpaceDialog.tsx
516
398
  import { Effect } from "effect";
517
- import React7, { useCallback as useCallback6, useRef as useRef2 } from "react";
399
+ import React4, { useCallback as useCallback4, useRef as useRef2 } from "react";
518
400
  import { createIntent as createIntent3, LayoutAction as LayoutAction3, useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework";
519
- import { Button as Button3, Dialog as Dialog2, Icon as Icon3, useTranslation as useTranslation7 } from "@dxos/react-ui";
520
- import { Form as Form3 } from "@dxos/react-ui-form";
401
+ import { Button as Button3, Dialog as Dialog2, Icon as Icon3, useTranslation as useTranslation4 } from "@dxos/react-ui";
402
+ import { Form as Form2 } from "@dxos/react-ui-form";
521
403
  var CREATE_SPACE_DIALOG = `${SPACE_PLUGIN}/CreateSpaceDialog`;
522
- var initialValues2 = {
404
+ var initialValues = {
523
405
  edgeReplication: true
524
406
  };
525
407
  var CreateSpaceDialog = () => {
526
408
  const closeRef = useRef2(null);
527
- const { t } = useTranslation7(SPACE_PLUGIN);
409
+ const { t } = useTranslation4(SPACE_PLUGIN);
528
410
  const { dispatch } = useIntentDispatcher3();
529
- const handleCreateSpace = useCallback6(async (data) => {
411
+ const handleCreateSpace = useCallback4(async (data) => {
530
412
  const program = Effect.gen(function* () {
531
413
  const { space } = yield* dispatch(createIntent3(SpaceAction.Create, data));
532
414
  yield* dispatch(createIntent3(LayoutAction3.SwitchWorkspace, {
@@ -544,28 +426,28 @@ var CreateSpaceDialog = () => {
544
426
  return (
545
427
  // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
546
428
  // Consider factoring it out to the tabs package.
547
- /* @__PURE__ */ React7.createElement(Dialog2.Content, {
429
+ /* @__PURE__ */ React4.createElement(Dialog2.Content, {
548
430
  classNames: "p-0 bs-content min-bs-[16rem] max-bs-full md:max-is-[32rem] overflow-hidden"
549
- }, /* @__PURE__ */ React7.createElement("div", {
431
+ }, /* @__PURE__ */ React4.createElement("div", {
550
432
  role: "none",
551
433
  className: "flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4"
552
- }, /* @__PURE__ */ React7.createElement(Dialog2.Title, null, t("create space dialog title")), /* @__PURE__ */ React7.createElement(Dialog2.Close, {
434
+ }, /* @__PURE__ */ React4.createElement(Dialog2.Title, null, t("create space dialog title")), /* @__PURE__ */ React4.createElement(Dialog2.Close, {
553
435
  asChild: true
554
- }, /* @__PURE__ */ React7.createElement(Button3, {
436
+ }, /* @__PURE__ */ React4.createElement(Button3, {
555
437
  ref: closeRef,
556
438
  density: "fine",
557
439
  variant: "ghost",
558
440
  autoFocus: true
559
- }, /* @__PURE__ */ React7.createElement(Icon3, {
441
+ }, /* @__PURE__ */ React4.createElement(Icon3, {
560
442
  icon: "ph--x--regular",
561
443
  size: 4
562
- })))), /* @__PURE__ */ React7.createElement("div", {
444
+ })))), /* @__PURE__ */ React4.createElement("div", {
563
445
  className: "p-4"
564
- }, /* @__PURE__ */ React7.createElement(Form3, {
446
+ }, /* @__PURE__ */ React4.createElement(Form2, {
565
447
  testId: "create-space-form",
566
448
  classNames: "!p-0",
567
449
  autoFocus: true,
568
- values: initialValues2,
450
+ values: initialValues,
569
451
  schema: SpaceForm,
570
452
  onSave: handleCreateSpace
571
453
  })))
@@ -573,87 +455,89 @@ var CreateSpaceDialog = () => {
573
455
  };
574
456
 
575
457
  // packages/plugins/plugin-space/src/components/CollectionMain.tsx
576
- import React8 from "react";
577
- import { useTranslation as useTranslation8 } from "@dxos/react-ui";
458
+ import React5 from "react";
459
+ import { useTranslation as useTranslation5 } from "@dxos/react-ui";
578
460
  import { baseSurface, descriptionText, mx as mx3 } from "@dxos/react-ui-theme";
579
461
  var CollectionMain = ({ collection }) => {
580
- const { t } = useTranslation8(SPACE_PLUGIN);
581
- return /* @__PURE__ */ React8.createElement("div", {
462
+ const { t } = useTranslation5(SPACE_PLUGIN);
463
+ return /* @__PURE__ */ React5.createElement("div", {
582
464
  role: "none",
583
465
  className: mx3(baseSurface, "min-bs-screen is-full flex items-center justify-center p-8"),
584
466
  "data-testid": "composer.firstRunMessage"
585
- }, /* @__PURE__ */ React8.createElement("p", {
467
+ }, /* @__PURE__ */ React5.createElement("p", {
586
468
  role: "alert",
587
469
  className: mx3(descriptionText, "border border-dashed border-neutral-400/50 rounded-lg p-8 font-normal text-lg max-is-[24rem] break-words")
588
470
  }, collection.name ?? t("unnamed collection label")));
589
471
  };
590
472
 
591
473
  // packages/plugins/plugin-space/src/components/CollectionSection.tsx
592
- import React9 from "react";
593
- import { useTranslation as useTranslation9 } from "@dxos/react-ui";
474
+ import React6 from "react";
475
+ import { useTranslation as useTranslation6 } from "@dxos/react-ui";
594
476
  var CollectionSection = ({ collection }) => {
595
- const { t } = useTranslation9(SPACE_PLUGIN);
596
- return /* @__PURE__ */ React9.createElement("div", {
477
+ const { t } = useTranslation6(SPACE_PLUGIN);
478
+ return /* @__PURE__ */ React6.createElement("div", {
597
479
  className: "min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center"
598
- }, /* @__PURE__ */ React9.createElement("span", {
480
+ }, /* @__PURE__ */ React6.createElement("span", {
599
481
  className: "truncate"
600
482
  }, collection.name ?? t("unnamed collection label")));
601
483
  };
602
484
 
603
485
  // packages/plugins/plugin-space/src/components/JoinDialog.tsx
604
- import React10, { useCallback as useCallback7 } from "react";
486
+ import React7, { useCallback as useCallback5 } from "react";
605
487
  import { createIntent as createIntent4, LayoutAction as LayoutAction4, useAppGraph, useIntentDispatcher as useIntentDispatcher4 } from "@dxos/app-framework";
606
- import { log } from "@dxos/log";
488
+ import { Trigger } from "@dxos/async";
607
489
  import { ObservabilityAction } from "@dxos/plugin-observability/types";
608
490
  import { useClient as useClient3 } from "@dxos/react-client";
609
- import { Dialog as Dialog3, useTranslation as useTranslation10 } from "@dxos/react-ui";
491
+ import { Dialog as Dialog3, useTranslation as useTranslation7 } from "@dxos/react-ui";
610
492
  import { JoinPanel } from "@dxos/shell/react";
611
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/JoinDialog.tsx";
612
493
  var JOIN_DIALOG = `${SPACE_PLUGIN}/JoinDialog`;
613
494
  var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
614
495
  const { dispatchPromise: dispatch } = useIntentDispatcher4();
615
496
  const client = useClient3();
616
497
  const { graph } = useAppGraph();
617
- const { t } = useTranslation10(SPACE_PLUGIN);
618
- const handleDone = useCallback7(async (result) => {
619
- if (result?.spaceKey) {
620
- await Promise.all([
621
- dispatch(createIntent4(LayoutAction4.AddToast, {
622
- part: "toast",
623
- subject: {
624
- id: `${SPACE_PLUGIN}/join-success`,
625
- duration: 5e3,
626
- title: [
627
- "join success label",
628
- {
629
- ns: SPACE_PLUGIN
630
- }
631
- ],
632
- closeLabel: [
633
- "dismiss label",
634
- {
635
- ns: SPACE_PLUGIN
636
- }
637
- ]
638
- }
639
- })),
640
- dispatch(createIntent4(LayoutAction4.UpdateDialog, {
641
- part: "dialog",
642
- options: {
643
- state: false
644
- }
645
- }))
646
- ]);
498
+ const { t } = useTranslation7(SPACE_PLUGIN);
499
+ const handleDone = useCallback5(async (result) => {
500
+ const spaceKey = result?.spaceKey;
501
+ if (!spaceKey) {
502
+ return;
647
503
  }
648
- const space = result?.spaceKey ? client.spaces.get(result.spaceKey) : void 0;
504
+ await Promise.all([
505
+ dispatch(createIntent4(LayoutAction4.AddToast, {
506
+ part: "toast",
507
+ subject: {
508
+ id: `${SPACE_PLUGIN}/join-success`,
509
+ duration: 5e3,
510
+ title: [
511
+ "join success label",
512
+ {
513
+ ns: SPACE_PLUGIN
514
+ }
515
+ ],
516
+ closeLabel: [
517
+ "dismiss label",
518
+ {
519
+ ns: SPACE_PLUGIN
520
+ }
521
+ ]
522
+ }
523
+ })),
524
+ dispatch(createIntent4(LayoutAction4.UpdateDialog, {
525
+ part: "dialog",
526
+ options: {
527
+ state: false
528
+ }
529
+ }))
530
+ ]);
531
+ let space = client.spaces.get(spaceKey);
649
532
  if (!space) {
650
- log.warn("Space not found", result?.spaceKey, {
651
- F: __dxlog_file3,
652
- L: 57,
653
- S: void 0,
654
- C: (f, a) => f(...a)
533
+ const trigger = new Trigger();
534
+ client.spaces.subscribe(() => {
535
+ const space2 = client.spaces.get(spaceKey);
536
+ if (space2) {
537
+ trigger.wake(space2);
538
+ }
655
539
  });
656
- return;
540
+ space = await trigger.wait();
657
541
  }
658
542
  await dispatch(createIntent4(LayoutAction4.SwitchWorkspace, {
659
543
  part: "workspace",
@@ -692,52 +576,422 @@ var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
692
576
  client,
693
577
  graph
694
578
  ]);
695
- return /* @__PURE__ */ React10.createElement(Dialog3.Content, null, /* @__PURE__ */ React10.createElement(Dialog3.Title, {
579
+ return /* @__PURE__ */ React7.createElement(Dialog3.Content, null, /* @__PURE__ */ React7.createElement(Dialog3.Title, {
696
580
  classNames: "sr-only"
697
581
  }, t("join space label", {
698
582
  ns: "os"
699
- })), /* @__PURE__ */ React10.createElement(JoinPanel, {
583
+ })), /* @__PURE__ */ React7.createElement(JoinPanel, {
700
584
  ...props,
701
- exitActionParent: /* @__PURE__ */ React10.createElement(Dialog3.Close, {
585
+ exitActionParent: /* @__PURE__ */ React7.createElement(Dialog3.Close, {
702
586
  asChild: true
703
587
  }),
704
- doneActionParent: /* @__PURE__ */ React10.createElement(Dialog3.Close, {
588
+ doneActionParent: /* @__PURE__ */ React7.createElement(Dialog3.Close, {
705
589
  asChild: true
706
590
  }),
707
591
  onDone: handleDone
708
592
  }));
709
593
  };
710
594
 
595
+ // packages/plugins/plugin-space/src/components/MembersContainer.tsx
596
+ import { Check, X } from "@phosphor-icons/react";
597
+ import React8, { useMemo, useState as useState3 } from "react";
598
+ import { QR } from "react-qr-rounded";
599
+ import { log } from "@dxos/log";
600
+ import { useConfig } from "@dxos/react-client";
601
+ import { fullyQualifiedId as fullyQualifiedId2, useSpaceInvitations } from "@dxos/react-client/echo";
602
+ import { Invitation, InvitationEncoder } from "@dxos/react-client/invitations";
603
+ import { Button as Button4, Clipboard, Icon as Icon4, useId, useTranslation as useTranslation8 } from "@dxos/react-ui";
604
+ import { ControlSection, ControlFrame, ControlFrameItem } from "@dxos/react-ui-form";
605
+ import { StackItem } from "@dxos/react-ui-stack";
606
+ import { getSize as getSize2, mx as mx4 } from "@dxos/react-ui-theme";
607
+ import { AuthCode, BifurcatedAction, Centered, Emoji, InvitationList, SpaceMemberList, Viewport } from "@dxos/shell/react";
608
+ import { hexToEmoji } from "@dxos/util";
609
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/MembersContainer.tsx";
610
+ var activeActionKey = "dxos:react-shell/space-manager/active-action";
611
+ var handleInvitationEvent = (invitation, subscription) => {
612
+ const invitationCode = InvitationEncoder.encode(invitation);
613
+ if (invitation.state === Invitation.State.CONNECTING) {
614
+ log.info(JSON.stringify({
615
+ invitationCode,
616
+ authCode: invitation.authCode
617
+ }), void 0, {
618
+ F: __dxlog_file3,
619
+ L: 38,
620
+ S: void 0,
621
+ C: (f, a) => f(...a)
622
+ });
623
+ subscription.unsubscribe();
624
+ }
625
+ };
626
+ var MembersContainer = ({ space, createInvitationUrl }) => {
627
+ const { t } = useTranslation8("os");
628
+ const config = useConfig();
629
+ const invitations = useSpaceInvitations(space.key);
630
+ const visibleInvitations = invitations?.filter((invitation) => ![
631
+ Invitation.State.CANCELLED
632
+ ].includes(invitation.get().state));
633
+ const [activeAction, setInternalActiveAction] = useState3(localStorage.getItem(activeActionKey) ?? "inviteMany");
634
+ const setActiveAction = (nextAction) => {
635
+ setInternalActiveAction(nextAction);
636
+ localStorage.setItem(activeActionKey, nextAction);
637
+ };
638
+ const target = space.properties[CollectionType.typename]?.target?.objects[0]?.target;
639
+ const inviteActions = useMemo(() => ({
640
+ inviteOne: {
641
+ label: t("invite one label"),
642
+ description: t("invite one description"),
643
+ icon: () => /* @__PURE__ */ React8.createElement(Icon4, {
644
+ icon: "ph--user-plus--regular",
645
+ size: 5
646
+ }),
647
+ testId: "membersContainer.inviteOne",
648
+ onClick: () => {
649
+ const invitation = space.share?.({
650
+ type: Invitation.Type.INTERACTIVE,
651
+ authMethod: Invitation.AuthMethod.SHARED_SECRET,
652
+ multiUse: false,
653
+ target: target && fullyQualifiedId2(target)
654
+ });
655
+ if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== "production") {
656
+ const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
657
+ }
658
+ }
659
+ },
660
+ inviteMany: {
661
+ label: t("invite many label"),
662
+ description: t("invite many description"),
663
+ icon: () => /* @__PURE__ */ React8.createElement(Icon4, {
664
+ icon: "ph--users-three--regular",
665
+ size: 5
666
+ }),
667
+ testId: "membersContainer.inviteMany",
668
+ onClick: () => {
669
+ const invitation = space.share?.({
670
+ type: Invitation.Type.DELEGATED,
671
+ authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
672
+ multiUse: true,
673
+ target: target && fullyQualifiedId2(target)
674
+ });
675
+ if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== "production") {
676
+ const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
677
+ }
678
+ }
679
+ }
680
+ }), [
681
+ t,
682
+ space,
683
+ target
684
+ ]);
685
+ const [selectedInvitation, setSelectedInvitation] = useState3(null);
686
+ const handleSend = (event) => {
687
+ setSelectedInvitation(event.invitation);
688
+ };
689
+ const handleBack = () => {
690
+ setSelectedInvitation(null);
691
+ };
692
+ return /* @__PURE__ */ React8.createElement(Clipboard.Provider, null, /* @__PURE__ */ React8.createElement(StackItem.Content, {
693
+ classNames: "p-2 block overflow-y-auto"
694
+ }, /* @__PURE__ */ React8.createElement(ControlSection, {
695
+ title: t("members verbose label", {
696
+ ns: SPACE_PLUGIN
697
+ }),
698
+ description: t("members description", {
699
+ ns: SPACE_PLUGIN
700
+ })
701
+ }, /* @__PURE__ */ React8.createElement(ControlFrame, null, /* @__PURE__ */ React8.createElement(ControlFrameItem, {
702
+ title: t("members label", {
703
+ ns: SPACE_PLUGIN
704
+ })
705
+ }, /* @__PURE__ */ React8.createElement(SpaceMemberList, {
706
+ spaceKey: space.key,
707
+ includeSelf: true
708
+ })), /* @__PURE__ */ React8.createElement(ControlFrameItem, {
709
+ title: t("invitations label", {
710
+ ns: SPACE_PLUGIN
711
+ })
712
+ }, selectedInvitation && /* @__PURE__ */ React8.createElement(InvitationSection, {
713
+ ...selectedInvitation,
714
+ onBack: handleBack
715
+ }), !selectedInvitation && /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement("p", {
716
+ className: "text-description mbe-2"
717
+ }, t("space invitation description", {
718
+ ns: SPACE_PLUGIN
719
+ })), /* @__PURE__ */ React8.createElement(InvitationList, {
720
+ className: "mb-2",
721
+ send: handleSend,
722
+ invitations: visibleInvitations ?? [],
723
+ onClickRemove: (invitation) => invitation.cancel(),
724
+ createInvitationUrl
725
+ }), /* @__PURE__ */ React8.createElement(BifurcatedAction, {
726
+ actions: inviteActions,
727
+ activeAction,
728
+ onChangeActiveAction: setActiveAction,
729
+ "data-testid": "membersContainer.createInvitation"
730
+ })))))));
731
+ };
732
+ var InvitationSection = ({ state = Invitation.State.INIT, authCode, invitationId = "never", url = "never", onBack }) => {
733
+ const activeView = state < 0 ? "init" : state >= Invitation.State.CANCELLED ? "complete" : state >= Invitation.State.READY_FOR_AUTHENTICATION && authCode ? "auth-code" : "qr-code";
734
+ return /* @__PURE__ */ React8.createElement(Viewport.Root, {
735
+ activeView
736
+ }, /* @__PURE__ */ React8.createElement(Viewport.Views, null, /* @__PURE__ */ React8.createElement(Viewport.View, {
737
+ id: "init"
738
+ }), /* @__PURE__ */ React8.createElement(Viewport.View, {
739
+ id: "complete"
740
+ }, /* @__PURE__ */ React8.createElement(InvitationComplete, {
741
+ statusValue: state
742
+ })), /* @__PURE__ */ React8.createElement(Viewport.View, {
743
+ id: "auth-code"
744
+ }, /* @__PURE__ */ React8.createElement(InvitationAuthCode, {
745
+ id: invitationId,
746
+ code: authCode ?? "never",
747
+ onCancel: onBack
748
+ })), /* @__PURE__ */ React8.createElement(Viewport.View, {
749
+ id: "qr-code"
750
+ }, /* @__PURE__ */ React8.createElement(InvitationQR, {
751
+ id: invitationId,
752
+ url,
753
+ onCancel: onBack
754
+ }))));
755
+ };
756
+ var InvitationQR = ({ id, url, onCancel }) => {
757
+ const { t } = useTranslation8("os");
758
+ const qrLabel = useId("members-container__qr-code");
759
+ const emoji = hexToEmoji(id);
760
+ return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement("p", {
761
+ className: "text-description"
762
+ }, t("qr code description", {
763
+ ns: SPACE_PLUGIN
764
+ })), /* @__PURE__ */ React8.createElement("div", {
765
+ role: "group",
766
+ className: "grid grid-cols-[1fr_min-content] mlb-2 gap-2"
767
+ }, /* @__PURE__ */ React8.createElement("div", {
768
+ role: "none",
769
+ className: "is-full aspect-square relative text-description"
770
+ }, /* @__PURE__ */ React8.createElement(QR, {
771
+ rounding: 100,
772
+ backgroundColor: "transparent",
773
+ color: "currentColor",
774
+ "aria-labelledby": qrLabel,
775
+ errorCorrectionLevel: "Q",
776
+ cutout: true
777
+ }, url ?? "never"), /* @__PURE__ */ React8.createElement(Centered, null, /* @__PURE__ */ React8.createElement(Emoji, {
778
+ text: emoji
779
+ }))), /* @__PURE__ */ React8.createElement("span", {
780
+ id: qrLabel,
781
+ className: "sr-only"
782
+ }, t("qr label")), /* @__PURE__ */ React8.createElement(Clipboard.Button, {
783
+ value: url ?? "never"
784
+ })), /* @__PURE__ */ React8.createElement(Button4, {
785
+ variant: "ghost",
786
+ onClick: onCancel
787
+ }, t("cancel label")));
788
+ };
789
+ var InvitationAuthCode = ({ id, code, onCancel }) => {
790
+ const { t } = useTranslation8("os");
791
+ const emoji = hexToEmoji(id);
792
+ return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement("p", {
793
+ className: "text-description"
794
+ }, t("auth other device emoji message")), emoji && /* @__PURE__ */ React8.createElement(Emoji, {
795
+ text: emoji,
796
+ className: "mli-auto mlb-2 text-center"
797
+ }), /* @__PURE__ */ React8.createElement("p", {
798
+ className: "text-description"
799
+ }, t("auth code message")), /* @__PURE__ */ React8.createElement(AuthCode, {
800
+ code,
801
+ large: true,
802
+ classNames: "mli-auto mlb-2 text-center grow"
803
+ }), /* @__PURE__ */ React8.createElement(Button4, {
804
+ variant: "ghost",
805
+ onClick: onCancel
806
+ }, t("cancel label")));
807
+ };
808
+ var InvitationComplete = ({ statusValue }) => {
809
+ return statusValue > 0 ? /* @__PURE__ */ React8.createElement(Check, {
810
+ className: mx4("m-1.5", getSize2(6))
811
+ }) : /* @__PURE__ */ React8.createElement(X, {
812
+ className: mx4("m-1.5", getSize2(6))
813
+ });
814
+ };
815
+
711
816
  // packages/plugins/plugin-space/src/components/MenuFooter.tsx
712
817
  import { Planet } from "@phosphor-icons/react";
713
- import React11 from "react";
818
+ import React9 from "react";
714
819
  import { getSpace as getSpace2 } from "@dxos/client/echo";
715
820
  import { useClient as useClient4 } from "@dxos/react-client";
716
- import { DropdownMenu, toLocalizedString as toLocalizedString2, useTranslation as useTranslation11 } from "@dxos/react-ui";
821
+ import { DropdownMenu, toLocalizedString as toLocalizedString2, useTranslation as useTranslation9 } from "@dxos/react-ui";
717
822
  var MenuFooter = ({ object }) => {
718
- const { t } = useTranslation11(SPACE_PLUGIN);
823
+ const { t } = useTranslation9(SPACE_PLUGIN);
719
824
  const client = useClient4();
720
825
  const space = getSpace2(object);
721
826
  const spaceName = space ? getSpaceDisplayName(space, {
722
827
  personal: client.spaces.default === space
723
828
  }) : "";
724
- return space ? /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(DropdownMenu.Separator, null), /* @__PURE__ */ React11.createElement(DropdownMenu.GroupLabel, null, t("menu footer label")), /* @__PURE__ */ React11.createElement("dl", {
829
+ return space ? /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(DropdownMenu.Separator, null), /* @__PURE__ */ React9.createElement(DropdownMenu.GroupLabel, null, t("menu footer label")), /* @__PURE__ */ React9.createElement("dl", {
725
830
  className: "pis-2 mbe-2 text-xs grid grid-cols-[max-content_1fr] gap-2"
726
- }, /* @__PURE__ */ React11.createElement("dt", {
831
+ }, /* @__PURE__ */ React9.createElement("dt", {
727
832
  className: "uppercase text-[.75em] tracking-wide font-medium mbs-px self-start"
728
- }, t("location label")), /* @__PURE__ */ React11.createElement("dd", {
833
+ }, t("location label")), /* @__PURE__ */ React9.createElement("dd", {
729
834
  className: "line-clamp-3"
730
- }, /* @__PURE__ */ React11.createElement(Planet, {
835
+ }, /* @__PURE__ */ React9.createElement(Planet, {
731
836
  className: "inline-block mie-1"
732
837
  }), toLocalizedString2(spaceName, t)))) : null;
733
838
  };
734
839
 
840
+ // packages/plugins/plugin-space/src/components/ObjectSettingsContainer/ObjectSettingsContainer.tsx
841
+ import React13, { useMemo as useMemo2 } from "react";
842
+ import { Surface as Surface2 } from "@dxos/app-framework";
843
+ import { Clipboard as Clipboard2 } from "@dxos/react-ui";
844
+ import { StackItem as StackItem2 } from "@dxos/react-ui-stack";
845
+
846
+ // packages/plugins/plugin-space/src/components/ObjectSettingsContainer/AdvancedObjectSettings.tsx
847
+ import React11, { useCallback as useCallback7, useState as useState4 } from "react";
848
+ import { ForeignKeySchema } from "@dxos/echo-schema";
849
+ import { getMeta } from "@dxos/react-client/echo";
850
+ import { IconButton as IconButton2, useTranslation as useTranslation11 } from "@dxos/react-ui";
851
+ import { Form as Form3 } from "@dxos/react-ui-form";
852
+
853
+ // packages/plugins/plugin-space/src/components/ObjectSettingsContainer/ForeignKeys.tsx
854
+ import React10, { useCallback as useCallback6 } from "react";
855
+ import { IconButton, List, ListItem, useTranslation as useTranslation10 } from "@dxos/react-ui";
856
+ var ForeignKeys = ({ keys, onDelete }) => {
857
+ return /* @__PURE__ */ React10.createElement(List, {
858
+ classNames: "flex flex-col gap-2"
859
+ }, keys.map((key) => /* @__PURE__ */ React10.createElement(KeyItem, {
860
+ key: key.id,
861
+ forignKey: key,
862
+ onDelete
863
+ })));
864
+ };
865
+ var KeyItem = ({ forignKey, onDelete }) => {
866
+ const { t } = useTranslation10(SPACE_PLUGIN);
867
+ const handleDelete = useCallback6(() => {
868
+ onDelete?.(forignKey);
869
+ }, [
870
+ forignKey,
871
+ onDelete
872
+ ]);
873
+ return /* @__PURE__ */ React10.createElement(ListItem.Root, {
874
+ classNames: "px-2"
875
+ }, /* @__PURE__ */ React10.createElement(ListItem.Heading, {
876
+ classNames: "flex flex-col grow truncate"
877
+ }, /* @__PURE__ */ React10.createElement("div", null, forignKey.source), /* @__PURE__ */ React10.createElement("div", {
878
+ className: "text-description text-sm truncate"
879
+ }, forignKey.id)), /* @__PURE__ */ React10.createElement(ListItem.Endcap, null, /* @__PURE__ */ React10.createElement(IconButton, {
880
+ iconOnly: true,
881
+ icon: "ph--x--regular",
882
+ variant: "ghost",
883
+ label: t("delete key"),
884
+ onClick: handleDelete
885
+ })));
886
+ };
887
+
888
+ // packages/plugins/plugin-space/src/components/ObjectSettingsContainer/AdvancedObjectSettings.tsx
889
+ var initialValues2 = {
890
+ source: "",
891
+ id: ""
892
+ };
893
+ var AdvancedObjectSettings = ({ object }) => {
894
+ const { t } = useTranslation11(SPACE_PLUGIN);
895
+ const [adding, setAdding] = useState4(false);
896
+ const keys = getMeta(object).keys;
897
+ const handleNew = useCallback7(() => setAdding(true), []);
898
+ const handleCancel = useCallback7(() => setAdding(false), []);
899
+ const handleSave = useCallback7((key) => {
900
+ const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
901
+ if (index === -1) {
902
+ keys.push(key);
903
+ }
904
+ setAdding(false);
905
+ }, [
906
+ keys
907
+ ]);
908
+ const handleDelete = useCallback7((key) => {
909
+ const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
910
+ if (index !== -1) {
911
+ keys.splice(index, 1);
912
+ }
913
+ }, [
914
+ keys
915
+ ]);
916
+ return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement("div", {
917
+ className: "p-2 flex flex-col gap-4"
918
+ }, /* @__PURE__ */ React11.createElement("h2", null, t("advanced settings label")), /* @__PURE__ */ React11.createElement("div", {
919
+ className: "flex items-center"
920
+ }, /* @__PURE__ */ React11.createElement("h3", {
921
+ className: "text-sm font-semibold"
922
+ }, t("foreign keys")), /* @__PURE__ */ React11.createElement("div", {
923
+ className: "grow"
924
+ }), /* @__PURE__ */ React11.createElement(IconButton2, {
925
+ classNames: adding && "invisible",
926
+ icon: "ph--plus--regular",
927
+ label: t("add key"),
928
+ onClick: handleNew
929
+ })), !adding && /* @__PURE__ */ React11.createElement(ForeignKeys, {
930
+ keys,
931
+ onDelete: handleDelete
932
+ })), adding && /* @__PURE__ */ React11.createElement(Form3, {
933
+ schema: ForeignKeySchema,
934
+ values: initialValues2,
935
+ onSave: handleSave,
936
+ onCancel: handleCancel
937
+ }));
938
+ };
939
+
940
+ // packages/plugins/plugin-space/src/components/ObjectSettingsContainer/BaseObjectSettings.tsx
941
+ import React12, { useRef as useRef3 } from "react";
942
+ import { Input, useTranslation as useTranslation12 } from "@dxos/react-ui";
943
+ import { mx as mx5 } from "@dxos/react-ui-theme";
944
+ var BaseObjectSettings = ({ classNames, children, object }) => {
945
+ const { t } = useTranslation12(meta.id);
946
+ const inputRef = useRef3(null);
947
+ return /* @__PURE__ */ React12.createElement("form", {
948
+ className: mx5("flex flex-col p-2 gap-2", classNames)
949
+ }, /* @__PURE__ */ React12.createElement(Input.Root, null, /* @__PURE__ */ React12.createElement(Input.Label, null, t("name label")), /* @__PURE__ */ React12.createElement(Input.TextInput, {
950
+ ref: inputRef,
951
+ placeholder: t("name placeholder"),
952
+ value: object.name ?? "",
953
+ onChange: (event) => {
954
+ object.name = event.target.value;
955
+ },
956
+ onKeyDown: (event) => {
957
+ if (event.key === "Enter") {
958
+ inputRef.current?.blur();
959
+ }
960
+ }
961
+ })), children);
962
+ };
963
+
964
+ // packages/plugins/plugin-space/src/components/ObjectSettingsContainer/ObjectSettingsContainer.tsx
965
+ var ObjectSettingsContainer = ({ object, role }) => {
966
+ const data = useMemo2(() => ({
967
+ subject: object
968
+ }), [
969
+ object
970
+ ]);
971
+ return /* @__PURE__ */ React13.createElement(Clipboard2.Provider, null, /* @__PURE__ */ React13.createElement(StackItem2.Content, {
972
+ toolbar: false,
973
+ role
974
+ }, /* @__PURE__ */ React13.createElement("div", {
975
+ className: "flex flex-col overflow-y-auto divide-y divide-separator"
976
+ }, /* @__PURE__ */ React13.createElement(BaseObjectSettings, {
977
+ object
978
+ }, /* @__PURE__ */ React13.createElement(Surface2, {
979
+ role: "base-object-settings",
980
+ data
981
+ })), /* @__PURE__ */ React13.createElement(Surface2, {
982
+ role: "object-settings",
983
+ data
984
+ }), /* @__PURE__ */ React13.createElement(AdvancedObjectSettings, {
985
+ object
986
+ }))));
987
+ };
988
+
735
989
  // packages/plugins/plugin-space/src/components/PersistenceStatus.tsx
736
990
  import { ArrowsCounterClockwise, CheckCircle as CheckCircle2, Warning } from "@phosphor-icons/react";
737
- import React12, { useEffect as useEffect2, useState as useState4 } from "react";
991
+ import React14, { useEffect as useEffect2, useState as useState5 } from "react";
738
992
  import { debounce } from "@dxos/async";
739
- import { Tooltip, useTranslation as useTranslation12 } from "@dxos/react-ui";
740
- import { getSize as getSize2, mx as mx4, staticPlaceholderText, warningText } from "@dxos/react-ui-theme";
993
+ import { Tooltip, useTranslation as useTranslation13 } from "@dxos/react-ui";
994
+ import { getSize as getSize3, mx as mx6, staticPlaceholderText, warningText } from "@dxos/react-ui-theme";
741
995
  var Status;
742
996
  (function(Status2) {
743
997
  Status2[Status2["PERSISTED_LOCALLY"] = 0] = "PERSISTED_LOCALLY";
@@ -745,10 +999,10 @@ var Status;
745
999
  Status2[Status2["ERROR"] = 2] = "ERROR";
746
1000
  })(Status || (Status = {}));
747
1001
  var PersistenceStatus = ({ db }) => {
748
- const { t } = useTranslation12(SPACE_PLUGIN);
749
- const [displayMessage, setDisplayMessage] = useState4(false);
750
- const [status, naturalSetStatus] = useState4(0);
751
- const [prevStatus, setPrevStatus] = useState4(0);
1002
+ const { t } = useTranslation13(SPACE_PLUGIN);
1003
+ const [displayMessage, setDisplayMessage] = useState5(false);
1004
+ const [status, naturalSetStatus] = useState5(0);
1005
+ const [prevStatus, setPrevStatus] = useState5(0);
752
1006
  const _setStatus = debounce(naturalSetStatus, 500);
753
1007
  useEffect2(() => {
754
1008
  setPrevStatus(status);
@@ -762,48 +1016,48 @@ var PersistenceStatus = ({ db }) => {
762
1016
  ]);
763
1017
  switch (status) {
764
1018
  case 2:
765
- return /* @__PURE__ */ React12.createElement("div", {
1019
+ return /* @__PURE__ */ React14.createElement("div", {
766
1020
  className: "flex items-center"
767
- }, /* @__PURE__ */ React12.createElement(Warning, {
768
- className: mx4(getSize2(4), "me-1")
769
- }), /* @__PURE__ */ React12.createElement("span", {
770
- className: mx4("text-sm", warningText)
1021
+ }, /* @__PURE__ */ React14.createElement(Warning, {
1022
+ className: mx6(getSize3(4), "me-1")
1023
+ }), /* @__PURE__ */ React14.createElement("span", {
1024
+ className: mx6("text-sm", warningText)
771
1025
  }, t("persistence error label")));
772
1026
  case 1:
773
- return /* @__PURE__ */ React12.createElement("div", {
1027
+ return /* @__PURE__ */ React14.createElement("div", {
774
1028
  className: "flex items-center"
775
- }, /* @__PURE__ */ React12.createElement(ArrowsCounterClockwise, {
776
- className: mx4(getSize2(4), "me-1")
777
- }), /* @__PURE__ */ React12.createElement("span", {
778
- className: mx4("text-sm", staticPlaceholderText)
1029
+ }, /* @__PURE__ */ React14.createElement(ArrowsCounterClockwise, {
1030
+ className: mx6(getSize3(4), "me-1")
1031
+ }), /* @__PURE__ */ React14.createElement("span", {
1032
+ className: mx6("text-sm", staticPlaceholderText)
779
1033
  }, t("persistence pending label")));
780
1034
  case 0:
781
1035
  default:
782
- return /* @__PURE__ */ React12.createElement(Tooltip.Root, {
1036
+ return /* @__PURE__ */ React14.createElement(Tooltip.Root, {
783
1037
  delayDuration: 400
784
- }, /* @__PURE__ */ React12.createElement(Tooltip.Trigger, {
1038
+ }, /* @__PURE__ */ React14.createElement(Tooltip.Trigger, {
785
1039
  role: "status",
786
1040
  className: "flex items-center"
787
- }, /* @__PURE__ */ React12.createElement(CheckCircle2, {
788
- className: mx4(getSize2(4), "me-1")
789
- }), displayMessage && /* @__PURE__ */ React12.createElement("span", {
790
- className: mx4("text-sm", staticPlaceholderText)
791
- }, t("persisted locally label"))), /* @__PURE__ */ React12.createElement(Tooltip.Portal, null, /* @__PURE__ */ React12.createElement(Tooltip.Content, null, t("persisted locally message"), /* @__PURE__ */ React12.createElement(Tooltip.Arrow, null))));
1041
+ }, /* @__PURE__ */ React14.createElement(CheckCircle2, {
1042
+ className: mx6(getSize3(4), "me-1")
1043
+ }), displayMessage && /* @__PURE__ */ React14.createElement("span", {
1044
+ className: mx6("text-sm", staticPlaceholderText)
1045
+ }, t("persisted locally label"))), /* @__PURE__ */ React14.createElement(Tooltip.Portal, null, /* @__PURE__ */ React14.createElement(Tooltip.Content, null, t("persisted locally message"), /* @__PURE__ */ React14.createElement(Tooltip.Arrow, null))));
792
1046
  }
793
1047
  };
794
1048
 
795
1049
  // packages/plugins/plugin-space/src/components/PopoverAddSpace.tsx
796
- import React13 from "react";
1050
+ import React15 from "react";
797
1051
  import { createIntent as createIntent5, LayoutAction as LayoutAction5, useIntentDispatcher as useIntentDispatcher5 } from "@dxos/app-framework";
798
- import { IconButton as IconButton3, useTranslation as useTranslation13 } from "@dxos/react-ui";
1052
+ import { IconButton as IconButton3, useTranslation as useTranslation14 } from "@dxos/react-ui";
799
1053
  var POPOVER_ADD_SPACE = `${SPACE_PLUGIN}/PopoverRenameSpace`;
800
1054
  var PopoverAddSpace = () => {
801
- const { t } = useTranslation13(SPACE_PLUGIN);
1055
+ const { t } = useTranslation14(SPACE_PLUGIN);
802
1056
  const { dispatchPromise: dispatch } = useIntentDispatcher5();
803
- return /* @__PURE__ */ React13.createElement("div", {
1057
+ return /* @__PURE__ */ React15.createElement("div", {
804
1058
  role: "none",
805
1059
  className: "grid grid-cols-1 gap-1 [&>button]:justify-start"
806
- }, /* @__PURE__ */ React13.createElement(IconButton3, {
1060
+ }, /* @__PURE__ */ React15.createElement(IconButton3, {
807
1061
  variant: "ghost",
808
1062
  label: t("create space label"),
809
1063
  icon: "ph--plus--regular",
@@ -818,7 +1072,7 @@ var PopoverAddSpace = () => {
818
1072
  }));
819
1073
  },
820
1074
  "data-testid": "spacePlugin.createSpace"
821
- }), /* @__PURE__ */ React13.createElement(IconButton3, {
1075
+ }), /* @__PURE__ */ React15.createElement(IconButton3, {
822
1076
  variant: "ghost",
823
1077
  label: t("join space label"),
824
1078
  icon: "ph--sign-in--regular",
@@ -837,16 +1091,16 @@ var PopoverAddSpace = () => {
837
1091
  };
838
1092
 
839
1093
  // packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx
840
- import React14, { useCallback as useCallback8, useRef as useRef3, useState as useState5 } from "react";
1094
+ import React16, { useCallback as useCallback8, useRef as useRef4, useState as useState6 } from "react";
841
1095
  import { log as log2 } from "@dxos/log";
842
- import { Button as Button4, Input as Input2, Popover, useTranslation as useTranslation14 } from "@dxos/react-ui";
1096
+ import { Button as Button5, Input as Input2, Popover, useTranslation as useTranslation15 } from "@dxos/react-ui";
843
1097
  var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx";
844
1098
  var POPOVER_RENAME_OBJECT = `${SPACE_PLUGIN}/PopoverRenameObject`;
845
1099
  var PopoverRenameObject = ({ object: obj }) => {
846
- const { t } = useTranslation14(SPACE_PLUGIN);
847
- const doneButton = useRef3(null);
1100
+ const { t } = useTranslation15(SPACE_PLUGIN);
1101
+ const doneButton = useRef4(null);
848
1102
  const object = obj;
849
- const [name, setName] = useState5(object.name || object.title || "");
1103
+ const [name, setName] = useState6(object.name || object.title || "");
850
1104
  const handleDone = useCallback8(() => {
851
1105
  try {
852
1106
  object.name = name;
@@ -868,23 +1122,23 @@ var PopoverRenameObject = ({ object: obj }) => {
868
1122
  object,
869
1123
  name
870
1124
  ]);
871
- return /* @__PURE__ */ React14.createElement("div", {
1125
+ return /* @__PURE__ */ React16.createElement("div", {
872
1126
  role: "none",
873
1127
  className: "p-1 flex gap-2"
874
- }, /* @__PURE__ */ React14.createElement("div", {
1128
+ }, /* @__PURE__ */ React16.createElement("div", {
875
1129
  role: "none",
876
1130
  className: "flex-1"
877
- }, /* @__PURE__ */ React14.createElement(Input2.Root, null, /* @__PURE__ */ React14.createElement(Input2.Label, {
1131
+ }, /* @__PURE__ */ React16.createElement(Input2.Root, null, /* @__PURE__ */ React16.createElement(Input2.Label, {
878
1132
  srOnly: true
879
- }, t("object name label")), /* @__PURE__ */ React14.createElement(Input2.TextInput, {
880
- placeholder: t("object title placeholder"),
1133
+ }, t("object name label")), /* @__PURE__ */ React16.createElement(Input2.TextInput, {
1134
+ placeholder: t("object placeholder"),
881
1135
  value: name,
882
1136
  "data-testid": "spacePlugin.renameObject.input",
883
1137
  onChange: ({ target: { value } }) => setName(value),
884
1138
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
885
- }))), /* @__PURE__ */ React14.createElement(Popover.Close, {
1139
+ }))), /* @__PURE__ */ React16.createElement(Popover.Close, {
886
1140
  asChild: true
887
- }, /* @__PURE__ */ React14.createElement(Button4, {
1141
+ }, /* @__PURE__ */ React16.createElement(Button5, {
888
1142
  ref: doneButton,
889
1143
  classNames: "self-stretch",
890
1144
  onClick: handleDone
@@ -894,37 +1148,37 @@ var PopoverRenameObject = ({ object: obj }) => {
894
1148
  };
895
1149
 
896
1150
  // packages/plugins/plugin-space/src/components/PopoverRenameSpace.tsx
897
- import React15, { useCallback as useCallback9, useRef as useRef4, useState as useState6 } from "react";
898
- import { Button as Button5, Input as Input3, Popover as Popover2, useTranslation as useTranslation15 } from "@dxos/react-ui";
1151
+ import React17, { useCallback as useCallback9, useRef as useRef5, useState as useState7 } from "react";
1152
+ import { Button as Button6, Input as Input3, Popover as Popover2, useTranslation as useTranslation16 } from "@dxos/react-ui";
899
1153
  var POPOVER_RENAME_SPACE = `${SPACE_PLUGIN}/PopoverRenameSpace`;
900
1154
  var PopoverRenameSpace = ({ space }) => {
901
- const { t } = useTranslation15(SPACE_PLUGIN);
902
- const doneButton = useRef4(null);
903
- const [name, setName] = useState6(space.properties.name ?? "");
1155
+ const { t } = useTranslation16(SPACE_PLUGIN);
1156
+ const doneButton = useRef5(null);
1157
+ const [name, setName] = useState7(space.properties.name ?? "");
904
1158
  const handleDone = useCallback9(() => {
905
1159
  space.properties.name = name;
906
1160
  }, [
907
1161
  space,
908
1162
  name
909
1163
  ]);
910
- return /* @__PURE__ */ React15.createElement("div", {
1164
+ return /* @__PURE__ */ React17.createElement("div", {
911
1165
  role: "none",
912
1166
  className: "p-1 flex gap-2"
913
- }, /* @__PURE__ */ React15.createElement("div", {
1167
+ }, /* @__PURE__ */ React17.createElement("div", {
914
1168
  role: "none",
915
1169
  className: "flex-1"
916
- }, /* @__PURE__ */ React15.createElement(Input3.Root, null, /* @__PURE__ */ React15.createElement(Input3.Label, {
1170
+ }, /* @__PURE__ */ React17.createElement(Input3.Root, null, /* @__PURE__ */ React17.createElement(Input3.Label, {
917
1171
  srOnly: true
918
- }, t("space name label")), /* @__PURE__ */ React15.createElement(Input3.TextInput, {
1172
+ }, t("space name label")), /* @__PURE__ */ React17.createElement(Input3.TextInput, {
919
1173
  defaultValue: space.properties.name ?? "",
920
1174
  placeholder: t("unnamed space label"),
921
1175
  onChange: ({ target: { value } }) => setName(value),
922
1176
  // TODO(wittjosiah): Ideally this should access the popover context to close the popover.
923
1177
  // Currently this is not possible because Radix does not expose the popover context.
924
1178
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
925
- }))), /* @__PURE__ */ React15.createElement(Popover2.Close, {
1179
+ }))), /* @__PURE__ */ React17.createElement(Popover2.Close, {
926
1180
  asChild: true
927
- }, /* @__PURE__ */ React15.createElement(Button5, {
1181
+ }, /* @__PURE__ */ React17.createElement(Button6, {
928
1182
  ref: doneButton,
929
1183
  classNames: "self-stretch",
930
1184
  onClick: handleDone
@@ -934,20 +1188,20 @@ var PopoverRenameSpace = ({ space }) => {
934
1188
  };
935
1189
 
936
1190
  // packages/plugins/plugin-space/src/components/ShareSpaceButton.tsx
937
- import React16 from "react";
1191
+ import React18 from "react";
938
1192
  import { createIntent as createIntent6, useIntentDispatcher as useIntentDispatcher6 } from "@dxos/app-framework";
939
- import { IconButton as IconButton4, useTranslation as useTranslation16 } from "@dxos/react-ui";
1193
+ import { IconButton as IconButton4, useTranslation as useTranslation17 } from "@dxos/react-ui";
940
1194
  var ShareSpaceButton = ({ space }) => {
941
1195
  const { dispatchPromise: dispatch } = useIntentDispatcher6();
942
- return /* @__PURE__ */ React16.createElement(ShareSpaceButtonImpl, {
1196
+ return /* @__PURE__ */ React18.createElement(ShareSpaceButtonImpl, {
943
1197
  onClick: () => dispatch(createIntent6(SpaceAction.Share, {
944
1198
  space
945
1199
  }))
946
1200
  });
947
1201
  };
948
1202
  var ShareSpaceButtonImpl = ({ onClick }) => {
949
- const { t } = useTranslation16(SPACE_PLUGIN);
950
- return /* @__PURE__ */ React16.createElement(IconButton4, {
1203
+ const { t } = useTranslation17(SPACE_PLUGIN);
1204
+ return /* @__PURE__ */ React18.createElement(IconButton4, {
951
1205
  "data-testid": "spacePlugin.shareSpaceButton",
952
1206
  icon: "ph--users--regular",
953
1207
  label: t("share space label"),
@@ -956,20 +1210,20 @@ var ShareSpaceButtonImpl = ({ onClick }) => {
956
1210
  };
957
1211
 
958
1212
  // packages/plugins/plugin-space/src/components/SpacePresence.tsx
959
- import React17, { useCallback as useCallback10, useEffect as useEffect4, useState as useState8 } from "react";
1213
+ import React19, { useCallback as useCallback10, useEffect as useEffect4, useState as useState9 } from "react";
960
1214
  import { useAppGraph as useAppGraph2, useCapability } from "@dxos/app-framework";
961
1215
  import { generateName } from "@dxos/display-name";
962
1216
  import { PublicKey, useClient as useClient5 } from "@dxos/react-client";
963
- import { getSpace as getSpace3, useMembers, fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
1217
+ import { getSpace as getSpace3, useMembers, fullyQualifiedId as fullyQualifiedId3 } from "@dxos/react-client/echo";
964
1218
  import { useIdentity } from "@dxos/react-client/halo";
965
- import { Avatar, AvatarGroup, AvatarGroupItem, Tooltip as Tooltip2, useTranslation as useTranslation17, List as List2, ListItem as ListItem2, useDefaultValue } from "@dxos/react-ui";
1219
+ import { Avatar, Tooltip as Tooltip2, useTranslation as useTranslation18, List as List2, ListItem as ListItem2, useDefaultValue } from "@dxos/react-ui";
966
1220
  import { AttentionGlyph, useAttended, useAttention } from "@dxos/react-ui-attention";
967
1221
  import { ComplexMap, keyToFallback } from "@dxos/util";
968
1222
 
969
1223
  // packages/plugins/plugin-space/src/hooks/usePath.ts
970
- import { useEffect as useEffect3, useState as useState7 } from "react";
1224
+ import { useEffect as useEffect3, useState as useState8 } from "react";
971
1225
  var usePath = (graph, id, timeout) => {
972
- const [pathState, setPathState] = useState7(id ? graph.getPath({
1226
+ const [pathState, setPathState] = useState8(id ? graph.getPath({
973
1227
  target: id
974
1228
  }) : void 0);
975
1229
  useEffect3(() => {
@@ -1013,7 +1267,7 @@ var SpacePresence = ({ object, spaceKey }) => {
1013
1267
  const identity = useIdentity();
1014
1268
  const space = spaceKey ? client.spaces.get(spaceKey) : getSpace3(object);
1015
1269
  const spaceMembers = useMembers(space?.key);
1016
- const [_moment, setMoment] = useState8(Date.now());
1270
+ const [_moment, setMoment] = useState9(Date.now());
1017
1271
  useEffect4(() => {
1018
1272
  const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);
1019
1273
  return () => clearInterval(interval);
@@ -1025,7 +1279,7 @@ var SpacePresence = ({ object, spaceKey }) => {
1025
1279
  if (!identity || !spaceState || !space) {
1026
1280
  return null;
1027
1281
  }
1028
- const currentObjectViewers = spaceState.viewersByObject[fullyQualifiedId2(object)] ?? noViewers;
1282
+ const currentObjectViewers = spaceState.viewersByObject[fullyQualifiedId3(object)] ?? noViewers;
1029
1283
  const membersForObject = spaceMembers.filter((member) => memberOnline(member) && memberIsNotSelf(member)).filter((member) => currentObjectViewers.has(member.identity.identityKey)).map((member) => {
1030
1284
  const objectView = currentObjectViewers.get(member.identity.identityKey);
1031
1285
  const lastSeen = objectView?.lastSeen ?? -Infinity;
@@ -1036,7 +1290,7 @@ var SpacePresence = ({ object, spaceKey }) => {
1036
1290
  lastSeen
1037
1291
  };
1038
1292
  }).toSorted((a, b) => a.lastSeen - b.lastSeen);
1039
- return /* @__PURE__ */ React17.createElement(FullPresence, {
1293
+ return /* @__PURE__ */ React19.createElement(FullPresence, {
1040
1294
  members: membersForObject
1041
1295
  });
1042
1296
  };
@@ -1046,63 +1300,60 @@ var FullPresence = (props) => {
1046
1300
  if (members.length === 0) {
1047
1301
  return null;
1048
1302
  }
1049
- return /* @__PURE__ */ React17.createElement(AvatarGroup.Root, {
1050
- size,
1051
- classNames: "mbs-2 mie-4",
1303
+ return /* @__PURE__ */ React19.createElement("div", {
1304
+ className: "dx-avatar-group",
1052
1305
  "data-testid": "spacePlugin.presence"
1053
- }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ React17.createElement(Tooltip2.Root, {
1306
+ }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ React19.createElement(Tooltip2.Root, {
1054
1307
  key: member.identity.identityKey.toHex()
1055
- }, /* @__PURE__ */ React17.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React17.createElement(PrensenceAvatar, {
1308
+ }, /* @__PURE__ */ React19.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React19.createElement(PrensenceAvatar, {
1056
1309
  identity: member.identity,
1057
- group: true,
1058
1310
  match: member.currentlyAttended,
1059
1311
  index: members.length - i,
1060
- onClick: () => onMemberClick?.(member)
1061
- })), /* @__PURE__ */ React17.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React17.createElement(Tooltip2.Content, {
1312
+ onClick: () => onMemberClick?.(member),
1313
+ size
1314
+ })), /* @__PURE__ */ React19.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React19.createElement(Tooltip2.Content, {
1062
1315
  side: "bottom"
1063
- }, /* @__PURE__ */ React17.createElement("span", null, getName(member.identity)), /* @__PURE__ */ React17.createElement(Tooltip2.Arrow, null))))), members.length > 3 && /* @__PURE__ */ React17.createElement(Tooltip2.Root, null, /* @__PURE__ */ React17.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React17.createElement(AvatarGroupItem.Root, {
1064
- status: "inactive"
1065
- }, /* @__PURE__ */ React17.createElement(Avatar.Frame, {
1316
+ }, /* @__PURE__ */ React19.createElement("span", null, getName(member.identity)), /* @__PURE__ */ React19.createElement(Tooltip2.Arrow, null))))), members.length > 3 && /* @__PURE__ */ React19.createElement(Tooltip2.Root, null, /* @__PURE__ */ React19.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React19.createElement(Avatar.Root, null, /* @__PURE__ */ React19.createElement(Avatar.Content, {
1317
+ status: "inactive",
1066
1318
  style: {
1067
1319
  zIndex: members.length - 4
1068
- }
1069
- }, /* @__PURE__ */ React17.createElement(Avatar.Fallback, {
1070
- text: `+${members.length - 3}`
1071
- })))), /* @__PURE__ */ React17.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React17.createElement(Tooltip2.Content, {
1320
+ },
1321
+ fallback: `+${members.length - 3}`
1322
+ }))), /* @__PURE__ */ React19.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React19.createElement(Tooltip2.Content, {
1072
1323
  side: "bottom"
1073
- }, /* @__PURE__ */ React17.createElement(Tooltip2.Arrow, null), /* @__PURE__ */ React17.createElement(List2, {
1324
+ }, /* @__PURE__ */ React19.createElement(Tooltip2.Arrow, null), /* @__PURE__ */ React19.createElement(List2, {
1074
1325
  classNames: "max-h-56 overflow-y-auto"
1075
- }, members.map((member) => /* @__PURE__ */ React17.createElement(ListItem2.Root, {
1326
+ }, members.map((member) => /* @__PURE__ */ React19.createElement(ListItem2.Root, {
1076
1327
  key: member.identity.identityKey.toHex(),
1077
1328
  classNames: "flex gap-2 items-center cursor-pointer mbe-2",
1078
1329
  onClick: () => onMemberClick?.(member),
1079
1330
  "data-testid": "identity-list-item"
1080
- }, /* @__PURE__ */ React17.createElement(PrensenceAvatar, {
1331
+ }, /* @__PURE__ */ React19.createElement(PrensenceAvatar, {
1081
1332
  identity: member.identity,
1333
+ size,
1082
1334
  showName: true,
1083
1335
  match: member.currentlyAttended
1084
1336
  }))))))));
1085
1337
  };
1086
- var PrensenceAvatar = ({ identity, showName, match, group, index, onClick }) => {
1087
- const Root = group ? AvatarGroupItem.Root : Avatar.Root;
1338
+ var PrensenceAvatar = ({ identity, showName, match, index, onClick, size }) => {
1088
1339
  const status = match ? "current" : "active";
1089
1340
  const fallbackValue = keyToFallback(identity.identityKey);
1090
- return /* @__PURE__ */ React17.createElement(Root, {
1341
+ return /* @__PURE__ */ React19.createElement(Avatar.Root, null, /* @__PURE__ */ React19.createElement(Avatar.Content, {
1091
1342
  status,
1092
- hue: identity.profile?.data?.hue || fallbackValue.hue
1093
- }, /* @__PURE__ */ React17.createElement(Avatar.Frame, {
1343
+ hue: identity.profile?.data?.hue || fallbackValue.hue,
1094
1344
  "data-testid": "spacePlugin.presence.member",
1095
1345
  "data-status": status,
1346
+ size,
1347
+ classNames: "mbs-2 mie-4",
1096
1348
  ...index ? {
1097
1349
  style: {
1098
1350
  zIndex: index
1099
1351
  }
1100
1352
  } : {},
1101
- onClick: () => onClick?.()
1102
- }, /* @__PURE__ */ React17.createElement(Avatar.Fallback, {
1103
- text: identity.profile?.data?.emoji || fallbackValue.emoji
1104
- })), showName && /* @__PURE__ */ React17.createElement(Avatar.Label, {
1105
- classNames: "text-sm truncate pli-2"
1353
+ onClick: () => onClick?.(),
1354
+ fallback: identity.profile?.data?.emoji || fallbackValue.emoji
1355
+ }), /* @__PURE__ */ React19.createElement(Avatar.Label, {
1356
+ classNames: showName ? "text-sm truncate pli-2" : "sr-only"
1106
1357
  }, getName(identity)));
1107
1358
  };
1108
1359
  var SmallPresenceLive = ({ id, open, viewers }) => {
@@ -1117,7 +1368,7 @@ var SmallPresenceLive = ({ id, open, viewers }) => {
1117
1368
  const moment = Date.now();
1118
1369
  return Array.from(viewers2.values()).filter((viewer) => moment - viewer.lastSeen < ACTIVITY_DURATION);
1119
1370
  };
1120
- const [activeViewers, setActiveViewers] = useState8(viewers ? getActiveViewers(viewers) : []);
1371
+ const [activeViewers, setActiveViewers] = useState9(viewers ? getActiveViewers(viewers) : []);
1121
1372
  useEffect4(() => {
1122
1373
  if (viewers) {
1123
1374
  setActiveViewers(getActiveViewers(viewers));
@@ -1129,62 +1380,59 @@ var SmallPresenceLive = ({ id, open, viewers }) => {
1129
1380
  }, [
1130
1381
  viewers
1131
1382
  ]);
1132
- return /* @__PURE__ */ React17.createElement(SmallPresence, {
1383
+ return /* @__PURE__ */ React19.createElement(SmallPresence, {
1133
1384
  count: activeViewers.length,
1134
1385
  attended: isAttended,
1135
1386
  containsAttended
1136
1387
  });
1137
1388
  };
1138
1389
  var SmallPresence = ({ count = 0, attended, containsAttended }) => {
1139
- const { t } = useTranslation17(SPACE_PLUGIN);
1140
- return /* @__PURE__ */ React17.createElement(Tooltip2.Root, null, /* @__PURE__ */ React17.createElement(Tooltip2.Trigger, {
1390
+ const { t } = useTranslation18(SPACE_PLUGIN);
1391
+ return /* @__PURE__ */ React19.createElement(Tooltip2.Root, null, /* @__PURE__ */ React19.createElement(Tooltip2.Trigger, {
1141
1392
  asChild: true
1142
- }, /* @__PURE__ */ React17.createElement(AttentionGlyph, {
1393
+ }, /* @__PURE__ */ React19.createElement(AttentionGlyph, {
1143
1394
  attended,
1144
1395
  containsAttended,
1145
1396
  presence: count > 1 ? "many" : count === 1 ? "one" : "none",
1146
1397
  classNames: "self-center mie-1"
1147
- })), /* @__PURE__ */ React17.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React17.createElement(Tooltip2.Content, {
1398
+ })), /* @__PURE__ */ React19.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React19.createElement(Tooltip2.Content, {
1148
1399
  side: "bottom"
1149
- }, /* @__PURE__ */ React17.createElement("span", null, t("presence label", {
1400
+ }, /* @__PURE__ */ React19.createElement("span", null, t("presence label", {
1150
1401
  count
1151
- })), /* @__PURE__ */ React17.createElement(Tooltip2.Arrow, null))));
1402
+ })), /* @__PURE__ */ React19.createElement(Tooltip2.Arrow, null))));
1152
1403
  };
1153
1404
 
1154
1405
  // packages/plugins/plugin-space/src/components/SpacePluginSettings.tsx
1155
- import React18 from "react";
1156
- import { Input as Input4, useTranslation as useTranslation18 } from "@dxos/react-ui";
1406
+ import React20 from "react";
1407
+ import { Input as Input4, useTranslation as useTranslation19 } from "@dxos/react-ui";
1157
1408
  import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
1158
1409
  var SpacePluginSettings = ({ settings }) => {
1159
- const { t } = useTranslation18(SPACE_PLUGIN);
1160
- return /* @__PURE__ */ React18.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1410
+ const { t } = useTranslation19(SPACE_PLUGIN);
1411
+ return /* @__PURE__ */ React20.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React20.createElement(DeprecatedFormInput, {
1161
1412
  label: t("show hidden spaces label")
1162
- }, /* @__PURE__ */ React18.createElement(Input4.Switch, {
1413
+ }, /* @__PURE__ */ React20.createElement(Input4.Switch, {
1163
1414
  checked: settings.showHidden,
1164
1415
  onCheckedChange: (checked) => settings.showHidden = !!checked
1165
1416
  })));
1166
1417
  };
1167
1418
 
1168
- // packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsPanel.tsx
1169
- import React19, { useCallback as useCallback11, useState as useState9 } from "react";
1419
+ // packages/plugins/plugin-space/src/components/SpaceSettings/SpacePropertiesForm.tsx
1420
+ import React21, { useCallback as useCallback11, useMemo as useMemo3, useState as useState10 } from "react";
1170
1421
  import { log as log3 } from "@dxos/log";
1171
1422
  import { EdgeReplicationSetting } from "@dxos/protocols/proto/dxos/echo/metadata";
1172
- import { useClient as useClient6 } from "@dxos/react-client";
1173
- import { Input as Input5, Toolbar, useTranslation as useTranslation19 } from "@dxos/react-ui";
1174
- import { DeprecatedFormContainer as DeprecatedFormContainer2, DeprecatedFormInput as DeprecatedFormInput2 } from "@dxos/react-ui-form";
1423
+ import { Input as Input5, useTranslation as useTranslation20 } from "@dxos/react-ui";
1424
+ import { Form as Form4, ControlItem, ControlItemInput } from "@dxos/react-ui-form";
1175
1425
  import { HuePicker, IconPicker } from "@dxos/react-ui-pickers";
1176
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsPanel.tsx";
1177
- var SpaceSettingsPanel = ({ space }) => {
1178
- const { t } = useTranslation19(SPACE_PLUGIN);
1179
- const client = useClient6();
1180
- const edgeEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.echoReplicator);
1181
- const [edgeReplication, setEdgeReplication] = useState9(space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED);
1426
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SpaceSettings/SpacePropertiesForm.tsx";
1427
+ var SpacePropertiesForm = ({ space }) => {
1428
+ const { t } = useTranslation20(SPACE_PLUGIN);
1429
+ const [edgeReplication, setEdgeReplication] = useState10(space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED);
1182
1430
  const toggleEdgeReplication = useCallback11(async (next) => {
1183
1431
  setEdgeReplication(next);
1184
1432
  await space?.internal.setEdgeReplicationPreference(next ? EdgeReplicationSetting.ENABLED : EdgeReplicationSetting.DISABLED).catch((err) => {
1185
1433
  log3.catch(err, void 0, {
1186
1434
  F: __dxlog_file5,
1187
- L: 36,
1435
+ L: 34,
1188
1436
  S: void 0,
1189
1437
  C: (f, a) => f(...a)
1190
1438
  });
@@ -1193,155 +1441,172 @@ var SpaceSettingsPanel = ({ space }) => {
1193
1441
  }, [
1194
1442
  space
1195
1443
  ]);
1196
- return /* @__PURE__ */ React19.createElement(DeprecatedFormContainer2, null, /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1197
- label: t("name label")
1198
- }, /* @__PURE__ */ React19.createElement(Input5.TextInput, {
1199
- placeholder: t("unnamed space label"),
1200
- value: space.properties.name ?? "",
1201
- onChange: (event) => {
1202
- space.properties.name = event.target.value;
1444
+ const handleSave = useCallback11((properties) => {
1445
+ void toggleEdgeReplication(properties.edgeReplication);
1446
+ if (properties.name !== space.properties.name) {
1447
+ space.properties.name = properties.name;
1203
1448
  }
1204
- })), /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1205
- label: t("icon label")
1206
- }, /* @__PURE__ */ React19.createElement(Toolbar.Root, null, /* @__PURE__ */ React19.createElement(IconPicker, {
1207
- value: space.properties.icon,
1208
- onChange: (nextIcon) => space.properties.icon = nextIcon,
1209
- onReset: () => {
1210
- space.properties.icon = void 0;
1449
+ if (properties.icon !== space.properties.icon) {
1450
+ space.properties.icon = properties.icon;
1211
1451
  }
1212
- }))), /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1213
- label: t("hue label")
1214
- }, /* @__PURE__ */ React19.createElement(Toolbar.Root, null, /* @__PURE__ */ React19.createElement(HuePicker, {
1215
- value: space.properties.hue,
1216
- onChange: (nextHue) => space.properties.hue = nextHue,
1217
- onReset: () => {
1218
- space.properties.hue = void 0;
1452
+ if (properties.hue !== space.properties.hue) {
1453
+ space.properties.hue = properties.hue;
1219
1454
  }
1220
- }))), edgeEnabled && /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1221
- label: t("edge replication label")
1222
- }, /* @__PURE__ */ React19.createElement(Input5.Switch, {
1223
- checked: edgeReplication,
1224
- onCheckedChange: toggleEdgeReplication
1225
- })));
1455
+ }, [
1456
+ space,
1457
+ toggleEdgeReplication
1458
+ ]);
1459
+ const values = useMemo3(() => ({
1460
+ name: space.properties.name,
1461
+ icon: space.properties.icon,
1462
+ hue: space.properties.hue,
1463
+ edgeReplication
1464
+ }), [
1465
+ space.properties.name,
1466
+ space.properties.icon,
1467
+ space.properties.hue,
1468
+ edgeReplication
1469
+ ]);
1470
+ const customElements = useMemo3(() => ({
1471
+ name: ({ type, label, getValue, onValueChange }) => {
1472
+ const handleChange = useCallback11(({ target: { value } }) => onValueChange(type, value), [
1473
+ onValueChange,
1474
+ type
1475
+ ]);
1476
+ return /* @__PURE__ */ React21.createElement(ControlItemInput, {
1477
+ title: label,
1478
+ description: t("display name description")
1479
+ }, /* @__PURE__ */ React21.createElement(Input5.TextInput, {
1480
+ value: getValue(),
1481
+ onChange: handleChange,
1482
+ placeholder: t("display name input placeholder"),
1483
+ classNames: "min-is-64"
1484
+ }));
1485
+ },
1486
+ icon: ({ type, label, getValue, onValueChange }) => {
1487
+ const handleChange = useCallback11((nextEmoji) => onValueChange(type, nextEmoji), [
1488
+ onValueChange,
1489
+ type
1490
+ ]);
1491
+ const handleEmojiReset = useCallback11(() => onValueChange(type, void 0), [
1492
+ onValueChange,
1493
+ type
1494
+ ]);
1495
+ return /* @__PURE__ */ React21.createElement(ControlItem, {
1496
+ title: label,
1497
+ description: t("icon description")
1498
+ }, /* @__PURE__ */ React21.createElement(IconPicker, {
1499
+ value: getValue(),
1500
+ onChange: handleChange,
1501
+ onReset: handleEmojiReset,
1502
+ classNames: "justify-self-end",
1503
+ iconSize: 5
1504
+ }));
1505
+ },
1506
+ hue: ({ type, label, getValue, onValueChange }) => {
1507
+ const handleChange = useCallback11((nextHue) => onValueChange(type, nextHue), [
1508
+ onValueChange,
1509
+ type
1510
+ ]);
1511
+ const handleHueReset = useCallback11(() => onValueChange(type, void 0), [
1512
+ onValueChange,
1513
+ type
1514
+ ]);
1515
+ return /* @__PURE__ */ React21.createElement(ControlItem, {
1516
+ title: label,
1517
+ description: t("hue description")
1518
+ }, /* @__PURE__ */ React21.createElement(HuePicker, {
1519
+ value: getValue(),
1520
+ onChange: handleChange,
1521
+ onReset: handleHueReset,
1522
+ classNames: "[--hue-preview-size:1.25rem] justify-self-end"
1523
+ }));
1524
+ },
1525
+ edgeReplication: ({ type, label, getValue, onValueChange }) => {
1526
+ const handleChange = useCallback11((checked) => onValueChange(type, checked), [
1527
+ onValueChange,
1528
+ type
1529
+ ]);
1530
+ return /* @__PURE__ */ React21.createElement(ControlItemInput, {
1531
+ title: label,
1532
+ description: t("edge replication description")
1533
+ }, /* @__PURE__ */ React21.createElement(Input5.Switch, {
1534
+ checked: getValue(),
1535
+ onCheckedChange: handleChange,
1536
+ classNames: "justify-self-end"
1537
+ }));
1538
+ }
1539
+ }), [
1540
+ t
1541
+ ]);
1542
+ return /* @__PURE__ */ React21.createElement(Form4, {
1543
+ schema: SpaceForm,
1544
+ values,
1545
+ autoSave: true,
1546
+ onSave: handleSave,
1547
+ Custom: customElements,
1548
+ classNames: 'p-0 container-max-width [&_[role="form"]]:grid [&_[role="form"]]:grid-cols-1 md:[&_[role="form"]]:grid-cols-[1fr_min-content] [&_[role="form"]]:gap-4'
1549
+ });
1226
1550
  };
1227
1551
 
1228
- // packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsDialog.tsx
1229
- import React20, { useMemo, useState as useState10 } from "react";
1230
- import { Surface as Surface2, useCapabilities as useCapabilities2 } from "@dxos/app-framework";
1231
- import { useClient as useClient7 } from "@dxos/react-client";
1232
- import { Button as Button6, Clipboard, Dialog as Dialog4, Icon as Icon4, toLocalizedString as toLocalizedString3, useTranslation as useTranslation20 } from "@dxos/react-ui";
1233
- import { Tabs } from "@dxos/react-ui-tabs";
1234
- import { SpacePanel } from "@dxos/shell/react";
1552
+ // packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsContainer.tsx
1553
+ import React22, { useCallback as useCallback12, useMemo as useMemo4 } from "react";
1554
+ import { Surface as Surface3, useCapabilities as useCapabilities2, useCapability as useCapability2 } from "@dxos/app-framework";
1555
+ import { toLocalizedString as toLocalizedString3, useTranslation as useTranslation21 } from "@dxos/react-ui";
1556
+ import { ControlSectionHeading } from "@dxos/react-ui-form";
1557
+ import { Accordion } from "@dxos/react-ui-list";
1558
+ import { StackItem as StackItem3 } from "@dxos/react-ui-stack";
1559
+ import { byPosition } from "@dxos/util";
1235
1560
  var SPACE_SETTINGS_DIALOG = `${SPACE_PLUGIN}/SpaceSettingsDialog`;
1236
- var SpaceSettingsDialog = ({ space, target, createInvitationUrl, initialTab = "members", namesCache }) => {
1237
- const { t } = useTranslation20(SPACE_PLUGIN);
1238
- const client = useClient7();
1239
- const [tabsActivePart, setTabsActivePart] = useState10("list");
1240
- const [selected, setSelected] = useState10(initialTab);
1241
- const locked = space.properties[COMPOSER_SPACE_LOCK];
1242
- const name = getSpaceDisplayName(space, {
1243
- personal: client.spaces.default === space,
1244
- namesCache
1245
- });
1246
- const panels = useCapabilities2(SpaceCapabilities.SettingsPanel);
1247
- const data = useMemo(() => ({
1561
+ var SpaceSettingsContainer = ({ space }) => {
1562
+ const { t } = useTranslation21(SPACE_PLUGIN);
1563
+ const state = useCapability2(SpaceCapabilities.MutableState);
1564
+ const items = useCapabilities2(SpaceCapabilities.SettingsSection).toSorted(byPosition);
1565
+ const data = useMemo4(() => ({
1248
1566
  subject: space
1249
1567
  }), [
1250
1568
  space
1251
1569
  ]);
1252
- return (
1253
- // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
1254
- // Consider factoring it out to the tabs package.
1255
- /* @__PURE__ */ React20.createElement(Dialog4.Content, {
1256
- classNames: "p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden"
1257
- }, /* @__PURE__ */ React20.createElement("div", {
1258
- role: "none",
1259
- className: "flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4"
1260
- }, /* @__PURE__ */ React20.createElement(Dialog4.Title, {
1261
- onClick: () => setTabsActivePart("list"),
1262
- "aria-description": t("click to return to tablist description"),
1263
- classNames: "flex cursor-pointer items-center group/title"
1264
- }, /* @__PURE__ */ React20.createElement(Icon4, {
1265
- icon: "ph--caret-left--regular",
1266
- size: 4,
1267
- classNames: [
1268
- "@md:hidden",
1269
- tabsActivePart === "list" && "invisible"
1270
- ]
1271
- }), /* @__PURE__ */ React20.createElement("span", {
1272
- className: tabsActivePart !== "list" ? "group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1" : ""
1273
- }, toLocalizedString3(name, t))), /* @__PURE__ */ React20.createElement(Dialog4.Close, {
1274
- asChild: true
1275
- }, /* @__PURE__ */ React20.createElement(Button6, {
1276
- density: "fine",
1277
- variant: "ghost",
1278
- autoFocus: true
1279
- }, /* @__PURE__ */ React20.createElement(Icon4, {
1280
- icon: "ph--x--regular",
1281
- size: 4
1282
- })))), /* @__PURE__ */ React20.createElement(Tabs.Root, {
1283
- orientation: "vertical",
1284
- value: selected,
1285
- onValueChange: setSelected,
1286
- activePart: tabsActivePart,
1287
- onActivePartChange: setTabsActivePart,
1288
- classNames: "flex flex-col flex-1 mbs-2"
1289
- }, /* @__PURE__ */ React20.createElement(Tabs.Viewport, {
1290
- classNames: "flex-1 min-bs-0"
1291
- }, /* @__PURE__ */ React20.createElement("div", {
1292
- role: "none",
1293
- className: "overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator"
1294
- }, /* @__PURE__ */ React20.createElement(Tabs.Tablist, {
1295
- classNames: "flex flex-col max-bs-none min-is-[200px] gap-4 overflow-y-auto"
1296
- }, /* @__PURE__ */ React20.createElement("div", {
1297
- role: "none",
1298
- className: "flex flex-col ml-1"
1299
- }, /* @__PURE__ */ React20.createElement(Tabs.Tab, {
1300
- value: "settings"
1301
- }, t("settings tab label")), /* @__PURE__ */ React20.createElement(Tabs.Tab, {
1302
- value: "members",
1303
- disabled: locked
1304
- }, t("members tab label")), panels.map((panel) => /* @__PURE__ */ React20.createElement(Tabs.Tab, {
1305
- key: panel.id,
1306
- value: panel.id
1307
- }, toLocalizedString3(panel.label, t)))))), /* @__PURE__ */ React20.createElement(Tabs.Tabpanel, {
1308
- value: "settings",
1309
- classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
1310
- }, /* @__PURE__ */ React20.createElement(SpaceSettingsPanel, {
1311
- space
1312
- })), /* @__PURE__ */ React20.createElement(Tabs.Tabpanel, {
1313
- value: "members",
1314
- classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
1315
- }, /* @__PURE__ */ React20.createElement(Clipboard.Provider, null, /* @__PURE__ */ React20.createElement(SpacePanel, {
1316
- space,
1317
- hideHeading: true,
1318
- target,
1319
- createInvitationUrl
1320
- }))), panels.map((panel) => /* @__PURE__ */ React20.createElement(Tabs.Tabpanel, {
1321
- key: panel.id,
1322
- value: panel.id,
1323
- classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
1324
- }, /* @__PURE__ */ React20.createElement(Surface2, {
1325
- role: `space-settings--${panel.id}`,
1326
- data
1327
- }))))))
1328
- );
1570
+ const handleOpenSectionChange = useCallback12((sections) => {
1571
+ state.spaceSettingsOpenSections.splice(0, state.spaceSettingsOpenSections.length, ...sections);
1572
+ }, [
1573
+ state
1574
+ ]);
1575
+ return /* @__PURE__ */ React22.createElement(StackItem3.Content, {
1576
+ classNames: "p-2 block overflow-y-auto"
1577
+ }, /* @__PURE__ */ React22.createElement(Accordion.Root, {
1578
+ items,
1579
+ value: state.spaceSettingsOpenSections,
1580
+ onValueChange: handleOpenSectionChange
1581
+ }, ({ items: items2 }) => /* @__PURE__ */ React22.createElement(React22.Fragment, null, items2.map((item) => /* @__PURE__ */ React22.createElement(Accordion.Item, {
1582
+ key: item.id,
1583
+ item,
1584
+ classNames: "container-max-width"
1585
+ }, /* @__PURE__ */ React22.createElement(Accordion.ItemHeader, {
1586
+ classNames: "pie-6",
1587
+ asChild: true
1588
+ }, /* @__PURE__ */ React22.createElement(ControlSectionHeading, {
1589
+ title: toLocalizedString3(item.label, t)
1590
+ })), /* @__PURE__ */ React22.createElement(Accordion.ItemBody, null, /* @__PURE__ */ React22.createElement(Surface3, {
1591
+ role: `space-settings--${item.id}`,
1592
+ data
1593
+ })))))));
1329
1594
  };
1330
1595
 
1331
1596
  // packages/plugins/plugin-space/src/components/SyncStatus/InlineSyncStatus.tsx
1332
- import React21, { useEffect as useEffect6, useState as useState12 } from "react";
1597
+ import React23, { useEffect as useEffect6, useState as useState12 } from "react";
1333
1598
  import { useAppGraph as useAppGraph3 } from "@dxos/app-framework";
1334
1599
  import { QueryEdgeStatusResponse } from "@dxos/protocols/proto/dxos/client/services";
1335
1600
  import { EdgeReplicationSetting as EdgeReplicationSetting2 } from "@dxos/protocols/proto/dxos/echo/metadata";
1336
- import { useClient as useClient9 } from "@dxos/react-client";
1337
- import { Tooltip as Tooltip3, useTranslation as useTranslation21 } from "@dxos/react-ui";
1601
+ import { useClient as useClient7 } from "@dxos/react-client";
1602
+ import { Tooltip as Tooltip3, useTranslation as useTranslation22 } from "@dxos/react-ui";
1338
1603
  import { AttentionGlyph as AttentionGlyph2, useAttended as useAttended2, useAttention as useAttention2 } from "@dxos/react-ui-attention";
1339
1604
 
1340
1605
  // packages/plugins/plugin-space/src/components/SyncStatus/sync-state.ts
1341
1606
  import { useEffect as useEffect5, useState as useState11 } from "react";
1342
1607
  import { Context } from "@dxos/context";
1343
1608
  import { EdgeService } from "@dxos/protocols";
1344
- import { useClient as useClient8 } from "@dxos/react-client";
1609
+ import { useClient as useClient6 } from "@dxos/react-client";
1345
1610
  var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/sync-state.ts";
1346
1611
  var createEmptyEdgeSyncState = () => ({
1347
1612
  missingOnLocal: 0,
@@ -1362,7 +1627,7 @@ var getSyncSummary = (syncMap) => {
1362
1627
  };
1363
1628
  var isEdgePeerId = (peerId, spaceId) => peerId.startsWith(`${EdgeService.AUTOMERGE_REPLICATOR}:${spaceId}`);
1364
1629
  var useSyncState = () => {
1365
- const client = useClient8();
1630
+ const client = useClient6();
1366
1631
  const [spaceState, setSpaceState] = useState11({});
1367
1632
  useEffect5(() => {
1368
1633
  const ctx = new Context(void 0, {
@@ -1422,7 +1687,7 @@ var useSpaceSyncState = (space) => {
1422
1687
  // packages/plugins/plugin-space/src/components/SyncStatus/InlineSyncStatus.tsx
1423
1688
  var useEdgeStatus = () => {
1424
1689
  const [status, setStatus] = useState12(QueryEdgeStatusResponse.EdgeStatus.NOT_CONNECTED);
1425
- const client = useClient9();
1690
+ const client = useClient7();
1426
1691
  useEffect6(() => {
1427
1692
  client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status: status2 }) => {
1428
1693
  setStatus(status2);
@@ -1433,7 +1698,7 @@ var useEdgeStatus = () => {
1433
1698
  return status;
1434
1699
  };
1435
1700
  var InlineSyncStatus = ({ space, open }) => {
1436
- const { t } = useTranslation21(SPACE_PLUGIN);
1701
+ const { t } = useTranslation22(SPACE_PLUGIN);
1437
1702
  const id = space.id;
1438
1703
  const { hasAttention, isAncestor, isRelated } = useAttention2(id);
1439
1704
  const isAttended = hasAttention || isAncestor || isRelated;
@@ -1446,33 +1711,33 @@ var InlineSyncStatus = ({ space, open }) => {
1446
1711
  const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting2.ENABLED;
1447
1712
  const syncState = useSpaceSyncState(space);
1448
1713
  const syncing = connectedToEdge && edgeSyncEnabled && syncState && syncState.missingOnLocal > 0;
1449
- return /* @__PURE__ */ React21.createElement(Tooltip3.Root, null, /* @__PURE__ */ React21.createElement(Tooltip3.Trigger, {
1714
+ return /* @__PURE__ */ React23.createElement(Tooltip3.Root, null, /* @__PURE__ */ React23.createElement(Tooltip3.Trigger, {
1450
1715
  asChild: true
1451
- }, /* @__PURE__ */ React21.createElement(AttentionGlyph2, {
1716
+ }, /* @__PURE__ */ React23.createElement(AttentionGlyph2, {
1452
1717
  syncing,
1453
1718
  attended: isAttended,
1454
1719
  containsAttended,
1455
1720
  classNames: "self-center mie-1"
1456
- })), /* @__PURE__ */ React21.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React21.createElement(Tooltip3.Content, {
1721
+ })), /* @__PURE__ */ React23.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React23.createElement(Tooltip3.Content, {
1457
1722
  side: "bottom",
1458
1723
  classNames: "z-[70]"
1459
- }, /* @__PURE__ */ React21.createElement("span", null, t("syncing label")), /* @__PURE__ */ React21.createElement(Tooltip3.Arrow, null))));
1724
+ }, /* @__PURE__ */ React23.createElement("span", null, t("syncing label")), /* @__PURE__ */ React23.createElement(Tooltip3.Arrow, null))));
1460
1725
  };
1461
1726
 
1462
1727
  // packages/plugins/plugin-space/src/components/SyncStatus/SyncStatus.tsx
1463
- import React23, { useCallback as useCallback12, useEffect as useEffect8, useState as useState14 } from "react";
1728
+ import React25, { useCallback as useCallback13, useEffect as useEffect8, useState as useState14 } from "react";
1464
1729
  import { StatusBar } from "@dxos/plugin-status-bar";
1465
- import { useClient as useClient11 } from "@dxos/react-client";
1466
- import { Icon as Icon6, Input as Input6, Popover as Popover3, useTranslation as useTranslation23 } from "@dxos/react-ui";
1730
+ import { useClient as useClient9 } from "@dxos/react-client";
1731
+ import { Icon as Icon6, Input as Input6, Popover as Popover3, useTranslation as useTranslation24 } from "@dxos/react-ui";
1467
1732
  import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
1468
- import { mx as mx6 } from "@dxos/react-ui-theme";
1733
+ import { mx as mx8 } from "@dxos/react-ui-theme";
1469
1734
 
1470
1735
  // packages/plugins/plugin-space/src/components/SyncStatus/Space.tsx
1471
- import React22, { useEffect as useEffect7, useState as useState13 } from "react";
1472
- import { useClient as useClient10 } from "@dxos/react-client";
1736
+ import React24, { useEffect as useEffect7, useState as useState13 } from "react";
1737
+ import { useClient as useClient8 } from "@dxos/react-client";
1473
1738
  import { useSpace } from "@dxos/react-client/echo";
1474
- import { Icon as Icon5, toLocalizedString as toLocalizedString4, useTranslation as useTranslation22 } from "@dxos/react-ui";
1475
- import { mx as mx5 } from "@dxos/react-ui-theme";
1739
+ import { Icon as Icon5, toLocalizedString as toLocalizedString4, useTranslation as useTranslation23 } from "@dxos/react-ui";
1740
+ import { mx as mx7 } from "@dxos/react-ui-theme";
1476
1741
  var SYNC_STALLED_TIMEOUT = 5e3;
1477
1742
  var styles = {
1478
1743
  barBg: "bg-neutral-50 dark:bg-green-900 text-black",
@@ -1503,8 +1768,8 @@ var useActive = (count) => {
1503
1768
  return active;
1504
1769
  };
1505
1770
  var SpaceRowContainer = ({ spaceId, state }) => {
1506
- const { t } = useTranslation22(SPACE_PLUGIN);
1507
- const client = useClient10();
1771
+ const { t } = useTranslation23(SPACE_PLUGIN);
1772
+ const client = useClient8();
1508
1773
  const space = useSpace(spaceId);
1509
1774
  if (!space) {
1510
1775
  return null;
@@ -1512,7 +1777,7 @@ var SpaceRowContainer = ({ spaceId, state }) => {
1512
1777
  const spaceName = toLocalizedString4(getSpaceDisplayName(space, {
1513
1778
  personal: space === client.spaces.default
1514
1779
  }), t);
1515
- return /* @__PURE__ */ React22.createElement(SpaceRow, {
1780
+ return /* @__PURE__ */ React24.createElement(SpaceRow, {
1516
1781
  spaceId,
1517
1782
  spaceName,
1518
1783
  state
@@ -1521,19 +1786,19 @@ var SpaceRowContainer = ({ spaceId, state }) => {
1521
1786
  var SpaceRow = ({ spaceId, spaceName, state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote } }) => {
1522
1787
  const downActive = useActive(localDocumentCount);
1523
1788
  const upActive = useActive(remoteDocumentCount);
1524
- return /* @__PURE__ */ React22.createElement("div", {
1789
+ return /* @__PURE__ */ React24.createElement("div", {
1525
1790
  className: "flex items-center mx-0.5 gap-0.5 cursor-pointer",
1526
1791
  title: spaceId,
1527
1792
  onClick: () => {
1528
1793
  void navigator.clipboard.writeText(spaceId);
1529
1794
  }
1530
- }, /* @__PURE__ */ React22.createElement("span", {
1795
+ }, /* @__PURE__ */ React24.createElement("span", {
1531
1796
  className: "is-1/2 truncate"
1532
- }, spaceName), /* @__PURE__ */ React22.createElement(Icon5, {
1797
+ }, spaceName), /* @__PURE__ */ React24.createElement(Icon5, {
1533
1798
  icon: "ph--arrow-fat-line-left--regular",
1534
1799
  size: 3,
1535
- classNames: mx5(downActive && "animate-[pulse_1s_infinite]")
1536
- }), /* @__PURE__ */ React22.createElement(Candle, {
1800
+ classNames: mx7(downActive && "animate-[pulse_1s_infinite]")
1801
+ }), /* @__PURE__ */ React24.createElement(Candle, {
1537
1802
  up: {
1538
1803
  count: remoteDocumentCount,
1539
1804
  total: remoteDocumentCount + missingOnRemote
@@ -1543,37 +1808,37 @@ var SpaceRow = ({ spaceId, spaceName, state: { localDocumentCount, remoteDocumen
1543
1808
  total: localDocumentCount + missingOnLocal
1544
1809
  },
1545
1810
  title: spaceId
1546
- }), /* @__PURE__ */ React22.createElement(Icon5, {
1811
+ }), /* @__PURE__ */ React24.createElement(Icon5, {
1547
1812
  icon: "ph--arrow-fat-line-right--regular",
1548
1813
  size: 3,
1549
- classNames: mx5(upActive && "animate-[pulse_1s_step-start_infinite]")
1814
+ classNames: mx7(upActive && "animate-[pulse_1s_step-start_infinite]")
1550
1815
  }));
1551
1816
  };
1552
1817
  var Candle = ({ classNames, up, down }) => {
1553
- return /* @__PURE__ */ React22.createElement("div", {
1554
- className: mx5("grid grid-cols-[1fr_2rem_1fr] w-full h-3", classNames)
1555
- }, /* @__PURE__ */ React22.createElement(Bar, {
1818
+ return /* @__PURE__ */ React24.createElement("div", {
1819
+ className: mx7("grid grid-cols-[1fr_2rem_1fr] w-full h-3", classNames)
1820
+ }, /* @__PURE__ */ React24.createElement(Bar, {
1556
1821
  classNames: "justify-end",
1557
1822
  ...up
1558
- }), /* @__PURE__ */ React22.createElement("div", {
1823
+ }), /* @__PURE__ */ React24.createElement("div", {
1559
1824
  className: "relative"
1560
- }, /* @__PURE__ */ React22.createElement("div", {
1561
- className: mx5("absolute inset-0 flex items-center justify-center text-xs", styles.barBg)
1562
- }, up.total)), /* @__PURE__ */ React22.createElement(Bar, down));
1825
+ }, /* @__PURE__ */ React24.createElement("div", {
1826
+ className: mx7("absolute inset-0 flex items-center justify-center text-xs", styles.barBg)
1827
+ }, up.total)), /* @__PURE__ */ React24.createElement(Bar, down));
1563
1828
  };
1564
1829
  var Bar = ({ classNames, count, total }) => {
1565
1830
  let p = count / total * 100;
1566
1831
  if (count < total) {
1567
1832
  p = Math.min(p, 95);
1568
1833
  }
1569
- return /* @__PURE__ */ React22.createElement("div", {
1570
- className: mx5("relative flex w-full", styles.barBg, classNames)
1571
- }, /* @__PURE__ */ React22.createElement("div", {
1572
- className: mx5("shrink-0", styles.barFg),
1834
+ return /* @__PURE__ */ React24.createElement("div", {
1835
+ className: mx7("relative flex w-full", styles.barBg, classNames)
1836
+ }, /* @__PURE__ */ React24.createElement("div", {
1837
+ className: mx7("shrink-0", styles.barFg),
1573
1838
  style: {
1574
1839
  width: `${p}%`
1575
1840
  }
1576
- }), count !== total && /* @__PURE__ */ React22.createElement("div", {
1841
+ }), count !== total && /* @__PURE__ */ React24.createElement("div", {
1577
1842
  className: "absolute top-0 bottom-0 flex items-center mx-0.5 text-black text-xs"
1578
1843
  }, count));
1579
1844
  };
@@ -1582,7 +1847,7 @@ var Bar = ({ classNames, count, total }) => {
1582
1847
  import { Context as Context2 } from "@dxos/context";
1583
1848
  var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/save-tracker.ts";
1584
1849
  var createClientSaveTracker = (client, cb) => {
1585
- const unsubscribeCallbacks = {};
1850
+ const CleanupFns = {};
1586
1851
  const state = {};
1587
1852
  const install = (spaces) => {
1588
1853
  for (const space of spaces) {
@@ -1590,7 +1855,7 @@ var createClientSaveTracker = (client, cb) => {
1590
1855
  continue;
1591
1856
  }
1592
1857
  state[space.id] = "saved";
1593
- unsubscribeCallbacks[space.id] = createSpaceSaveTracker(space, (s) => {
1858
+ CleanupFns[space.id] = createSpaceSaveTracker(space, (s) => {
1594
1859
  state[space.id] = s;
1595
1860
  cb(Object.values(state).some((s2) => s2 === "saving") ? "saving" : "saved");
1596
1861
  });
@@ -1601,7 +1866,7 @@ var createClientSaveTracker = (client, cb) => {
1601
1866
  });
1602
1867
  install(client.spaces.get());
1603
1868
  return () => {
1604
- for (const unsubscribe of Object.values(unsubscribeCallbacks)) {
1869
+ for (const unsubscribe of Object.values(CleanupFns)) {
1605
1870
  unsubscribe();
1606
1871
  }
1607
1872
  };
@@ -1671,7 +1936,7 @@ var getIcon = (status) => {
1671
1936
 
1672
1937
  // packages/plugins/plugin-space/src/components/SyncStatus/SyncStatus.tsx
1673
1938
  var SyncStatus = () => {
1674
- const client = useClient11();
1939
+ const client = useClient9();
1675
1940
  const state = useSyncState();
1676
1941
  const [saved, setSaved] = useState14(true);
1677
1942
  useEffect8(() => {
@@ -1679,13 +1944,13 @@ var SyncStatus = () => {
1679
1944
  setSaved(state2 === "saved");
1680
1945
  });
1681
1946
  }, []);
1682
- return /* @__PURE__ */ React23.createElement(SyncStatusIndicator, {
1947
+ return /* @__PURE__ */ React25.createElement(SyncStatusIndicator, {
1683
1948
  state,
1684
1949
  saved
1685
1950
  });
1686
1951
  };
1687
1952
  var SyncStatusIndicator = ({ state, saved }) => {
1688
- const { t } = useTranslation23(SPACE_PLUGIN);
1953
+ const { t } = useTranslation24(SPACE_PLUGIN);
1689
1954
  const summary = getSyncSummary(state);
1690
1955
  const offline = Object.values(state).length === 0;
1691
1956
  const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
@@ -1712,66 +1977,64 @@ var SyncStatusIndicator = ({ state, saved }) => {
1712
1977
  needsToDownload
1713
1978
  ]);
1714
1979
  const title = t(`${status} label`);
1715
- const icon = /* @__PURE__ */ React23.createElement(Icon6, {
1980
+ const icon = /* @__PURE__ */ React25.createElement(Icon6, {
1716
1981
  icon: getIcon(status),
1717
1982
  size: 4,
1718
1983
  classNames
1719
1984
  });
1720
1985
  if (offline) {
1721
- return /* @__PURE__ */ React23.createElement(StatusBar.Item, {
1986
+ return /* @__PURE__ */ React25.createElement(StatusBar.Item, {
1722
1987
  title
1723
1988
  }, icon);
1724
1989
  } else {
1725
- return /* @__PURE__ */ React23.createElement(Popover3.Root, null, /* @__PURE__ */ React23.createElement(Popover3.Trigger, {
1990
+ return /* @__PURE__ */ React25.createElement(Popover3.Root, null, /* @__PURE__ */ React25.createElement(Popover3.Trigger, {
1726
1991
  asChild: true
1727
- }, /* @__PURE__ */ React23.createElement(StatusBar.Button, {
1992
+ }, /* @__PURE__ */ React25.createElement(StatusBar.Button, {
1728
1993
  title
1729
- }, icon)), /* @__PURE__ */ React23.createElement(Popover3.Portal, null, /* @__PURE__ */ React23.createElement(Popover3.Content, null, /* @__PURE__ */ React23.createElement(SyncStatusDetail, {
1994
+ }, icon)), /* @__PURE__ */ React25.createElement(Popover3.Portal, null, /* @__PURE__ */ React25.createElement(Popover3.Content, null, /* @__PURE__ */ React25.createElement(SyncStatusDetail, {
1730
1995
  state,
1731
1996
  summary,
1732
1997
  debug: false
1733
- }), /* @__PURE__ */ React23.createElement(Popover3.Arrow, null))));
1998
+ }), /* @__PURE__ */ React25.createElement(Popover3.Arrow, null))));
1734
1999
  }
1735
2000
  };
1736
2001
  var SyncStatusDetail = ({ classNames, state, summary, debug }) => {
1737
2002
  const [showAll, setShowAll] = useState14(false);
1738
- const { t } = useTranslation23(SPACE_PLUGIN);
2003
+ const { t } = useTranslation24(SPACE_PLUGIN);
1739
2004
  const entries = Object.entries(state).filter(([_, value]) => showAll || value.missingOnLocal + value.missingOnRemote > 0).toSorted(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
1740
- const handleCheckedChange = useCallback12((state2) => setShowAll(state2), [
2005
+ const handleCheckedChange = useCallback13((state2) => setShowAll(state2), [
1741
2006
  setShowAll
1742
2007
  ]);
1743
- return /* @__PURE__ */ React23.createElement("div", {
1744
- className: mx6("flex flex-col gap-3 p-2 text-xs min-w-96", classNames)
1745
- }, /* @__PURE__ */ React23.createElement("div", {
2008
+ return /* @__PURE__ */ React25.createElement("div", {
2009
+ className: mx8("flex flex-col gap-3 p-2 text-xs min-w-[400px]", classNames)
2010
+ }, /* @__PURE__ */ React25.createElement("div", {
1746
2011
  role: "none",
1747
2012
  className: "flex items-center"
1748
- }, /* @__PURE__ */ React23.createElement("h1", {
2013
+ }, /* @__PURE__ */ React25.createElement("h1", {
1749
2014
  className: "flex-1"
1750
- }, t("sync status title")), /* @__PURE__ */ React23.createElement("div", {
2015
+ }, t("sync status title")), /* @__PURE__ */ React25.createElement("div", {
1751
2016
  className: "flex items-center gap-2"
1752
- }, /* @__PURE__ */ React23.createElement(Input6.Root, null, /* @__PURE__ */ React23.createElement(Input6.Label, {
2017
+ }, /* @__PURE__ */ React25.createElement(Input6.Root, null, /* @__PURE__ */ React25.createElement(Input6.Label, {
1753
2018
  classNames: "text-xs"
1754
- }, t("show all label")), /* @__PURE__ */ React23.createElement(Input6.Checkbox, {
2019
+ }, t("show all label")), /* @__PURE__ */ React25.createElement(Input6.Checkbox, {
1755
2020
  checked: showAll,
1756
2021
  onCheckedChange: handleCheckedChange
1757
- })))), /* @__PURE__ */ React23.createElement("div", {
2022
+ })))), /* @__PURE__ */ React25.createElement("div", {
1758
2023
  className: "flex flex-col gap-2"
1759
- }, entries.length === 0 && /* @__PURE__ */ React23.createElement("div", {
2024
+ }, entries.length === 0 && /* @__PURE__ */ React25.createElement("div", {
1760
2025
  role: "none",
1761
2026
  className: "flex justify-center"
1762
- }, t("no sync status label")), entries.map(([spaceId, state2]) => /* @__PURE__ */ React23.createElement(SpaceRowContainer, {
2027
+ }, t("no sync status label")), entries.map(([spaceId, state2]) => /* @__PURE__ */ React25.createElement(SpaceRowContainer, {
1763
2028
  key: spaceId,
1764
2029
  spaceId,
1765
2030
  state: state2
1766
- }))), debug && /* @__PURE__ */ React23.createElement(SyntaxHighlighter, {
2031
+ }))), debug && /* @__PURE__ */ React25.createElement(SyntaxHighlighter, {
1767
2032
  language: "json"
1768
2033
  }, JSON.stringify(summary, null, 2)));
1769
2034
  };
1770
2035
 
1771
2036
  export {
1772
- AdvancedObjectSettings,
1773
2037
  AwaitingObject,
1774
- BaseObjectSettings,
1775
2038
  CREATE_OBJECT_DIALOG,
1776
2039
  CreateObjectDialog,
1777
2040
  CREATE_SPACE_DIALOG,
@@ -1780,7 +2043,9 @@ export {
1780
2043
  CollectionSection,
1781
2044
  JOIN_DIALOG,
1782
2045
  JoinDialog,
2046
+ MembersContainer,
1783
2047
  MenuFooter,
2048
+ ObjectSettingsContainer,
1784
2049
  PersistenceStatus,
1785
2050
  POPOVER_ADD_SPACE,
1786
2051
  PopoverAddSpace,
@@ -1795,9 +2060,9 @@ export {
1795
2060
  SmallPresenceLive,
1796
2061
  SmallPresence,
1797
2062
  SpacePluginSettings,
1798
- SpaceSettingsPanel,
2063
+ SpacePropertiesForm,
1799
2064
  SPACE_SETTINGS_DIALOG,
1800
- SpaceSettingsDialog,
2065
+ SpaceSettingsContainer,
1801
2066
  InlineSyncStatus,
1802
2067
  SyncStatus,
1803
2068
  SyncStatusIndicator,
@@ -1814,4 +2079,4 @@ export {
1814
2079
  SpaceState,
1815
2080
  SpacesReady
1816
2081
  };
1817
- //# sourceMappingURL=chunk-FDVNOFE3.mjs.map
2082
+ //# sourceMappingURL=chunk-BEWBZ4Q4.mjs.map