@dxos/plugin-space 0.8.4-staging.60fe92afc8 → 0.9.1-main.c7dcc2e112

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 (368) 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-4VMOUKM7.mjs} +10 -10
  6. package/dist/lib/neutral/CreateObjectDialog-4VMOUKM7.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/{ImportSpaceDialog-7GKV4OTF.mjs → ImportSpaceDialog-CSSRTFAO.mjs} +4 -4
  10. package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs.map +7 -0
  11. package/dist/lib/neutral/{InlineSyncStatus-TBJKZCH7.mjs → InlineSyncStatus-UOUTAPCU.mjs} +4 -4
  12. package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs.map +7 -0
  13. package/dist/lib/neutral/{JoinDialog-SSFKRFTJ.mjs → JoinDialog-QZGNRJ4P.mjs} +16 -9
  14. package/dist/lib/neutral/JoinDialog-QZGNRJ4P.mjs.map +7 -0
  15. package/dist/lib/neutral/{MembersContainer-KMCQDWCS.mjs → MembersContainer-OWCAMBKS.mjs} +5 -5
  16. package/dist/lib/neutral/MembersContainer-OWCAMBKS.mjs.map +7 -0
  17. package/dist/lib/neutral/{MenuFooter-5JT7V5FZ.mjs → MenuFooter-QCNFUIAO.mjs} +6 -6
  18. package/dist/lib/neutral/MenuFooter-QCNFUIAO.mjs.map +7 -0
  19. package/dist/lib/neutral/{ObjectCardStack-IXNU3HEN.mjs → ObjectCardStack-DHVDRNRK.mjs} +4 -4
  20. package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs.map +7 -0
  21. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs +102 -0
  22. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs.map +7 -0
  23. package/dist/lib/neutral/{RelatedArticle-YDNGUDAJ.mjs → RelatedArticle-YRCRBIYU.mjs} +11 -9
  24. package/dist/lib/neutral/RelatedArticle-YRCRBIYU.mjs.map +7 -0
  25. package/dist/lib/neutral/RenamePopover-XBZAKNM7.mjs +96 -0
  26. package/dist/lib/neutral/RenamePopover-XBZAKNM7.mjs.map +7 -0
  27. package/dist/lib/neutral/{SchemaContainer-Q4BP6X2M.mjs → SchemaContainer-2NK5YB5O.mjs} +2 -2
  28. package/dist/lib/neutral/SchemaContainer-2NK5YB5O.mjs.map +7 -0
  29. package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs → SmallPresenceLive-L4H7WJOA.mjs} +2 -2
  30. package/dist/lib/neutral/SpaceHomeArticle-ZV7EERLS.mjs +78 -0
  31. package/dist/lib/neutral/SpaceHomeArticle-ZV7EERLS.mjs.map +7 -0
  32. package/dist/lib/neutral/SpaceHomeRecent-ZR4LIIUD.mjs +83 -0
  33. package/dist/lib/neutral/SpaceHomeRecent-ZR4LIIUD.mjs.map +7 -0
  34. package/dist/lib/neutral/SpacePlugin.mjs +1 -1
  35. package/dist/lib/neutral/SpacePlugin.node.mjs +4 -4
  36. package/dist/lib/neutral/SpacePlugin.node.mjs.map +3 -3
  37. package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs → SpacePresence-PDTEDHDE.mjs} +2 -2
  38. package/dist/lib/neutral/{SpaceSettings-YAHBOY5T.mjs → SpaceSettings-IVTCSLNT.mjs} +6 -6
  39. package/dist/lib/neutral/SpaceSettings-IVTCSLNT.mjs.map +7 -0
  40. package/dist/lib/neutral/{SpaceSettingsContainer-IB34TEOB.mjs → SpaceSettingsContainer-QAFQ4LWC.mjs} +8 -8
  41. package/dist/lib/neutral/SpaceSettingsContainer-QAFQ4LWC.mjs.map +7 -0
  42. package/dist/lib/neutral/{SyncStatus-CWOXWDDZ.mjs → SyncStatus-J7CHLO5O.mjs} +3 -3
  43. package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs.map +7 -0
  44. package/dist/lib/neutral/{add-object-QYOMCBJA.mjs → add-object-S64XELC3.mjs} +10 -10
  45. package/dist/lib/neutral/add-object-S64XELC3.mjs.map +7 -0
  46. package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs → add-relation-GWSE42BU.mjs} +3 -3
  47. package/dist/lib/neutral/{add-type-CZVKSEIW.mjs → add-type-C3KYE6PI.mjs} +3 -3
  48. package/dist/lib/neutral/{app-graph-builder-SQGCUCDO.mjs → app-graph-builder-TMAD2ZTH.mjs} +128 -71
  49. package/dist/lib/neutral/app-graph-builder-TMAD2ZTH.mjs.map +7 -0
  50. package/dist/lib/neutral/capabilities/index.mjs +13 -15
  51. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  52. package/dist/lib/neutral/capabilities/node.mjs +2 -2
  53. package/dist/lib/neutral/{chunk-EEXRKYOD.mjs → chunk-2LTGSUGQ.mjs} +2 -2
  54. package/dist/lib/neutral/{chunk-EEXRKYOD.mjs.map → chunk-2LTGSUGQ.mjs.map} +2 -2
  55. package/dist/lib/neutral/chunk-2RPQHHD7.mjs +17 -0
  56. package/dist/lib/neutral/chunk-2RPQHHD7.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-5ZZS3KMK.mjs +46 -0
  58. package/dist/lib/neutral/chunk-5ZZS3KMK.mjs.map +7 -0
  59. package/dist/lib/neutral/{chunk-K34BPPQE.mjs → chunk-DSYEB2UN.mjs} +29 -17
  60. package/dist/lib/neutral/chunk-DSYEB2UN.mjs.map +7 -0
  61. package/dist/lib/neutral/{chunk-YY62663T.mjs → chunk-F2VJ6VBV.mjs} +3 -3
  62. package/dist/lib/neutral/chunk-F2VJ6VBV.mjs.map +7 -0
  63. package/dist/lib/neutral/{chunk-JHZGRYGS.mjs → chunk-G2KHP7FX.mjs} +2 -2
  64. package/dist/lib/neutral/{chunk-JHZGRYGS.mjs.map → chunk-G2KHP7FX.mjs.map} +2 -2
  65. package/dist/lib/neutral/chunk-I5JXVBXX.mjs +8 -0
  66. package/dist/lib/neutral/{chunk-BBQR23DW.mjs → chunk-LY6XK5MV.mjs} +105 -128
  67. package/dist/lib/neutral/chunk-LY6XK5MV.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-7WUJENBF.mjs → chunk-PSCIOT7Q.mjs} +4 -4
  69. package/dist/lib/neutral/chunk-PSCIOT7Q.mjs.map +7 -0
  70. package/dist/lib/neutral/{close-FGQN37PK.mjs → close-YZHFYPUN.mjs} +3 -3
  71. package/dist/lib/neutral/components/index.mjs +7 -7
  72. package/dist/lib/neutral/components/index.mjs.map +3 -3
  73. package/dist/lib/neutral/containers/index.mjs +23 -21
  74. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  75. package/dist/lib/neutral/{create-EPIFSRJA.mjs → create-XKU2W6QC.mjs} +6 -6
  76. package/dist/lib/neutral/create-XKU2W6QC.mjs.map +7 -0
  77. package/dist/lib/neutral/{delete-LIA5M3WI.mjs → delete-EFM7CAVO.mjs} +3 -3
  78. package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs → delete-field-ONAPFFO5.mjs} +3 -3
  79. package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs → duplicate-object-OJRPFV5I.mjs} +3 -3
  80. package/dist/lib/neutral/{export-space-VWJHVXWF.mjs → export-space-M5RNVUQX.mjs} +3 -3
  81. package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs → get-share-link-FUQBJPSQ.mjs} +4 -4
  82. package/dist/lib/neutral/hooks/index.mjs +16 -4
  83. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  84. package/dist/lib/neutral/{identity-created-57RML5XT.mjs → identity-created-QMV4DANW.mjs} +4 -4
  85. package/dist/lib/neutral/identity-created-QMV4DANW.mjs.map +7 -0
  86. package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs → import-space-L3AUIARM.mjs} +3 -3
  87. package/dist/lib/neutral/index.mjs +12 -6
  88. package/dist/lib/neutral/{join-Z5K4OAIG.mjs → join-VY3QYBU7.mjs} +4 -4
  89. package/dist/lib/neutral/meta.json +1 -1
  90. package/dist/lib/neutral/meta.mjs +1 -1
  91. package/dist/lib/neutral/{migrate-G7I52UKD.mjs → migrate-WPUISBC4.mjs} +3 -3
  92. package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs → navigation-handler-IKXZGMII.mjs} +4 -4
  93. package/dist/lib/neutral/{navigation-resolver-IFVQRCGU.mjs → navigation-resolver-VBPGMFCE.mjs} +7 -7
  94. package/dist/lib/neutral/navigation-resolver-VBPGMFCE.mjs.map +7 -0
  95. package/dist/lib/neutral/{open-CPWVZSI4.mjs → open-RRYULTSY.mjs} +3 -3
  96. package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs → open-create-object-BRUVFZSY.mjs} +4 -4
  97. package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs → open-create-space-ARLQWW65.mjs} +4 -4
  98. package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs → open-import-space-65H57JXX.mjs} +4 -4
  99. package/dist/lib/neutral/{open-members-BEXOSSBS.mjs → open-members-677P6KD3.mjs} +6 -6
  100. package/dist/lib/neutral/open-members-677P6KD3.mjs.map +7 -0
  101. package/dist/lib/neutral/{open-settings-RHDBW2K5.mjs → open-settings-PRBSGO6D.mjs} +6 -6
  102. package/dist/lib/neutral/open-settings-PRBSGO6D.mjs.map +7 -0
  103. package/dist/lib/neutral/operations/index.mjs +3 -3
  104. package/dist/lib/neutral/plugin.mjs +4 -4
  105. package/dist/lib/neutral/{react-root-2DJPZQT4.mjs → react-root-YLYRCSAZ.mjs} +2 -2
  106. package/dist/lib/neutral/{react-root-2DJPZQT4.mjs.map → react-root-YLYRCSAZ.mjs.map} +3 -3
  107. package/dist/lib/neutral/{react-surface-LYCTOQLY.mjs → react-surface-5EQ6X4CL.mjs} +48 -70
  108. package/dist/lib/neutral/react-surface-5EQ6X4CL.mjs.map +7 -0
  109. package/dist/lib/neutral/{remove-objects-OWDMA4IF.mjs → remove-objects-PWJJI36V.mjs} +5 -5
  110. package/dist/lib/neutral/remove-objects-PWJJI36V.mjs.map +7 -0
  111. package/dist/lib/neutral/{rename-SR6BBSPU.mjs → rename-4727PKI4.mjs} +8 -7
  112. package/dist/lib/neutral/rename-4727PKI4.mjs.map +7 -0
  113. package/dist/lib/neutral/{rename-object-5H6E5AOX.mjs → rename-object-FXUAB5FN.mjs} +8 -7
  114. package/dist/lib/neutral/rename-object-FXUAB5FN.mjs.map +7 -0
  115. package/dist/lib/neutral/{repair-PSYRVSJ6.mjs → repair-HMH476U3.mjs} +3 -3
  116. package/dist/lib/neutral/repair-HMH476U3.mjs.map +7 -0
  117. package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs → restore-field-3ICSIHGA.mjs} +3 -3
  118. package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs → restore-objects-V2BTEWN3.mjs} +3 -3
  119. package/dist/lib/neutral/{settings-Q32EQCHX.mjs → settings-5IBSYBVU.mjs} +3 -3
  120. package/dist/lib/neutral/{settings-Q32EQCHX.mjs.map → settings-5IBSYBVU.mjs.map} +3 -3
  121. package/dist/lib/neutral/{share-5Y4NZA75.mjs → share-ZOZPAUGI.mjs} +3 -3
  122. package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs → snapshot-ZC5PU55W.mjs} +3 -3
  123. package/dist/lib/neutral/{spaces-ready-GBF72QJH.mjs → spaces-ready-EXPCJD4N.mjs} +11 -11
  124. package/dist/lib/neutral/spaces-ready-EXPCJD4N.mjs.map +7 -0
  125. package/dist/lib/neutral/{state-DPBOZRAW.mjs → state-KMH2NUAL.mjs} +2 -2
  126. package/dist/lib/neutral/state-KMH2NUAL.mjs.map +7 -0
  127. package/dist/lib/neutral/testing.mjs +1 -1
  128. package/dist/lib/neutral/translations.mjs +4 -2
  129. package/dist/lib/neutral/translations.mjs.map +3 -3
  130. package/dist/lib/neutral/types/index.mjs +9 -3
  131. package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs → undo-mappings-P43EAUGI.mjs} +5 -5
  132. package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs.map → undo-mappings-P43EAUGI.mjs.map} +3 -3
  133. package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs → wait-for-object-WURK2SLQ.mjs} +3 -3
  134. package/dist/types/dx.config.d.ts +28 -0
  135. package/dist/types/dx.config.d.ts.map +1 -0
  136. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  137. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +12 -0
  138. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -1
  139. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts.map +1 -1
  140. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +0 -1
  141. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -1
  142. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +13 -1
  143. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
  144. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
  145. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
  146. package/dist/types/src/capabilities/index.d.ts +10 -54
  147. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  148. package/dist/types/src/capabilities/navigation-handler/index.d.ts +1 -1
  149. package/dist/types/src/capabilities/navigation-handler/index.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
  151. package/dist/types/src/capabilities/node.d.ts +3 -33
  152. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  153. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  154. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  155. package/dist/types/src/commands/database/add.d.ts.map +1 -1
  156. package/dist/types/src/commands/queue/query.d.ts.map +1 -1
  157. package/dist/types/src/components/SpaceSettings/SpaceSettings.stories.d.ts +20 -0
  158. package/dist/types/src/components/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
  159. package/dist/types/src/constants.d.ts +1 -2
  160. package/dist/types/src/constants.d.ts.map +1 -1
  161. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
  162. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +20 -0
  163. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  164. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
  165. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +20 -0
  166. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
  167. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
  168. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +20 -0
  169. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
  170. package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts +1 -1
  171. package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -1
  172. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +12 -0
  173. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -0
  174. package/dist/types/src/containers/RenamePopover/index.d.ts +3 -0
  175. package/dist/types/src/containers/RenamePopover/index.d.ts.map +1 -0
  176. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts +15 -0
  177. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts.map +1 -0
  178. package/dist/types/src/containers/SpaceHomeArticle/index.d.ts +2 -0
  179. package/dist/types/src/containers/SpaceHomeArticle/index.d.ts.map +1 -0
  180. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts +22 -0
  181. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -0
  182. package/dist/types/src/containers/SpaceHomeRecent/index.d.ts +2 -0
  183. package/dist/types/src/containers/SpaceHomeRecent/index.d.ts.map +1 -0
  184. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +20 -0
  185. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
  186. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +20 -0
  187. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
  188. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +20 -0
  189. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  190. package/dist/types/src/containers/index.d.ts +3 -2
  191. package/dist/types/src/containers/index.d.ts.map +1 -1
  192. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useRelatedObjects.d.ts.map +1 -1
  194. package/dist/types/src/meta.d.ts +28 -2
  195. package/dist/types/src/meta.d.ts.map +1 -1
  196. package/dist/types/src/operations/add-object.d.ts.map +1 -1
  197. package/dist/types/src/operations/helpers.d.ts.map +1 -1
  198. package/dist/types/src/operations/remove-objects.d.ts.map +1 -1
  199. package/dist/types/src/operations/rename-object.d.ts.map +1 -1
  200. package/dist/types/src/operations/rename.d.ts.map +1 -1
  201. package/dist/types/src/translations.d.ts +20 -0
  202. package/dist/types/src/translations.d.ts.map +1 -1
  203. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  204. package/dist/types/src/types/events.d.ts.map +1 -1
  205. package/dist/types/src/types/form.d.ts +7 -1
  206. package/dist/types/src/types/form.d.ts.map +1 -1
  207. package/dist/types/src/types/index.d.ts +1 -0
  208. package/dist/types/src/types/index.d.ts.map +1 -1
  209. package/dist/types/src/types/surface.d.ts +26 -0
  210. package/dist/types/src/types/surface.d.ts.map +1 -0
  211. package/dist/types/src/types/types.d.ts +7 -0
  212. package/dist/types/src/types/types.d.ts.map +1 -1
  213. package/dist/types/src/util.d.ts.map +1 -1
  214. package/dist/types/tsconfig.tsbuildinfo +1 -1
  215. package/dx.config.ts +35 -0
  216. package/package.json +51 -50
  217. package/src/SpacePlugin.test.ts +1 -1
  218. package/src/SpacePlugin.ts +1 -7
  219. package/src/capabilities/app-graph-builder/extensions/collections.ts +44 -24
  220. package/src/capabilities/app-graph-builder/extensions/companions.ts +3 -3
  221. package/src/capabilities/app-graph-builder/extensions/database.ts +17 -14
  222. package/src/capabilities/app-graph-builder/extensions/settings.ts +9 -9
  223. package/src/capabilities/app-graph-builder/extensions/shared.ts +5 -20
  224. package/src/capabilities/app-graph-builder/extensions/spaces.ts +49 -26
  225. package/src/capabilities/identity-created.ts +3 -3
  226. package/src/capabilities/index.ts +0 -1
  227. package/src/capabilities/navigation-resolver.ts +6 -13
  228. package/src/capabilities/react-root.tsx +1 -1
  229. package/src/capabilities/react-surface.tsx +58 -88
  230. package/src/capabilities/repair.ts +4 -2
  231. package/src/capabilities/settings.ts +2 -2
  232. package/src/capabilities/spaces-ready.ts +8 -15
  233. package/src/capabilities/state.ts +1 -1
  234. package/src/capabilities/undo-mappings.ts +3 -3
  235. package/src/commands/database/add.ts +4 -2
  236. package/src/commands/queue/query.ts +4 -3
  237. package/src/components/AwaitingObject/AwaitingObject.tsx +1 -1
  238. package/src/components/CreateObjectPanel/CreateObjectPanel.tsx +2 -2
  239. package/src/components/ForeignKeys/ForeignKeys.tsx +1 -1
  240. package/src/components/SpaceSettings/SpaceSettings.tsx +3 -3
  241. package/src/constants.ts +5 -6
  242. package/src/containers/CollectionArticle/CollectionArticle.tsx +10 -6
  243. package/src/containers/CollectionSection/CollectionSection.tsx +1 -1
  244. package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +10 -7
  245. package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +5 -5
  246. package/src/containers/ImportSpaceDialog/ImportSpaceDialog.tsx +3 -3
  247. package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +3 -3
  248. package/src/containers/JoinDialog/JoinDialog.tsx +13 -11
  249. package/src/containers/MembersContainer/MembersContainer.tsx +5 -5
  250. package/src/containers/MenuFooter/MenuFooter.tsx +3 -3
  251. package/src/containers/ObjectCardStack/ObjectCardStack.tsx +3 -3
  252. package/src/containers/RecordArticle/RecordArticle.tsx +67 -8
  253. package/src/containers/RelatedArticle/RelatedArticle.tsx +17 -13
  254. package/src/containers/RenamePopover/RenamePopover.tsx +112 -0
  255. package/src/containers/RenamePopover/index.ts +6 -0
  256. package/src/containers/SchemaContainer/SchemaContainer.tsx +1 -1
  257. package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +100 -0
  258. package/src/containers/SpaceHomeArticle/index.ts +5 -0
  259. package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +101 -0
  260. package/src/containers/SpaceHomeRecent/index.ts +5 -0
  261. package/src/containers/SpacePresence/SpacePresence.tsx +1 -1
  262. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +7 -7
  263. package/src/containers/SyncStatus/SyncStatus.tsx +2 -2
  264. package/src/containers/index.ts +3 -2
  265. package/src/hooks/useInputSurfaceLookup.tsx +3 -2
  266. package/src/hooks/useRelatedObjects.ts +13 -1
  267. package/src/meta.ts +2 -27
  268. package/src/operations/add-object.ts +7 -14
  269. package/src/operations/create.ts +2 -2
  270. package/src/operations/definitions.ts +1 -1
  271. package/src/operations/helpers.ts +1 -1
  272. package/src/operations/open-members.ts +3 -3
  273. package/src/operations/open-settings.ts +3 -3
  274. package/src/operations/remove-objects.ts +3 -2
  275. package/src/operations/rename-object.ts +3 -2
  276. package/src/operations/rename.ts +3 -2
  277. package/src/translations.ts +3 -1
  278. package/src/types/capabilities.ts +8 -8
  279. package/src/types/events.ts +5 -5
  280. package/src/types/form.ts +5 -1
  281. package/src/types/index.ts +1 -0
  282. package/src/types/surface.ts +31 -0
  283. package/src/types/types.ts +9 -1
  284. package/src/util.ts +3 -3
  285. package/dist/lib/neutral/CollectionArticle-S3OF5KJ7.mjs.map +0 -7
  286. package/dist/lib/neutral/CreateObjectDialog-66R3K6I3.mjs.map +0 -7
  287. package/dist/lib/neutral/CreateSpaceDialog-CDGSEIJB.mjs.map +0 -7
  288. package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs +0 -59
  289. package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs.map +0 -7
  290. package/dist/lib/neutral/ImportSpaceDialog-7GKV4OTF.mjs.map +0 -7
  291. package/dist/lib/neutral/InlineSyncStatus-TBJKZCH7.mjs.map +0 -7
  292. package/dist/lib/neutral/JoinDialog-SSFKRFTJ.mjs.map +0 -7
  293. package/dist/lib/neutral/MembersContainer-KMCQDWCS.mjs.map +0 -7
  294. package/dist/lib/neutral/MenuFooter-5JT7V5FZ.mjs.map +0 -7
  295. package/dist/lib/neutral/ObjectCardStack-IXNU3HEN.mjs.map +0 -7
  296. package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs +0 -51
  297. package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs.map +0 -7
  298. package/dist/lib/neutral/RelatedArticle-YDNGUDAJ.mjs.map +0 -7
  299. package/dist/lib/neutral/SchemaContainer-Q4BP6X2M.mjs.map +0 -7
  300. package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs +0 -56
  301. package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs.map +0 -7
  302. package/dist/lib/neutral/SpaceSettings-YAHBOY5T.mjs.map +0 -7
  303. package/dist/lib/neutral/SpaceSettingsContainer-IB34TEOB.mjs.map +0 -7
  304. package/dist/lib/neutral/SyncStatus-CWOXWDDZ.mjs.map +0 -7
  305. package/dist/lib/neutral/add-object-QYOMCBJA.mjs.map +0 -7
  306. package/dist/lib/neutral/app-graph-builder-SQGCUCDO.mjs.map +0 -7
  307. package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs +0 -81
  308. package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs.map +0 -7
  309. package/dist/lib/neutral/chunk-4RTSNTDC.mjs +0 -37
  310. package/dist/lib/neutral/chunk-4RTSNTDC.mjs.map +0 -7
  311. package/dist/lib/neutral/chunk-7WUJENBF.mjs.map +0 -7
  312. package/dist/lib/neutral/chunk-B7DBIARR.mjs +0 -8
  313. package/dist/lib/neutral/chunk-BBQR23DW.mjs.map +0 -7
  314. package/dist/lib/neutral/chunk-F5MESIRH.mjs +0 -19
  315. package/dist/lib/neutral/chunk-F5MESIRH.mjs.map +0 -7
  316. package/dist/lib/neutral/chunk-K34BPPQE.mjs.map +0 -7
  317. package/dist/lib/neutral/chunk-YY62663T.mjs.map +0 -7
  318. package/dist/lib/neutral/create-EPIFSRJA.mjs.map +0 -7
  319. package/dist/lib/neutral/identity-created-57RML5XT.mjs.map +0 -7
  320. package/dist/lib/neutral/navigation-resolver-IFVQRCGU.mjs.map +0 -7
  321. package/dist/lib/neutral/open-members-BEXOSSBS.mjs.map +0 -7
  322. package/dist/lib/neutral/open-settings-RHDBW2K5.mjs.map +0 -7
  323. package/dist/lib/neutral/react-surface-LYCTOQLY.mjs.map +0 -7
  324. package/dist/lib/neutral/remove-objects-OWDMA4IF.mjs.map +0 -7
  325. package/dist/lib/neutral/rename-SR6BBSPU.mjs.map +0 -7
  326. package/dist/lib/neutral/rename-object-5H6E5AOX.mjs.map +0 -7
  327. package/dist/lib/neutral/repair-PSYRVSJ6.mjs.map +0 -7
  328. package/dist/lib/neutral/spaces-ready-GBF72QJH.mjs.map +0 -7
  329. package/dist/lib/neutral/state-DPBOZRAW.mjs.map +0 -7
  330. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
  331. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  332. package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts +0 -7
  333. package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts.map +0 -1
  334. package/dist/types/src/containers/EntityRenamePopover/index.d.ts +0 -2
  335. package/dist/types/src/containers/EntityRenamePopover/index.d.ts.map +0 -1
  336. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts +0 -7
  337. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +0 -1
  338. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts +0 -2
  339. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts.map +0 -1
  340. package/src/capabilities/app-graph-serializer.ts +0 -85
  341. package/src/containers/EntityRenamePopover/EntityRenamePopover.tsx +0 -52
  342. package/src/containers/EntityRenamePopover/index.ts +0 -5
  343. package/src/containers/SpaceRenamePopover/SpaceRenamePopover.tsx +0 -54
  344. package/src/containers/SpaceRenamePopover/index.ts +0 -5
  345. /package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs.map → SmallPresenceLive-L4H7WJOA.mjs.map} +0 -0
  346. /package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs.map → SpacePresence-PDTEDHDE.mjs.map} +0 -0
  347. /package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs.map → add-relation-GWSE42BU.mjs.map} +0 -0
  348. /package/dist/lib/neutral/{add-type-CZVKSEIW.mjs.map → add-type-C3KYE6PI.mjs.map} +0 -0
  349. /package/dist/lib/neutral/{chunk-B7DBIARR.mjs.map → chunk-I5JXVBXX.mjs.map} +0 -0
  350. /package/dist/lib/neutral/{close-FGQN37PK.mjs.map → close-YZHFYPUN.mjs.map} +0 -0
  351. /package/dist/lib/neutral/{delete-LIA5M3WI.mjs.map → delete-EFM7CAVO.mjs.map} +0 -0
  352. /package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs.map → delete-field-ONAPFFO5.mjs.map} +0 -0
  353. /package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs.map → duplicate-object-OJRPFV5I.mjs.map} +0 -0
  354. /package/dist/lib/neutral/{export-space-VWJHVXWF.mjs.map → export-space-M5RNVUQX.mjs.map} +0 -0
  355. /package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs.map → get-share-link-FUQBJPSQ.mjs.map} +0 -0
  356. /package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs.map → import-space-L3AUIARM.mjs.map} +0 -0
  357. /package/dist/lib/neutral/{join-Z5K4OAIG.mjs.map → join-VY3QYBU7.mjs.map} +0 -0
  358. /package/dist/lib/neutral/{migrate-G7I52UKD.mjs.map → migrate-WPUISBC4.mjs.map} +0 -0
  359. /package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs.map → navigation-handler-IKXZGMII.mjs.map} +0 -0
  360. /package/dist/lib/neutral/{open-CPWVZSI4.mjs.map → open-RRYULTSY.mjs.map} +0 -0
  361. /package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs.map → open-create-object-BRUVFZSY.mjs.map} +0 -0
  362. /package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs.map → open-create-space-ARLQWW65.mjs.map} +0 -0
  363. /package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs.map → open-import-space-65H57JXX.mjs.map} +0 -0
  364. /package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs.map → restore-field-3ICSIHGA.mjs.map} +0 -0
  365. /package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs.map → restore-objects-V2BTEWN3.mjs.map} +0 -0
  366. /package/dist/lib/neutral/{share-5Y4NZA75.mjs.map → share-ZOZPAUGI.mjs.map} +0 -0
  367. /package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs.map → snapshot-ZC5PU55W.mjs.map} +0 -0
  368. /package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs.map → wait-for-object-WURK2SLQ.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/MenuFooter/MenuFooter.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { AppSpace } from '@dxos/app-toolkit';\nimport { getSpace } from '@dxos/client/echo';\nimport { type Obj } from '@dxos/echo';\nimport { DropdownMenu, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\nimport { getSpaceDisplayName } from '../../util';\n\nexport const MenuFooter = ({ object }: { object: Obj.Unknown }) => {\n const { t } = useTranslation(meta.profile.key);\n const space = getSpace(object);\n const spaceName = space ? getSpaceDisplayName(space, { personal: AppSpace.isPersonalSpace(space) }) : '';\n return space ? (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.GroupLabel>{t('menu-footer.label')}</DropdownMenu.GroupLabel>\n <dl className='ps-2 mb-2 text-xs grid grid-cols-[max-content_1fr] gap-2'>\n <dt className='uppercase text-[.75em] tracking-wide font-medium mt-px self-start'>{t('location.label')}</dt>\n <dd className='line-clamp-3'>\n <Icon icon='ph--planet--regular' classNames='inline-block me-1' />\n {toLocalizedString(spaceName, t)}\n </dd>\n </dl>\n </>\n ) : null;\n};\n"],
5
+ "mappings": ";;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AAEzB,SAASC,cAAcC,MAAMC,mBAAmBC,sBAAsB;AAEtE,SAASC,YAAY;AAId,IAAMC,aAAa,CAAC,EAAEC,OAAM,MAA2B;AAC5D,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,QAAQC,GAAG;AAC7C,QAAMC,QAAQC,SAASP,MAAAA;AACvB,QAAMQ,YAAYF,QAAQG,oBAAoBH,OAAO;IAAEI,UAAUC,SAASC,gBAAgBN,KAAAA;EAAO,CAAA,IAAK;AACtG,SAAOA,QACL,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACO,aAAaC,WAAS,IAAA,GACvB,sBAAA,cAACD,aAAaE,YAAU,MAAEd,EAAE,mBAAA,CAAA,GAC5B,sBAAA,cAACe,MAAAA;IAAGC,WAAU;KACZ,sBAAA,cAACC,MAAAA;IAAGD,WAAU;KAAqEhB,EAAE,gBAAA,CAAA,GACrF,sBAAA,cAACkB,MAAAA;IAAGF,WAAU;KACZ,sBAAA,cAACG,MAAAA;IAAKC,MAAK;IAAsBC,YAAW;MAC3CC,kBAAkBf,WAAWP,CAAAA,CAAAA,CAAAA,CAAAA,IAIlC;AACN;",
6
+ "names": ["React", "AppSpace", "getSpace", "DropdownMenu", "Icon", "toLocalizedString", "useTranslation", "meta", "MenuFooter", "object", "t", "useTranslation", "meta", "profile", "key", "space", "getSpace", "spaceName", "getSpaceDisplayName", "personal", "AppSpace", "isPersonalSpace", "DropdownMenu", "Separator", "GroupLabel", "dl", "className", "dt", "dd", "Icon", "icon", "classNames", "toLocalizedString"]
7
+ }
@@ -5,19 +5,19 @@ import React, { forwardRef, useState } from "react";
5
5
  import { Filter, Obj } from "@dxos/echo";
