@dxos/plugin-space 0.9.0 → 0.9.1-staging.ee54ba693a

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 (466) hide show
  1. package/dist/lib/neutral/{CollectionArticle-S3OF5KJ7.mjs → CollectionArticle-BMH7SZ7Q.mjs} +9 -12
  2. package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs.map +7 -0
  3. package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs → CollectionSection-BLYTGOKH.mjs} +2 -2
  4. package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs.map → CollectionSection-BLYTGOKH.mjs.map} +3 -3
  5. package/dist/lib/neutral/{CreateObjectDialog-66R3K6I3.mjs → CreateObjectDialog-5454N3FJ.mjs} +29 -14
  6. package/dist/lib/neutral/CreateObjectDialog-5454N3FJ.mjs.map +7 -0
  7. package/dist/lib/neutral/{CreateSpaceDialog-CDGSEIJB.mjs → CreateSpaceDialog-WWNUTLVK.mjs} +6 -6
  8. package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs.map +7 -0
  9. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs +58 -0
  10. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs.map +7 -0
  11. package/dist/lib/neutral/{ImportSpaceDialog-7GKV4OTF.mjs → ImportSpaceDialog-CSSRTFAO.mjs} +4 -4
  12. package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs.map +7 -0
  13. package/dist/lib/neutral/{InlineSyncStatus-TBJKZCH7.mjs → InlineSyncStatus-UOUTAPCU.mjs} +4 -4
  14. package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs.map +7 -0
  15. package/dist/lib/neutral/{JoinDialog-SSFKRFTJ.mjs → JoinDialog-ATNUCNL2.mjs} +13 -30
  16. package/dist/lib/neutral/JoinDialog-ATNUCNL2.mjs.map +7 -0
  17. package/dist/lib/neutral/{MembersContainer-KMCQDWCS.mjs → MembersContainer-C4ZTP6ZW.mjs} +13 -9
  18. package/dist/lib/neutral/MembersContainer-C4ZTP6ZW.mjs.map +7 -0
  19. package/dist/lib/neutral/{MenuFooter-5JT7V5FZ.mjs → MenuFooter-FWE5LFM4.mjs} +6 -6
  20. package/dist/lib/neutral/MenuFooter-FWE5LFM4.mjs.map +7 -0
  21. package/dist/lib/neutral/{ObjectCardStack-IXNU3HEN.mjs → ObjectCardStack-DHVDRNRK.mjs} +4 -4
  22. package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs.map +7 -0
  23. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs +102 -0
  24. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs.map +7 -0
  25. package/dist/lib/neutral/{RelatedArticle-YDNGUDAJ.mjs → RelatedArticle-Z777WVDW.mjs} +11 -10
  26. package/dist/lib/neutral/RelatedArticle-Z777WVDW.mjs.map +7 -0
  27. package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs +104 -0
  28. package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs.map +7 -0
  29. package/dist/lib/neutral/{SchemaContainer-Q4BP6X2M.mjs → SchemaContainer-4GJKQBXM.mjs} +9 -5
  30. package/dist/lib/neutral/SchemaContainer-4GJKQBXM.mjs.map +7 -0
  31. package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs → SmallPresenceLive-FW3AMEY5.mjs} +2 -2
  32. package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs +78 -0
  33. package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs.map +7 -0
  34. package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs +89 -0
  35. package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs.map +7 -0
  36. package/dist/lib/neutral/SpacePlugin.mjs +1 -1
  37. package/dist/lib/neutral/SpacePlugin.node.mjs +4 -4
  38. package/dist/lib/neutral/SpacePlugin.node.mjs.map +3 -3
  39. package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs → SpacePresence-T37WH43Y.mjs} +2 -2
  40. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs +60 -0
  41. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs.map +7 -0
  42. package/dist/lib/neutral/{SpaceSettingsContainer-IB34TEOB.mjs → SpaceSettingsContainer-72CJWELM.mjs} +44 -41
  43. package/dist/lib/neutral/SpaceSettingsContainer-72CJWELM.mjs.map +7 -0
  44. package/dist/lib/neutral/{SyncStatus-CWOXWDDZ.mjs → SyncStatus-J7CHLO5O.mjs} +3 -3
  45. package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs.map +7 -0
  46. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs +143 -0
  47. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs.map +7 -0
  48. package/dist/lib/neutral/{add-object-QYOMCBJA.mjs → add-object-H2N4AOQJ.mjs} +16 -16
  49. package/dist/lib/neutral/add-object-H2N4AOQJ.mjs.map +7 -0
  50. package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs → add-relation-BGTLART5.mjs} +3 -3
  51. package/dist/lib/neutral/{add-type-CZVKSEIW.mjs → add-type-JIDLRANR.mjs} +3 -3
  52. package/dist/lib/neutral/{add-type-CZVKSEIW.mjs.map → add-type-JIDLRANR.mjs.map} +1 -1
  53. package/dist/lib/neutral/{app-graph-builder-SQGCUCDO.mjs → app-graph-builder-7H2KOD4B.mjs} +284 -203
  54. package/dist/lib/neutral/app-graph-builder-7H2KOD4B.mjs.map +7 -0
  55. package/dist/lib/neutral/capabilities/index.mjs +14 -16
  56. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  57. package/dist/lib/neutral/capabilities/node.mjs +3 -3
  58. package/dist/lib/neutral/{chunk-7WUJENBF.mjs → chunk-52ASDNRA.mjs} +5 -6
  59. package/dist/lib/neutral/chunk-52ASDNRA.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-5ZZS3KMK.mjs +46 -0
  61. package/dist/lib/neutral/chunk-5ZZS3KMK.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-C2ULK22J.mjs +17 -0
  63. package/dist/lib/neutral/chunk-C2ULK22J.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-K34BPPQE.mjs → chunk-F5KLUP2P.mjs} +35 -18
  65. package/dist/lib/neutral/chunk-F5KLUP2P.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-JHZGRYGS.mjs → chunk-G2KHP7FX.mjs} +2 -2
  67. package/dist/lib/neutral/{chunk-JHZGRYGS.mjs.map → chunk-G2KHP7FX.mjs.map} +2 -2
  68. package/dist/lib/neutral/{chunk-YY62663T.mjs → chunk-LMUG6PEJ.mjs} +4 -5
  69. package/dist/lib/neutral/chunk-LMUG6PEJ.mjs.map +7 -0
  70. package/dist/lib/neutral/{chunk-EEXRKYOD.mjs → chunk-RAAHDTVF.mjs} +9 -5
  71. package/dist/lib/neutral/chunk-RAAHDTVF.mjs.map +7 -0
  72. package/dist/lib/neutral/{chunk-BBQR23DW.mjs → chunk-SPWAMXNR.mjs} +105 -128
  73. package/dist/lib/neutral/chunk-SPWAMXNR.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-U5WTDOMV.mjs +8 -0
  75. package/dist/lib/neutral/chunk-V7JALUM3.mjs +9 -0
  76. package/dist/lib/neutral/chunk-V7JALUM3.mjs.map +7 -0
  77. package/dist/lib/neutral/{close-FGQN37PK.mjs → close-5WEQZRNK.mjs} +3 -3
  78. package/dist/lib/neutral/components/index.mjs +22 -23
  79. package/dist/lib/neutral/components/index.mjs.map +4 -4
  80. package/dist/lib/neutral/constants.mjs +16 -0
  81. package/dist/lib/neutral/constants.mjs.map +7 -0
  82. package/dist/lib/neutral/containers/index.mjs +29 -23
  83. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  84. package/dist/lib/neutral/{create-EPIFSRJA.mjs → create-QZ47FHQU.mjs} +7 -7
  85. package/dist/lib/neutral/create-QZ47FHQU.mjs.map +7 -0
  86. package/dist/lib/neutral/{create-object-22WUOWZQ.mjs → create-object-ZU6FZW5X.mjs} +1 -6
  87. package/dist/lib/neutral/create-object-ZU6FZW5X.mjs.map +7 -0
  88. package/dist/lib/neutral/{delete-LIA5M3WI.mjs → delete-SPCU2VFM.mjs} +3 -3
  89. package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs → delete-field-TAKJVEAD.mjs} +3 -3
  90. package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs → duplicate-object-BUPZOO6S.mjs} +3 -3
  91. package/dist/lib/neutral/{export-space-VWJHVXWF.mjs → export-space-S5SCAL4M.mjs} +3 -3
  92. package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs → get-share-link-CLM5IQRL.mjs} +4 -4
  93. package/dist/lib/neutral/hooks/index.mjs +16 -4
  94. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  95. package/dist/lib/neutral/{identity-created-57RML5XT.mjs → identity-created-BEYMLBK4.mjs} +5 -5
  96. package/dist/lib/neutral/identity-created-BEYMLBK4.mjs.map +7 -0
  97. package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs → import-space-LJQK3KT7.mjs} +3 -3
  98. package/dist/lib/neutral/index.mjs +16 -6
  99. package/dist/lib/neutral/join-FSODYIOC.mjs +54 -0
  100. package/dist/lib/neutral/join-FSODYIOC.mjs.map +7 -0
  101. package/dist/lib/neutral/meta.json +1 -1
  102. package/dist/lib/neutral/meta.mjs +1 -1
  103. package/dist/lib/neutral/{migrate-G7I52UKD.mjs → migrate-WHM6LU7L.mjs} +4 -4
  104. package/dist/lib/neutral/{migrate-G7I52UKD.mjs.map → migrate-WHM6LU7L.mjs.map} +3 -3
  105. package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs → navigation-handler-ZF7MV2HL.mjs} +16 -10
  106. package/dist/lib/neutral/navigation-handler-ZF7MV2HL.mjs.map +7 -0
  107. package/dist/lib/neutral/{navigation-resolver-IFVQRCGU.mjs → navigation-resolver-KBESOSWU.mjs} +11 -11
  108. package/dist/lib/neutral/navigation-resolver-KBESOSWU.mjs.map +7 -0
  109. package/dist/lib/neutral/{open-CPWVZSI4.mjs → open-JCXTL3SK.mjs} +3 -3
  110. package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs → open-create-object-WAIAU7TA.mjs} +6 -6
  111. package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs → open-create-space-VU47FWPZ.mjs} +6 -6
  112. package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs → open-import-space-GUHIEWYB.mjs} +6 -6
  113. package/dist/lib/neutral/{open-members-BEXOSSBS.mjs → open-members-MLLBHKUU.mjs} +6 -6
  114. package/dist/lib/neutral/open-members-MLLBHKUU.mjs.map +7 -0
  115. package/dist/lib/neutral/{open-settings-RHDBW2K5.mjs → open-settings-DTPZF4U4.mjs} +6 -6
  116. package/dist/lib/neutral/open-settings-DTPZF4U4.mjs.map +7 -0
  117. package/dist/lib/neutral/operations/index.mjs +3 -3
  118. package/dist/lib/neutral/plugin.mjs +4 -4
  119. package/dist/lib/neutral/{react-root-2DJPZQT4.mjs → react-root-YLYRCSAZ.mjs} +2 -2
  120. package/dist/lib/neutral/{react-root-2DJPZQT4.mjs.map → react-root-YLYRCSAZ.mjs.map} +3 -3
  121. package/dist/lib/neutral/{react-surface-LYCTOQLY.mjs → react-surface-LRA7GIFN.mjs} +77 -80
  122. package/dist/lib/neutral/react-surface-LRA7GIFN.mjs.map +7 -0
  123. package/dist/lib/neutral/{remove-objects-OWDMA4IF.mjs → remove-objects-WEO66EDS.mjs} +5 -5
  124. package/dist/lib/neutral/remove-objects-WEO66EDS.mjs.map +7 -0
  125. package/dist/lib/neutral/{rename-SR6BBSPU.mjs → rename-Q6UNCBIM.mjs} +9 -8
  126. package/dist/lib/neutral/rename-Q6UNCBIM.mjs.map +7 -0
  127. package/dist/lib/neutral/{rename-object-5H6E5AOX.mjs → rename-object-2UCEGU7U.mjs} +9 -8
  128. package/dist/lib/neutral/rename-object-2UCEGU7U.mjs.map +7 -0
  129. package/dist/lib/neutral/{repair-PSYRVSJ6.mjs → repair-HMH476U3.mjs} +3 -3
  130. package/dist/lib/neutral/repair-HMH476U3.mjs.map +7 -0
  131. package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs → restore-field-6CQAFOXY.mjs} +3 -3
  132. package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs → restore-objects-3VINLP7C.mjs} +3 -3
  133. package/dist/lib/neutral/{settings-Q32EQCHX.mjs → settings-5IBSYBVU.mjs} +3 -3
  134. package/dist/lib/neutral/{settings-Q32EQCHX.mjs.map → settings-5IBSYBVU.mjs.map} +3 -3
  135. package/dist/lib/neutral/{share-5Y4NZA75.mjs → share-A4WPILNF.mjs} +3 -3
  136. package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs → snapshot-HBYMAPA7.mjs} +3 -3
  137. package/dist/lib/neutral/{spaces-ready-GBF72QJH.mjs → spaces-ready-GWMSU72V.mjs} +12 -12
  138. package/dist/lib/neutral/spaces-ready-GWMSU72V.mjs.map +7 -0
  139. package/dist/lib/neutral/{state-DPBOZRAW.mjs → state-KMH2NUAL.mjs} +2 -2
  140. package/dist/lib/neutral/state-KMH2NUAL.mjs.map +7 -0
  141. package/dist/lib/neutral/testing.mjs +1 -1
  142. package/dist/lib/neutral/translations.mjs +18 -8
  143. package/dist/lib/neutral/translations.mjs.map +3 -3
  144. package/dist/lib/neutral/types/index.mjs +9 -3
  145. package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs → undo-mappings-P43EAUGI.mjs} +5 -5
  146. package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs.map → undo-mappings-P43EAUGI.mjs.map} +3 -3
  147. package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs → wait-for-object-U6P2NNWY.mjs} +3 -3
  148. package/dist/types/dx.config.d.ts +28 -0
  149. package/dist/types/dx.config.d.ts.map +1 -0
  150. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  151. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  152. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +19 -25
  153. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -1
  154. package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts.map +1 -1
  155. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts +15 -33
  156. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts.map +1 -1
  157. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts +3 -2
  158. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts.map +1 -1
  159. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +1 -5
  160. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -1
  161. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +29 -4
  162. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
  163. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
  164. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
  165. package/dist/types/src/capabilities/create-object.d.ts +1 -33
  166. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  167. package/dist/types/src/capabilities/index.d.ts +10 -54
  168. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  169. package/dist/types/src/capabilities/navigation-handler/index.d.ts +1 -1
  170. package/dist/types/src/capabilities/navigation-handler/index.d.ts.map +1 -1
  171. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts +1 -2
  172. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts.map +1 -1
  173. package/dist/types/src/capabilities/navigation-resolver.d.ts +1 -2
  174. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
  175. package/dist/types/src/capabilities/node.d.ts +3 -33
  176. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  177. package/dist/types/src/capabilities/react-root.d.ts +1 -5
  178. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  179. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  180. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  181. package/dist/types/src/capabilities/repair.d.ts +1 -2
  182. package/dist/types/src/capabilities/repair.d.ts.map +1 -1
  183. package/dist/types/src/capabilities/settings.d.ts +1 -3
  184. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  185. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  186. package/dist/types/src/capabilities/state.d.ts +1 -13
  187. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  188. package/dist/types/src/capabilities/undo-mappings.d.ts +2 -3
  189. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
  190. package/dist/types/src/commands/database/add.d.ts.map +1 -1
  191. package/dist/types/src/commands/queue/query.d.ts.map +1 -1
  192. package/dist/types/src/components/ForeignKeys/ForeignKeys.d.ts.map +1 -1
  193. package/dist/types/src/components/index.d.ts +2 -2
  194. package/dist/types/src/components/index.d.ts.map +1 -1
  195. package/dist/types/src/constants.d.ts +1 -2
  196. package/dist/types/src/constants.d.ts.map +1 -1
  197. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
  198. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +142 -52
  199. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  200. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
  201. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +142 -52
  202. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
  203. package/dist/types/src/containers/DefaultProperties/DefaultProperties.d.ts +15 -0
  204. package/dist/types/src/containers/DefaultProperties/DefaultProperties.d.ts.map +1 -0
  205. package/dist/types/src/containers/DefaultProperties/index.d.ts +2 -0
  206. package/dist/types/src/containers/DefaultProperties/index.d.ts.map +1 -0
  207. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
  208. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +142 -52
  209. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
  210. package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts.map +1 -1
  211. package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -1
  212. package/dist/types/src/containers/RelatedArticle/RelatedArticle.d.ts.map +1 -1
  213. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +16 -0
  214. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -0
  215. package/dist/types/src/containers/RenamePopover/index.d.ts +3 -0
  216. package/dist/types/src/containers/RenamePopover/index.d.ts.map +1 -0
  217. package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts.map +1 -1
  218. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts +15 -0
  219. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts.map +1 -0
  220. package/dist/types/src/containers/SpaceHomeArticle/index.d.ts +2 -0
  221. package/dist/types/src/containers/{ObjectProperties → SpaceHomeArticle}/index.d.ts.map +1 -1
  222. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts +22 -0
  223. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -0
  224. package/dist/types/src/containers/SpaceHomeRecent/index.d.ts +2 -0
  225. package/dist/types/src/containers/SpaceHomeRecent/index.d.ts.map +1 -0
  226. package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -1
  227. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +142 -52
  228. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
  229. package/dist/types/src/containers/SpacePresence/index.d.ts +1 -1
  230. package/dist/types/src/containers/SpacePresence/index.d.ts.map +1 -1
  231. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts +11 -0
  232. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts.map +1 -0
  233. package/dist/types/src/{components → containers}/SpaceSettings/SpaceSettings.stories.d.ts +143 -53
  234. package/dist/types/src/{components → containers}/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
  235. package/dist/types/src/{components → containers}/SpaceSettings/index.d.ts.map +1 -1
  236. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +142 -52
  237. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
  238. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +142 -52
  239. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  240. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts +16 -0
  241. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts.map +1 -0
  242. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts +21 -0
  243. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts.map +1 -0
  244. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts +2 -0
  245. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts.map +1 -0
  246. package/dist/types/src/containers/index.d.ts +7 -3
  247. package/dist/types/src/containers/index.d.ts.map +1 -1
  248. package/dist/types/src/errors.d.ts +33 -0
  249. package/dist/types/src/errors.d.ts.map +1 -0
  250. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  251. package/dist/types/src/hooks/useRelatedObjects.d.ts.map +1 -1
  252. package/dist/types/src/index.d.ts +1 -0
  253. package/dist/types/src/index.d.ts.map +1 -1
  254. package/dist/types/src/meta.d.ts +32 -2
  255. package/dist/types/src/meta.d.ts.map +1 -1
  256. package/dist/types/src/operations/add-object.d.ts.map +1 -1
  257. package/dist/types/src/operations/definitions.d.ts +9 -37
  258. package/dist/types/src/operations/definitions.d.ts.map +1 -1
  259. package/dist/types/src/operations/helpers.d.ts.map +1 -1
  260. package/dist/types/src/operations/join.d.ts.map +1 -1
  261. package/dist/types/src/operations/remove-objects.d.ts.map +1 -1
  262. package/dist/types/src/operations/rename-object.d.ts.map +1 -1
  263. package/dist/types/src/operations/rename.d.ts.map +1 -1
  264. package/dist/types/src/translations.d.ts +142 -52
  265. package/dist/types/src/translations.d.ts.map +1 -1
  266. package/dist/types/src/types/Settings.d.ts +3 -1
  267. package/dist/types/src/types/Settings.d.ts.map +1 -1
  268. package/dist/types/src/types/capabilities.d.ts +1 -1
  269. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  270. package/dist/types/src/types/events.d.ts.map +1 -1
  271. package/dist/types/src/types/form.d.ts +7 -1
  272. package/dist/types/src/types/form.d.ts.map +1 -1
  273. package/dist/types/src/types/index.d.ts +1 -0
  274. package/dist/types/src/types/index.d.ts.map +1 -1
  275. package/dist/types/src/types/surface.d.ts +26 -0
  276. package/dist/types/src/types/surface.d.ts.map +1 -0
  277. package/dist/types/src/types/types.d.ts +7 -0
  278. package/dist/types/src/types/types.d.ts.map +1 -1
  279. package/dist/types/src/util.d.ts.map +1 -1
  280. package/dist/types/tsconfig.tsbuildinfo +1 -1
  281. package/dx.config.ts +35 -0
  282. package/package.json +71 -59
  283. package/src/SpacePlugin.test.ts +1 -1
  284. package/src/SpacePlugin.ts +4 -10
  285. package/src/capabilities/app-graph-builder/extensions/collections.ts +82 -69
  286. package/src/capabilities/app-graph-builder/extensions/companions.ts +6 -5
  287. package/src/capabilities/app-graph-builder/extensions/database.ts +118 -91
  288. package/src/capabilities/app-graph-builder/extensions/settings.ts +17 -14
  289. package/src/capabilities/app-graph-builder/extensions/shared.test.ts +13 -9
  290. package/src/capabilities/app-graph-builder/extensions/shared.ts +5 -23
  291. package/src/capabilities/app-graph-builder/extensions/spaces.ts +78 -29
  292. package/src/capabilities/create-object.ts +0 -5
  293. package/src/capabilities/identity-created.ts +4 -4
  294. package/src/capabilities/index.ts +0 -1
  295. package/src/capabilities/navigation-handler/navigation-handler.ts +14 -4
  296. package/src/capabilities/navigation-resolver.ts +13 -20
  297. package/src/capabilities/react-root.tsx +1 -1
  298. package/src/capabilities/react-surface.tsx +95 -99
  299. package/src/capabilities/repair.ts +4 -2
  300. package/src/capabilities/settings.ts +2 -2
  301. package/src/capabilities/spaces-ready.ts +9 -16
  302. package/src/capabilities/state.ts +1 -1
  303. package/src/capabilities/undo-mappings.ts +3 -3
  304. package/src/commands/database/add.ts +4 -2
  305. package/src/commands/queue/query.ts +4 -3
  306. package/src/components/AwaitingObject/AwaitingObject.tsx +1 -1
  307. package/src/components/CreateObjectPanel/CreateObjectPanel.tsx +2 -2
  308. package/src/components/ForeignKeys/ForeignKeys.tsx +21 -20
  309. package/src/components/index.ts +3 -3
  310. package/src/constants.ts +5 -6
  311. package/src/containers/CollectionArticle/CollectionArticle.tsx +10 -6
  312. package/src/containers/CollectionSection/CollectionSection.tsx +1 -1
  313. package/src/containers/CreateObjectDialog/CreateObjectDialog.stories.tsx +1 -1
  314. package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +48 -10
  315. package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +5 -5
  316. package/src/containers/DefaultProperties/DefaultProperties.tsx +69 -0
  317. package/src/containers/DefaultProperties/index.ts +5 -0
  318. package/src/containers/ImportSpaceDialog/ImportSpaceDialog.tsx +3 -3
  319. package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +3 -3
  320. package/src/containers/JoinDialog/JoinDialog.tsx +14 -25
  321. package/src/containers/MembersContainer/MembersContainer.tsx +42 -38
  322. package/src/containers/MenuFooter/MenuFooter.tsx +3 -3
  323. package/src/containers/ObjectCardStack/ObjectCardStack.tsx +3 -3
  324. package/src/containers/RecordArticle/RecordArticle.tsx +67 -8
  325. package/src/containers/RelatedArticle/RelatedArticle.tsx +18 -15
  326. package/src/containers/RenamePopover/RenamePopover.tsx +125 -0
  327. package/src/containers/RenamePopover/index.ts +6 -0
  328. package/src/containers/SchemaContainer/SchemaContainer.tsx +22 -18
  329. package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +100 -0
  330. package/src/containers/SpaceHomeArticle/index.ts +5 -0
  331. package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +103 -0
  332. package/src/containers/SpaceHomeRecent/index.ts +5 -0
  333. package/src/containers/SpacePresence/SpacePresence.tsx +23 -21
  334. package/src/containers/SpacePresence/index.ts +1 -1
  335. package/src/{components → containers}/SpaceSettings/SpaceSettings.stories.tsx +1 -1
  336. package/src/containers/SpaceSettings/SpaceSettings.tsx +75 -0
  337. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +120 -111
  338. package/src/containers/SyncStatus/SyncStatus.tsx +2 -2
  339. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.tsx +116 -0
  340. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.tsx +162 -0
  341. package/src/containers/TypeCollectionArticle/index.ts +5 -0
  342. package/src/containers/index.ts +7 -3
  343. package/src/errors.ts +11 -0
  344. package/src/hooks/useInputSurfaceLookup.tsx +3 -2
  345. package/src/hooks/useRelatedObjects.ts +13 -1
  346. package/src/index.ts +1 -0
  347. package/src/meta.ts +2 -27
  348. package/src/operations/add-object.ts +12 -18
  349. package/src/operations/add-type.ts +1 -1
  350. package/src/operations/create.ts +4 -4
  351. package/src/operations/definitions.ts +2 -3
  352. package/src/operations/helpers.ts +1 -1
  353. package/src/operations/join.ts +19 -0
  354. package/src/operations/migrate.ts +1 -1
  355. package/src/operations/open-members.ts +3 -3
  356. package/src/operations/open-settings.ts +3 -3
  357. package/src/operations/remove-objects.ts +3 -2
  358. package/src/operations/rename-object.ts +3 -2
  359. package/src/operations/rename.ts +3 -2
  360. package/src/translations.ts +18 -7
  361. package/src/types/Settings.ts +10 -1
  362. package/src/types/capabilities.ts +9 -9
  363. package/src/types/events.ts +5 -5
  364. package/src/types/form.ts +5 -1
  365. package/src/types/index.ts +1 -0
  366. package/src/types/surface.ts +31 -0
  367. package/src/types/types.ts +9 -1
  368. package/src/util.ts +3 -4
  369. package/dist/lib/neutral/CollectionArticle-S3OF5KJ7.mjs.map +0 -7
  370. package/dist/lib/neutral/CreateObjectDialog-66R3K6I3.mjs.map +0 -7
  371. package/dist/lib/neutral/CreateSpaceDialog-CDGSEIJB.mjs.map +0 -7
  372. package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs +0 -59
  373. package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs.map +0 -7
  374. package/dist/lib/neutral/ImportSpaceDialog-7GKV4OTF.mjs.map +0 -7
  375. package/dist/lib/neutral/InlineSyncStatus-TBJKZCH7.mjs.map +0 -7
  376. package/dist/lib/neutral/JoinDialog-SSFKRFTJ.mjs.map +0 -7
  377. package/dist/lib/neutral/MembersContainer-KMCQDWCS.mjs.map +0 -7
  378. package/dist/lib/neutral/MenuFooter-5JT7V5FZ.mjs.map +0 -7
  379. package/dist/lib/neutral/ObjectCardStack-IXNU3HEN.mjs.map +0 -7
  380. package/dist/lib/neutral/ObjectProperties-BF6KGFFC.mjs +0 -33
  381. package/dist/lib/neutral/ObjectProperties-BF6KGFFC.mjs.map +0 -7
  382. package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs +0 -51
  383. package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs.map +0 -7
  384. package/dist/lib/neutral/RelatedArticle-YDNGUDAJ.mjs.map +0 -7
  385. package/dist/lib/neutral/SchemaContainer-Q4BP6X2M.mjs.map +0 -7
  386. package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs +0 -56
  387. package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs.map +0 -7
  388. package/dist/lib/neutral/SpaceSettings-YAHBOY5T.mjs +0 -37
  389. package/dist/lib/neutral/SpaceSettings-YAHBOY5T.mjs.map +0 -7
  390. package/dist/lib/neutral/SpaceSettingsContainer-IB34TEOB.mjs.map +0 -7
  391. package/dist/lib/neutral/SyncStatus-CWOXWDDZ.mjs.map +0 -7
  392. package/dist/lib/neutral/add-object-QYOMCBJA.mjs.map +0 -7
  393. package/dist/lib/neutral/app-graph-builder-SQGCUCDO.mjs.map +0 -7
  394. package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs +0 -81
  395. package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-4RTSNTDC.mjs +0 -37
  397. package/dist/lib/neutral/chunk-4RTSNTDC.mjs.map +0 -7
  398. package/dist/lib/neutral/chunk-7WUJENBF.mjs.map +0 -7
  399. package/dist/lib/neutral/chunk-B7DBIARR.mjs +0 -8
  400. package/dist/lib/neutral/chunk-BBQR23DW.mjs.map +0 -7
  401. package/dist/lib/neutral/chunk-EEXRKYOD.mjs.map +0 -7
  402. package/dist/lib/neutral/chunk-F5MESIRH.mjs +0 -19
  403. package/dist/lib/neutral/chunk-F5MESIRH.mjs.map +0 -7
  404. package/dist/lib/neutral/chunk-K34BPPQE.mjs.map +0 -7
  405. package/dist/lib/neutral/chunk-YY62663T.mjs.map +0 -7
  406. package/dist/lib/neutral/create-EPIFSRJA.mjs.map +0 -7
  407. package/dist/lib/neutral/create-object-22WUOWZQ.mjs.map +0 -7
  408. package/dist/lib/neutral/identity-created-57RML5XT.mjs.map +0 -7
  409. package/dist/lib/neutral/join-Z5K4OAIG.mjs +0 -28
  410. package/dist/lib/neutral/join-Z5K4OAIG.mjs.map +0 -7
  411. package/dist/lib/neutral/navigation-handler-QQJYEMAS.mjs.map +0 -7
  412. package/dist/lib/neutral/navigation-resolver-IFVQRCGU.mjs.map +0 -7
  413. package/dist/lib/neutral/open-members-BEXOSSBS.mjs.map +0 -7
  414. package/dist/lib/neutral/open-settings-RHDBW2K5.mjs.map +0 -7
  415. package/dist/lib/neutral/react-surface-LYCTOQLY.mjs.map +0 -7
  416. package/dist/lib/neutral/remove-objects-OWDMA4IF.mjs.map +0 -7
  417. package/dist/lib/neutral/rename-SR6BBSPU.mjs.map +0 -7
  418. package/dist/lib/neutral/rename-object-5H6E5AOX.mjs.map +0 -7
  419. package/dist/lib/neutral/repair-PSYRVSJ6.mjs.map +0 -7
  420. package/dist/lib/neutral/spaces-ready-GBF72QJH.mjs.map +0 -7
  421. package/dist/lib/neutral/state-DPBOZRAW.mjs.map +0 -7
  422. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
  423. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  424. package/dist/types/src/components/SpaceSettings/SpaceSettings.d.ts +0 -8
  425. package/dist/types/src/components/SpaceSettings/SpaceSettings.d.ts.map +0 -1
  426. package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts +0 -7
  427. package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts.map +0 -1
  428. package/dist/types/src/containers/EntityRenamePopover/index.d.ts +0 -2
  429. package/dist/types/src/containers/EntityRenamePopover/index.d.ts.map +0 -1
  430. package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts +0 -10
  431. package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts.map +0 -1
  432. package/dist/types/src/containers/ObjectProperties/index.d.ts +0 -2
  433. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts +0 -7
  434. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +0 -1
  435. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts +0 -2
  436. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts.map +0 -1
  437. package/src/capabilities/app-graph-serializer.ts +0 -85
  438. package/src/components/SpaceSettings/SpaceSettings.tsx +0 -56
  439. package/src/containers/EntityRenamePopover/EntityRenamePopover.tsx +0 -52
  440. package/src/containers/EntityRenamePopover/index.ts +0 -5
  441. package/src/containers/ObjectProperties/ObjectProperties.tsx +0 -32
  442. package/src/containers/ObjectProperties/index.ts +0 -5
  443. package/src/containers/SpaceRenamePopover/SpaceRenamePopover.tsx +0 -54
  444. package/src/containers/SpaceRenamePopover/index.ts +0 -5
  445. /package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs.map → SmallPresenceLive-FW3AMEY5.mjs.map} +0 -0
  446. /package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs.map → SpacePresence-T37WH43Y.mjs.map} +0 -0
  447. /package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs.map → add-relation-BGTLART5.mjs.map} +0 -0
  448. /package/dist/lib/neutral/{chunk-B7DBIARR.mjs.map → chunk-U5WTDOMV.mjs.map} +0 -0
  449. /package/dist/lib/neutral/{close-FGQN37PK.mjs.map → close-5WEQZRNK.mjs.map} +0 -0
  450. /package/dist/lib/neutral/{delete-LIA5M3WI.mjs.map → delete-SPCU2VFM.mjs.map} +0 -0
  451. /package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs.map → delete-field-TAKJVEAD.mjs.map} +0 -0
  452. /package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs.map → duplicate-object-BUPZOO6S.mjs.map} +0 -0
  453. /package/dist/lib/neutral/{export-space-VWJHVXWF.mjs.map → export-space-S5SCAL4M.mjs.map} +0 -0
  454. /package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs.map → get-share-link-CLM5IQRL.mjs.map} +0 -0
  455. /package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs.map → import-space-LJQK3KT7.mjs.map} +0 -0
  456. /package/dist/lib/neutral/{open-CPWVZSI4.mjs.map → open-JCXTL3SK.mjs.map} +0 -0
  457. /package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs.map → open-create-object-WAIAU7TA.mjs.map} +0 -0
  458. /package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs.map → open-create-space-VU47FWPZ.mjs.map} +0 -0
  459. /package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs.map → open-import-space-GUHIEWYB.mjs.map} +0 -0
  460. /package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs.map → restore-field-6CQAFOXY.mjs.map} +0 -0
  461. /package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs.map → restore-objects-3VINLP7C.mjs.map} +0 -0
  462. /package/dist/lib/neutral/{share-5Y4NZA75.mjs.map → share-A4WPILNF.mjs.map} +0 -0
  463. /package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs.map → snapshot-HBYMAPA7.mjs.map} +0 -0
  464. /package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs.map → wait-for-object-U6P2NNWY.mjs.map} +0 -0
  465. /package/dist/types/src/{components → containers}/SpaceSettings/index.d.ts +0 -0
  466. /package/src/{components → containers}/SpaceSettings/index.ts +0 -0
