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