6
6
  import { useQuery, useType } from "@dxos/react-client/echo";
7
7
  import { Card, Message, Panel, ScrollArea, Toolbar, useTranslation } from "@dxos/react-ui";
8
- import { useSelected } from "@dxos/react-ui-attention";
8
+ import { useSelection } from "@dxos/react-ui-attention";
9
9
  import { ObjectForm } from "@dxos/react-ui-form";
10
10
  import { Mosaic } from "@dxos/react-ui-mosaic";
11
11
  import { getTypeURIFromQuery } from "@dxos/schema";
12
12
  import { isNonNullable } from "@dxos/util";
13
13
  import { meta } from "#meta";
14
14
  var ObjectCardStack = /* @__PURE__ */ forwardRef(({ objectId, view }, forwardedRef) => {
15
- const { t } = useTranslation(meta.id);
15
+ const { t } = useTranslation(meta.profile.key);
16
16
  const db = Obj.getDatabase(view);
17
17
  const typeUri = view.query ? getTypeURIFromQuery(view.query.ast) : void 0;
18
18
  const type = useType(db, typeUri);
19
19
  const queriedObjects = useQuery(db, type ? Filter.type(type) : Filter.nothing());
20
- const selectedRows = useSelected(objectId, "multi");
20
+ const selectedRows = useSelection(objectId, "multi");
21
21
  const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);
22
22
  const [viewport, setViewport] = useState(null);
23
23
  if (!type) {
@@ -52,4 +52,4 @@ var ObjectCardStack = /* @__PURE__ */ forwardRef(({ objectId, view }, forwardedR
52
52
  export {
53
53
  ObjectCardStack as default
54
54
  };
55
- //# sourceMappingURL=ObjectCardStack-IXNU3HEN.mjs.map
55
+ //# sourceMappingURL=ObjectCardStack-DHVDRNRK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/ObjectCardStack/ObjectCardStack.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useState } from 'react';\n\nimport { Filter, Obj, type View } from '@dxos/echo';\nimport { useQuery, useType } from '@dxos/react-client/echo';\nimport { Card, Message, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { useSelection } from '@dxos/react-ui-attention';\nimport { ObjectForm } from '@dxos/react-ui-form';\nimport { Mosaic } from '@dxos/react-ui-mosaic';\nimport { getTypeURIFromQuery } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nexport type ObjectCardStackProps = {\n view: View.View;\n objectId: string;\n};\n\n/**\n * @deprecated Use Mosaic Board components.\n */\nexport const ObjectCardStack = forwardRef<HTMLDivElement, ObjectCardStackProps>(({ objectId, view }, forwardedRef) => {\n const { t } = useTranslation(meta.profile.key);\n const db = Obj.getDatabase(view);\n const typeUri = view.query ? getTypeURIFromQuery(view.query.ast) : undefined;\n const type = useType(db, typeUri);\n\n const queriedObjects = useQuery(db, type ? Filter.type(type) : Filter.nothing());\n const selectedRows = useSelection(objectId, 'multi');\n const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);\n\n const [viewport, setViewport] = useState<HTMLElement | null>(null);\n\n if (!type) {\n return null;\n }\n\n return (\n <Panel.Root className='dx-document' ref={forwardedRef}>\n <Panel.Toolbar asChild>\n <Toolbar.Root />\n </Panel.Toolbar>\n <Panel.Content>\n {selectedObjects.length === 0 ? (\n <Message.Root>\n <Message.Title>{t('row-details-no-selection.label')}</Message.Title>\n </Message.Root>\n ) : (\n <Mosaic.Root>\n <Mosaic.Container\n asChild\n orientation='vertical'\n autoScroll={viewport}\n eventHandler={{ id: objectId, canDrop: () => true }}\n >\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport ref={setViewport}>\n <Mosaic.Stack\n items={selectedObjects}\n getId={(obj) => obj.id}\n Tile={({ ...props }) => (\n <Mosaic.Tile {...props}>\n <Card.Root>\n <ObjectForm object={props.data} type={type} />\n </Card.Root>\n </Mosaic.Tile>\n )}\n />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Mosaic.Container>\n </Mosaic.Root>\n )}\n </Panel.Content>\n </Panel.Root>\n );\n});\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,YAAYC,gBAAgB;AAE5C,SAASC,QAAQC,WAAsB;AACvC,SAASC,UAAUC,eAAe;AAClC,SAASC,MAAMC,SAASC,OAAOC,YAAYC,SAASC,sBAAsB;AAC1E,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB;AAC3B,SAASC,cAAc;AACvB,SAASC,2BAA2B;AACpC,SAASC,qBAAqB;AAE9B,SAASC,YAAY;AAUd,IAAMC,kBAAkBlB,2BAAiD,CAAC,EAAEmB,UAAUC,KAAI,GAAIC,iBAAAA;AACnG,QAAM,EAAEC,EAAC,IAAKX,eAAeM,KAAKM,QAAQC,GAAG;AAC7C,QAAMC,KAAKtB,IAAIuB,YAAYN,IAAAA;AAC3B,QAAMO,UAAUP,KAAKQ,QAAQb,oBAAoBK,KAAKQ,MAAMC,GAAG,IAAIC;AACnE,QAAMC,OAAO1B,QAAQoB,IAAIE,OAAAA;AAEzB,QAAMK,iBAAiB5B,SAASqB,IAAIM,OAAO7B,OAAO6B,KAAKA,IAAAA,IAAQ7B,OAAO+B,QAAO,CAAA;AAC7E,QAAMC,eAAetB,aAAaO,UAAU,OAAA;AAC5C,QAAMgB,kBAAkBD,aAAaE,IAAI,CAACC,OAAOL,eAAeM,KAAK,CAACC,QAAQA,IAAIF,OAAOA,EAAAA,CAAAA,EAAKG,OAAOxB,aAAAA;AAErG,QAAM,CAACyB,UAAUC,WAAAA,IAAezC,SAA6B,IAAA;AAE7D,MAAI,CAAC8B,MAAM;AACT,WAAO;EACT;AAEA,SACE,sBAAA,cAACvB,MAAMmC,MAAI;IAACC,WAAU;IAAcC,KAAKxB;KACvC,sBAAA,cAACb,MAAME,SAAO;IAACoC,SAAAA;KACb,sBAAA,cAACpC,QAAQiC,MAAI,IAAA,CAAA,GAEf,sBAAA,cAACnC,MAAMuC,SAAO,MACXZ,gBAAgBa,WAAW,IAC1B,sBAAA,cAACzC,QAAQoC,MAAI,MACX,sBAAA,cAACpC,QAAQ0C,OAAK,MAAE3B,EAAE,gCAAA,CAAA,CAAA,IAGpB,sBAAA,cAACR,OAAO6B,MAAI,MACV,sBAAA,cAAC7B,OAAOoC,WAAS;IACfJ,SAAAA;IACAK,aAAY;IACZC,YAAYX;IACZY,cAAc;MAAEhB,IAAIlB;MAAUmC,SAAS,MAAM;IAAK;KAElD,sBAAA,cAAC7C,WAAWkC,MAAI;IAACQ,aAAY;KAC3B,sBAAA,cAAC1C,WAAW8C,UAAQ;IAACV,KAAKH;KACxB,sBAAA,cAAC5B,OAAO0C,OAAK;IACXC,OAAOtB;IACPuB,OAAO,CAACnB,QAAQA,IAAIF;IACpBsB,MAAM,CAAC,EAAE,GAAGC,MAAAA,MACV,sBAAA,cAAC9C,OAAO6C,MAASC,OACf,sBAAA,cAACtD,KAAKqC,MAAI,MACR,sBAAA,cAAC9B,YAAAA;MAAWgD,QAAQD,MAAME;MAAM/B;;;AAa1D,CAAA;",
6
+ "names": ["React", "forwardRef", "useState", "Filter", "Obj", "useQuery", "useType", "Card", "Message", "Panel", "ScrollArea", "Toolbar", "useTranslation", "useSelection", "ObjectForm", "Mosaic", "getTypeURIFromQuery", "isNonNullable", "meta", "ObjectCardStack", "objectId", "view", "forwardedRef", "t", "profile", "key", "db", "getDatabase", "typeUri", "query", "ast", "undefined", "type", "queriedObjects", "nothing", "selectedRows", "selectedObjects", "map", "id", "find", "obj", "filter", "viewport", "setViewport", "Root", "className", "ref", "asChild", "Content", "length", "Title", "Container", "orientation", "autoScroll", "eventHandler", "canDrop", "Viewport", "Stack", "items", "getId", "Tile", "props", "object", "data"]
7
+ }
@@ -0,0 +1,102 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/RecordArticle/RecordArticle.tsx
4
+ import React, { useMemo } from "react";
5
+ import { Surface } from "@dxos/app-framework/ui";
6
+ import { AppSurface, useObjectMenuItems } from "@dxos/app-toolkit/ui";
7
+ import { Entity, Obj, Type } from "@dxos/echo";
8
+ import { Card, Icon, IconButton, Input, Panel, ScrollArea, Toolbar, useTranslation } from "@dxos/react-ui";
9
+ import { Masonry } from "@dxos/react-ui-masonry";
10
+ import { Menu } from "@dxos/react-ui-menu";
11
+ import { mx } from "@dxos/ui-theme";
12
+ import { useRelatedObjects } from "#hooks";
13
+ import { meta } from "#meta";
14
+ import { Prompts } from "#types";
15
+ var RecordArticle = ({ role, subject }) => {
16
+ const { t } = useTranslation(meta.profile.key);
17
+ const db = Obj.getDatabase(subject);
18
+ const typename = Obj.getTypename(subject);
19
+ const schema = Obj.getType(subject) ?? (typename && db ? db.graph.registry.list().filter(Type.isType).find((t2) => Type.getTypename(t2) === typename) : void 0);
20
+ const icon = schema && Type.getDatabase(schema) != null ? "ph--cube--regular" : Obj.getIcon(subject)?.icon ?? "ph--circle-dashed--regular";
21
+ const related = useRelatedObjects(db, subject, {
22
+ references: true,
23
+ relations: true
24
+ });
25
+ const singleColumn = related.length === 1;
26
+ return /* @__PURE__ */ React.createElement(Panel.Root, {
27
+ role
28
+ }, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
29
+ asChild: true
30
+ }, /* @__PURE__ */ React.createElement(Toolbar.Root, null)), /* @__PURE__ */ React.createElement(Panel.Content, {
31
+ asChild: true
32
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
33
+ orientation: "vertical"
34
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
35
+ classNames: "p-4 space-y-4"
36
+ }, /* @__PURE__ */ React.createElement(Card.Root, {
37
+ classNames: "dx-card-max-width"
38
+ }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Block, null, /* @__PURE__ */ React.createElement(Icon, {
39
+ icon
40
+ })), /* @__PURE__ */ React.createElement(Card.Title, null, Obj.getLabel(subject, {
41
+ fallback: "typename"
42
+ }))), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement(Surface.Surface, {
43
+ type: AppSurface.CardContent,
44
+ data: {
45
+ subject
46
+ },
47
+ limit: 1
48
+ }))), /* @__PURE__ */ React.createElement("div", {
49
+ className: "flex flex-col gap-form-gap"
50
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("related-actions.label"))), /* @__PURE__ */ React.createElement(Surface.Surface, {
51
+ type: Prompts,
52
+ data: {
53
+ subject,
54
+ attendableId: subject.id
55
+ },
56
+ limit: 1
57
+ })), related.length > 0 && /* @__PURE__ */ React.createElement("div", {
58
+ className: mx("dx-expander flex flex-col gap-form-gap", singleColumn ? "dx-card-max-width" : "w-full")
59
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("related-objects.label"))), /* @__PURE__ */ React.createElement(Masonry.Root, {
60
+ Tile: ObjectCard,
61
+ columns: singleColumn ? 1 : void 0
62
+ }, /* @__PURE__ */ React.createElement(Masonry.Content, null, /* @__PURE__ */ React.createElement(Masonry.Viewport, {
63
+ items: related
64
+ }))))))));
65
+ };
66
+ var ObjectCard = ({ data: subject, classNames }) => {
67
+ const { t } = useTranslation(meta.profile.key);
68
+ const data = useMemo(() => ({
69
+ subject
70
+ }), [
71
+ subject
72
+ ]);
73
+ const icon = Entity.getIcon(subject)?.icon ?? "ph--circle-dashed--regular";
74
+ const menuItems = useObjectMenuItems(subject);
75
+ return /* @__PURE__ */ React.createElement(Menu.Root, null, /* @__PURE__ */ React.createElement(Card.Root, {
76
+ classNames
77
+ }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Block, null, /* @__PURE__ */ React.createElement(Icon, {
78
+ icon
79
+ })), /* @__PURE__ */ React.createElement(Card.Title, null, Entity.getLabel(subject, {
80
+ fallback: "typename"
81
+ })), /* @__PURE__ */ React.createElement(Card.Block, {
82
+ end: true
83
+ }, /* @__PURE__ */ React.createElement(Menu.Trigger, {
84
+ asChild: true,
85
+ disabled: !menuItems?.length
86
+ }, /* @__PURE__ */ React.createElement(IconButton, {
87
+ iconOnly: true,
88
+ variant: "ghost",
89
+ icon: "ph--dots-three-vertical--regular",
90
+ label: t("more-actions.label")
91
+ })), /* @__PURE__ */ React.createElement(Menu.Content, {
92
+ items: menuItems
93
+ }))), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement(Surface.Surface, {
94
+ type: AppSurface.CardContent,
95
+ data,
96
+ limit: 1
97
+ }))));
98
+ };
99
+ export {
100
+ RecordArticle as default
101
+ };
102
+ //# sourceMappingURL=RecordArticle-JSORXRAA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/RecordArticle/RecordArticle.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Entity, Obj, Type } from '@dxos/echo';\nimport { Card, Icon, IconButton, Input, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { Menu } from '@dxos/react-ui-menu';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useRelatedObjects } from '#hooks';\nimport { meta } from '#meta';\nimport { Prompts } from '#types';\n\nexport const RecordArticle = ({ role, subject }: AppSurface.ObjectArticleProps) => {\n const { t } = useTranslation(meta.profile.key);\n // Obj.getType fails for database-registered (dynamic) schemas due to DXN mismatch;\n // fall back to typename query which matches TypeSchema.typename.\n const db = Obj.getDatabase(subject);\n const typename = Obj.getTypename(subject);\n const schema =\n Obj.getType(subject) ??\n (typename && db\n ? db.graph.registry\n .list()\n .filter(Type.isType)\n .find((t) => Type.getTypename(t) === typename)\n : undefined);\n const icon =\n schema && Type.getDatabase(schema) != null\n ? 'ph--cube--regular'\n : (Obj.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular');\n\n const related = useRelatedObjects(db, subject, { references: true, relations: true });\n const singleColumn = related.length === 1;\n\n return (\n <Panel.Root role={role}>\n <Panel.Toolbar asChild>\n <Toolbar.Root />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport classNames='p-4 space-y-4'>\n <Card.Root classNames='dx-card-max-width'>\n <Card.Header>\n <Card.Block>\n <Icon icon={icon} />\n </Card.Block>\n <Card.Title>{Obj.getLabel(subject, { fallback: 'typename' })}</Card.Title>\n </Card.Header>\n <Card.Body>\n <Surface.Surface type={AppSurface.CardContent} data={{ subject }} limit={1} />\n </Card.Body>\n </Card.Root>\n\n {/* TODO(burdon): Only show label if surface exists? */}\n <div className='flex flex-col gap-form-gap'>\n <Input.Root>\n <Input.Label>{t('related-actions.label')}</Input.Label>\n </Input.Root>\n <Surface.Surface type={Prompts} data={{ subject, attendableId: subject.id }} limit={1} />\n </div>\n\n {related.length > 0 && (\n <div\n className={mx('dx-expander flex flex-col gap-form-gap', singleColumn ? 'dx-card-max-width' : 'w-full')}\n >\n <Input.Root>\n <Input.Label>{t('related-objects.label')}</Input.Label>\n </Input.Root>\n <Masonry.Root Tile={ObjectCard} columns={singleColumn ? 1 : undefined}>\n <Masonry.Content>\n <Masonry.Viewport items={related} />\n </Masonry.Content>\n </Masonry.Root>\n </div>\n )}\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Panel.Content>\n </Panel.Root>\n );\n};\n\nconst ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; classNames?: string }) => {\n const { t } = useTranslation(meta.profile.key);\n const data = useMemo(() => ({ subject }), [subject]);\n const icon = Entity.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular';\n const menuItems = useObjectMenuItems(subject);\n\n return (\n <Menu.Root>\n <Card.Root classNames={classNames}>\n <Card.Header>\n <Card.Block>\n <Icon icon={icon} />\n </Card.Block>\n <Card.Title>{Entity.getLabel(subject, { fallback: 'typename' })}</Card.Title>\n <Card.Block end>\n <Menu.Trigger asChild disabled={!menuItems?.length}>\n <IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label={t('more-actions.label')}\n />\n </Menu.Trigger>\n <Menu.Content items={menuItems} />\n </Card.Block>\n </Card.Header>\n <Card.Body>\n <Surface.Surface type={AppSurface.CardContent} data={data} limit={1} />\n </Card.Body>\n </Card.Root>\n </Menu.Root>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAE/B,SAASC,eAAe;AACxB,SAASC,YAAYC,0BAA0B;AAC/C,SAASC,QAAQC,KAAKC,YAAY;AAClC,SAASC,MAAMC,MAAMC,YAAYC,OAAOC,OAAOC,YAAYC,SAASC,sBAAsB;AAC1F,SAASC,eAAe;AACxB,SAASC,YAAY;AACrB,SAASC,UAAU;AAEnB,SAASC,yBAAyB;AAClC,SAASC,YAAY;AACrB,SAASC,eAAe;AAEjB,IAAMC,gBAAgB,CAAC,EAAEC,MAAMC,QAAO,MAAiC;AAC5E,QAAM,EAAEC,EAAC,IAAKV,eAAeK,KAAKM,QAAQC,GAAG;AAG7C,QAAMC,KAAKtB,IAAIuB,YAAYL,OAAAA;AAC3B,QAAMM,WAAWxB,IAAIyB,YAAYP,OAAAA;AACjC,QAAMQ,SACJ1B,IAAI2B,QAAQT,OAAAA,MACXM,YAAYF,KACTA,GAAGM,MAAMC,SACNC,KAAI,EACJC,OAAO9B,KAAK+B,MAAM,EAClBC,KAAK,CAACd,OAAMlB,KAAKwB,YAAYN,EAAAA,MAAOK,QAAAA,IACvCU;AACN,QAAMC,OACJT,UAAUzB,KAAKsB,YAAYG,MAAAA,KAAW,OAClC,sBACC1B,IAAIoC,QAAQlB,OAAAA,GAAUiB,QAAQ;AAErC,QAAME,UAAUxB,kBAAkBS,IAAIJ,SAAS;IAAEoB,YAAY;IAAMC,WAAW;EAAK,CAAA;AACnF,QAAMC,eAAeH,QAAQI,WAAW;AAExC,SACE,sBAAA,cAACnC,MAAMoC,MAAI;IAACzB;KACV,sBAAA,cAACX,MAAME,SAAO;IAACmC,SAAAA;KACb,sBAAA,cAACnC,QAAQkC,MAAI,IAAA,CAAA,GAEf,sBAAA,cAACpC,MAAMsC,SAAO;IAACD,SAAAA;KACb,sBAAA,cAACpC,WAAWmC,MAAI;IAACG,aAAY;KAC3B,sBAAA,cAACtC,WAAWuC,UAAQ;IAACC,YAAW;KAC9B,sBAAA,cAAC7C,KAAKwC,MAAI;IAACK,YAAW;KACpB,sBAAA,cAAC7C,KAAK8C,QAAM,MACV,sBAAA,cAAC9C,KAAK+C,OAAK,MACT,sBAAA,cAAC9C,MAAAA;IAAKgC;OAER,sBAAA,cAACjC,KAAKgD,OAAK,MAAElD,IAAImD,SAASjC,SAAS;IAAEkC,UAAU;EAAW,CAAA,CAAA,CAAA,GAE5D,sBAAA,cAAClD,KAAKmD,MAAI,MACR,sBAAA,cAACzD,QAAQA,SAAO;IAAC0D,MAAMzD,WAAW0D;IAAaC,MAAM;MAAEtC;IAAQ;IAAGuC,OAAO;QAK7E,sBAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACtD,MAAMqC,MAAI,MACT,sBAAA,cAACrC,MAAMuD,OAAK,MAAEzC,EAAE,uBAAA,CAAA,CAAA,GAElB,sBAAA,cAACvB,QAAQA,SAAO;IAAC0D,MAAMvC;IAASyC,MAAM;MAAEtC;MAAS2C,cAAc3C,QAAQ4C;IAAG;IAAGL,OAAO;OAGrFpB,QAAQI,SAAS,KAChB,sBAAA,cAACiB,OAAAA;IACCC,WAAW/C,GAAG,0CAA0C4B,eAAe,sBAAsB,QAAA;KAE7F,sBAAA,cAACnC,MAAMqC,MAAI,MACT,sBAAA,cAACrC,MAAMuD,OAAK,MAAEzC,EAAE,uBAAA,CAAA,CAAA,GAElB,sBAAA,cAACT,QAAQgC,MAAI;IAACqB,MAAMC;IAAYC,SAASzB,eAAe,IAAIN;KAC1D,sBAAA,cAACxB,QAAQkC,SAAO,MACd,sBAAA,cAAClC,QAAQoC,UAAQ;IAACoB,OAAO7B;;AAU7C;AAEA,IAAM2B,aAAa,CAAC,EAAER,MAAMtC,SAAS6B,WAAU,MAAiD;AAC9F,QAAM,EAAE5B,EAAC,IAAKV,eAAeK,KAAKM,QAAQC,GAAG;AAC7C,QAAMmC,OAAO7D,QAAQ,OAAO;IAAEuB;EAAQ,IAAI;IAACA;GAAQ;AACnD,QAAMiB,OAAOpC,OAAOqC,QAAQlB,OAAAA,GAAUiB,QAAQ;AAC9C,QAAMgC,YAAYrE,mBAAmBoB,OAAAA;AAErC,SACE,sBAAA,cAACP,KAAK+B,MAAI,MACR,sBAAA,cAACxC,KAAKwC,MAAI;IAACK;KACT,sBAAA,cAAC7C,KAAK8C,QAAM,MACV,sBAAA,cAAC9C,KAAK+C,OAAK,MACT,sBAAA,cAAC9C,MAAAA;IAAKgC;OAER,sBAAA,cAACjC,KAAKgD,OAAK,MAAEnD,OAAOoD,SAASjC,SAAS;IAAEkC,UAAU;EAAW,CAAA,CAAA,GAC7D,sBAAA,cAAClD,KAAK+C,OAAK;IAACmB,KAAAA;KACV,sBAAA,cAACzD,KAAK0D,SAAO;IAAC1B,SAAAA;IAAQ2B,UAAU,CAACH,WAAW1B;KAC1C,sBAAA,cAACrC,YAAAA;IACCmE,UAAAA;IACAC,SAAQ;IACRrC,MAAK;IACLsC,OAAOtD,EAAE,oBAAA;OAGb,sBAAA,cAACR,KAAKiC,SAAO;IAACsB,OAAOC;QAGzB,sBAAA,cAACjE,KAAKmD,MAAI,MACR,sBAAA,cAACzD,QAAQA,SAAO;IAAC0D,MAAMzD,WAAW0D;IAAaC;IAAYC,OAAO;;AAK5E;",
6
+ "names": ["React", "useMemo", "Surface", "AppSurface", "useObjectMenuItems", "Entity", "Obj", "Type", "Card", "Icon", "IconButton", "Input", "Panel", "ScrollArea", "Toolbar", "useTranslation", "Masonry", "Menu", "mx", "useRelatedObjects", "meta", "Prompts", "RecordArticle", "role", "subject", "t", "profile", "key", "db", "getDatabase", "typename", "getTypename", "schema", "getType", "graph", "registry", "list", "filter", "isType", "find", "undefined", "icon", "getIcon", "related", "references", "relations", "singleColumn", "length", "Root", "asChild", "Content", "orientation", "Viewport", "classNames", "Header", "Block", "Title", "getLabel", "fallback", "Body", "type", "CardContent", "data", "limit", "div", "className", "Label", "attendableId", "id", "Tile", "ObjectCard", "columns", "items", "menuItems", "end", "Trigger", "disabled", "iconOnly", "variant", "label"]
7
+ }
@@ -5,7 +5,7 @@ import React, { useMemo } from "react";
5
5
  import { Surface } from "@dxos/app-framework/ui";
