@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
@@ -7,7 +7,7 @@ import React, { type Dispatch, type SetStateAction, useMemo, useState } from 're
7
7
  import { QR } from 'react-qr-rounded';
8
8
 
9
9
  import { useOperationInvoker } from '@dxos/app-framework/ui';
10
- import { RootCollectionAnnotation } from '@dxos/app-toolkit';
10
+ import { AppAnnotation } from '@dxos/app-toolkit';
11
11
  import { AppSurface } from '@dxos/app-toolkit/ui';
12
12
  import { Annotation, Obj } from '@dxos/echo';
13
13
  import { log } from '@dxos/log';
@@ -15,7 +15,7 @@ import { useConfig } from '@dxos/react-client';
15
15
  import { useSpaceInvitations } from '@dxos/react-client/echo';
16
16
  import { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
17
17
  import { Button, Clipboard, Icon, useId, useTranslation } from '@dxos/react-ui';
18
- import { Settings } from '@dxos/react-ui-form';
18
+ import { Form } from '@dxos/react-ui-form';
19
19
  import {
20
20
  type ActionMenuItem,
21
21
  AuthCode,
@@ -48,7 +48,7 @@ export type MembersContainerProps = AppSurface.SpaceArticleProps<{
48
48
  }>;
49
49
 
50
50
  export const MembersContainer = ({ space, createInvitationUrl }: MembersContainerProps) => {
51
- const { t } = useTranslation(meta.id);
51
+ const { t } = useTranslation(meta.profile.key);
52
52
  const config = useConfig();
53
53
  const { invokePromise } = useOperationInvoker();
54
54
  const invitations = useSpaceInvitations(space.key);
@@ -64,8 +64,8 @@ export const MembersContainer = ({ space, createInvitationUrl }: MembersContaine
64
64
  };
65
65
 
66
66
  // TODO(wittjosiah): Track which was the most recently viewed object.
67
- const target = Annotation.get(space.properties, RootCollectionAnnotation).pipe(Option.getOrUndefined)?.target
68
- ?.objects[0]?.target;
67
+ const target = Annotation.get(space.properties, AppAnnotation.RootCollectionAnnotation).pipe(Option.getOrUndefined)
68
+ ?.target?.objects[0]?.target;
69
69
 
70
70
  const inviteActions = useMemo(
71
71
  (): Record<string, ActionMenuItem> => ({
@@ -123,38 +123,42 @@ export const MembersContainer = ({ space, createInvitationUrl }: MembersContaine
123
123
 
124
124
  return (
125
125
  <Clipboard.Provider>
126
- <Settings.Viewport>
127
- <Settings.Section title={t('members-verbose.label')} description={t('members.description')}>
128
- <Settings.Panel>
129
- <div role='group' className='min-w-0'>
130
- <h3 className='text-lg mb-2'>{t('members.label')}</h3>
131
- <SpaceMemberList spaceKey={space.key} includeSelf />
132
- </div>
133
- <div role='group' className='min-w-0'>
134
- <h3 className='text-lg mb-2'>{t('invitations.label')}</h3>
135
- {selectedInvitation && <InvitationSection {...selectedInvitation} onBack={handleBack} />}
136
- {!selectedInvitation && (
137
- <>
138
- <p className='text-description mb-2'>{t('space-invitation.description')}</p>
139
- <InvitationList
140
- className='mb-2'
141
- send={handleSend}
142
- invitations={visibleInvitations ?? []}
143
- onClickRemove={(invitation) => invitation.cancel()}
144
- createInvitationUrl={createInvitationUrl}
145
- />
146
- <BifurcatedAction
147
- actions={inviteActions}
148
- activeAction={activeAction}
149
- onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}
150
- data-testid='membersContainer.createInvitation'
151
- />
152
- </>
153
- )}
154
- </div>
155
- </Settings.Panel>
156
- </Settings.Section>
157
- </Settings.Viewport>
126
+ <Form.Root variant='settings'>
127
+ <Form.Viewport scroll>
128
+ <Form.Content>
129
+ <Form.Section title={t('members-verbose.label')} description={t('members.description')}>
130
+ <Form.Group>
131
+ <div role='group' className='min-w-0'>
132
+ <h3 className='text-lg mb-2'>{t('members.label')}</h3>
133
+ <SpaceMemberList spaceKey={space.key} includeSelf />
134
+ </div>
135
+ <div role='group' className='min-w-0'>
136
+ <h3 className='text-lg mb-2'>{t('invitations.label')}</h3>
137
+ {selectedInvitation && <InvitationSection {...selectedInvitation} onBack={handleBack} />}
138
+ {!selectedInvitation && (
139
+ <>
140
+ <p className='text-description mb-2'>{t('space-invitation.description')}</p>
141
+ <InvitationList
142
+ className='mb-2'
143
+ send={handleSend}
144
+ invitations={visibleInvitations ?? []}
145
+ onClickRemove={(invitation) => invitation.cancel()}
146
+ createInvitationUrl={createInvitationUrl}
147
+ />
148
+ <BifurcatedAction
149
+ actions={inviteActions}
150
+ activeAction={activeAction}
151
+ onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}
152
+ data-testid='membersContainer.createInvitation'
153
+ />
154
+ </>
155
+ )}
156
+ </div>
157
+ </Form.Group>
158
+ </Form.Section>
159
+ </Form.Content>
160
+ </Form.Viewport>
161
+ </Form.Root>
158
162
  </Clipboard.Provider>
159
163
  );
160
164
  };
@@ -210,7 +214,7 @@ const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel
210
214
  const emoji = hexToEmoji(id);
211
215
  return (
212
216
  <>
213
- <p className='text-description'>{t('qr-code.description', { ns: meta.id })}</p>
217
+ <p className='text-description'>{t('qr-code.description', { ns: meta.profile.key })}</p>
214
218
  <div role='group' className='grid grid-cols-[1fr_min-content] my-2 gap-2'>
215
219
  <div className='w-full aspect-square relative text-description'>
216
220
  <QR
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { isPersonalSpace } from '@dxos/app-toolkit';
7
+ import { AppSpace } from '@dxos/app-toolkit';
8
8
  import { getSpace } from '@dxos/client/echo';
9
9
  import { type Obj } from '@dxos/echo';
10
10
  import { DropdownMenu, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
@@ -14,9 +14,9 @@ import { meta } from '#meta';
14
14
  import { getSpaceDisplayName } from '../../util';
15
15
 
16
16
  export const MenuFooter = ({ object }: { object: Obj.Unknown }) => {
17
- const { t } = useTranslation(meta.id);
17
+ const { t } = useTranslation(meta.profile.key);
18
18
  const space = getSpace(object);
19
- const spaceName = space ? getSpaceDisplayName(space, { personal: isPersonalSpace(space) }) : '';
19
+ const spaceName = space ? getSpaceDisplayName(space, { personal: AppSpace.isPersonalSpace(space) }) : '';
20
20
  return space ? (
21
21
  <>
22
22
  <DropdownMenu.Separator />
@@ -7,7 +7,7 @@ import React, { forwardRef, useState } from 'react';
7
7
  import { Filter, Obj, type View } from '@dxos/echo';
8
8
  import { useQuery, useType } from '@dxos/react-client/echo';
9
9
  import { Card, Message, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
10
- import { useSelected } from '@dxos/react-ui-attention';
10
+ import { useSelection } from '@dxos/react-ui-attention';
11
11
  import { ObjectForm } from '@dxos/react-ui-form';
12
12
  import { Mosaic } from '@dxos/react-ui-mosaic';
13
13
  import { getTypeURIFromQuery } from '@dxos/schema';
@@ -24,13 +24,13 @@ export type ObjectCardStackProps = {
24
24
  * @deprecated Use Mosaic Board components.
25
25
  */
26
26
  export const ObjectCardStack = forwardRef<HTMLDivElement, ObjectCardStackProps>(({ objectId, view }, forwardedRef) => {
27
- const { t } = useTranslation(meta.id);
27
+ const { t } = useTranslation(meta.profile.key);
28
28
  const db = Obj.getDatabase(view);
29
29
  const typeUri = view.query ? getTypeURIFromQuery(view.query.ast) : undefined;
30
30
  const type = useType(db, typeUri);
31
31
 
32
32
  const queriedObjects = useQuery(db, type ? Filter.type(type) : Filter.nothing());
33
- const selectedRows = useSelected(objectId, 'multi');
33
+ const selectedRows = useSelection(objectId, 'multi');
34
34
  const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);
35
35
 
36
36
  const [viewport, setViewport] = useState<HTMLElement | null>(null);
@@ -2,17 +2,22 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React from 'react';
5
+ import React, { useMemo } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
- import { AppSurface } from '@dxos/app-toolkit/ui';
9
- import { Obj, Type } from '@dxos/echo';
10
- import { Card, Input, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
8
+ import { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';
9
+ import { Entity, Obj, Type } from '@dxos/echo';
10
+ import { Card, Icon, IconButton, Input, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
11
+ import { Masonry } from '@dxos/react-ui-masonry';
12
+ import { Menu } from '@dxos/react-ui-menu';
13
+ import { mx } from '@dxos/ui-theme';
11
14
 
15
+ import { useRelatedObjects } from '#hooks';
12
16
  import { meta } from '#meta';
17
+ import { Prompts } from '#types';
13
18
 
14
19
  export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps) => {
15
- const { t } = useTranslation(meta.id);
20
+ const { t } = useTranslation(meta.profile.key);
16
21
  // Obj.getType fails for database-registered (dynamic) schemas due to DXN mismatch;
17
22
  // fall back to typename query which matches TypeSchema.typename.
18
23
  const db = Obj.getDatabase(subject);
@@ -30,6 +35,9 @@ export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps)
30
35
  ? 'ph--cube--regular'
31
36
  : (Obj.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular');
32
37
 
38
+ const related = useRelatedObjects(db, subject, { references: true, relations: true });
39
+ const singleColumn = related.length === 1;
40
+
33
41
  return (
34
42
  <Panel.Root role={role}>
35
43
  <Panel.Toolbar asChild>
@@ -40,11 +48,13 @@ export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps)
40
48
  <ScrollArea.Viewport classNames='p-4 space-y-4'>
41
49
  <Card.Root classNames='dx-card-max-width'>
42
50
  <Card.Header>
43
- <Card.Icon icon={icon} />
51
+ <Card.Block>
52
+ <Icon icon={icon} />
53
+ </Card.Block>
44
54
  <Card.Title>{Obj.getLabel(subject, { fallback: 'typename' })}</Card.Title>
45
55
  </Card.Header>
46
56
  <Card.Body>
47
- <Surface.Surface type={AppSurface.Card} data={{ subject }} limit={1} />
57
+ <Surface.Surface type={AppSurface.CardContent} data={{ subject }} limit={1} />
48
58
  </Card.Body>
49
59
  </Card.Root>
50
60
 
@@ -53,11 +63,60 @@ export const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps)
53
63
  <Input.Root>
54
64
  <Input.Label>{t('related-actions.label')}</Input.Label>
55
65
  </Input.Root>
56
- <Surface.Surface role='prompts' data={{ subject }} limit={1} />
66
+ <Surface.Surface type={Prompts} data={{ subject, attendableId: subject.id }} limit={1} />
57
67
  </div>
68
+
69
+ {related.length > 0 && (
70
+ <div
71
+ className={mx('dx-expander flex flex-col gap-form-gap', singleColumn ? 'dx-card-max-width' : 'w-full')}
72
+ >
73
+ <Input.Root>
74
+ <Input.Label>{t('related-objects.label')}</Input.Label>
75
+ </Input.Root>
76
+ <Masonry.Root Tile={ObjectCard} columns={singleColumn ? 1 : undefined}>
77
+ <Masonry.Content>
78
+ <Masonry.Viewport items={related} />
79
+ </Masonry.Content>
80
+ </Masonry.Root>
81
+ </div>
82
+ )}
58
83
  </ScrollArea.Viewport>
59
84
  </ScrollArea.Root>
60
85
  </Panel.Content>
61
86
  </Panel.Root>
62
87
  );
63
88
  };
89
+
90
+ const ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; classNames?: string }) => {
91
+ const { t } = useTranslation(meta.profile.key);
92
+ const data = useMemo(() => ({ subject }), [subject]);
93
+ const icon = Entity.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular';
94
+ const menuItems = useObjectMenuItems(subject);
95
+
96
+ return (
97
+ <Menu.Root>
98
+ <Card.Root classNames={classNames}>
99
+ <Card.Header>
100
+ <Card.Block>
101
+ <Icon icon={icon} />
102
+ </Card.Block>
103
+ <Card.Title>{Entity.getLabel(subject, { fallback: 'typename' })}</Card.Title>
104
+ <Card.Block end>
105
+ <Menu.Trigger asChild disabled={!menuItems?.length}>
106
+ <IconButton
107
+ iconOnly
108
+ variant='ghost'
109
+ icon='ph--dots-three-vertical--regular'
110
+ label={t('more-actions.label')}
111
+ />
112
+ </Menu.Trigger>
113
+ <Menu.Content items={menuItems} />
114
+ </Card.Block>
115
+ </Card.Header>
116
+ <Card.Body>
117
+ <Surface.Surface type={AppSurface.CardContent} data={data} limit={1} />
118
+ </Card.Body>
119
+ </Card.Root>
120
+ </Menu.Root>
121
+ );
122
+ };
@@ -7,14 +7,13 @@ import React, { useMemo } from 'react';
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
8
  import { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';
9
9
  import { Entity, Obj } from '@dxos/echo';
10
- import { Card, Panel, Toolbar, useTranslation } from '@dxos/react-ui';
10
+ import { Card, Icon, IconButton, Panel, Toolbar, useTranslation } from '@dxos/react-ui';
11
11
  import { Masonry } from '@dxos/react-ui-masonry';
12
12
  import { Menu } from '@dxos/react-ui-menu';
13
13
 
14
14
  import { useRelatedObjects } from '#hooks';
15
15
  import { meta } from '#meta';
16
16
 
17
- // TODO(burdon): Companion type.
18
17
  export type RelatedArticleProps = Pick<
19
18
  AppSurface.ObjectArticleProps<Obj.Unknown, {}, Obj.Unknown>,
20
19
  'role' | 'companionTo'
@@ -31,7 +30,7 @@ export const RelatedArticle = ({ role, companionTo }: RelatedArticleProps) => {
31
30
  <Toolbar.Root />
32
31
  </Panel.Toolbar>
33
32
  <Panel.Content asChild>
34
- <Masonry.Content classNames='p-2' centered>
33
+ <Masonry.Content centered>
35
34
  <Masonry.Viewport items={items} />
36
35
  </Masonry.Content>
37
36
  </Panel.Content>
@@ -42,7 +41,7 @@ export const RelatedArticle = ({ role, companionTo }: RelatedArticleProps) => {
42
41
 
43
42
  /** Masonry tile renderer for a related entity. */
44
43
  const ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; classNames?: string }) => {
45
- const { t } = useTranslation(meta.id);
44
+ const { t } = useTranslation(meta.profile.key);
46
45
  const data = useMemo(() => ({ subject }), [subject]);
47
46
  const icon = Entity.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular';
48
47
 
@@ -53,20 +52,24 @@ const ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; class
53
52
  <Menu.Root>
54
53
  <Card.Root classNames={classNames}>
55
54
  <Card.Header>
56
- <Card.Icon icon={icon} />
55
+ <Card.Block>
56
+ <Icon icon={icon} />
57
+ </Card.Block>
57
58
  <Card.Title>{Entity.getLabel(subject, { fallback: 'typename' })}</Card.Title>
58
- <Menu.Trigger asChild disabled={!menuItems?.length}>
59
- <Toolbar.IconButton
60
- iconOnly
61
- variant='ghost'
62
- icon='ph--dots-three-vertical--regular'
63
- label={t('more-actions.label')}
64
- />
65
- </Menu.Trigger>
66
- <Menu.Content items={menuItems} />
59
+ <Card.Block end>
60
+ <Menu.Trigger asChild disabled={!menuItems?.length}>
61
+ <IconButton
62
+ iconOnly
63
+ variant='ghost'
64
+ icon='ph--dots-three-vertical--regular'
65
+ label={t('more-actions.label')}
66
+ />
67
+ </Menu.Trigger>
68
+ <Menu.Content items={menuItems} />
69
+ </Card.Block>
67
70
  </Card.Header>
68
71
  <Card.Body>
69
- <Surface.Surface type={AppSurface.Card} data={data} limit={1} />
72
+ <Surface.Surface type={AppSurface.CardContent} data={data} limit={1} />
70
73
  </Card.Body>
71
74
  </Card.Root>
72
75
  </Menu.Root>
@@ -0,0 +1,125 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
6
+
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
9
+ import { Entity, Obj } from '@dxos/echo';
10
+ import { log } from '@dxos/log';
11
+ import { type Space, isSpace } from '@dxos/react-client/echo';
12
+ import { Input, useTranslation } from '@dxos/react-ui';
13
+
14
+ import { meta } from '#meta';
15
+
16
+ export type RenameCallback = { initialValue: string; onRename: (name: string) => void };
17
+ export type RenameSubject = Space | Entity.Unknown | RenameCallback;
18
+
19
+ const isRenameCallback = (subject: RenameSubject): subject is RenameCallback =>
20
+ typeof (subject as RenameCallback).onRename === 'function';
21
+
22
+ const getName = (subject: RenameSubject): string => {
23
+ if (isRenameCallback(subject)) {
24
+ return subject.initialValue;
25
+ }
26
+ return (isSpace(subject) ? subject.properties.name : Entity.getLabel(subject)) ?? '';
27
+ };
28
+
29
+ const setName = (subject: RenameSubject, name: string): void => {
30
+ if (isRenameCallback(subject)) {
31
+ subject.onRename(name);
32
+ } else if (isSpace(subject)) {
33
+ Obj.update(subject.properties, (properties) => {
34
+ properties.name = name;
35
+ });
36
+ } else {
37
+ Entity.update(subject, () => Entity.setLabel(subject, name));
38
+ }
39
+ };
40
+
41
+ export type RenamePopoverProps = { subject: RenameSubject };
42
+
43
+ // TODO(wittjosiah): Move RenamePopover, RenameSubject, RenameCallback, and RENAME_POPOVER to @dxos/app-toolkit
44
+ // so any plugin can use the rename popover without depending on plugin-space.
45
+
46
+ /**
47
+ * Inline rename popover anchored to a navtree row. Commits on Enter or when dismissed; Escape cancels.
48
+ */
49
+ export const RenamePopover = ({ subject }: RenamePopoverProps) => {
50
+ const { t } = useTranslation(meta.profile.key);
51
+ const space = !isRenameCallback(subject) && isSpace(subject);
52
+ const { invokePromise } = useOperationInvoker();
53
+ const [name, setNameState] = useState(() => getName(subject));
54
+
55
+ // Commit the latest value when the popover is dismissed (Enter, click-outside, or blur), unless cancelled.
56
+ const nameRef = useRef(name);
57
+ nameRef.current = name;
58
+ const initialNameRef = useRef(name);
59
+ const cancelledRef = useRef(false);
60
+ // Enter commits then closes, which unmounts and runs the dismissal cleanup; guard against a duplicate write.
61
+ const committedRef = useRef(false);
62
+
63
+ const write = useCallback(() => {
64
+ try {
65
+ if (!cancelledRef.current && nameRef.current !== initialNameRef.current) {
66
+ setName(subject, nameRef.current);
67
+ }
68
+ } catch (err) {
69
+ log.error('Failed to rename', { err });
70
+ }
71
+ }, [subject]);
72
+
73
+ const commit = useCallback(() => {
74
+ if (!committedRef.current) {
75
+ committedRef.current = true;
76
+ write();
77
+ }
78
+ }, [write]);
79
+
80
+ // Commit the latest value on dismissal (click-outside/blur) when the component unmounts, unless Enter
81
+ // already committed or Escape cancelled. This must not set committedRef: under StrictMode the mount-time
82
+ // setup/cleanup/setup cycle runs this cleanup before any interaction, and flipping the guard there would
83
+ // suppress the real Enter commit.
84
+ useEffect(
85
+ () => () => {
86
+ if (!committedRef.current) {
87
+ write();
88
+ }
89
+ },
90
+ [write],
91
+ );
92
+
93
+ const close = useCallback(() => {
94
+ void invokePromise(LayoutOperation.UpdatePopover, { anchorId: '', state: false });
95
+ }, [invokePromise]);
96
+
97
+ return (
98
+ <div className='p-2'>
99
+ <Input.Root>
100
+ <Input.Label srOnly>{t(space ? 'space-name.label' : 'object-name.label')}</Input.Label>
101
+ <Input.TextInput
102
+ autoFocus
103
+ value={name}
104
+ placeholder={t(space ? 'unnamed-space.label' : 'object.placeholder')}
105
+ data-testid='spacePlugin.rename.input'
106
+ onChange={({ target: { value } }) => setNameState(value)}
107
+ onFocus={(event) => event.target.select()}
108
+ onKeyDown={(event) => {
109
+ if (event.key === 'Enter') {
110
+ commit();
111
+ close();
112
+ } else if (event.key === 'Escape') {
113
+ // Own the dismissal so it does not also bubble to the deck popover's escape handler,
114
+ // whose divergent teardown leaves stale state that makes the next open flicker.
115
+ event.preventDefault();
116
+ event.stopPropagation();
117
+ cancelledRef.current = true;
118
+ close();
119
+ }
120
+ }}
121
+ />
122
+ </Input.Root>
123
+ </div>
124
+ );
125
+ };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { RenamePopover as default } from './RenamePopover';
6
+ export type { RenameCallback, RenamePopoverProps, RenameSubject } from './RenamePopover';
@@ -8,32 +8,36 @@ import { AppSurface } from '@dxos/app-toolkit/ui';
8
8
  import { Type } from '@dxos/echo';
9
9
  import { type Space } from '@dxos/react-client/echo';
10
10
  import { useTranslation } from '@dxos/react-ui';
11
- import { Settings } from '@dxos/react-ui-form';
11
+ import { Form } from '@dxos/react-ui-form';
12
12
  import { mx } from '@dxos/ui-theme';
13
13
 
14
14
  import { meta } from '#meta';
15
15
 
16
16
  export const SchemaContainer = ({ space }: AppSurface.SpaceArticleProps) => {
17
- const { t } = useTranslation(meta.id);
17
+ const { t } = useTranslation(meta.profile.key);
18
18
  const types = useQuerySpaceTypes(space);
19
19
 
20
20
  return (
21
- <Settings.Viewport>
22
- <Settings.Section title={t('schema-verbose.label')} description={t('schema.description')}>
23
- <div
24
- className={mx([
25
- 'grid md:col-span-2 grid-cols-subgrid gap-trim-sm items-center',
26
- '*:first:mt-0! *:last:mb-0! px-trim-md py-trim-md',
27
- 'border border-separator rounded-md',
28
- ])}
29
- >
30
- {types.length === 0 && <div className='text-center py-4'>{t('no-schemas-found.message')}</div>}
31
- {types.map((type) => (
32
- <div key={type.id}>{Type.getTypename(type)}</div>
33
- ))}
34
- </div>
35
- </Settings.Section>
36
- </Settings.Viewport>
21
+ <Form.Root variant='settings'>
22
+ <Form.Viewport scroll>
23
+ <Form.Content>
24
+ <Form.Section title={t('schema-verbose.label')} description={t('schema.description')}>
25
+ <div
26
+ className={mx([
27
+ 'grid md:col-span-2 grid-cols-subgrid gap-trim-sm items-center',
28
+ '*:first:mt-0! *:last:mb-0! px-trim-md py-trim-md',
29
+ 'border border-separator rounded-md',
30
+ ])}
31
+ >
32
+ {types.length === 0 && <div className='text-center py-4'>{t('no-schemas-found.message')}</div>}
33
+ {types.map((type) => (
34
+ <div key={type.id}>{Type.getTypename(type)}</div>
35
+ ))}
36
+ </div>
37
+ </Form.Section>
38
+ </Form.Content>
39
+ </Form.Viewport>
40
+ </Form.Root>
37
41
  );
38
42
  };
39
43
 
@@ -0,0 +1,100 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback } from 'react';
6
+
7
+ import { Surface } from '@dxos/app-framework/ui';
8
+ import { type AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';
9
+ import { useActionRunner } from '@dxos/plugin-graph';
10
+ import { Column, Panel, ScrollArea } from '@dxos/react-ui';
11
+ import {
12
+ type ActionExecutor,
13
+ type ActionGraphProps,
14
+ Menu,
15
+ MenuBuilder,
16
+ graphActions,
17
+ useMenuBuilder,
18
+ } from '@dxos/react-ui-menu';
19
+
20
+ import { meta } from '#meta';
21
+ import { SpaceHomeContent, SpaceHomePinBottom } from '#types';
22
+
23
+ export type SpaceHomeArticleProps = AppSurface.SpaceArticleProps;
24
+
25
+ /**
26
+ * Per-space Home article shell. Owns only the chrome: a toolbar sourced from graph actions
27
+ * contributed with `disposition: 'toolbar'` (e.g. Start tour / Hide Welcome from plugin-support),
28
+ * and a Column layout that delegates its body to surface contributors:
29
+ *
30
+ * - `space-home-content`: scrollable region (Welcome panel, recent-objects masonry, starter prompts).
31
+ * - `space-home-pin-bottom`: pinned region (assistant prompt), capped at one contributor.
32
+ *
33
+ * The Space is read from `data.subject` (the Home node carries the Space as its data).
34
+ */
35
+ export const SpaceHomeArticle = ({ role, attendableId, space }: SpaceHomeArticleProps) => {
36
+ const { actions, onAction } = useMenuActions(attendableId);
37
+
38
+ return (
39
+ <Panel.Root role={role}>
40
+ <Menu.Root {...actions} attendableId={attendableId} onAction={onAction}>
41
+ <Panel.Toolbar asChild>
42
+ <Menu.Toolbar />
43
+ </Panel.Toolbar>
44
+ </Menu.Root>
45
+ <Panel.Content asChild>
46
+ <Column.Root style={{ gridTemplateRows: 'minmax(0,1fr) auto' }}>
47
+ <ScrollArea.Root orientation='vertical' centered padding>
48
+ <ScrollArea.Viewport>
49
+ <div className='dx-document flex flex-col gap-4 pb-12'>
50
+ <Surface.Surface type={SpaceHomeContent} data={{ space }} />
51
+ </div>
52
+ </ScrollArea.Viewport>
53
+ </ScrollArea.Root>
54
+ <Column.Center classNames='dx-document pb-4'>
55
+ <Surface.Surface type={SpaceHomePinBottom} data={{ space }} limit={1} />
56
+ </Column.Center>
57
+ </Column.Root>
58
+ </Panel.Content>
59
+ </Panel.Root>
60
+ );
61
+ };
62
+
63
+ //
64
+ // Hooks
65
+ //
66
+
67
+ /**
68
+ * Builds the toolbar from contributed graph actions for the Home node. Actions opt into the
69
+ * toolbar via `disposition: 'toolbar'`; the Home shell contributes none itself, so the toolbar
70
+ * is empty unless another plugin (e.g. plugin-support's tour/welcome actions) contributes.
71
+ */
72
+ const useMenuActions = (
73
+ attendableId?: string,
74
+ ): { actions: ReturnType<typeof useMenuBuilder>; onAction: ActionExecutor } => {
75
+ const { graph } = useAppGraph();
76
+ const runAction = useActionRunner();
77
+
78
+ const menuActions = useMenuBuilder(
79
+ (get): ActionGraphProps => {
80
+ if (!attendableId) {
81
+ return MenuBuilder.make().build();
82
+ }
83
+ return MenuBuilder.make()
84
+ .subgraph(
85
+ graphActions(graph, get, attendableId, { filter: (action) => action.properties.disposition === 'toolbar' }),
86
+ )
87
+ .build();
88
+ },
89
+ [graph, attendableId],
90
+ );
91
+
92
+ const onAction: ActionExecutor = useCallback(
93
+ (action) => {
94
+ void runAction(action, { caller: meta.profile.key });
95
+ },
96
+ [runAction],
97
+ );
98
+
99
+ return { actions: menuActions, onAction };
100
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export { SpaceHomeArticle as default } from './SpaceHomeArticle';