@@ -0,0 +1,103 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Option from 'effect/Option';
6
+ import React, { useCallback, useMemo } from 'react';
7
+
8
+ import { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';
9
+ import { AppCapabilities, LayoutOperation, Paths } from '@dxos/app-toolkit';
10
+ import { Collection, Filter, Obj, Order, Query, Type } from '@dxos/echo';
11
+ import { HiddenAnnotation, getTypeAnnotation } from '@dxos/echo/Annotation';
12
+ import { Kind as EntityKind } from '@dxos/echo/Entity';
13
+ import { type Space, useQuery } from '@dxos/react-client/echo';
14
+ import { Card, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
15
+ import { Masonry } from '@dxos/react-ui-masonry';
16
+ import { getStyles } from '@dxos/ui-theme';
17
+
18
+ import { meta } from '#meta';
19
+
20
+ /** Number of recently-modified objects to surface as cards. */
21
+ const RECENT_LIMIT = 10;
22
+
23
+ type SpaceScopedProps = {
24
+ space?: Space;
25
+ };
26
+
27
+ /**
28
+ * Recent-objects region for the Home article. Queries the most-recently-modified objects of
29
+ * registered, non-hidden, non-relation, non-collection types and renders them as a Masonry of
30
+ * tiles. Renders nothing (no heading) when the space has no recent objects — the starter-prompt
31
+ * contributor (plugin-assistant) fills the empty state instead.
32
+ */
33
+ export const SpaceHomeRecent = ({ space }: SpaceScopedProps) => {
34
+ const { t } = useTranslation(meta.profile.key);
35
+
36
+ const schemas = useCapabilities(AppCapabilities.Schema);
37
+ const filter = useMemo(() => {
38
+ const collectionTypename = Type.getTypename(Collection.Collection);
39
+ const types = schemas
40
+ .flat()
41
+ .filter(Type.isType)
42
+ .filter((type) => getTypeAnnotation(Type.getSchema(type))?.kind !== EntityKind.Relation)
43
+ .filter((type) => !HiddenAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => false)))
44
+ .filter((type) => Type.getTypename(type) !== collectionTypename);
45
+ return types.length > 0 ? Filter.or(...types.map((type) => Filter.type(type))) : undefined;
46
+ }, [schemas]);
47
+
48
+ const query = useMemo(
49
+ () =>
50
+ Query.select(filter ?? Filter.everything())
51
+ .orderBy(Order.updated('desc'))
52
+ .limit(RECENT_LIMIT),
53
+ [filter],
54
+ );
55
+
56
+ const recent = useQuery(filter && space ? space.db : undefined, query);
57
+ if (recent.length === 0) {
58
+ return null;
59
+ }
60
+
61
+ return (
62
+ <div className='flex justify-center w-full'>
63
+ <div className='flex flex-col w-full max-w-[40rem]'>
64
+ <h2 className='text-sm font-medium text-description'>{t('space-home.recent.heading')}</h2>
65
+ <Masonry.Root Tile={RecentObjectTile}>
66
+ <Masonry.Content classNames='pt-trim-sm' padding={false} scrollbars={false}>
67
+ <Masonry.Viewport items={recent} getId={(object) => object.id} />
68
+ </Masonry.Content>
69
+ </Masonry.Root>
70
+ </div>
71
+ </div>
72
+ );
73
+ };
74
+
75
+ const RecentObjectTile = ({ data }: { data: Obj.Unknown; index: number }) => {
76
+ const { invokePromise } = useOperationInvoker();
77
+ const { t } = useTranslation(meta.profile.key);
78
+ const typename = Obj.getTypename(data);
79
+ const label = toLocalizedString(
80
+ Obj.getLabel(data) ?? (typename ? ['object-name.placeholder', { ns: typename, defaultValue: 'New item' }] : ''),
81
+ t,
82
+ );
83
+ const iconAnnotation = Obj.getIcon(data);
84
+ const icon = iconAnnotation?.icon ?? 'ph--circle-dashed--regular';
85
+ const iconStyles = iconAnnotation?.hue ? getStyles(iconAnnotation.hue) : undefined;
86
+
87
+ const handleClick = useCallback(() => {
88
+ void invokePromise(LayoutOperation.Open, { subject: [Paths.getObjectPathFromObject(data)] });
89
+ }, [invokePromise, data]);
90
+
91
+ return (
92
+ <Card.Root role='button' fullWidth classNames='cursor-pointer' onClick={handleClick}>
93
+ <Card.Header>
94
+ <Card.Block>
95
+ <Icon icon={icon} classNames={iconStyles?.text} />
96
+ </Card.Block>
97
+ <Card.Title>{label}</Card.Title>
98
+ </Card.Header>
99
+ </Card.Root>
100
+ );
101
+ };
102
+
103
+ RecentObjectTile.displayName = 'RecentObjectTile';
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export { SpaceHomeRecent as default } from './SpaceHomeRecent';
@@ -14,8 +14,6 @@ import {
14
14
  Avatar,
15
15
  type AvatarContentProps,
16
16
  type DxAvatar,
17
- List,
18
- ListItem,
19
17
  Popover,
20
18
  type Size,
21
19
  type ThemedClassName,
@@ -24,6 +22,7 @@ import {
24
22
  useTranslation,
25
23
  } from '@dxos/react-ui';
26
24
  import { AttentionGlyph, type AttentionGlyphProps, useAttention } from '@dxos/react-ui-attention';
25
+ import { Listbox } from '@dxos/react-ui-list';
27
26
  import { ComplexMap, keyToFallback } from '@dxos/util';
28
27
 
29
28
  import { meta } from '#meta';
@@ -151,24 +150,27 @@ export const FullPresence = (props: MemberPresenceProps) => {
151
150
  <Popover.Content side='bottom'>
152
151
  <Popover.Arrow />
153
152
  <Popover.Viewport classNames='max-h-56'>
154
- <List>
155
- {members.map((member) => (
156
- <ListItem.Root
157
- key={member.identity.identityKey.toHex()}
158
- classNames='flex gap-2 items-center cursor-pointer mb-2'
159
- onClick={() => onMemberClick?.(member)}
160
- data-testid='identity-list-item'
161
- >
162
- {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}
163
- <PresenceAvatar
164
- identity={member.identity}
165
- size={size}
166
- showName
167
- match={member.currentlyAttended}
168
- />
169
- </ListItem.Root>
170
- ))}
171
- </List>
153
+ <Listbox.Root>
154
+ <Listbox.Content aria-label='members'>
155
+ {members.map((member) => (
156
+ <Listbox.Item
157
+ key={member.identity.identityKey.toHex()}
158
+ id={member.identity.identityKey.toHex()}
159
+ classNames='flex gap-2 items-center cursor-pointer mb-2'
160
+ onClick={() => onMemberClick?.(member)}
161
+ data-testid='identity-list-item'
162
+ >
163
+ {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}
164
+ <PresenceAvatar
165
+ identity={member.identity}
166
+ size={size}
167
+ showName
168
+ match={member.currentlyAttended}
169
+ />
170
+ </Listbox.Item>
171
+ ))}
172
+ </Listbox.Content>
173
+ </Listbox.Root>
172
174
  </Popover.Viewport>
173
175
  </Popover.Content>
174
176
  </Popover.Portal>
@@ -246,7 +248,7 @@ export type SmallPresenceProps = {
246
248
  } & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;
247
249
 
248
250
  export const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {
249
- const { t } = useTranslation(meta.id);
251
+ const { t } = useTranslation(meta.profile.key);
250
252
 
251
253
  return (
252
254
  <Tooltip.Trigger asChild content={t('presence.label', { count })} side='bottom'>
@@ -2,5 +2,5 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { SpacePresence, SmallPresenceLive } from './SpacePresence';
5
+ export { SmallPresenceLive, SpacePresence } from './SpacePresence';
6
6
  export { SpacePresence as default } from './SpacePresence';
@@ -11,7 +11,7 @@ import { translations } from '#translations';
11
11
  import { SpaceSettings } from './SpaceSettings';
12
12
 
13
13
  const meta = {
14
- title: 'plugins/plugin-space/components/SpaceSettings',
14
+ title: 'plugins/plugin-space/containers/SpaceSettings',
15
15
  component: SpaceSettings,
16
16
  tags: ['settings'],
17
17
  decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
@@ -0,0 +1,75 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { AppSpace } from '@dxos/app-toolkit';
8
+ import { type Space } from '@dxos/react-client/echo';
9
+ import { IconButton, Input, toLocalizedString, useTranslation } from '@dxos/react-ui';
10
+ import { Form } from '@dxos/react-ui-form';
11
+ import { Listbox } from '@dxos/react-ui-list';
12
+
13
+ import { meta } from '#meta';
14
+ import { type Settings } from '#types';
15
+
16
+ import { getSpaceDisplayName } from '../../util';
17
+
18
+ export type SpaceSettingsProps = {
19
+ spaces?: Space[];
20
+ onOpenSpaceSettings?: (space: Space) => void;
21
+ settings?: Settings.Settings;
22
+ onSettingsChange?: (updater: (prev: Settings.Settings) => Settings.Settings) => void;
23
+ };
24
+
25
+ export const SpaceSettings = ({ spaces, onOpenSpaceSettings, settings, onSettingsChange }: SpaceSettingsProps) => {
26
+ const { t } = useTranslation(meta.profile.key);
27
+
28
+ return (
29
+ <Form.Root variant='settings'>
30
+ <Form.Viewport scroll>
31
+ <Form.Content>
32
+ <Form.Section title={t('plugin.name')}>
33
+ <Form.Row label={t('settings.show-hidden.label')} description={t('settings.show-hidden.description')}>
34
+ <Input.Root>
35
+ <Input.Switch
36
+ disabled={!onSettingsChange}
37
+ checked={settings?.showHidden}
38
+ onCheckedChange={(checked) => onSettingsChange?.((s) => ({ ...s, showHidden: !!checked }))}
39
+ />
40
+ </Input.Root>
41
+ </Form.Row>
42
+ </Form.Section>
43
+ <Form.Section title={t('space-settings.label')} description={t('space-settings.description')}>
44
+ <Form.Row label={t('settings.space-list.label')} description={t('settings.space-list.description')}>
45
+ <Listbox.Root>
46
+ <Listbox.Content aria-label={t('settings.space-list.label')} classNames='w-full gap-trim-sm'>
47
+ {spaces?.map((space) => (
48
+ <Listbox.Item key={space.id} id={space.id} classNames='w-full items-center'>
49
+ {/* TODO(burdon): Should auto center and truncate; NOTE truncate doesn't work with flex grow. */}
50
+ <Listbox.ItemLabel classNames='min-h-0!'>
51
+ {toLocalizedString(
52
+ getSpaceDisplayName(space, {
53
+ personal: AppSpace.isPersonalSpace(space),
54
+ }),
55
+ t,
56
+ )}
57
+ </Listbox.ItemLabel>
58
+ <IconButton
59
+ icon='ph--faders--regular'
60
+ iconOnly
61
+ label={t('settings.open-settings.label')}
62
+ disabled={!onOpenSpaceSettings}
63
+ onClick={() => onOpenSpaceSettings?.(space)}
64
+ />
65
+ </Listbox.Item>
66
+ ))}
67
+ </Listbox.Content>
68
+ </Listbox.Root>
69
+ </Form.Row>
70
+ </Form.Section>
71
+ </Form.Content>
72
+ </Form.Viewport>
73
+ </Form.Root>
74
+ );
75
+ };
@@ -6,7 +6,7 @@ import * as Schema from 'effect/Schema';
6
6
  import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
7
7
 
8
8
  import { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';
9
- import { getPersonalSpace, getSpacePath, isPersonalSpace, LayoutOperation } from '@dxos/app-toolkit';
9
+ import { AppSpace, LayoutOperation, Paths } from '@dxos/app-toolkit';
10
10
  import { AppSurface } from '@dxos/app-toolkit/ui';
11
11
  import { Obj } from '@dxos/echo';
12
12
  import { log } from '@dxos/log';
@@ -14,7 +14,7 @@ import { SpaceArchive } from '@dxos/protocols/proto/dxos/client/services';
14
14
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
15
15
  import { useClient } from '@dxos/react-client';
16
16
  import { Button, Dialog, DropdownMenu, Icon, IconButton, Input, useTranslation } from '@dxos/react-ui';
17
- import { Form, type FormFieldMap, Settings } from '@dxos/react-ui-form';
17
+ import { Form, type FormFieldMap } from '@dxos/react-ui-form';
18
18
  import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
19
19
 
20
20
  import { meta } from '#meta';
@@ -25,7 +25,7 @@ const SpaceFormSchema = SpaceForm;
25
25
 
26
26
  // TODO(wittjosiah): Handle space migrations here?
27
27
  export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps) => {
28
- const { t } = useTranslation(meta.id);
28
+ const { t } = useTranslation(meta.profile.key);
29
29
  const { invokePromise } = useOperationInvoker();
30
30
  const client = useClient();
31
31
  const [edgeReplication, setEdgeReplication] = useState(
@@ -78,7 +78,7 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
78
78
  [space.properties.name, space.properties.icon, space.properties.hue, edgeReplication],
79
79
  );
80
80
 
81
- const personal = isPersonalSpace(space);
81
+ const personal = AppSpace.isPersonalSpace(space);
82
82
 
83
83
  const fieldMap = useMemo<FormFieldMap>(
84
84
  () => ({
@@ -90,14 +90,16 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
90
90
  [onValueChange, type],
91
91
  );
92
92
  return (
93
- <Settings.Item title={label} description={t('display-name.description')}>
94
- <Input.TextInput
95
- value={getValue()}
96
- onChange={handleChange}
97
- placeholder={t('display-name-input.placeholder')}
98
- classNames='min-w-64'
99
- />
100
- </Settings.Item>
93
+ <Form.Row label={label} description={t('display-name.description')}>
94
+ <Input.Root>
95
+ <Input.TextInput
96
+ value={getValue()}
97
+ onChange={handleChange}
98
+ placeholder={t('display-name-input.placeholder')}
99
+ classNames='min-w-64'
100
+ />
101
+ </Input.Root>
102
+ </Form.Row>
101
103
  );
102
104
  },
103
105
  icon: personal
@@ -106,31 +108,33 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
106
108
  const handleChange = useCallback((icon: string) => onValueChange(type, icon), [onValueChange, type]);
107
109
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
108
110
  return (
109
- <Settings.Item title={label} description={t('icon.description')}>
111
+ <Form.Row label={label} description={t('icon.description')}>
110
112
  <IconPicker
111
113
  value={getValue()}
112
114
  onChange={handleChange}
113
115
  onReset={handleReset}
114
116
  classNames='justify-self-end'
115
117
  />
116
- </Settings.Item>
118
+ </Form.Row>
117
119
  );
118
120
  },
119
121
  hue: ({ type, label, getValue, onValueChange }) => {
120
122
  const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);
121
123
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
122
124
  return (
123
- <Settings.Item title={label} description={t('hue.description')}>
125
+ <Form.Row label={label} description={t('hue.description')}>
124
126
  <HuePicker value={getValue()} onChange={handleChange} onReset={handleReset} classNames='justify-self-end' />
125
- </Settings.Item>
127
+ </Form.Row>
126
128
  );
127
129
  },
128
130
  edgeReplication: ({ type, label, getValue, onValueChange }) => {
129
131
  const handleChange = useCallback((checked: boolean) => onValueChange(type, checked), [onValueChange, type]);
130
132
  return (
131
- <Settings.Item title={label} description={t('edge-replication.description')}>
132
- <Input.Switch checked={getValue()} onCheckedChange={handleChange} classNames='justify-self-end' />
133
- </Settings.Item>
133
+ <Form.Row label={label} description={t('edge-replication.description')}>
134
+ <Input.Root>
135
+ <Input.Switch checked={getValue()} onCheckedChange={handleChange} classNames='justify-self-end' />
136
+ </Input.Root>
137
+ </Form.Row>
134
138
  );
135
139
  },
136
140
  }),
@@ -146,7 +150,7 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
146
150
 
147
151
  const repairs = useCapabilities(SpaceCapabilities.Repair);
148
152
  const handleRepair = useCallback(async () => {
149
- await Promise.all(repairs.map((repair) => repair({ space, isDefault: isPersonalSpace(space) })));
153
+ await Promise.all(repairs.map((repair) => repair({ space, isDefault: AppSpace.isPersonalSpace(space) })));
150
154
  }, [space, repairs]);
151
155
 
152
156
  const [deleteConfirmOpen, setDeleteConfirmOpen] = useState(false);
@@ -155,9 +159,9 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
155
159
  try {
156
160
  await invokePromise(SpaceOperation.Delete, { space });
157
161
  setDeleteConfirmOpen(false);
158
- const personalSpace = getPersonalSpace(client);
162
+ const personalSpace = AppSpace.getPersonalSpace(client);
159
163
  if (personalSpace) {
160
- void invokePromise(LayoutOperation.SwitchWorkspace, { subject: getSpacePath(personalSpace.id) });
164
+ void invokePromise(LayoutOperation.SwitchWorkspace, { subject: Paths.getSpacePath(personalSpace.id) });
161
165
  }
162
166
  } catch (err) {
163
167
  log.catch(err, { stage: 'delete: invocation rejected', spaceId: space.id });
@@ -171,97 +175,102 @@ export const SpaceSettingsContainer = ({ space }: AppSurface.SpaceArticleProps)
171
175
  }, [space, client, invokePromise, t]);
172
176
 
173
177
  return (
174
- <Settings.Viewport>
175
- <Settings.Section
176
- title={t('space-properties-settings-verbose.label')}
177
- description={t('space-properties-settings.description', { ns: meta.id })}
178
- >
179
- <Form.Root
180
- key={space.id}
181
- fieldMap={fieldMap}
182
- schema={SpaceFormSchema}
183
- defaultValues={defaultValues}
184
- onValuesChanged={handleValuesChanged}
185
- >
186
- <Form.FieldSet />
187
- </Form.Root>
188
- </Settings.Section>
178
+ <Form.Root
179
+ variant='settings'
180
+ key={space.id}
181
+ fieldMap={fieldMap}
182
+ schema={SpaceFormSchema}
183
+ defaultValues={defaultValues}
184
+ onValuesChanged={handleValuesChanged}
185
+ >
186
+ <Form.Viewport scroll>
187
+ <Form.Content>
188
+ <Form.Section
189
+ title={t('space-properties-settings-verbose.label')}
190
+ description={t('space-properties-settings.description', { ns: meta.profile.key })}
191
+ >
192
+ <Form.FieldSet />
193
+ </Form.Section>
189
194
 
190
- <Settings.Section title={t('space-controls.title')} description={t('space-controls.description')}>
191
- <Settings.Item title={t('space-key.title')} description={t('space-key.description')}>
192
- <div className='flex items-center gap-2'>
193
- <Input.Root>
194
- <Input.TextInput value={space.key.toHex()} disabled classNames='flex-1 font-mono text-xs' />
195
- </Input.Root>
196
- <IconButton
197
- icon='ph--copy--regular'
198
- iconOnly
199
- label={t('copy-space-key.label')}
200
- onClick={() => {
201
- void navigator.clipboard.writeText(space.key.toHex());
202
- }}
203
- />
204
- </div>
205
- </Settings.Item>
206
- <Settings.Item title={t('backup-space.title')} description={t('backup-space.description')}>
207
- <DropdownMenu.Root>
208
- <DropdownMenu.Trigger asChild>
209
- <Button>
210
- {t('download-backup.label')}
211
- <Icon icon='ph--caret-down--regular' size={4} classNames='mis-2' />
212
- </Button>
213
- </DropdownMenu.Trigger>
214
- <DropdownMenu.Content>
215
- <DropdownMenu.Viewport>
216
- <DropdownMenu.Item onClick={handleBackupBinary}>{t('download-backup-binary.label')}</DropdownMenu.Item>
217
- <DropdownMenu.Item onClick={handleBackupJson}>{t('download-backup-json.label')}</DropdownMenu.Item>
218
- </DropdownMenu.Viewport>
219
- </DropdownMenu.Content>
220
- </DropdownMenu.Root>
221
- </Settings.Item>
222
- <Settings.Item title={t('repair-space.title')} description={t('repair-space.description')}>
223
- <Button onClick={handleRepair}>{t('repair-space.label')}</Button>
224
- </Settings.Item>
225
- </Settings.Section>
195
+ <Form.Section title={t('space-controls.title')} description={t('space-controls.description')}>
196
+ <Form.Row label={t('space-id.title')} description={t('space-id.description')}>
197
+ <div className='flex items-center gap-2'>
198
+ <Input.Root>
199
+ <Input.TextInput value={space.id} disabled classNames='flex-1 font-mono text-xs' />
200
+ </Input.Root>
201
+ <IconButton
202
+ icon='ph--copy--regular'
203
+ iconOnly
204
+ label={t('copy-space-id.label')}
205
+ onClick={() => {
206
+ void navigator.clipboard.writeText(space.id);
207
+ }}
208
+ />
209
+ </div>
210
+ </Form.Row>
211
+ <Form.Row label={t('backup-space.title')} description={t('backup-space.description')}>
212
+ <DropdownMenu.Root>
213
+ <DropdownMenu.Trigger asChild>
214
+ <Button>
215
+ {t('download-backup.label')}
216
+ <Icon icon='ph--caret-down--regular' size={4} classNames='mis-2' />
217
+ </Button>
218
+ </DropdownMenu.Trigger>
219
+ <DropdownMenu.Content>
220
+ <DropdownMenu.Viewport>
221
+ <DropdownMenu.Item onClick={handleBackupBinary}>
222
+ {t('download-backup-binary.label')}
223
+ </DropdownMenu.Item>
224
+ <DropdownMenu.Item onClick={handleBackupJson}>{t('download-backup-json.label')}</DropdownMenu.Item>
225
+ </DropdownMenu.Viewport>
226
+ </DropdownMenu.Content>
227
+ </DropdownMenu.Root>
228
+ </Form.Row>
229
+ <Form.Row label={t('repair-space.title')} description={t('repair-space.description')}>
230
+ <Button onClick={handleRepair}>{t('repair-space.label')}</Button>
231
+ </Form.Row>
232
+ </Form.Section>
226
233
 
227
- <Settings.Section title={t('danger-zone.title')} description={t('danger-zone.description')}>
228
- {!personal && (
229
- <Settings.Item title={t('delete-space.title')} description={t('delete-space.description')}>
230
- <Dialog.Root open={deleteConfirmOpen} onOpenChange={setDeleteConfirmOpen}>
231
- <Dialog.Trigger asChild>
232
- <Button variant='destructive' data-testid='spaceSettings.deleteSpace'>
233
- {t('delete-space.label')}
234
- </Button>
235
- </Dialog.Trigger>
236
- <Dialog.Portal>
237
- <Dialog.Overlay>
238
- <Dialog.Content>
239
- <Dialog.Header>
240
- <Dialog.Title>{t('delete-space-confirm.title')}</Dialog.Title>
241
- </Dialog.Header>
242
- <Dialog.Body>
243
- <Dialog.Description>{t('delete-space-confirm.description')}</Dialog.Description>
244
- <div className='flex justify-end gap-2 mbs-4'>
245
- <Dialog.Close asChild>
246
- <Button>{t('cancel.label')}</Button>
247
- </Dialog.Close>
248
- <Button
249
- variant='destructive'
250
- onClick={handleDelete}
251
- data-testid='spaceSettings.deleteSpaceConfirm'
252
- >
253
- {t('delete-space.label')}
254
- </Button>
255
- </div>
256
- </Dialog.Body>
257
- </Dialog.Content>
258
- </Dialog.Overlay>
259
- </Dialog.Portal>
260
- </Dialog.Root>
261
- </Settings.Item>
262
- )}
263
- </Settings.Section>
264
- </Settings.Viewport>
234
+ {!personal && (
235
+ <Form.Section title={t('danger-zone.title')} description={t('danger-zone.description')}>
236
+ <Form.Row label={t('delete-space.title')} description={t('delete-space.description')}>
237
+ <Dialog.Root open={deleteConfirmOpen} onOpenChange={setDeleteConfirmOpen}>
238
+ <Dialog.Trigger asChild>
239
+ <Button variant='destructive' data-testid='spaceSettings.deleteSpace'>
240
+ {t('delete-space.label')}
241
+ </Button>
242
+ </Dialog.Trigger>
243
+ <Dialog.Portal>
244
+ <Dialog.Overlay>
245
+ <Dialog.Content>
246
+ <Dialog.Header>
247
+ <Dialog.Title>{t('delete-space-confirm.title')}</Dialog.Title>
248
+ </Dialog.Header>
249
+ <Dialog.Body>
250
+ <Dialog.Description>{t('delete-space-confirm.description')}</Dialog.Description>
251
+ <div className='flex justify-end gap-2 mbs-4'>
252
+ <Dialog.Close asChild>
253
+ <Button>{t('cancel.label')}</Button>
254
+ </Dialog.Close>
255
+ <Button
256
+ variant='destructive'
257
+ onClick={handleDelete}
258
+ data-testid='spaceSettings.deleteSpaceConfirm'
259
+ >
260
+ {t('delete-space.label')}
261
+ </Button>
262
+ </div>
263
+ </Dialog.Body>
264
+ </Dialog.Content>
265
+ </Dialog.Overlay>
266
+ </Dialog.Portal>
267
+ </Dialog.Root>
268
+ </Form.Row>
269
+ </Form.Section>
270
+ )}
271
+ </Form.Content>
272
+ </Form.Viewport>
273
+ </Form.Root>
265
274
  );
266
275
  };
267
276
 
@@ -30,7 +30,7 @@ export const SyncStatus = () => {
30
30
  };
31
31
 
32
32
  export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: boolean }) => {
33
- const { t } = useTranslation(meta.id);
33
+ const { t } = useTranslation(meta.profile.key);
34
34
  const summary = getSyncSummary(state);
35
35
  const offline = Object.values(state).length === 0;
36
36
  const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
@@ -79,7 +79,7 @@ export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap
79
79
  };
80
80
 
81
81
  const EdgeConnectionPopover = () => {
82
- const { t } = useTranslation(meta.id);
82
+ const { t } = useTranslation(meta.profile.key);
83
83
  const client = useClient();
84
84
  const { status } = useStream(
85
85
  () => client.services.services.EdgeAgentService!.queryEdgeStatus(),