6
6
  import { AppSurface, useObjectMenuItems } from "@dxos/app-toolkit/ui";
7
7
  import { Entity, Obj } from "@dxos/echo";
8
- import { Card, Panel, Toolbar, useTranslation } from "@dxos/react-ui";
8
+ import { Card, Icon, IconButton, Panel, Toolbar, useTranslation } from "@dxos/react-ui";
9
9
  import { Masonry } from "@dxos/react-ui-masonry";
10
10
  import { Menu } from "@dxos/react-ui-menu";
11
11
  import { useRelatedObjects } from "#hooks";
@@ -32,7 +32,7 @@ var RelatedArticle = ({ role, companionTo }) => {
32
32
  })))));
33
33
  };
34
34
  var ObjectCard = ({ data: subject, classNames }) => {
35
- const { t } = useTranslation(meta.id);
35
+ const { t } = useTranslation(meta.profile.key);
36
36
  const data = useMemo(() => ({
37
37
  subject
38
38
  }), [
@@ -42,22 +42,24 @@ var ObjectCard = ({ data: subject, classNames }) => {
42
42
  const menuItems = useObjectMenuItems(subject);
43
43
  return /* @__PURE__ */ React.createElement(Menu.Root, null, /* @__PURE__ */ React.createElement(Card.Root, {
44
44
  classNames
45
- }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Icon, {
45
+ }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Block, null, /* @__PURE__ */ React.createElement(Icon, {
46
46
  icon
47
- }), /* @__PURE__ */ React.createElement(Card.Title, null, Entity.getLabel(subject, {
47
+ })), /* @__PURE__ */ React.createElement(Card.Title, null, Entity.getLabel(subject, {
48
48
  fallback: "typename"
49
- })), /* @__PURE__ */ React.createElement(Menu.Trigger, {
49
+ })), /* @__PURE__ */ React.createElement(Card.Block, {
50
+ end: true
51
+ }, /* @__PURE__ */ React.createElement(Menu.Trigger, {
50
52
  asChild: true,
51
53
  disabled: !menuItems?.length
52
- }, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
54
+ }, /* @__PURE__ */ React.createElement(IconButton, {
53
55
  iconOnly: true,
54
56
  variant: "ghost",
55
57
  icon: "ph--dots-three-vertical--regular",
56
58
  label: t("more-actions.label")
57
59
  })), /* @__PURE__ */ React.createElement(Menu.Content, {
58
60
  items: menuItems
59
- })), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement(Surface.Surface, {
60
- type: AppSurface.Card,
61
+ }))), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement(Surface.Surface, {
62
+ type: AppSurface.CardContent,
61
63
  data,
62
64
  limit: 1
63
65
  }))));
