@dxos/plugin-space 0.8.1 → 0.8.2-main.2f9c567

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 (279) hide show
  1. package/dist/lib/browser/{app-graph-builder-GMFCSOLG.mjs → app-graph-builder-I2BU35J5.mjs} +61 -7
  2. package/dist/lib/browser/app-graph-builder-I2BU35J5.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-DSF2U3A5.mjs → app-graph-serializer-HPYDOKA5.mjs} +8 -8
  4. package/dist/lib/browser/app-graph-serializer-HPYDOKA5.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-5BDV575R.mjs → chunk-OS5QKO4Z.mjs} +20 -8
  6. package/dist/lib/browser/chunk-OS5QKO4Z.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-LO5UL6RU.mjs → chunk-RERTVPBV.mjs} +60 -141
  8. package/dist/lib/browser/chunk-RERTVPBV.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-JZXWPMLA.mjs → chunk-TSX67XGX.mjs} +526 -670
  10. package/dist/lib/browser/chunk-TSX67XGX.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-YQNBTJI4.mjs +308 -0
  12. package/dist/lib/browser/chunk-YQNBTJI4.mjs.map +7 -0
  13. package/dist/lib/browser/{identity-created-JR7BNXFH.mjs → identity-created-DWFKBGOA.mjs} +4 -4
  14. package/dist/lib/browser/identity-created-DWFKBGOA.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +19 -40
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-RKYILWWQ.mjs → intent-resolver-GKDCJ4H2.mjs} +92 -82
  18. package/dist/lib/browser/intent-resolver-GKDCJ4H2.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-root-6H7NX2M2.mjs → react-root-667IZ2Q4.mjs} +4 -4
  21. package/dist/lib/browser/{react-surface-7AGLOVMK.mjs → react-surface-I4RNTGGN.mjs} +121 -47
  22. package/dist/lib/browser/react-surface-I4RNTGGN.mjs.map +7 -0
  23. package/dist/lib/browser/{schema-FHTA26SW.mjs → schema-defs-FLFEUSLB.mjs} +4 -4
  24. package/dist/lib/browser/{schema-FHTA26SW.mjs.map → schema-defs-FLFEUSLB.mjs.map} +2 -2
  25. package/dist/lib/browser/{schema-tools-YAXPRIXP.mjs → schema-tools-MYC4LTQD.mjs} +22 -22
  26. package/dist/lib/browser/schema-tools-MYC4LTQD.mjs.map +7 -0
  27. package/dist/lib/browser/{settings-PJPTJUPE.mjs → settings-ILGGNYJ7.mjs} +4 -4
  28. package/dist/lib/browser/settings-ILGGNYJ7.mjs.map +7 -0
  29. package/dist/lib/browser/{spaces-ready-BSSP7HHG.mjs → spaces-ready-IXZF3RWW.mjs} +5 -5
  30. package/dist/lib/browser/spaces-ready-IXZF3RWW.mjs.map +7 -0
  31. package/dist/lib/browser/{state-X7VLCC6E.mjs → state-CYV6QCTN.mjs} +1 -3
  32. package/dist/lib/browser/state-CYV6QCTN.mjs.map +7 -0
  33. package/dist/lib/browser/types/index.mjs +7 -1
  34. package/dist/lib/node/{app-graph-builder-DPY7AUZE.cjs → app-graph-builder-H7MDHM3X.cjs} +83 -30
  35. package/dist/lib/node/app-graph-builder-H7MDHM3X.cjs.map +7 -0
  36. package/dist/lib/node/{app-graph-serializer-JELGJUAY.cjs → app-graph-serializer-G7UYFWG6.cjs} +20 -20
  37. package/dist/lib/node/app-graph-serializer-G7UYFWG6.cjs.map +7 -0
  38. package/dist/lib/node/chunk-AR3JHVCY.cjs +336 -0
  39. package/dist/lib/node/chunk-AR3JHVCY.cjs.map +7 -0
  40. package/dist/lib/node/{chunk-TUZWEPGX.cjs → chunk-EG3WAZLA.cjs} +84 -167
  41. package/dist/lib/node/chunk-EG3WAZLA.cjs.map +7 -0
  42. package/dist/lib/node/{chunk-3GKCNADA.cjs → chunk-HD4C6KKO.cjs} +517 -659
  43. package/dist/lib/node/chunk-HD4C6KKO.cjs.map +7 -0
  44. package/dist/lib/node/{chunk-PU2EYH4E.cjs → chunk-NCSFM6RA.cjs} +24 -12
  45. package/dist/lib/node/chunk-NCSFM6RA.cjs.map +7 -0
  46. package/dist/lib/node/{identity-created-XU4HFV2T.cjs → identity-created-YLGVEWAJ.cjs} +6 -6
  47. package/dist/lib/node/identity-created-YLGVEWAJ.cjs.map +7 -0
  48. package/dist/lib/node/index.cjs +73 -94
  49. package/dist/lib/node/index.cjs.map +3 -3
  50. package/dist/lib/node/{intent-resolver-VJ7YV74L.cjs → intent-resolver-V7UJKLE7.cjs} +141 -131
  51. package/dist/lib/node/intent-resolver-V7UJKLE7.cjs.map +7 -0
  52. package/dist/lib/node/meta.json +1 -1
  53. package/dist/lib/node/{react-root-TEL5RW3N.cjs → react-root-I3SSFA5O.cjs} +8 -8
  54. package/dist/lib/node/{react-surface-2H3S5TY5.cjs → react-surface-OLMQCCYD.cjs} +146 -74
  55. package/dist/lib/node/react-surface-OLMQCCYD.cjs.map +7 -0
  56. package/dist/lib/node/{schema-PPJ5BZ3A.cjs → schema-defs-PKZVL52M.cjs} +6 -6
  57. package/dist/lib/node/{schema-PPJ5BZ3A.cjs.map → schema-defs-PKZVL52M.cjs.map} +2 -2
  58. package/dist/lib/node/{schema-tools-BLIMOZYY.cjs → schema-tools-OE3MFYYH.cjs} +24 -24
  59. package/dist/lib/node/schema-tools-OE3MFYYH.cjs.map +7 -0
  60. package/dist/lib/node/{settings-WVFP2UEP.cjs → settings-7TC55JP4.cjs} +7 -7
  61. package/dist/lib/node/settings-7TC55JP4.cjs.map +7 -0
  62. package/dist/lib/node/{spaces-ready-7DNZSUOG.cjs → spaces-ready-4H3Q46GV.cjs} +12 -12
  63. package/dist/lib/node/spaces-ready-4H3Q46GV.cjs.map +7 -0
  64. package/dist/lib/node/{state-5KX6WBJH.cjs → state-JLN7TGRR.cjs} +4 -6
  65. package/dist/lib/node/state-JLN7TGRR.cjs.map +7 -0
  66. package/dist/lib/node/types/index.cjs +18 -12
  67. package/dist/lib/node/types/index.cjs.map +2 -2
  68. package/dist/lib/node-esm/{app-graph-builder-42IGWRPL.mjs → app-graph-builder-NI7X6W3Q.mjs} +61 -7
  69. package/dist/lib/node-esm/app-graph-builder-NI7X6W3Q.mjs.map +7 -0
  70. package/dist/lib/node-esm/{app-graph-serializer-FXONFKOE.mjs → app-graph-serializer-CVPYWWW3.mjs} +8 -8
  71. package/dist/lib/node-esm/app-graph-serializer-CVPYWWW3.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-ZGLK25WQ.mjs → chunk-B2P24Q5R.mjs} +60 -141
  73. package/dist/lib/node-esm/chunk-B2P24Q5R.mjs.map +7 -0
  74. package/dist/lib/node-esm/{chunk-BEWBZ4Q4.mjs → chunk-BU6F7ZU4.mjs} +526 -670
  75. package/dist/lib/node-esm/chunk-BU6F7ZU4.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-3ZOUV4DF.mjs → chunk-FUH5OODY.mjs} +20 -8
  77. package/dist/lib/node-esm/chunk-FUH5OODY.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-RUWTHAV7.mjs +309 -0
  79. package/dist/lib/node-esm/chunk-RUWTHAV7.mjs.map +7 -0
  80. package/dist/lib/node-esm/{identity-created-WJKAS2PV.mjs → identity-created-7NHGER3Q.mjs} +4 -4
  81. package/dist/lib/node-esm/identity-created-7NHGER3Q.mjs.map +7 -0
  82. package/dist/lib/node-esm/index.mjs +19 -40
  83. package/dist/lib/node-esm/index.mjs.map +3 -3
  84. package/dist/lib/node-esm/{intent-resolver-ZFNSA4CM.mjs → intent-resolver-IL63YTIT.mjs} +92 -82
  85. package/dist/lib/node-esm/intent-resolver-IL63YTIT.mjs.map +7 -0
  86. package/dist/lib/node-esm/meta.json +1 -1
  87. package/dist/lib/node-esm/{react-root-PRBJMWLQ.mjs → react-root-JEGVIVVK.mjs} +4 -4
  88. package/dist/lib/node-esm/{react-surface-RCZG2PNF.mjs → react-surface-DRRXIJBE.mjs} +121 -47
  89. package/dist/lib/node-esm/react-surface-DRRXIJBE.mjs.map +7 -0
  90. package/dist/lib/node-esm/{schema-OUZKVYM5.mjs → schema-defs-IIEQR7B3.mjs} +4 -4
  91. package/dist/lib/node-esm/{schema-OUZKVYM5.mjs.map → schema-defs-IIEQR7B3.mjs.map} +2 -2
  92. package/dist/lib/node-esm/{schema-tools-IU7EX5A5.mjs → schema-tools-YTJLA3NQ.mjs} +22 -22
  93. package/dist/lib/node-esm/schema-tools-YTJLA3NQ.mjs.map +7 -0
  94. package/dist/lib/node-esm/{settings-FJZPC2TV.mjs → settings-CXMV2AFR.mjs} +4 -4
  95. package/dist/lib/node-esm/settings-CXMV2AFR.mjs.map +7 -0
  96. package/dist/lib/node-esm/{spaces-ready-7X5PGB2V.mjs → spaces-ready-QMXLQ4QV.mjs} +5 -5
  97. package/dist/lib/node-esm/spaces-ready-QMXLQ4QV.mjs.map +7 -0
  98. package/dist/lib/node-esm/{state-Z6E2YTNC.mjs → state-YZPY5T5A.mjs} +1 -3
  99. package/dist/lib/node-esm/state-YZPY5T5A.mjs.map +7 -0
  100. package/dist/lib/node-esm/types/index.mjs +7 -1
  101. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/index.d.ts +3 -2
  104. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -1
  106. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/{schema.d.ts → schema-defs.d.ts} +1 -1
  109. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/schema-tools.d.ts +2 -2
  111. package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  113. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  114. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -2
  115. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  116. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  118. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  119. package/dist/types/src/components/MenuFooter.d.ts +2 -2
  120. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  121. package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/AdvancedObjectSettings.d.ts +2 -2
  122. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -0
  123. package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/BaseObjectSettings.d.ts +2 -2
  124. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -0
  125. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -0
  126. package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/ObjectSettingsContainer.d.ts +2 -2
  127. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -0
  128. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -0
  129. package/dist/types/src/components/PopoverAddSpace.d.ts.map +1 -1
  130. package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
  131. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  132. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  133. package/dist/types/src/components/SchemaContainer.d.ts +13 -0
  134. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -0
  135. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  136. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  137. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +0 -2
  138. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  139. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +7 -0
  140. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -0
  141. package/dist/types/src/components/SpaceSettings/index.d.ts +0 -1
  142. package/dist/types/src/components/SpaceSettings/index.d.ts.map +1 -1
  143. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
  144. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -8
  145. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  146. package/dist/types/src/components/index.d.ts +2 -2
  147. package/dist/types/src/components/index.d.ts.map +1 -1
  148. package/dist/types/src/hooks/index.d.ts +1 -0
  149. package/dist/types/src/hooks/index.d.ts.map +1 -1
  150. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +14 -0
  151. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -0
  152. package/dist/types/src/translations.d.ts +45 -9
  153. package/dist/types/src/translations.d.ts.map +1 -1
  154. package/dist/types/src/types/collection.d.ts +9 -8
  155. package/dist/types/src/types/collection.d.ts.map +1 -1
  156. package/dist/types/src/types/thread.d.ts +329 -110
  157. package/dist/types/src/types/thread.d.ts.map +1 -1
  158. package/dist/types/src/types/types.d.ts +167 -140
  159. package/dist/types/src/types/types.d.ts.map +1 -1
  160. package/dist/types/src/util.d.ts +31 -9
  161. package/dist/types/src/util.d.ts.map +1 -1
  162. package/package.json +46 -44
  163. package/src/SpacePlugin.tsx +11 -20
  164. package/src/capabilities/app-graph-builder.ts +47 -8
  165. package/src/capabilities/app-graph-serializer.ts +4 -4
  166. package/src/capabilities/identity-created.ts +2 -2
  167. package/src/capabilities/index.ts +2 -2
  168. package/src/capabilities/intent-resolver.ts +87 -84
  169. package/src/capabilities/react-surface.tsx +111 -42
  170. package/src/capabilities/schema-tool.test.ts +2 -3
  171. package/src/capabilities/schema-tools.ts +25 -25
  172. package/src/capabilities/settings.ts +2 -2
  173. package/src/capabilities/spaces-ready.ts +2 -2
  174. package/src/capabilities/state.ts +0 -2
  175. package/src/components/CollectionMain.tsx +2 -5
  176. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +2 -2
  177. package/src/components/CreateDialog/CreateObjectDialog.tsx +3 -3
  178. package/src/components/CreateDialog/CreateObjectPanel.tsx +3 -25
  179. package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -3
  180. package/src/components/MembersContainer.tsx +80 -54
  181. package/src/components/MenuFooter.tsx +2 -2
  182. package/src/components/{ObjectSettingsContainer → ObjectSettings}/AdvancedObjectSettings.tsx +2 -2
  183. package/src/components/{ObjectSettingsContainer → ObjectSettings}/BaseObjectSettings.tsx +2 -2
  184. package/src/components/{ObjectSettingsContainer → ObjectSettings}/ObjectSettingsContainer.tsx +2 -2
  185. package/src/components/PopoverAddSpace.tsx +9 -3
  186. package/src/components/PopoverRenameObject.tsx +14 -8
  187. package/src/components/PopoverRenameSpace.tsx +8 -0
  188. package/src/components/SchemaContainer.tsx +59 -0
  189. package/src/components/SpacePluginSettings.tsx +27 -2
  190. package/src/components/SpacePresence.tsx +29 -25
  191. package/src/components/SpaceSettings/{SpacePropertiesForm.stories.tsx → SpaceSettingsContainer.stories.tsx} +6 -6
  192. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +159 -39
  193. package/src/components/SpaceSettings/index.ts +0 -1
  194. package/src/components/SyncStatus/InlineSyncStatus.tsx +5 -7
  195. package/src/components/SyncStatus/SyncStatus.tsx +6 -69
  196. package/src/components/index.ts +2 -2
  197. package/src/hooks/index.ts +1 -0
  198. package/src/hooks/useInputSurfaceLookup.tsx +31 -0
  199. package/src/translations.ts +18 -5
  200. package/src/types/collection.ts +6 -4
  201. package/src/types/thread.ts +14 -8
  202. package/src/types/types.ts +128 -101
  203. package/src/util.tsx +52 -112
  204. package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs.map +0 -7
  205. package/dist/lib/browser/app-graph-serializer-DSF2U3A5.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-5BDV575R.mjs.map +0 -7
  207. package/dist/lib/browser/chunk-AYW4IDRT.mjs +0 -275
  208. package/dist/lib/browser/chunk-AYW4IDRT.mjs.map +0 -7
  209. package/dist/lib/browser/chunk-JZXWPMLA.mjs.map +0 -7
  210. package/dist/lib/browser/chunk-LO5UL6RU.mjs.map +0 -7
  211. package/dist/lib/browser/identity-created-JR7BNXFH.mjs.map +0 -7
  212. package/dist/lib/browser/intent-resolver-RKYILWWQ.mjs.map +0 -7
  213. package/dist/lib/browser/react-surface-7AGLOVMK.mjs.map +0 -7
  214. package/dist/lib/browser/schema-tools-YAXPRIXP.mjs.map +0 -7
  215. package/dist/lib/browser/settings-PJPTJUPE.mjs.map +0 -7
  216. package/dist/lib/browser/spaces-ready-BSSP7HHG.mjs.map +0 -7
  217. package/dist/lib/browser/state-X7VLCC6E.mjs.map +0 -7
  218. package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs.map +0 -7
  219. package/dist/lib/node/app-graph-serializer-JELGJUAY.cjs.map +0 -7
  220. package/dist/lib/node/chunk-3GKCNADA.cjs.map +0 -7
  221. package/dist/lib/node/chunk-PU2EYH4E.cjs.map +0 -7
  222. package/dist/lib/node/chunk-TUZWEPGX.cjs.map +0 -7
  223. package/dist/lib/node/chunk-WDEIFDTX.cjs +0 -300
  224. package/dist/lib/node/chunk-WDEIFDTX.cjs.map +0 -7
  225. package/dist/lib/node/identity-created-XU4HFV2T.cjs.map +0 -7
  226. package/dist/lib/node/intent-resolver-VJ7YV74L.cjs.map +0 -7
  227. package/dist/lib/node/react-surface-2H3S5TY5.cjs.map +0 -7
  228. package/dist/lib/node/schema-tools-BLIMOZYY.cjs.map +0 -7
  229. package/dist/lib/node/settings-WVFP2UEP.cjs.map +0 -7
  230. package/dist/lib/node/spaces-ready-7DNZSUOG.cjs.map +0 -7
  231. package/dist/lib/node/state-5KX6WBJH.cjs.map +0 -7
  232. package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs.map +0 -7
  233. package/dist/lib/node-esm/app-graph-serializer-FXONFKOE.mjs.map +0 -7
  234. package/dist/lib/node-esm/chunk-3ZOUV4DF.mjs.map +0 -7
  235. package/dist/lib/node-esm/chunk-BEWBZ4Q4.mjs.map +0 -7
  236. package/dist/lib/node-esm/chunk-FC4UHDPL.mjs +0 -276
  237. package/dist/lib/node-esm/chunk-FC4UHDPL.mjs.map +0 -7
  238. package/dist/lib/node-esm/chunk-ZGLK25WQ.mjs.map +0 -7
  239. package/dist/lib/node-esm/identity-created-WJKAS2PV.mjs.map +0 -7
  240. package/dist/lib/node-esm/intent-resolver-ZFNSA4CM.mjs.map +0 -7
  241. package/dist/lib/node-esm/react-surface-RCZG2PNF.mjs.map +0 -7
  242. package/dist/lib/node-esm/schema-tools-IU7EX5A5.mjs.map +0 -7
  243. package/dist/lib/node-esm/settings-FJZPC2TV.mjs.map +0 -7
  244. package/dist/lib/node-esm/spaces-ready-7X5PGB2V.mjs.map +0 -7
  245. package/dist/lib/node-esm/state-Z6E2YTNC.mjs.map +0 -7
  246. package/dist/types/src/capabilities/schema.d.ts.map +0 -1
  247. package/dist/types/src/components/ObjectSettingsContainer/AdvancedObjectSettings.d.ts.map +0 -1
  248. package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts.map +0 -1
  249. package/dist/types/src/components/ObjectSettingsContainer/ForeignKeys.d.ts.map +0 -1
  250. package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts.map +0 -1
  251. package/dist/types/src/components/ObjectSettingsContainer/index.d.ts.map +0 -1
  252. package/dist/types/src/components/ShareSpaceButton.d.ts +0 -9
  253. package/dist/types/src/components/ShareSpaceButton.d.ts.map +0 -1
  254. package/dist/types/src/components/ShareSpaceButton.stories.d.ts +0 -10
  255. package/dist/types/src/components/ShareSpaceButton.stories.d.ts.map +0 -1
  256. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts +0 -7
  257. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts.map +0 -1
  258. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts +0 -7
  259. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts.map +0 -1
  260. package/dist/types/src/components/SyncStatus/Space.d.ts +0 -13
  261. package/dist/types/src/components/SyncStatus/Space.d.ts.map +0 -1
  262. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts +0 -9
  263. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts.map +0 -1
  264. package/dist/types/src/components/SyncStatus/sync-state.d.ts +0 -18
  265. package/dist/types/src/components/SyncStatus/sync-state.d.ts.map +0 -1
  266. package/src/components/ShareSpaceButton.stories.tsx +0 -27
  267. package/src/components/ShareSpaceButton.tsx +0 -32
  268. package/src/components/SpaceSettings/SpacePropertiesForm.tsx +0 -136
  269. package/src/components/SyncStatus/Space.tsx +0 -133
  270. package/src/components/SyncStatus/SyncStatusDetail.stories.tsx +0 -89
  271. package/src/components/SyncStatus/sync-state.ts +0 -101
  272. /package/dist/lib/browser/{react-root-6H7NX2M2.mjs.map → react-root-667IZ2Q4.mjs.map} +0 -0
  273. /package/dist/lib/node/{react-root-TEL5RW3N.cjs.map → react-root-I3SSFA5O.cjs.map} +0 -0
  274. /package/dist/lib/node-esm/{react-root-PRBJMWLQ.mjs.map → react-root-JEGVIVVK.mjs.map} +0 -0
  275. /package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/ForeignKeys.d.ts +0 -0
  276. /package/dist/types/src/components/{ObjectSettingsContainer → ObjectSettings}/index.d.ts +0 -0
  277. /package/src/capabilities/{schema.ts → schema-defs.ts} +0 -0
  278. /package/src/components/{ObjectSettingsContainer → ObjectSettings}/ForeignKeys.tsx +0 -0
  279. /package/src/components/{ObjectSettingsContainer → ObjectSettings}/index.ts +0 -0
