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