@@ -65,4 +67,4 @@ var ObjectCard = ({ data: subject, classNames }) => {
65
67
  export {
66
68
  RelatedArticle as default
67
69
  };
68
- //# sourceMappingURL=RelatedArticle-YDNGUDAJ.mjs.map
70
+ //# sourceMappingURL=RelatedArticle-YRCRBIYU.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/RelatedArticle/RelatedArticle.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Entity, Obj } from '@dxos/echo';\nimport { Card, Icon, IconButton, Panel, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { Menu } from '@dxos/react-ui-menu';\n\nimport { useRelatedObjects } from '#hooks';\nimport { meta } from '#meta';\n\n// TODO(burdon): Companion type.\nexport type RelatedArticleProps = Pick<\n AppSurface.ObjectArticleProps<Obj.Unknown, {}, Obj.Unknown>,\n 'role' | 'companionTo'\n>;\n\nexport const RelatedArticle = ({ role, companionTo }: RelatedArticleProps) => {\n const db = Obj.getDatabase(companionTo);\n const items = useRelatedObjects(db, companionTo, { references: true, relations: true });\n\n return (\n <Masonry.Root Tile={ObjectCard}>\n <Panel.Root role={role}>\n <Panel.Toolbar asChild>\n <Toolbar.Root />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <Masonry.Content classNames='p-2' centered>\n <Masonry.Viewport items={items} />\n </Masonry.Content>\n </Panel.Content>\n </Panel.Root>\n </Masonry.Root>\n );\n};\n\n/** Masonry tile renderer for a related entity. */\nconst ObjectCard = ({ data: subject, classNames }: { data: Entity.Unknown; classNames?: string }) => {\n const { t } = useTranslation(meta.profile.key);\n const data = useMemo(() => ({ subject }), [subject]);\n const icon = Entity.getIcon(subject)?.icon ?? 'ph--circle-dashed--regular';\n\n // TODO(burdon): BUG: Includes item itself.\n const menuItems = useObjectMenuItems(subject);\n\n return (\n <Menu.Root>\n <Card.Root classNames={classNames}>\n <Card.Header>\n <Card.Block>\n <Icon icon={icon} />\n </Card.Block>\n <Card.Title>{Entity.getLabel(subject, { fallback: 'typename' })}</Card.Title>\n <Card.Block end>\n <Menu.Trigger asChild disabled={!menuItems?.length}>\n <IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label={t('more-actions.label')}\n />\n </Menu.Trigger>\n <Menu.Content items={menuItems} />\n </Card.Block>\n </Card.Header>\n <Card.Body>\n <Surface.Surface type={AppSurface.CardContent} data={data} limit={1} />\n </Card.Body>\n </Card.Root>\n </Menu.Root>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAE/B,SAASC,eAAe;AACxB,SAASC,YAAYC,0BAA0B;AAC/C,SAASC,QAAQC,WAAW;AAC5B,SAASC,MAAMC,MAAMC,YAAYC,OAAOC,SAASC,sBAAsB;AACvE,SAASC,eAAe;AACxB,SAASC,YAAY;AAErB,SAASC,yBAAyB;AAClC,SAASC,YAAY;AAQd,IAAMC,iBAAiB,CAAC,EAAEC,MAAMC,YAAW,MAAuB;AACvE,QAAMC,KAAKd,IAAIe,YAAYF,WAAAA;AAC3B,QAAMG,QAAQP,kBAAkBK,IAAID,aAAa;IAAEI,YAAY;IAAMC,WAAW;EAAK,CAAA;AAErF,SACE,sBAAA,cAACX,QAAQY,MAAI;IAACC,MAAMC;KAClB,sBAAA,cAACjB,MAAMe,MAAI;IAACP;KACV,sBAAA,cAACR,MAAMC,SAAO;IAACiB,SAAAA;KACb,sBAAA,cAACjB,QAAQc,MAAI,IAAA,CAAA,GAEf,sBAAA,cAACf,MAAMmB,SAAO;IAACD,SAAAA;KACb,sBAAA,cAACf,QAAQgB,SAAO;IAACC,YAAW;IAAMC,UAAAA;KAChC,sBAAA,cAAClB,QAAQmB,UAAQ;IAACV;;AAM9B;AAGA,IAAMK,aAAa,CAAC,EAAEM,MAAMC,SAASJ,WAAU,MAAiD;AAC9F,QAAM,EAAEK,EAAC,IAAKvB,eAAeI,KAAKoB,QAAQC,GAAG;AAC7C,QAAMJ,OAAOhC,QAAQ,OAAO;IAAEiC;EAAQ,IAAI;IAACA;GAAQ;AACnD,QAAMI,OAAOjC,OAAOkC,QAAQL,OAAAA,GAAUI,QAAQ;AAG9C,QAAME,YAAYpC,mBAAmB8B,OAAAA;AAErC,SACE,sBAAA,cAACpB,KAAKW,MAAI,MACR,sBAAA,cAAClB,KAAKkB,MAAI;IAACK;KACT,sBAAA,cAACvB,KAAKkC,QAAM,MACV,sBAAA,cAAClC,KAAKmC,OAAK,MACT,sBAAA,cAAClC,MAAAA;IAAK8B;OAER,sBAAA,cAAC/B,KAAKoC,OAAK,MAAEtC,OAAOuC,SAASV,SAAS;IAAEW,UAAU;EAAW,CAAA,CAAA,GAC7D,sBAAA,cAACtC,KAAKmC,OAAK;IAACI,KAAAA;KACV,sBAAA,cAAChC,KAAKiC,SAAO;IAACnB,SAAAA;IAAQoB,UAAU,CAACR,WAAWS;KAC1C,sBAAA,cAACxC,YAAAA;IACCyC,UAAAA;IACAC,SAAQ;IACRb,MAAK;IACLc,OAAOjB,EAAE,oBAAA;OAGb,sBAAA,cAACrB,KAAKe,SAAO;IAACP,OAAOkB;QAGzB,sBAAA,cAACjC,KAAK8C,MAAI,MACR,sBAAA,cAACnD,QAAQA,SAAO;IAACoD,MAAMnD,WAAWoD;IAAatB;IAAYuB,OAAO;;AAK5E;",
6
+ "names": ["React", "useMemo", "Surface", "AppSurface", "useObjectMenuItems", "Entity", "Obj", "Card", "Icon", "IconButton", "Panel", "Toolbar", "useTranslation", "Masonry", "Menu", "useRelatedObjects", "meta", "RelatedArticle", "role", "companionTo", "db", "getDatabase", "items", "references", "relations", "Root", "Tile", "ObjectCard", "asChild", "Content", "classNames", "centered", "Viewport", "data", "subject", "t", "profile", "key", "icon", "getIcon", "menuItems", "Header", "Block", "Title", "getLabel", "fallback", "end", "Trigger", "disabled", "length", "iconOnly", "variant", "label", "Body", "type", "CardContent", "limit"]
7
+ }
@@ -0,0 +1,96 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/RenamePopover/RenamePopover.tsx
4
+ import React, { useCallback, useEffect, useRef, useState } from "react";
5
+ import { useOperationInvoker } from "@dxos/app-framework/ui";
6
+ import { LayoutOperation } from "@dxos/app-toolkit";
7
+ import { Entity, Obj } from "@dxos/echo";
8
+ import { log } from "@dxos/log";
9
+ import { isSpace } from "@dxos/react-client/echo";
10
+ import { Input, useTranslation } from "@dxos/react-ui";
11
+ import { meta } from "#meta";
12
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-space/src/containers/RenamePopover/RenamePopover.tsx";
13
+ var getName = (subject) => (isSpace(subject) ? subject.properties.name : Entity.getLabel(subject)) ?? "";
14
+ var setName = (subject, name) => {
15
+ if (isSpace(subject)) {
16
+ Obj.update(subject.properties, (properties) => {
17
+ properties.name = name;
18
+ });
19
+ } else {
20
+ Entity.update(subject, () => Entity.setLabel(subject, name));
21
+ }
22
+ };
23
+ var RenamePopover = ({ subject }) => {
24
+ const { t } = useTranslation(meta.profile.key);
25
+ const space = isSpace(subject);
26
+ const { invokePromise } = useOperationInvoker();
27
+ const [name, setNameState] = useState(() => getName(subject));
28
+ const nameRef = useRef(name);
29
+ nameRef.current = name;
30
+ const initialNameRef = useRef(name);
31
+ const cancelledRef = useRef(false);
32
+ const committedRef = useRef(false);
33
+ const write = useCallback(() => {
34
+ try {
35
+ if (!cancelledRef.current && nameRef.current !== initialNameRef.current) {
36
+ setName(subject, nameRef.current);
37
+ }
38
+ } catch (err) {
39
+ log.error("Failed to rename", {
40
+ err
41
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 42, S: void 0 });
42
+ }
43
+ }, [
44
+ subject
45
+ ]);
46
+ const commit = useCallback(() => {
47
+ if (!committedRef.current) {
48
+ committedRef.current = true;
49
+ write();
50
+ }
51
+ }, [
52
+ write
53
+ ]);
54
+ useEffect(() => () => {
55
+ if (!committedRef.current) {
56
+ write();
57
+ }
58
+ }, [
59
+ write
60
+ ]);
61
+ const close = useCallback(() => {
62
+ void invokePromise(LayoutOperation.UpdatePopover, {
63
+ anchorId: "",
64
+ state: false
65
+ });
66
+ }, [
67
+ invokePromise
68
+ ]);
69
+ return /* @__PURE__ */ React.createElement("div", {
70
+ className: "p-2"
71
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
72
+ srOnly: true
73
+ }, t(space ? "space-name.label" : "object-name.label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
74
+ autoFocus: true,
75
+ value: name,
76
+ placeholder: t(space ? "unnamed-space.label" : "object.placeholder"),
77
+ "data-testid": "spacePlugin.rename.input",
78
+ onChange: ({ target: { value } }) => setNameState(value),
79
+ onFocus: (event) => event.target.select(),
80
+ onKeyDown: (event) => {
81
+ if (event.key === "Enter") {
82
+ commit();
83
+ close();
84
+ } else if (event.key === "Escape") {
85
+ event.preventDefault();
86
+ event.stopPropagation();
87
+ cancelledRef.current = true;
88
+ close();
89
+ }
90
+ }
91
+ })));
92
+ };
93
+ export {
94
+ RenamePopover as default
95
+ };
96
+ //# sourceMappingURL=RenamePopover-XBZAKNM7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/RenamePopover/RenamePopover.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Entity, Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { type Space, isSpace } from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\nexport type RenameSubject = Space | Entity.Unknown;\n\nconst getName = (subject: RenameSubject): string =>\n (isSpace(subject) ? subject.properties.name : Entity.getLabel(subject)) ?? '';\n\nconst setName = (subject: RenameSubject, name: string): void => {\n if (isSpace(subject)) {\n Obj.update(subject.properties, (properties) => {\n properties.name = name;\n });\n } else {\n Entity.update(subject, () => Entity.setLabel(subject, name));\n }\n};\n\nexport type RenamePopoverProps = { subject: RenameSubject };\n\n/**\n * Inline rename popover anchored to a navtree row. Commits on Enter or when dismissed; Escape cancels.\n */\nexport const RenamePopover = ({ subject }: RenamePopoverProps) => {\n const { t } = useTranslation(meta.profile.key);\n const space = isSpace(subject);\n const { invokePromise } = useOperationInvoker();\n const [name, setNameState] = useState(() => getName(subject));\n\n // Commit the latest value when the popover is dismissed (Enter, click-outside, or blur), unless cancelled.\n const nameRef = useRef(name);\n nameRef.current = name;\n const initialNameRef = useRef(name);\n const cancelledRef = useRef(false);\n // Enter commits then closes, which unmounts and runs the dismissal cleanup; guard against a duplicate write.\n const committedRef = useRef(false);\n\n const write = useCallback(() => {\n try {\n if (!cancelledRef.current && nameRef.current !== initialNameRef.current) {\n setName(subject, nameRef.current);\n }\n } catch (err) {\n log.error('Failed to rename', { err });\n }\n }, [subject]);\n\n const commit = useCallback(() => {\n if (!committedRef.current) {\n committedRef.current = true;\n write();\n }\n }, [write]);\n\n // Commit the latest value on dismissal (click-outside/blur) when the component unmounts, unless Enter\n // already committed or Escape cancelled. This must not set committedRef: under StrictMode the mount-time\n // setup/cleanup/setup cycle runs this cleanup before any interaction, and flipping the guard there would\n // suppress the real Enter commit.\n useEffect(\n () => () => {\n if (!committedRef.current) {\n write();\n }\n },\n [write],\n );\n\n const close = useCallback(() => {\n void invokePromise(LayoutOperation.UpdatePopover, { anchorId: '', state: false });\n }, [invokePromise]);\n\n return (\n <div className='p-2'>\n <Input.Root>\n <Input.Label srOnly>{t(space ? 'space-name.label' : 'object-name.label')}</Input.Label>\n <Input.TextInput\n autoFocus\n value={name}\n placeholder={t(space ? 'unnamed-space.label' : 'object.placeholder')}\n data-testid='spacePlugin.rename.input'\n onChange={({ target: { value } }) => setNameState(value)}\n onFocus={(event) => event.target.select()}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n commit();\n close();\n } else if (event.key === 'Escape') {\n // Own the dismissal so it does not also bubble to the deck popover's escape handler,\n // whose divergent teardown leaves stale state that makes the next open flicker.\n event.preventDefault();\n event.stopPropagation();\n cancelledRef.current = true;\n close();\n }\n }}\n />\n </Input.Root>\n </div>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,WAAWC,QAAQC,gBAAgB;AAEhE,SAASC,2BAA2B;AACpC,SAASC,uBAAuB;AAChC,SAASC,QAAQC,WAAW;AAC5B,SAASC,WAAW;AACpB,SAAqBC,eAAe;AACpC,SAASC,OAAOC,sBAAsB;AAEtC,SAASC,YAAY;AAIrB,IAAA,eAAiBC;IAIf,UAAYA,CAAAA,aAAU,QAAA,OAAA,IAAA,QAAA,WAAA,OAAA,OAAA,SAAA,OAAA,MAAA;cAChBC,CAAAA,SAAOD,SAAQE;cACjBA,OAAWC,GAAAA;AACb,QAAA,OAAA,QAAA,YAAA,CAAA,eAAA;AACK,iBAAA,OAAA;IACLV,CAAAA;EACF,OAAA;AACF,WAAA,OAAA,SAAA,MAAA,OAAA,SAAA,SAAA,IAAA,CAAA;EAIA;;AAKQW,IAAAA,gBAAgBJ,CAAAA,EAAAA,QAAAA,MAAAA;AACtB,QAAM,EAAEK,EAAAA,IAAAA,eAAkBd,KAAAA,QAAAA,GAAAA;AAC1B,QAAM,QAAOe,QAAAA,OAAgBhB;AAE7B,QAAA,EAAA,cAAA,IAAA,oBAAA;AACA,QAAMiB,CAAAA,MAAAA,YAAiBJ,IAAAA,SAAAA,MAAAA,QAAAA,OAAAA,CAAAA;AAEvB,QAAMK,UAAAA,OAAiBnB,IAAAA;AACvB,UAAMoB,UAAAA;AACN,QAAA,iBAAA,OAAA,IAAA;AACA,QAAMC,eAAerB,OAAO,KAAA;QAG1B,eAAI,OAAA,KAAA;gBACGoB,YAAaE,MAAAA;;AAElB,UAAA,CAAA,aAAA,WAAA,QAAA,YAAA,eAAA,SAAA;AACA,gBAAY,SAAA,QAAA,OAAA;MACZhB;aAAgCiB,KAAAA;AAAI,UAAA,MAAA,oBAAA;QACtC;MACC,GAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,OAAA,CAAA;IAACZ;KAAQ;IAEZ;;iBAEIU,YAAaC,MAAU;QACvBE,CAAAA,aAAAA,SAAAA;AACF,mBAAA,UAAA;AACC,YAAA;IAACA;KAAM;IAEV;EACA,CAAA;kBAMMA,MAAAA;AACF,QAAA,CAAA,aAAA,SAAA;AAEF,YAAA;IAACA;EAAM,GAAA;IAGT;;gBACsDC,YAAU,MAAA;SAAIC,cAAO,gBAAA,eAAA;MAAM,UAAA;MAC9E,OAAA;IAACV,CAAAA;KAAc;IAElB;;SAEI,sBAAA,cAACR,OAAU;IACImB,WAAAA;KAAkB,sBAAA,cAAqB,MAAA,MAAA,MAAA,sBACpD,cAAA,MAACnB,OAAMoB;IACLC,QAAAA;OACAC,QAAOhB,qBAAAA,mBAAAA,CAAAA,GAAAA,sBAAAA,cAAAA,MAAAA,WAAAA;IACPiB,WAAAA;IACAC,OAAAA;IACAC,aAAaC,EAAAA,QAAUJ,wBAAcb,oBAAaa;IAClDK,eAAUC;IACVC,UAAAA,CAAW,EAACD,QAAAA,EAAAA,MAAAA,EAAAA,MAAAA,aAAAA,KAAAA;aACNA,CAAAA,UAAS,MAAK,OAAS,OAAA;eACzBE,CAAAA,UAAAA;UACAC,MAAAA,QAAAA,SAAAA;AACF,eAAWH;AACT,cAAA;iBACA,MAAA,QAAA,UAAA;AAGAhB,cAAAA,eAAoB;AACpBmB,cAAAA,gBAAAA;AACF,qBAAA,UAAA;AACF,cAAA;;IAKR;;;",
6
+ "names": ["React", "useCallback", "useEffect", "useRef", "useState", "useOperationInvoker", "LayoutOperation", "Entity", "Obj", "log", "isSpace", "Input", "useTranslation", "meta", "subject", "update", "properties", "name", "space", "invokePromise", "setNameState", "nameRef", "initialNameRef", "cancelledRef", "committedRef", "current", "err", "write", "anchorId", "state", "srOnly", "TextInput", "autoFocus", "value", "placeholder", "data-testid", "onChange", "target", "onFocus", "event", "onKeyDown", "commit", "close"]
7
+ }
@@ -8,7 +8,7 @@ import { Settings } from "@dxos/react-ui-form";
8
8
  import { mx } from "@dxos/ui-theme";