@@ -3,15 +3,16 @@
3
3
  //
4
4
 
5
5
  import { Check, X } from '@phosphor-icons/react';
6
- import React, { type Dispatch, type SetStateAction, useMemo, useState } from 'react';
6
+ import React, { type Dispatch, type SetStateAction, useCallback, useMemo, useState } from 'react';
7
7
  import { QR } from 'react-qr-rounded';
8
8
 
9
+ import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
9
10
  import { log } from '@dxos/log';
10
11
  import { useConfig } from '@dxos/react-client';
11
12
  import { fullyQualifiedId, useSpaceInvitations, type Space } from '@dxos/react-client/echo';
12
13
  import { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
13
- import { Button, Clipboard, Icon, useId, useTranslation } from '@dxos/react-ui';
14
- import { ControlSection, ControlFrame, ControlFrameItem } from '@dxos/react-ui-form';
14
+ import { Button, Clipboard, Icon, Input, useId, useTranslation } from '@dxos/react-ui';
15
+ import { ControlPage, ControlSection, ControlFrame, ControlFrameItem, ControlItemInput } from '@dxos/react-ui-form';
15
16
  import { StackItem } from '@dxos/react-ui-stack';
16
17
  import { getSize, mx } from '@dxos/react-ui-theme';
17
18
  import {
@@ -27,7 +28,8 @@ import {
27
28
  import { hexToEmoji } from '@dxos/util';
28
29
 
29
30
  import { SPACE_PLUGIN } from '../meta';
30
- import { CollectionType } from '../types';
31
+ import { CollectionType, SpaceAction } from '../types';
32
+ import { COMPOSER_SPACE_LOCK } from '../util';
31
33
 
32
34
  // TODO(wittjosiah): Copied from Shell.
33
35
  const activeActionKey = 'dxos:react-shell/space-manager/active-action';
@@ -47,8 +49,9 @@ export const MembersContainer = ({
47
49
  space: Space;
48
50
  createInvitationUrl: (invitationCode: string) => string;
49
51
  }) => {
50
- const { t } = useTranslation('os');
52
+ const { t } = useTranslation(SPACE_PLUGIN);
51
53
  const config = useConfig();
54
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
52
55
  const invitations = useSpaceInvitations(space.key);
53
56
  const visibleInvitations = invitations?.filter(
54
57
  (invitation) => ![Invitation.State.CANCELLED].includes(invitation.get().state),
@@ -64,20 +67,28 @@ export const MembersContainer = ({
64
67
  // TODO(wittjosiah): Track which was the most recently viewed object.
65
68
  const target = space.properties[CollectionType.typename]?.target?.objects[0]?.target;
66
69
 
70
+ const locked = space.properties[COMPOSER_SPACE_LOCK];
71
+ const handleChangeLocked = useCallback(() => {
72
+ space.properties[COMPOSER_SPACE_LOCK] = !locked;
73
+ }, [locked, space]);
74
+
67
75
  const inviteActions = useMemo(
68
76
  (): Record<string, ActionMenuItem> => ({
69
77
  inviteOne: {
70
- label: t('invite one label'),
71
- description: t('invite one description'),
78
+ label: t('invite one label', { ns: 'os' }),
79
+ description: t('invite one description', { ns: 'os' }),
72
80
  icon: () => <Icon icon='ph--user-plus--regular' size={5} />,
73
81
  testId: 'membersContainer.inviteOne',
74
- onClick: () => {
75
- const invitation = space.share?.({
76
- type: Invitation.Type.INTERACTIVE,
77
- authMethod: Invitation.AuthMethod.SHARED_SECRET,
78
- multiUse: false,
79
- target: target && fullyQualifiedId(target),
80
- });
82
+ onClick: async () => {
83
+ const { data: invitation } = await dispatch(
84
+ createIntent(SpaceAction.Share, {
85
+ space,
86
+ type: Invitation.Type.INTERACTIVE,
87
+ authMethod: Invitation.AuthMethod.SHARED_SECRET,
88
+ multiUse: false,
89
+ target: target && fullyQualifiedId(target),
90
+ }),
91
+ );
81
92
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
82
93
  const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>
83
94
  handleInvitationEvent(invitation, subscription),
@@ -86,17 +97,20 @@ export const MembersContainer = ({
86
97
  },
87
98
  },
88
99
  inviteMany: {
89
- label: t('invite many label'),
90
- description: t('invite many description'),
100
+ label: t('invite many label', { ns: 'os' }),
101
+ description: t('invite many description', { ns: 'os' }),
91
102
  icon: () => <Icon icon='ph--users-three--regular' size={5} />,
92
103
  testId: 'membersContainer.inviteMany',
93
- onClick: () => {
94
- const invitation = space.share?.({
95
- type: Invitation.Type.DELEGATED,
96
- authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
97
- multiUse: true,
98
- target: target && fullyQualifiedId(target),
99
- });
104
+ onClick: async () => {
105
+ const { data: invitation } = await dispatch(
106
+ createIntent(SpaceAction.Share, {
107
+ space,
108
+ type: Invitation.Type.DELEGATED,
109
+ authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
110
+ multiUse: true,
111
+ target: target && fullyQualifiedId(target),
112
+ }),
113
+ );
100
114
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
101
115
  const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>
102
116
  handleInvitationEvent(invitation, subscription),
@@ -118,38 +132,50 @@ export const MembersContainer = ({
118
132
 
119
133
  return (
120
134
  <Clipboard.Provider>
121
- <StackItem.Content classNames='p-2 block overflow-y-auto'>
122
- <ControlSection
123
- title={t('members verbose label', { ns: SPACE_PLUGIN })}
124
- description={t('members description', { ns: SPACE_PLUGIN })}
125
- >
126
- <ControlFrame>
127
- <ControlFrameItem title={t('members label', { ns: SPACE_PLUGIN })}>
128
- <SpaceMemberList spaceKey={space.key} includeSelf />
129
- </ControlFrameItem>
130
- <ControlFrameItem title={t('invitations label', { ns: SPACE_PLUGIN })}>
131
- {selectedInvitation && <InvitationSection {...selectedInvitation} onBack={handleBack} />}
132
- {!selectedInvitation && (
133
- <>
134
- <p className='text-description mbe-2'>{t('space invitation description', { ns: SPACE_PLUGIN })}</p>
135
- <InvitationList
136
- className='mb-2'
137
- send={handleSend}
138
- invitations={visibleInvitations ?? []}
139
- onClickRemove={(invitation) => invitation.cancel()}
140
- createInvitationUrl={createInvitationUrl}
141
- />
142
- <BifurcatedAction
143
- actions={inviteActions}
144
- activeAction={activeAction}
145
- onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}
146
- data-testid='membersContainer.createInvitation'
147
- />
148
- </>
135
+ <StackItem.Content classNames='block overflow-y-auto'>
136
+ <ControlPage>
137
+ <ControlSection title={t('members verbose label')} description={t('members description')}>
138
+ <ControlFrame>
139
+ <ControlFrameItem title={t('members label')}>
140
+ <SpaceMemberList spaceKey={space.key} includeSelf />
141
+ </ControlFrameItem>
142
+ {locked && (
143
+ <ControlFrameItem title={t('invitations label')}>
144
+ <p className='text-description mbe-2'>{t('locked space description')}</p>
145
+ </ControlFrameItem>
146
+ )}
147
+ {!locked && (
148
+ <ControlFrameItem title={t('invitations label')}>
149
+ {selectedInvitation && <InvitationSection {...selectedInvitation} onBack={handleBack} />}
150
+ {!selectedInvitation && (
151
+ <>
152
+ <p className='text-description mbe-2'>{t('space invitation description')}</p>
153
+ <InvitationList
154
+ className='mb-2'
155
+ send={handleSend}
156
+ invitations={visibleInvitations ?? []}
157
+ onClickRemove={(invitation) => invitation.cancel()}
158
+ createInvitationUrl={createInvitationUrl}
159
+ />
160
+ <BifurcatedAction
161
+ actions={inviteActions}
162
+ activeAction={activeAction}
163
+ onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}
164
+ data-testid='membersContainer.createInvitation'
165
+ />
166
+ </>
167
+ )}
168
+ </ControlFrameItem>
149
169
  )}
150
- </ControlFrameItem>
151
- </ControlFrame>
152
- </ControlSection>
170
+ </ControlFrame>
171
+ {/* TODO(wittjosiah): Make ControlItemInput & ControlFrame compatible. */}
172
+ <div className='justify-center gap-4 p-0 mbs-4 container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>
173
+ <ControlItemInput title={t('space locked label')} description={t('space locked description')}>
174
+ <Input.Switch checked={locked} onCheckedChange={handleChangeLocked} classNames='justify-self-end' />
175
+ </ControlItemInput>
176
+ </div>
177
+ </ControlSection>
178
+ </ControlPage>
153
179
  </StackItem.Content>
154
180
  </Clipboard.Provider>
155
181
  );
@@ -5,14 +5,14 @@
5
5
  import { Planet } from '@phosphor-icons/react';
6
6
  import React from 'react';
7
7
 
8
- import { type ReactiveEchoObject, getSpace } from '@dxos/client/echo';
8
+ import { type AnyLiveObject, getSpace } from '@dxos/client/echo';
9
9
  import { useClient } from '@dxos/react-client';
10
10
  import { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
11
 
12
12
  import { SPACE_PLUGIN } from '../meta';
13
13
  import { getSpaceDisplayName } from '../util';
14
14
 
15
- export const MenuFooter = ({ object }: { object: ReactiveEchoObject<any> }) => {
15
+ export const MenuFooter = ({ object }: { object: AnyLiveObject<any> }) => {
16
16
  const { t } = useTranslation(SPACE_PLUGIN);
17
17
  const client = useClient();
18
18
  const space = getSpace(object);
@@ -5,7 +5,7 @@
5
5
  import React, { useCallback, useState } from 'react';
6
6
 
7
7
  import { type ForeignKey, ForeignKeySchema } from '@dxos/echo-schema';
8
- import { getMeta, type ReactiveEchoObject } from '@dxos/react-client/echo';
8
+ import { getMeta, type AnyLiveObject } from '@dxos/react-client/echo';
9
9
  import { IconButton, useTranslation } from '@dxos/react-ui';
10
10
  import { Form } from '@dxos/react-ui-form';
11
11
 
@@ -18,7 +18,7 @@ const initialValues = {
18
18
  };
19
19
 
20
20
  export type AdvancedObjectSettingsProps = {
21
- object: ReactiveEchoObject<any>;
21
+ object: AnyLiveObject<any>;
22
22
  };
23
23
 
24
24
  export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps) => {
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { type PropsWithChildren, useRef } from 'react';
6
6
 
7
- import { type ReactiveEchoObject } from '@dxos/react-client/echo';
7
+ import { type AnyLiveObject } from '@dxos/react-client/echo';
8
8
  import { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
9
  import { mx } from '@dxos/react-ui-theme';
10
10
 
@@ -12,7 +12,7 @@ import { meta } from '../../meta';
12
12
 
13
13
  export type BaseObjectSettingsProps = ThemedClassName<
14
14
  PropsWithChildren<{
15
- object: ReactiveEchoObject<any>;
15
+ object: AnyLiveObject<any>;
16
16
  }>
17
17
  >;
18
18
 
@@ -5,7 +5,7 @@
5
5
  import React, { useMemo } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework';
8
- import { type ReactiveEchoObject } from '@dxos/react-client/echo';
8
+ import { type AnyLiveObject } from '@dxos/react-client/echo';
9
9
  import { Clipboard } from '@dxos/react-ui';
10
10
  import { StackItem } from '@dxos/react-ui-stack';
11
11
 
@@ -13,7 +13,7 @@ import { AdvancedObjectSettings } from './AdvancedObjectSettings';
13
13
  import { BaseObjectSettings } from './BaseObjectSettings';
14
14
 
15
15
  export type ObjectSettingsContainerProps = {
16
- object: ReactiveEchoObject<any>;
16
+ object: AnyLiveObject<any>;
17
17
  role: string;
18
18
  };
19
19
 
@@ -16,7 +16,7 @@ export const PopoverAddSpace = () => {
16
16
  const { t } = useTranslation(SPACE_PLUGIN);
17
17
  const { dispatchPromise: dispatch } = useIntentDispatcher();
18
18
  return (
19
- <div role='none' className='grid grid-cols-1 gap-1 [&>button]:justify-start'>
19
+ <div role='none' className='p-1 grid grid-cols-1 gap-1 [&>button]:justify-start'>
20
20
  <IconButton
21
21
  variant='ghost'
22
22
  label={t('create space label')}
@@ -24,7 +24,10 @@ export const PopoverAddSpace = () => {
24
24
  onClick={() => {
25
25
  void dispatch(createIntent(SpaceAction.OpenCreateSpace));
26
26
  void dispatch(
27
- createIntent(LayoutAction.UpdatePopover, { part: 'popover', options: { anchorId: '', state: false } }),
27
+ createIntent(LayoutAction.UpdatePopover, {
28
+ part: 'popover',
29
+ options: { variant: 'react', anchorId: '', state: false },
30
+ }),
28
31
  );
29
32
  }}
30
33
  data-testid='spacePlugin.createSpace'
@@ -36,7 +39,10 @@ export const PopoverAddSpace = () => {
36
39
  onClick={() => {
37
40
  void dispatch(createIntent(SpaceAction.Join));
38
41
  void dispatch(
39
- createIntent(LayoutAction.UpdatePopover, { part: 'popover', options: { anchorId: '', state: false } }),
42
+ createIntent(LayoutAction.UpdatePopover, {
43
+ part: 'popover',
44
+ options: { variant: 'react', anchorId: '', state: false },
45
+ }),
40
46
  );
41
47
  }}
42
48
  data-testid='spacePlugin.joinSpace'
@@ -4,21 +4,23 @@
4
4
 
5
5
  import React, { useCallback, useRef, useState } from 'react';
6
6
 
7
- import { type ReactiveObject } from '@dxos/live-object';
7
+ import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { type Live } from '@dxos/live-object';
8
9
  import { log } from '@dxos/log';
9
- import { Button, Input, Popover, useTranslation } from '@dxos/react-ui';
10
+ import { Button, Input, useTranslation } from '@dxos/react-ui';
10
11
 
11
12
  import { SPACE_PLUGIN } from '../meta';
12
13
 
13
14
  export const POPOVER_RENAME_OBJECT = `${SPACE_PLUGIN}/PopoverRenameObject`;
14
15
 
15
- export const PopoverRenameObject = ({ object: obj }: { object: ReactiveObject<any> }) => {
16
+ export const PopoverRenameObject = ({ object: obj }: { object: Live<any> }) => {
16
17
  const { t } = useTranslation(SPACE_PLUGIN);
17
18
  const doneButton = useRef<HTMLButtonElement>(null);
18
19
  // TODO(wittjosiah): Use schema here.
19
20
  const object = obj as any;
20
21
  // TODO(burdon): Field should not be hardcoded field.
21
22
  const [name, setName] = useState(object.name || object.title || '');
23
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
22
24
 
23
25
  const handleDone = useCallback(() => {
24
26
  try {
@@ -30,6 +32,12 @@ export const PopoverRenameObject = ({ object: obj }: { object: ReactiveObject<an
30
32
  log.error('Failed to rename object', { err });
31
33
  }
32
34
  }
35
+ void dispatch(
36
+ createIntent(LayoutAction.UpdatePopover, {
37
+ part: 'popover',
38
+ options: { variant: 'react', anchorId: '', state: false },
39
+ }),
40
+ );
33
41
  }, [object, name]);
34
42
 
35
43
  return (
@@ -46,11 +54,9 @@ export const PopoverRenameObject = ({ object: obj }: { object: ReactiveObject<an
46
54
  />
47
55
  </Input.Root>
48
56
  </div>
49
- <Popover.Close asChild>
50
- <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>
51
- {t('done label', { ns: 'os' })}
52
- </Button>
53
- </Popover.Close>
57
+ <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>
58
+ {t('done label', { ns: 'os' })}
59
+ </Button>
54
60
  </div>
55
61
  );
56
62
  };
@@ -4,6 +4,7 @@
4
4
 
5
5
  import React, { useCallback, useRef, useState } from 'react';
6
6
 
7
+ import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
7
8
  import { type Space } from '@dxos/react-client/echo';
8
9
  import { Button, Input, Popover, useTranslation } from '@dxos/react-ui';
9
10
 
@@ -15,9 +16,16 @@ export const PopoverRenameSpace = ({ space }: { space: Space }) => {
15
16
  const { t } = useTranslation(SPACE_PLUGIN);
16
17
  const doneButton = useRef<HTMLButtonElement>(null);
17
18
  const [name, setName] = useState(space.properties.name ?? '');
19
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
18
20
 
19
21
  const handleDone = useCallback(() => {
20
22
  space.properties.name = name;
23
+ void dispatch(
24
+ createIntent(LayoutAction.UpdatePopover, {
25
+ part: 'popover',
26
+ options: { variant: 'react', anchorId: '', state: false },
27
+ }),
28
+ );
21
29
  }, [space, name]);
22
30
 
23
31
  // TODO(thure): Why does the input value need to be uncontrolled to work?
@@ -0,0 +1,59 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useState, useEffect } from 'react';
6
+
7
+ import { type EchoSchema } from '@dxos/echo-schema';
8
+ import { type Space } from '@dxos/react-client/echo';
9
+ import { useTranslation } from '@dxos/react-ui';
10
+ import { controlItemClasses, ControlPage, ControlSection } from '@dxos/react-ui-form';
11
+ import { StackItem } from '@dxos/react-ui-stack';
12
+
13
+ import { SPACE_PLUGIN } from '../meta';
14
+
15
+ type SchemaPanelProps = { space: Space };
16
+
17
+ // TODO(ZaymonFC):
18
+ // - Support deleting Schema. This should tie in to some sort of
19
+ // 'DangerZone™️' / 'Are you really sure?' / 'this might have consequences' component.
20
+
21
+ /**
22
+ * Subscribe to and retrieve all schemas from a space's schema registry.
23
+ */
24
+ export const useQuerySpaceSchemas = (space: Space): EchoSchema[] => {
25
+ const [schemas, setSchemas] = useState<EchoSchema[]>([]);
26
+
27
+ useEffect(() => {
28
+ const query = space.db.schemaRegistry.query();
29
+ const initialResults = query.runSync();
30
+ setSchemas(initialResults);
31
+
32
+ const unsubscribe = query.subscribe(() => setSchemas(query.results));
33
+ return () => unsubscribe();
34
+ }, [space]);
35
+
36
+ return schemas;
37
+ };
38
+
39
+ export const SchemaContainer = ({ space }: SchemaPanelProps) => {
40
+ const { t } = useTranslation(SPACE_PLUGIN);
41
+ const schemas = useQuerySpaceSchemas(space);
42
+
43
+ return (
44
+ <StackItem.Content classNames='block overflow-y-auto'>
45
+ <ControlPage>
46
+ <ControlSection title={t('schema verbose label')} description={t('schema description')}>
47
+ <div role='none' className={controlItemClasses}>
48
+ {schemas.length === 0 && <div className='text-center plb-4'>{t('no schemas found message')}</div>}
49
+ {schemas.map((schema) => (
50
+ <div key={schema.id}>
51
+ <div>{schema.typename}</div>
52
+ </div>
53
+ ))}
54
+ </div>
55
+ </ControlSection>
56
+ </ControlPage>
57
+ </StackItem.Content>
58
+ );
59
+ };
@@ -4,20 +4,45 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Input, useTranslation } from '@dxos/react-ui';
7
+ import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { useClient } from '@dxos/react-client';
9
+ import { useSpaces } from '@dxos/react-client/echo';
10
+ import { Input, toLocalizedString, useTranslation, List, ListItem, Button } from '@dxos/react-ui';
8
11
  import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
9
12
 
10
13
  import { SPACE_PLUGIN } from '../meta';
11
- import { type SpaceSettingsProps } from '../types';
14
+ import { SpaceAction, type SpaceSettingsProps } from '../types';
15
+ import { getSpaceDisplayName } from '../util';
12
16
 
13
17
  export const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps }) => {
14
18
  const { t } = useTranslation(SPACE_PLUGIN);
19
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
20
+ const client = useClient();
21
+ const spaces = useSpaces({ all: settings.showHidden });
15
22
 
23
+ // TODO(wittjosiah): Migrate to new form container.
16
24
  return (
17
25
  <DeprecatedFormContainer>
18
26
  <DeprecatedFormInput label={t('show hidden spaces label')}>
19
27
  <Input.Switch checked={settings.showHidden} onCheckedChange={(checked) => (settings.showHidden = !!checked)} />
20
28
  </DeprecatedFormInput>
29
+ <div role='none'>
30
+ <h2 className='text-xl my-4'>Space Settings</h2>
31
+ <List classNames='max-w-md mx-auto'>
32
+ {spaces.map((space) => (
33
+ <ListItem.Root key={space.id}>
34
+ <ListItem.Heading classNames='flex flex-col grow truncate mbe-2'>
35
+ {toLocalizedString(getSpaceDisplayName(space, { personal: space === client.spaces.default }), t)}
36
+ </ListItem.Heading>
37
+ <ListItem.Endcap>
38
+ <Button onClick={() => dispatch(createIntent(SpaceAction.OpenSettings, { space }))}>
39
+ {t('open space settings label')}
40
+ </Button>
41
+ </ListItem.Endcap>
42
+ </ListItem.Root>
43
+ ))}
44
+ </List>
45
+ </div>
21
46
  </DeprecatedFormContainer>
22
47
  );
23
48
  };
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React, { useCallback, useEffect, useState } from 'react';
5
+ import React, { forwardRef, useCallback, useEffect, useState } from 'react';
6
6
 
7
7
  import { useAppGraph, useCapability } from '@dxos/app-framework';
8
8
  import { generateName } from '@dxos/display-name';
@@ -20,6 +20,7 @@ import {
20
20
  List,
21
21
  ListItem,
22
22
  useDefaultValue,
23
+ type DxAvatar,
23
24
  } from '@dxos/react-ui';
24
25
  import { AttentionGlyph, useAttended, useAttention, type AttentionGlyphProps } from '@dxos/react-ui-attention';
25
26
  import { ComplexMap, keyToFallback } from '@dxos/util';
@@ -115,8 +116,8 @@ export const FullPresence = (props: MemberPresenceProps) => {
115
116
  <div className='dx-avatar-group' data-testid='spacePlugin.presence'>
116
117
  {members.slice(0, 3).map((member, i) => (
117
118
  <Tooltip.Root key={member.identity.identityKey.toHex()}>
118
- <Tooltip.Trigger>
119
- <PrensenceAvatar
119
+ <Tooltip.Trigger className='grid focus:outline-none'>
120
+ <PresenceAvatar
120
121
  identity={member.identity}
121
122
  match={member.currentlyAttended} // TODO(Zan): Match always true now we're showing 'members viewing current object'.
122
123
  index={members.length - i}
@@ -135,13 +136,14 @@ export const FullPresence = (props: MemberPresenceProps) => {
135
136
 
136
137
  {members.length > 3 && (
137
138
  <Tooltip.Root>
138
- <Tooltip.Trigger>
139
+ <Tooltip.Trigger className='grid focus:outline-none'>
139
140
  <Avatar.Root>
140
141
  {/* TODO(wittjosiah): Make text fit. */}
141
142
  <Avatar.Content
142
143
  status='inactive'
143
144
  style={{ zIndex: members.length - 4 }}
144
145
  fallback={`+${members.length - 3}`}
146
+ size={size}
145
147
  />
146
148
  </Avatar.Root>
147
149
  </Tooltip.Trigger>
@@ -157,7 +159,7 @@ export const FullPresence = (props: MemberPresenceProps) => {
157
159
  data-testid='identity-list-item'
158
160
  >
159
161
  {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}
160
- <PrensenceAvatar identity={member.identity} size={size} showName match={member.currentlyAttended} />
162
+ <PresenceAvatar identity={member.identity} size={size} showName match={member.currentlyAttended} />
161
163
  </ListItem.Root>
162
164
  ))}
163
165
  </List>
@@ -177,26 +179,28 @@ type PresenceAvatarProps = Pick<AvatarContentProps, 'size'> & {
177
179
  onClick?: () => void;
178
180
  };
179
181
 
180
- const PrensenceAvatar = ({ identity, showName, match, index, onClick, size }: PresenceAvatarProps) => {
181
- const status = match ? 'current' : 'active';
182
- const fallbackValue = keyToFallback(identity.identityKey);
183
- return (
184
- <Avatar.Root>
185
- <Avatar.Content
186
- status={status}
187
- hue={identity.profile?.data?.hue || fallbackValue.hue}
188
- data-testid='spacePlugin.presence.member'
189
- data-status={status}
190
- size={size}
191
- classNames='mbs-2 mie-4'
192
- {...(index ? { style: { zIndex: index } } : {})}
193
- onClick={() => onClick?.()}
194
- fallback={identity.profile?.data?.emoji || fallbackValue.emoji}
195
- />
196
- <Avatar.Label classNames={showName ? 'text-sm truncate pli-2' : 'sr-only'}>{getName(identity)}</Avatar.Label>
197
- </Avatar.Root>
198
- );
199
- };
182
+ const PresenceAvatar = forwardRef<DxAvatar, PresenceAvatarProps>(
183
+ ({ identity, showName, match, index, onClick, size }, forwardedRef) => {
184
+ const status = match ? 'current' : 'active';
185
+ const fallbackValue = keyToFallback(identity.identityKey);
186
+ return (
187
+ <Avatar.Root>
188
+ <Avatar.Content
189
+ status={status}
190
+ hue={identity.profile?.data?.hue || fallbackValue.hue}
191
+ data-testid='spacePlugin.presence.member'
192
+ data-status={status}
193
+ size={size}
194
+ {...(index ? { style: { zIndex: index } } : {})}
195
+ onClick={onClick}
196
+ fallback={identity.profile?.data?.emoji || fallbackValue.emoji}
197
+ ref={forwardedRef}
198
+ />
199
+ <Avatar.Label classNames={showName ? 'text-sm truncate pli-2' : 'sr-only'}>{getName(identity)}</Avatar.Label>
200
+ </Avatar.Root>
201
+ );
202
+ },
203
+ );
200
204
 
201
205
  export type SmallPresenceLiveProps = {
202
206
  id?: string;
@@ -10,21 +10,21 @@ import React from 'react';
10
10
  import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
11
11
  import { withTheme } from '@dxos/storybook-utils';
12
12
 
13
- import { SpacePropertiesForm, type SpacePropertiesFormProps } from './SpacePropertiesForm';
13
+ import { SpaceSettingsContainer, type SpaceSettingsContainerProps } from './SpaceSettingsContainer';
14
14
  import translations from '../../translations';
15
15
 
16
- const Story = (args: Partial<SpacePropertiesFormProps>) => {
16
+ const Story = (args: Partial<SpaceSettingsContainerProps>) => {
17
17
  const { space } = useClientProvider();
18
18
  return (
19
19
  <div role='none' className='p-2 border border-primary-500 rounded'>
20
- <SpacePropertiesForm {...args} space={space!} />
20
+ <SpaceSettingsContainer {...args} space={space!} />
21
21
  </div>
22
22
  );
23
23
  };
24
24
 
25
25
  const meta: Meta = {
26
- title: 'plugins/plugin-space/SpacePropertiesForm',
27
- component: SpacePropertiesForm,
26
+ title: 'plugins/plugin-space/SpaceSettingsContainer',
27
+ component: SpaceSettingsContainer,
28
28
  render: Story,
29
29
  decorators: [withClientProvider({ createIdentity: true, createSpace: true }), withTheme],
30
30
  parameters: {
@@ -35,4 +35,4 @@ const meta: Meta = {
35
35
 
36
36
  export default meta;
37
37
 
38
- export const Default: StoryObj<typeof SpacePropertiesForm> = {};
38
+ export const Default: StoryObj<typeof SpaceSettingsContainer> = {};