9
9
  import { meta } from "#meta";
10
10
  var SchemaContainer = ({ space }) => {
11
- const { t } = useTranslation(meta.id);
11
+ const { t } = useTranslation(meta.profile.key);
12
12
  const types = useQuerySpaceTypes(space);
13
13
  return /* @__PURE__ */ React.createElement(Settings.Viewport, null, /* @__PURE__ */ React.createElement(Settings.Section, {
14
14
  title: t("schema-verbose.label"),
@@ -46,4 +46,4 @@ var useQuerySpaceTypes = (space) => {
46
46
  export {
47
47
  SchemaContainer as default
48
48
  };
49
- //# sourceMappingURL=SchemaContainer-Q4BP6X2M.mjs.map
49
+ //# sourceMappingURL=SchemaContainer-2NK5YB5O.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/SchemaContainer/SchemaContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Type } from '@dxos/echo';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\nimport { mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nexport const SchemaContainer = ({ space }: AppSurface.SpaceArticleProps) => {\n const { t } = useTranslation(meta.profile.key);\n const types = useQuerySpaceTypes(space);\n\n return (\n <Settings.Viewport>\n <Settings.Section title={t('schema-verbose.label')} description={t('schema.description')}>\n <div\n className={mx([\n 'grid md:col-span-2 grid-cols-subgrid gap-trim-sm items-center',\n '*:first:mt-0! *:last:mb-0! px-trim-md py-trim-md',\n 'border border-separator rounded-md',\n ])}\n >\n {types.length === 0 && <div className='text-center py-4'>{t('no-schemas-found.message')}</div>}\n {types.map((type) => (\n <div key={type.id}>{Type.getTypename(type)}</div>\n ))}\n </div>\n </Settings.Section>\n </Settings.Viewport>\n );\n};\n\n/**\n * Subscribe to and retrieve all types from a space's registry.\n */\nexport const useQuerySpaceTypes = (space: Space): Type.AnyEntity[] => {\n const [types, setTypes] = useState<Type.AnyEntity[]>(() => [...space.db.graph.registry.list().filter(Type.isType)]);\n\n useEffect(() => {\n setTypes([...space.db.graph.registry.list().filter(Type.isType)]);\n return space.db.graph.registry.changed.on(() => {\n setTypes([...space.db.graph.registry.list().filter(Type.isType)]);\n });\n }, [space]);\n\n return types;\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,WAAWC,gBAAgB;AAG3C,SAASC,YAAY;AAErB,SAASC,sBAAsB;AAC/B,SAASC,gBAAgB;AACzB,SAASC,UAAU;AAEnB,SAASC,YAAY;AAEd,IAAMC,kBAAkB,CAAC,EAAEC,MAAK,MAAgC;AACrE,QAAM,EAAEC,EAAC,IAAKN,eAAeG,KAAKI,QAAQC,GAAG;AAC7C,QAAMC,QAAQC,mBAAmBL,KAAAA;AAEjC,SACE,sBAAA,cAACJ,SAASU,UAAQ,MAChB,sBAAA,cAACV,SAASW,SAAO;IAACC,OAAOP,EAAE,sBAAA;IAAyBQ,aAAaR,EAAE,oBAAA;KACjE,sBAAA,cAACS,OAAAA;IACCC,WAAWd,GAAG;MACZ;MACA;MACA;KACD;KAEAO,MAAMQ,WAAW,KAAK,sBAAA,cAACF,OAAAA;IAAIC,WAAU;KAAoBV,EAAE,0BAAA,CAAA,GAC3DG,MAAMS,IAAI,CAACC,SACV,sBAAA,cAACJ,OAAAA;IAAIP,KAAKW,KAAKC;KAAKrB,KAAKsB,YAAYF,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAMjD;AAKO,IAAMT,qBAAqB,CAACL,UAAAA;AACjC,QAAM,CAACI,OAAOa,QAAAA,IAAYxB,SAA2B,MAAM;OAAIO,MAAMkB,GAAGC,MAAMC,SAASC,KAAI,EAAGC,OAAO5B,KAAK6B,MAAM;GAAE;AAElH/B,YAAU,MAAA;AACRyB,aAAS;SAAIjB,MAAMkB,GAAGC,MAAMC,SAASC,KAAI,EAAGC,OAAO5B,KAAK6B,MAAM;KAAE;AAChE,WAAOvB,MAAMkB,GAAGC,MAAMC,SAASI,QAAQC,GAAG,MAAA;AACxCR,eAAS;WAAIjB,MAAMkB,GAAGC,MAAMC,SAASC,KAAI,EAAGC,OAAO5B,KAAK6B,MAAM;OAAE;IAClE,CAAA;EACF,GAAG;IAACvB;GAAM;AAEV,SAAOI;AACT;",
6
+ "names": ["React", "useEffect", "useState", "Type", "useTranslation", "Settings", "mx", "meta", "SchemaContainer", "space", "t", "profile", "key", "types", "useQuerySpaceTypes", "Viewport", "Section", "title", "description", "div", "className", "length", "map", "type", "id", "getTypename", "setTypes", "db", "graph", "registry", "list", "filter", "isType", "changed", "on"]
7
+ }
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  SmallPresenceLive
3
- } from "./chunk-EEXRKYOD.mjs";
3
+ } from "./chunk-2LTGSUGQ.mjs";
4
4
  import "./chunk-J5LGTIGS.mjs";
5
5
  export {
6
6
  SmallPresenceLive as default
7
7
  };
8
- //# sourceMappingURL=SmallPresenceLive-GUF4WLUC.mjs.map
8
+ //# sourceMappingURL=SmallPresenceLive-L4H7WJOA.mjs.map
@@ -0,0 +1,78 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx
4
+ import React, { useCallback } from "react";
5
+ import { Surface } from "@dxos/app-framework/ui";
6
+ import { useAppGraph } from "@dxos/app-toolkit/ui";
7
+ import { useActionRunner } from "@dxos/plugin-graph";
8
+ import { Column, Panel, ScrollArea } from "@dxos/react-ui";
9
+ import { Menu, MenuBuilder, graphActions, useMenuBuilder } from "@dxos/react-ui-menu";
10
+ import { meta } from "#meta";
11
+ import { SpaceHomeContent, SpaceHomePinBottom } from "#types";
12
+ var SpaceHomeArticle = ({ role, attendableId, space }) => {
13
+ const { actions, onAction } = useMenuActions(attendableId);
14
+ return /* @__PURE__ */ React.createElement(Panel.Root, {
15
+ role
16
+ }, /* @__PURE__ */ React.createElement(Menu.Root, {
17
+ ...actions,
18
+ attendableId,
19
+ onAction
20
+ }, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
21
+ asChild: true
22
+ }, /* @__PURE__ */ React.createElement(Menu.Toolbar, null))), /* @__PURE__ */ React.createElement(Panel.Content, {
23
+ asChild: true
24
+ }, /* @__PURE__ */ React.createElement(Column.Root, {
25
+ style: {
26
+ gridTemplateRows: "minmax(0,1fr) auto"
27
+ }
28
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
29
+ orientation: "vertical",
30
+ centered: true,
31
+ padding: true
32
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement("div", {
33
+ className: "dx-document flex flex-col gap-4 py-4"
34
+ }, /* @__PURE__ */ React.createElement(Surface.Surface, {
35
+ type: SpaceHomeContent,
36
+ data: {
37
+ space
38
+ }
39
+ })))), /* @__PURE__ */ React.createElement(Column.Center, {
40
+ classNames: "dx-document pb-4"
41
+ }, /* @__PURE__ */ React.createElement(Surface.Surface, {
42
+ type: SpaceHomePinBottom,
43
+ data: {
44
+ space
45
+ },
46
+ limit: 1
47
+ })))));
48
+ };
49
+ var useMenuActions = (attendableId) => {
50
+ const { graph } = useAppGraph();
51
+ const runAction = useActionRunner();
52
+ const menuActions = useMenuBuilder((get) => {
53
+ if (!attendableId) {
54
+ return MenuBuilder.make().build();
55
+ }
56
+ return MenuBuilder.make().subgraph(graphActions(graph, get, attendableId, {
57
+ filter: (action) => action.properties.disposition === "toolbar"
58
+ })).build();
59
+ }, [
60
+ graph,
61
+ attendableId
62
+ ]);
63
+ const onAction = useCallback((action) => {
64
+ void runAction(action, {
65
+ caller: meta.profile.key
66
+ });
67
+ }, [
68
+ runAction
69
+ ]);
70
+ return {
71
+ actions: menuActions,
72
+ onAction
73
+ };
74
+ };
75
+ export {
76
+ SpaceHomeArticle as default
77
+ };
78
+ //# sourceMappingURL=SpaceHomeArticle-ZV7EERLS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { Column, Panel, ScrollArea } from '@dxos/react-ui';\nimport {\n type ActionExecutor,\n type ActionGraphProps,\n Menu,\n MenuBuilder,\n graphActions,\n useMenuBuilder,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { SpaceHomeContent, SpaceHomePinBottom } from '#types';\n\nexport type SpaceHomeArticleProps = AppSurface.SpaceArticleProps;\n\n/**\n * Per-space Home article shell. Owns only the chrome: a toolbar sourced from graph actions\n * contributed with `disposition: 'toolbar'` (e.g. Start tour / Hide Welcome from plugin-support),\n * and a Column layout that delegates its body to surface contributors:\n *\n * - `space-home-content`: scrollable region (Welcome panel, recent-objects masonry, starter prompts).\n * - `space-home-pin-bottom`: pinned region (assistant prompt), capped at one contributor.\n *\n * The Space is read from `data.subject` (the Home node carries the Space as its data).\n */\nexport const SpaceHomeArticle = ({ role, attendableId, space }: SpaceHomeArticleProps) => {\n const { actions, onAction } = useMenuActions(attendableId);\n\n return (\n <Panel.Root role={role}>\n <Menu.Root {...actions} attendableId={attendableId} onAction={onAction}>\n <Panel.Toolbar asChild>\n <Menu.Toolbar />\n </Panel.Toolbar>\n </Menu.Root>\n <Panel.Content asChild>\n <Column.Root style={{ gridTemplateRows: 'minmax(0,1fr) auto' }}>\n <ScrollArea.Root orientation='vertical' centered padding>\n <ScrollArea.Viewport>\n <div className='dx-document flex flex-col gap-4 py-4'>\n <Surface.Surface type={SpaceHomeContent} data={{ space }} />\n </div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <Column.Center classNames='dx-document pb-4'>\n <Surface.Surface type={SpaceHomePinBottom} data={{ space }} limit={1} />\n </Column.Center>\n </Column.Root>\n </Panel.Content>\n </Panel.Root>\n );\n};\n\n//\n// Hooks\n//\n\n/**\n * Builds the toolbar from contributed graph actions for the Home node. Actions opt into the\n * toolbar via `disposition: 'toolbar'`; the Home shell contributes none itself, so the toolbar\n * is empty unless another plugin (e.g. plugin-support's tour/welcome actions) contributes.\n */\nconst useMenuActions = (\n attendableId?: string,\n): { actions: ReturnType<typeof useMenuBuilder>; onAction: ActionExecutor } => {\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n\n const menuActions = useMenuBuilder(\n (get): ActionGraphProps => {\n if (!attendableId) {\n return MenuBuilder.make().build();\n }\n return MenuBuilder.make()\n .subgraph(\n graphActions(graph, get, attendableId, { filter: (action) => action.properties.disposition === 'toolbar' }),\n )\n .build();\n },\n [graph, attendableId],\n );\n\n const onAction: ActionExecutor = useCallback(\n (action) => {\n void runAction(action, { caller: meta.profile.key });\n },\n [runAction],\n );\n\n return { actions: menuActions, onAction };\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,mBAAmB;AAEnC,SAASC,eAAe;AACxB,SAA0BC,mBAAmB;AAC7C,SAASC,uBAAuB;AAChC,SAASC,QAAQC,OAAOC,kBAAkB;AAC1C,SAGEC,MACAC,aACAC,cACAC,sBACK;AAEP,SAASC,YAAY;AACrB,SAASC,kBAAkBC,0BAA0B;AAc9C,IAAMC,mBAAmB,CAAC,EAAEC,MAAMC,cAAcC,MAAK,MAAyB;AACnF,QAAM,EAAEC,SAASC,SAAQ,IAAKC,eAAeJ,YAAAA;AAE7C,SACE,sBAAA,cAACX,MAAMgB,MAAI;IAACN;KACV,sBAAA,cAACR,KAAKc,MAAI;IAAE,GAAGH;IAASF;IAA4BG;KAClD,sBAAA,cAACd,MAAMiB,SAAO;IAACC,SAAAA;KACb,sBAAA,cAAChB,KAAKe,SAAO,IAAA,CAAA,CAAA,GAGjB,sBAAA,cAACjB,MAAMmB,SAAO;IAACD,SAAAA;KACb,sBAAA,cAACnB,OAAOiB,MAAI;IAACI,OAAO;MAAEC,kBAAkB;IAAqB;KAC3D,sBAAA,cAACpB,WAAWe,MAAI;IAACM,aAAY;IAAWC,UAAAA;IAASC,SAAAA;KAC/C,sBAAA,cAACvB,WAAWwB,UAAQ,MAClB,sBAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAAC/B,QAAQA,SAAO;IAACgC,MAAMrB;IAAkBsB,MAAM;MAAEjB;IAAM;SAI7D,sBAAA,cAACb,OAAO+B,QAAM;IAACC,YAAW;KACxB,sBAAA,cAACnC,QAAQA,SAAO;IAACgC,MAAMpB;IAAoBqB,MAAM;MAAEjB;IAAM;IAAGoB,OAAO;;AAM/E;AAWA,IAAMjB,iBAAiB,CACrBJ,iBAAAA;AAEA,QAAM,EAAEsB,MAAK,IAAKpC,YAAAA;AAClB,QAAMqC,YAAYpC,gBAAAA;AAElB,QAAMqC,cAAc9B,eAClB,CAAC+B,QAAAA;AACC,QAAI,CAACzB,cAAc;AACjB,aAAOR,YAAYkC,KAAI,EAAGC,MAAK;IACjC;AACA,WAAOnC,YAAYkC,KAAI,EACpBE,SACCnC,aAAa6B,OAAOG,KAAKzB,cAAc;MAAE6B,QAAQ,CAACC,WAAWA,OAAOC,WAAWC,gBAAgB;IAAU,CAAA,CAAA,EAE1GL,MAAK;EACV,GACA;IAACL;IAAOtB;GAAa;AAGvB,QAAMG,WAA2BnB,YAC/B,CAAC8C,WAAAA;AACC,SAAKP,UAAUO,QAAQ;MAAEG,QAAQtC,KAAKuC,QAAQC;IAAI,CAAA;EACpD,GACA;IAACZ;GAAU;AAGb,SAAO;IAAErB,SAASsB;IAAarB;EAAS;AAC1C;",
6
+ "names": ["React", "useCallback", "Surface", "useAppGraph", "useActionRunner", "Column", "Panel", "ScrollArea", "Menu", "MenuBuilder", "graphActions", "useMenuBuilder", "meta", "SpaceHomeContent", "SpaceHomePinBottom", "SpaceHomeArticle", "role", "attendableId", "space", "actions", "onAction", "useMenuActions", "Root", "Toolbar", "asChild", "Content", "style", "gridTemplateRows", "orientation", "centered", "padding", "Viewport", "div", "className", "type", "data", "Center", "classNames", "limit", "graph", "runAction", "menuActions", "get", "make", "build", "subgraph", "filter", "action", "properties", "disposition", "caller", "profile", "key"]
7
+ }
@@ -0,0 +1,83 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx
4
+ import * as Option from "effect/Option";
5
+ import React, { useCallback, useMemo } from "react";
6
+ import { useCapabilities, useOperationInvoker } from "@dxos/app-framework/ui";
7
+ import { AppCapabilities, LayoutOperation, Paths } from "@dxos/app-toolkit";
8
+ import { Collection, Filter, Obj, Order, Query, Type } from "@dxos/echo";
9
+ import { HiddenAnnotation, getTypeAnnotation } from "@dxos/echo/Annotation";
10
+ import { Kind as EntityKind } from "@dxos/echo/Entity";
11
+ import { useQuery } from "@dxos/react-client/echo";
12
+ import { Card, Icon, toLocalizedString, useTranslation } from "@dxos/react-ui";
13
+ import { Masonry } from "@dxos/react-ui-masonry";
14
+ import { getStyles } from "@dxos/ui-theme";
15
+ import { meta } from "#meta";
16
+ var RECENT_LIMIT = 10;
17
+ var SpaceHomeRecent = ({ space }) => {
18
+ const { t } = useTranslation(meta.profile.key);
19
+ const schemas = useCapabilities(AppCapabilities.Schema);
20
+ const filter = useMemo(() => {
21
+ const collectionTypename = Type.getTypename(Collection.Collection);
22
+ const types = schemas.flat().filter(Type.isType).filter((type) => getTypeAnnotation(Type.getSchema(type))?.kind !== EntityKind.Relation).filter((type) => !HiddenAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => false))).filter((type) => Type.getTypename(type) !== collectionTypename);
23
+ return types.length > 0 ? Filter.or(...types.map((type) => Filter.type(type))) : void 0;
24
+ }, [
25
+ schemas
26
+ ]);
27
+ const query = useMemo(() => Query.select(filter ?? Filter.everything()).orderBy(Order.updated("desc")).limit(RECENT_LIMIT), [
28
+ filter
29
+ ]);
30
+ const recent = useQuery(filter && space ? space.db : void 0, query);
31
+ if (recent.length === 0) {
32
+ return null;
33
+ }
34
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("h2", {
35
+ className: "text-sm font-medium text-description"
36
+ }, t("space-home.recent.heading")), /* @__PURE__ */ React.createElement(Masonry.Root, {
37
+ Tile: RecentObjectTile
38
+ }, /* @__PURE__ */ React.createElement(Masonry.Content, {
39
+ padding: false
40
+ }, /* @__PURE__ */ React.createElement(Masonry.Viewport, {
41
+ classNames: "py-2",
42
+ items: recent,
43
+ getId: (object) => object.id
44
+ }))));
45
+ };
46
+ var RecentObjectTile = ({ data }) => {
47
+ const { invokePromise } = useOperationInvoker();
48
+ const { t } = useTranslation(meta.profile.key);
49
+ const typename = Obj.getTypename(data);
50
+ const label = toLocalizedString(Obj.getLabel(data) ?? (typename ? [
51
+ "object-name.placeholder",
52
+ {
53
+ ns: typename,
54
+ defaultValue: "New item"
55
+ }
56
+ ] : ""), t);
57
+ const iconAnnotation = Obj.getIcon(data);
58
+ const icon = iconAnnotation?.icon ?? "ph--circle-dashed--regular";
59
+ const iconStyles = iconAnnotation?.hue ? getStyles(iconAnnotation.hue) : void 0;
60
+ const handleClick = useCallback(() => {
61
+ void invokePromise(LayoutOperation.Open, {
62
+ subject: [
63
+ Paths.getObjectPathFromObject(data)
64
+ ]
65
+ });
66
+ }, [
67
+ invokePromise,
68
+ data
69
+ ]);
70
+ return /* @__PURE__ */ React.createElement(Card.Root, {
71
+ role: "button",
72
+ classNames: "cursor-pointer",
73
+ onClick: handleClick
74
+ }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Block, null, /* @__PURE__ */ React.createElement(Icon, {
75
+ icon,
76
+ classNames: iconStyles?.text
77
+ })), /* @__PURE__ */ React.createElement(Card.Title, null, label)));
78
+ };
79
+ RecentObjectTile.displayName = "RecentObjectTile";
80
+ export {
81
+ SpaceHomeRecent as default
82
+ };
83
+ //# sourceMappingURL=SpaceHomeRecent-ZR4LIIUD.mjs.map