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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/dist/lib/neutral/{CollectionArticle-S3OF5KJ7.mjs → CollectionArticle-BMH7SZ7Q.mjs} +9 -12
  2. package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs.map +7 -0
  3. package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs → CollectionSection-BLYTGOKH.mjs} +2 -2
  4. package/dist/lib/neutral/{CollectionSection-A5WRHE5Z.mjs.map → CollectionSection-BLYTGOKH.mjs.map} +3 -3
  5. package/dist/lib/neutral/{CreateObjectDialog-66R3K6I3.mjs → CreateObjectDialog-5454N3FJ.mjs} +29 -14
  6. package/dist/lib/neutral/CreateObjectDialog-5454N3FJ.mjs.map +7 -0
  7. package/dist/lib/neutral/{CreateSpaceDialog-CDGSEIJB.mjs → CreateSpaceDialog-WWNUTLVK.mjs} +6 -6
  8. package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs.map +7 -0
  9. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs +58 -0
  10. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs.map +7 -0
  11. package/dist/lib/neutral/{ImportSpaceDialog-7GKV4OTF.mjs → ImportSpaceDialog-CSSRTFAO.mjs} +4 -4
  12. package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs.map +7 -0
  13. package/dist/lib/neutral/{InlineSyncStatus-TBJKZCH7.mjs → InlineSyncStatus-UOUTAPCU.mjs} +4 -4
  14. package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs.map +7 -0
  15. package/dist/lib/neutral/{JoinDialog-SSFKRFTJ.mjs → JoinDialog-ATNUCNL2.mjs} +13 -30
  16. package/dist/lib/neutral/JoinDialog-ATNUCNL2.mjs.map +7 -0
  17. package/dist/lib/neutral/{MembersContainer-KMCQDWCS.mjs → MembersContainer-C4ZTP6ZW.mjs} +13 -9
  18. package/dist/lib/neutral/MembersContainer-C4ZTP6ZW.mjs.map +7 -0
  19. package/dist/lib/neutral/{MenuFooter-5JT7V5FZ.mjs → MenuFooter-FWE5LFM4.mjs} +6 -6
  20. package/dist/lib/neutral/MenuFooter-FWE5LFM4.mjs.map +7 -0
  21. package/dist/lib/neutral/{ObjectCardStack-IXNU3HEN.mjs → ObjectCardStack-DHVDRNRK.mjs} +4 -4
  22. package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs.map +7 -0
  23. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs +102 -0
  24. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs.map +7 -0
  25. package/dist/lib/neutral/{RelatedArticle-YDNGUDAJ.mjs → RelatedArticle-Z777WVDW.mjs} +11 -10
  26. package/dist/lib/neutral/RelatedArticle-Z777WVDW.mjs.map +7 -0
  27. package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs +104 -0
  28. package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs.map +7 -0
  29. package/dist/lib/neutral/{SchemaContainer-Q4BP6X2M.mjs → SchemaContainer-4GJKQBXM.mjs} +9 -5
  30. package/dist/lib/neutral/SchemaContainer-4GJKQBXM.mjs.map +7 -0
  31. package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs → SmallPresenceLive-FW3AMEY5.mjs} +2 -2
  32. package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs +78 -0
  33. package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs.map +7 -0
  34. package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs +89 -0
  35. package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs.map +7 -0
  36. package/dist/lib/neutral/SpacePlugin.mjs +1 -1
  37. package/dist/lib/neutral/SpacePlugin.node.mjs +4 -4
  38. package/dist/lib/neutral/SpacePlugin.node.mjs.map +3 -3
  39. package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs → SpacePresence-T37WH43Y.mjs} +2 -2
  40. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs +60 -0
  41. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs.map +7 -0
  42. package/dist/lib/neutral/{SpaceSettingsContainer-IB34TEOB.mjs → SpaceSettingsContainer-72CJWELM.mjs} +44 -41
  43. package/dist/lib/neutral/SpaceSettingsContainer-72CJWELM.mjs.map +7 -0
  44. package/dist/lib/neutral/{SyncStatus-CWOXWDDZ.mjs → SyncStatus-J7CHLO5O.mjs} +3 -3
  45. package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs.map +7 -0
  46. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs +143 -0
  47. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs.map +7 -0
  48. package/dist/lib/neutral/{add-object-QYOMCBJA.mjs → add-object-H2N4AOQJ.mjs} +16 -16
  49. package/dist/lib/neutral/add-object-H2N4AOQJ.mjs.map +7 -0
  50. package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs → add-relation-BGTLART5.mjs} +3 -3
  51. package/dist/lib/neutral/{add-type-CZVKSEIW.mjs → add-type-JIDLRANR.mjs} +3 -3
  52. package/dist/lib/neutral/{add-type-CZVKSEIW.mjs.map → add-type-JIDLRANR.mjs.map} +1 -1
  53. package/dist/lib/neutral/{app-graph-builder-SQGCUCDO.mjs → app-graph-builder-7H2KOD4B.mjs} +284 -203
  54. package/dist/lib/neutral/app-graph-builder-7H2KOD4B.mjs.map +7 -0
  55. package/dist/lib/neutral/capabilities/index.mjs +14 -16
  56. package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
  57. package/dist/lib/neutral/capabilities/node.mjs +3 -3
  58. package/dist/lib/neutral/{chunk-7WUJENBF.mjs → chunk-52ASDNRA.mjs} +5 -6
  59. package/dist/lib/neutral/chunk-52ASDNRA.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-5ZZS3KMK.mjs +46 -0
  61. package/dist/lib/neutral/chunk-5ZZS3KMK.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-C2ULK22J.mjs +17 -0
  63. package/dist/lib/neutral/chunk-C2ULK22J.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-K34BPPQE.mjs → chunk-F5KLUP2P.mjs} +35 -18
  65. package/dist/lib/neutral/chunk-F5KLUP2P.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-JHZGRYGS.mjs → chunk-G2KHP7FX.mjs} +2 -2
  67. package/dist/lib/neutral/{chunk-JHZGRYGS.mjs.map → chunk-G2KHP7FX.mjs.map} +2 -2
  68. package/dist/lib/neutral/{chunk-YY62663T.mjs → chunk-LMUG6PEJ.mjs} +4 -5
  69. package/dist/lib/neutral/chunk-LMUG6PEJ.mjs.map +7 -0
  70. package/dist/lib/neutral/{chunk-EEXRKYOD.mjs → chunk-RAAHDTVF.mjs} +9 -5
  71. package/dist/lib/neutral/chunk-RAAHDTVF.mjs.map +7 -0
  72. package/dist/lib/neutral/{chunk-BBQR23DW.mjs → chunk-SPWAMXNR.mjs} +105 -128
  73. package/dist/lib/neutral/chunk-SPWAMXNR.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-U5WTDOMV.mjs +8 -0
  75. package/dist/lib/neutral/chunk-V7JALUM3.mjs +9 -0
  76. package/dist/lib/neutral/chunk-V7JALUM3.mjs.map +7 -0
  77. package/dist/lib/neutral/{close-FGQN37PK.mjs → close-5WEQZRNK.mjs} +3 -3
  78. package/dist/lib/neutral/components/index.mjs +22 -23
  79. package/dist/lib/neutral/components/index.mjs.map +4 -4
  80. package/dist/lib/neutral/constants.mjs +16 -0
  81. package/dist/lib/neutral/constants.mjs.map +7 -0
  82. package/dist/lib/neutral/containers/index.mjs +29 -23
  83. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  84. package/dist/lib/neutral/{create-EPIFSRJA.mjs → create-QZ47FHQU.mjs} +7 -7
  85. package/dist/lib/neutral/create-QZ47FHQU.mjs.map +7 -0
  86. package/dist/lib/neutral/{create-object-22WUOWZQ.mjs → create-object-ZU6FZW5X.mjs} +1 -6
  87. package/dist/lib/neutral/create-object-ZU6FZW5X.mjs.map +7 -0
  88. package/dist/lib/neutral/{delete-LIA5M3WI.mjs → delete-SPCU2VFM.mjs} +3 -3
  89. package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs → delete-field-TAKJVEAD.mjs} +3 -3
  90. package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs → duplicate-object-BUPZOO6S.mjs} +3 -3
  91. package/dist/lib/neutral/{export-space-VWJHVXWF.mjs → export-space-S5SCAL4M.mjs} +3 -3
  92. package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs → get-share-link-CLM5IQRL.mjs} +4 -4
  93. package/dist/lib/neutral/hooks/index.mjs +16 -4
  94. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  95. package/dist/lib/neutral/{identity-created-57RML5XT.mjs → identity-created-BEYMLBK4.mjs} +5 -5
  96. package/dist/lib/neutral/identity-created-BEYMLBK4.mjs.map +7 -0
  97. package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs → import-space-LJQK3KT7.mjs} +3 -3
  98. package/dist/lib/neutral/index.mjs +16 -6
  99. package/dist/lib/neutral/join-FSODYIOC.mjs +54 -0
  100. package/dist/lib/neutral/join-FSODYIOC.mjs.map +7 -0
  101. package/dist/lib/neutral/meta.json +1 -1
  102. package/dist/lib/neutral/meta.mjs +1 -1
  103. package/dist/lib/neutral/{migrate-G7I52UKD.mjs → migrate-WHM6LU7L.mjs} +4 -4
  104. package/dist/lib/neutral/{migrate-G7I52UKD.mjs.map → migrate-WHM6LU7L.mjs.map} +3 -3
  105. package/dist/lib/neutral/{navigation-handler-QQJYEMAS.mjs → navigation-handler-ZF7MV2HL.mjs} +16 -10
  106. package/dist/lib/neutral/navigation-handler-ZF7MV2HL.mjs.map +7 -0
  107. package/dist/lib/neutral/{navigation-resolver-IFVQRCGU.mjs → navigation-resolver-KBESOSWU.mjs} +11 -11
  108. package/dist/lib/neutral/navigation-resolver-KBESOSWU.mjs.map +7 -0
  109. package/dist/lib/neutral/{open-CPWVZSI4.mjs → open-JCXTL3SK.mjs} +3 -3
  110. package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs → open-create-object-WAIAU7TA.mjs} +6 -6
  111. package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs → open-create-space-VU47FWPZ.mjs} +6 -6
  112. package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs → open-import-space-GUHIEWYB.mjs} +6 -6
  113. package/dist/lib/neutral/{open-members-BEXOSSBS.mjs → open-members-MLLBHKUU.mjs} +6 -6
  114. package/dist/lib/neutral/open-members-MLLBHKUU.mjs.map +7 -0
  115. package/dist/lib/neutral/{open-settings-RHDBW2K5.mjs → open-settings-DTPZF4U4.mjs} +6 -6
  116. package/dist/lib/neutral/open-settings-DTPZF4U4.mjs.map +7 -0
  117. package/dist/lib/neutral/operations/index.mjs +3 -3
  118. package/dist/lib/neutral/plugin.mjs +4 -4
  119. package/dist/lib/neutral/{react-root-2DJPZQT4.mjs → react-root-YLYRCSAZ.mjs} +2 -2
  120. package/dist/lib/neutral/{react-root-2DJPZQT4.mjs.map → react-root-YLYRCSAZ.mjs.map} +3 -3
  121. package/dist/lib/neutral/{react-surface-LYCTOQLY.mjs → react-surface-LRA7GIFN.mjs} +77 -80
  122. package/dist/lib/neutral/react-surface-LRA7GIFN.mjs.map +7 -0
  123. package/dist/lib/neutral/{remove-objects-OWDMA4IF.mjs → remove-objects-WEO66EDS.mjs} +5 -5
  124. package/dist/lib/neutral/remove-objects-WEO66EDS.mjs.map +7 -0
  125. package/dist/lib/neutral/{rename-SR6BBSPU.mjs → rename-Q6UNCBIM.mjs} +9 -8
  126. package/dist/lib/neutral/rename-Q6UNCBIM.mjs.map +7 -0
  127. package/dist/lib/neutral/{rename-object-5H6E5AOX.mjs → rename-object-2UCEGU7U.mjs} +9 -8
  128. package/dist/lib/neutral/rename-object-2UCEGU7U.mjs.map +7 -0
  129. package/dist/lib/neutral/{repair-PSYRVSJ6.mjs → repair-HMH476U3.mjs} +3 -3
  130. package/dist/lib/neutral/repair-HMH476U3.mjs.map +7 -0
  131. package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs → restore-field-6CQAFOXY.mjs} +3 -3
  132. package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs → restore-objects-3VINLP7C.mjs} +3 -3
  133. package/dist/lib/neutral/{settings-Q32EQCHX.mjs → settings-5IBSYBVU.mjs} +3 -3
  134. package/dist/lib/neutral/{settings-Q32EQCHX.mjs.map → settings-5IBSYBVU.mjs.map} +3 -3
  135. package/dist/lib/neutral/{share-5Y4NZA75.mjs → share-A4WPILNF.mjs} +3 -3
  136. package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs → snapshot-HBYMAPA7.mjs} +3 -3
  137. package/dist/lib/neutral/{spaces-ready-GBF72QJH.mjs → spaces-ready-GWMSU72V.mjs} +12 -12
  138. package/dist/lib/neutral/spaces-ready-GWMSU72V.mjs.map +7 -0
  139. package/dist/lib/neutral/{state-DPBOZRAW.mjs → state-KMH2NUAL.mjs} +2 -2
  140. package/dist/lib/neutral/state-KMH2NUAL.mjs.map +7 -0
  141. package/dist/lib/neutral/testing.mjs +1 -1
  142. package/dist/lib/neutral/translations.mjs +18 -8
  143. package/dist/lib/neutral/translations.mjs.map +3 -3
  144. package/dist/lib/neutral/types/index.mjs +9 -3
  145. package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs → undo-mappings-P43EAUGI.mjs} +5 -5
  146. package/dist/lib/neutral/{undo-mappings-OBRQOYN4.mjs.map → undo-mappings-P43EAUGI.mjs.map} +3 -3
  147. package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs → wait-for-object-U6P2NNWY.mjs} +3 -3
  148. package/dist/types/dx.config.d.ts +28 -0
  149. package/dist/types/dx.config.d.ts.map +1 -0
  150. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  151. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  152. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +19 -25
  153. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -1
  154. package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts.map +1 -1
  155. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts +15 -33
  156. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts.map +1 -1
  157. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts +3 -2
  158. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts.map +1 -1
  159. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +1 -5
  160. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -1
  161. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +29 -4
  162. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
  163. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
  164. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
  165. package/dist/types/src/capabilities/create-object.d.ts +1 -33
  166. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  167. package/dist/types/src/capabilities/index.d.ts +10 -54
  168. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  169. package/dist/types/src/capabilities/navigation-handler/index.d.ts +1 -1
  170. package/dist/types/src/capabilities/navigation-handler/index.d.ts.map +1 -1
  171. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts +1 -2
  172. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts.map +1 -1
  173. package/dist/types/src/capabilities/navigation-resolver.d.ts +1 -2
  174. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
  175. package/dist/types/src/capabilities/node.d.ts +3 -33
  176. package/dist/types/src/capabilities/node.d.ts.map +1 -1
  177. package/dist/types/src/capabilities/react-root.d.ts +1 -5
  178. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  179. package/dist/types/src/capabilities/react-surface.d.ts +2 -2
  180. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  181. package/dist/types/src/capabilities/repair.d.ts +1 -2
  182. package/dist/types/src/capabilities/repair.d.ts.map +1 -1
  183. package/dist/types/src/capabilities/settings.d.ts +1 -3
  184. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  185. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  186. package/dist/types/src/capabilities/state.d.ts +1 -13
  187. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  188. package/dist/types/src/capabilities/undo-mappings.d.ts +2 -3
  189. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
  190. package/dist/types/src/commands/database/add.d.ts.map +1 -1
  191. package/dist/types/src/commands/queue/query.d.ts.map +1 -1
  192. package/dist/types/src/components/ForeignKeys/ForeignKeys.d.ts.map +1 -1
  193. package/dist/types/src/components/index.d.ts +2 -2
  194. package/dist/types/src/components/index.d.ts.map +1 -1
  195. package/dist/types/src/constants.d.ts +1 -2
  196. package/dist/types/src/constants.d.ts.map +1 -1
  197. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
  198. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +142 -52
  199. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  200. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
  201. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +142 -52
  202. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
  203. package/dist/types/src/containers/DefaultProperties/DefaultProperties.d.ts +15 -0
  204. package/dist/types/src/containers/DefaultProperties/DefaultProperties.d.ts.map +1 -0
  205. package/dist/types/src/containers/DefaultProperties/index.d.ts +2 -0
  206. package/dist/types/src/containers/DefaultProperties/index.d.ts.map +1 -0
  207. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
  208. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +142 -52
  209. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
  210. package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts.map +1 -1
  211. package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -1
  212. package/dist/types/src/containers/RelatedArticle/RelatedArticle.d.ts.map +1 -1
  213. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +16 -0
  214. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -0
  215. package/dist/types/src/containers/RenamePopover/index.d.ts +3 -0
  216. package/dist/types/src/containers/RenamePopover/index.d.ts.map +1 -0
  217. package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts.map +1 -1
  218. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts +15 -0
  219. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts.map +1 -0
  220. package/dist/types/src/containers/SpaceHomeArticle/index.d.ts +2 -0
  221. package/dist/types/src/containers/{ObjectProperties → SpaceHomeArticle}/index.d.ts.map +1 -1
  222. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts +22 -0
  223. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -0
  224. package/dist/types/src/containers/SpaceHomeRecent/index.d.ts +2 -0
  225. package/dist/types/src/containers/SpaceHomeRecent/index.d.ts.map +1 -0
  226. package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -1
  227. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +142 -52
  228. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
  229. package/dist/types/src/containers/SpacePresence/index.d.ts +1 -1
  230. package/dist/types/src/containers/SpacePresence/index.d.ts.map +1 -1
  231. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts +11 -0
  232. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts.map +1 -0
  233. package/dist/types/src/{components → containers}/SpaceSettings/SpaceSettings.stories.d.ts +143 -53
  234. package/dist/types/src/{components → containers}/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
  235. package/dist/types/src/{components → containers}/SpaceSettings/index.d.ts.map +1 -1
  236. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +142 -52
  237. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
  238. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +142 -52
  239. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  240. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts +16 -0
  241. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts.map +1 -0
  242. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts +21 -0
  243. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts.map +1 -0
  244. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts +2 -0
  245. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts.map +1 -0
  246. package/dist/types/src/containers/index.d.ts +7 -3
  247. package/dist/types/src/containers/index.d.ts.map +1 -1
  248. package/dist/types/src/errors.d.ts +33 -0
  249. package/dist/types/src/errors.d.ts.map +1 -0
  250. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  251. package/dist/types/src/hooks/useRelatedObjects.d.ts.map +1 -1
  252. package/dist/types/src/index.d.ts +1 -0
  253. package/dist/types/src/index.d.ts.map +1 -1
  254. package/dist/types/src/meta.d.ts +32 -2
  255. package/dist/types/src/meta.d.ts.map +1 -1
  256. package/dist/types/src/operations/add-object.d.ts.map +1 -1
  257. package/dist/types/src/operations/definitions.d.ts +9 -37
  258. package/dist/types/src/operations/definitions.d.ts.map +1 -1
  259. package/dist/types/src/operations/helpers.d.ts.map +1 -1
  260. package/dist/types/src/operations/join.d.ts.map +1 -1
  261. package/dist/types/src/operations/remove-objects.d.ts.map +1 -1
  262. package/dist/types/src/operations/rename-object.d.ts.map +1 -1
  263. package/dist/types/src/operations/rename.d.ts.map +1 -1
  264. package/dist/types/src/translations.d.ts +142 -52
  265. package/dist/types/src/translations.d.ts.map +1 -1
  266. package/dist/types/src/types/Settings.d.ts +3 -1
  267. package/dist/types/src/types/Settings.d.ts.map +1 -1
  268. package/dist/types/src/types/capabilities.d.ts +1 -1
  269. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  270. package/dist/types/src/types/events.d.ts.map +1 -1
  271. package/dist/types/src/types/form.d.ts +7 -1
  272. package/dist/types/src/types/form.d.ts.map +1 -1
  273. package/dist/types/src/types/index.d.ts +1 -0
  274. package/dist/types/src/types/index.d.ts.map +1 -1
  275. package/dist/types/src/types/surface.d.ts +26 -0
  276. package/dist/types/src/types/surface.d.ts.map +1 -0
  277. package/dist/types/src/types/types.d.ts +7 -0
  278. package/dist/types/src/types/types.d.ts.map +1 -1
  279. package/dist/types/src/util.d.ts.map +1 -1
  280. package/dist/types/tsconfig.tsbuildinfo +1 -1
  281. package/dx.config.ts +35 -0
  282. package/package.json +71 -59
  283. package/src/SpacePlugin.test.ts +1 -1
  284. package/src/SpacePlugin.ts +4 -10
  285. package/src/capabilities/app-graph-builder/extensions/collections.ts +82 -69
  286. package/src/capabilities/app-graph-builder/extensions/companions.ts +6 -5
  287. package/src/capabilities/app-graph-builder/extensions/database.ts +118 -91
  288. package/src/capabilities/app-graph-builder/extensions/settings.ts +17 -14
  289. package/src/capabilities/app-graph-builder/extensions/shared.test.ts +13 -9
  290. package/src/capabilities/app-graph-builder/extensions/shared.ts +5 -23
  291. package/src/capabilities/app-graph-builder/extensions/spaces.ts +78 -29
  292. package/src/capabilities/create-object.ts +0 -5
  293. package/src/capabilities/identity-created.ts +4 -4
  294. package/src/capabilities/index.ts +0 -1
  295. package/src/capabilities/navigation-handler/navigation-handler.ts +14 -4
  296. package/src/capabilities/navigation-resolver.ts +13 -20
  297. package/src/capabilities/react-root.tsx +1 -1
  298. package/src/capabilities/react-surface.tsx +95 -99
  299. package/src/capabilities/repair.ts +4 -2
  300. package/src/capabilities/settings.ts +2 -2
  301. package/src/capabilities/spaces-ready.ts +9 -16
  302. package/src/capabilities/state.ts +1 -1
  303. package/src/capabilities/undo-mappings.ts +3 -3
  304. package/src/commands/database/add.ts +4 -2
  305. package/src/commands/queue/query.ts +4 -3
  306. package/src/components/AwaitingObject/AwaitingObject.tsx +1 -1
  307. package/src/components/CreateObjectPanel/CreateObjectPanel.tsx +2 -2
  308. package/src/components/ForeignKeys/ForeignKeys.tsx +21 -20
  309. package/src/components/index.ts +3 -3
  310. package/src/constants.ts +5 -6
  311. package/src/containers/CollectionArticle/CollectionArticle.tsx +10 -6
  312. package/src/containers/CollectionSection/CollectionSection.tsx +1 -1
  313. package/src/containers/CreateObjectDialog/CreateObjectDialog.stories.tsx +1 -1
  314. package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +48 -10
  315. package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +5 -5
  316. package/src/containers/DefaultProperties/DefaultProperties.tsx +69 -0
  317. package/src/containers/DefaultProperties/index.ts +5 -0
  318. package/src/containers/ImportSpaceDialog/ImportSpaceDialog.tsx +3 -3
  319. package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +3 -3
  320. package/src/containers/JoinDialog/JoinDialog.tsx +14 -25
  321. package/src/containers/MembersContainer/MembersContainer.tsx +42 -38
  322. package/src/containers/MenuFooter/MenuFooter.tsx +3 -3
  323. package/src/containers/ObjectCardStack/ObjectCardStack.tsx +3 -3
  324. package/src/containers/RecordArticle/RecordArticle.tsx +67 -8
  325. package/src/containers/RelatedArticle/RelatedArticle.tsx +18 -15
  326. package/src/containers/RenamePopover/RenamePopover.tsx +125 -0
  327. package/src/containers/RenamePopover/index.ts +6 -0
  328. package/src/containers/SchemaContainer/SchemaContainer.tsx +22 -18
  329. package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +100 -0
  330. package/src/containers/SpaceHomeArticle/index.ts +5 -0
  331. package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +103 -0
  332. package/src/containers/SpaceHomeRecent/index.ts +5 -0
  333. package/src/containers/SpacePresence/SpacePresence.tsx +23 -21
  334. package/src/containers/SpacePresence/index.ts +1 -1
  335. package/src/{components → containers}/SpaceSettings/SpaceSettings.stories.tsx +1 -1
  336. package/src/containers/SpaceSettings/SpaceSettings.tsx +75 -0
  337. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +120 -111
  338. package/src/containers/SyncStatus/SyncStatus.tsx +2 -2
  339. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.tsx +116 -0
  340. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.tsx +162 -0
  341. package/src/containers/TypeCollectionArticle/index.ts +5 -0
  342. package/src/containers/index.ts +7 -3
  343. package/src/errors.ts +11 -0
  344. package/src/hooks/useInputSurfaceLookup.tsx +3 -2
  345. package/src/hooks/useRelatedObjects.ts +13 -1
  346. package/src/index.ts +1 -0
  347. package/src/meta.ts +2 -27
  348. package/src/operations/add-object.ts +12 -18
  349. package/src/operations/add-type.ts +1 -1
  350. package/src/operations/create.ts +4 -4
  351. package/src/operations/definitions.ts +2 -3
  352. package/src/operations/helpers.ts +1 -1
  353. package/src/operations/join.ts +19 -0
  354. package/src/operations/migrate.ts +1 -1
  355. package/src/operations/open-members.ts +3 -3
  356. package/src/operations/open-settings.ts +3 -3
  357. package/src/operations/remove-objects.ts +3 -2
  358. package/src/operations/rename-object.ts +3 -2
  359. package/src/operations/rename.ts +3 -2
  360. package/src/translations.ts +18 -7
  361. package/src/types/Settings.ts +10 -1
  362. package/src/types/capabilities.ts +9 -9
  363. package/src/types/events.ts +5 -5
  364. package/src/types/form.ts +5 -1
  365. package/src/types/index.ts +1 -0
  366. package/src/types/surface.ts +31 -0
  367. package/src/types/types.ts +9 -1
  368. package/src/util.ts +3 -4
  369. package/dist/lib/neutral/CollectionArticle-S3OF5KJ7.mjs.map +0 -7
  370. package/dist/lib/neutral/CreateObjectDialog-66R3K6I3.mjs.map +0 -7
  371. package/dist/lib/neutral/CreateSpaceDialog-CDGSEIJB.mjs.map +0 -7
  372. package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs +0 -59
  373. package/dist/lib/neutral/EntityRenamePopover-MYSW262F.mjs.map +0 -7
  374. package/dist/lib/neutral/ImportSpaceDialog-7GKV4OTF.mjs.map +0 -7
  375. package/dist/lib/neutral/InlineSyncStatus-TBJKZCH7.mjs.map +0 -7
  376. package/dist/lib/neutral/JoinDialog-SSFKRFTJ.mjs.map +0 -7
  377. package/dist/lib/neutral/MembersContainer-KMCQDWCS.mjs.map +0 -7
  378. package/dist/lib/neutral/MenuFooter-5JT7V5FZ.mjs.map +0 -7
  379. package/dist/lib/neutral/ObjectCardStack-IXNU3HEN.mjs.map +0 -7
  380. package/dist/lib/neutral/ObjectProperties-BF6KGFFC.mjs +0 -33
  381. package/dist/lib/neutral/ObjectProperties-BF6KGFFC.mjs.map +0 -7
  382. package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs +0 -51
  383. package/dist/lib/neutral/RecordArticle-QWGH25NT.mjs.map +0 -7
  384. package/dist/lib/neutral/RelatedArticle-YDNGUDAJ.mjs.map +0 -7
  385. package/dist/lib/neutral/SchemaContainer-Q4BP6X2M.mjs.map +0 -7
  386. package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs +0 -56
  387. package/dist/lib/neutral/SpaceRenamePopover-KFWL4CTJ.mjs.map +0 -7
  388. package/dist/lib/neutral/SpaceSettings-YAHBOY5T.mjs +0 -37
  389. package/dist/lib/neutral/SpaceSettings-YAHBOY5T.mjs.map +0 -7
  390. package/dist/lib/neutral/SpaceSettingsContainer-IB34TEOB.mjs.map +0 -7
  391. package/dist/lib/neutral/SyncStatus-CWOXWDDZ.mjs.map +0 -7
  392. package/dist/lib/neutral/add-object-QYOMCBJA.mjs.map +0 -7
  393. package/dist/lib/neutral/app-graph-builder-SQGCUCDO.mjs.map +0 -7
  394. package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs +0 -81
  395. package/dist/lib/neutral/app-graph-serializer-IBPPU5VR.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-4RTSNTDC.mjs +0 -37
  397. package/dist/lib/neutral/chunk-4RTSNTDC.mjs.map +0 -7
  398. package/dist/lib/neutral/chunk-7WUJENBF.mjs.map +0 -7
  399. package/dist/lib/neutral/chunk-B7DBIARR.mjs +0 -8
  400. package/dist/lib/neutral/chunk-BBQR23DW.mjs.map +0 -7
  401. package/dist/lib/neutral/chunk-EEXRKYOD.mjs.map +0 -7
  402. package/dist/lib/neutral/chunk-F5MESIRH.mjs +0 -19
  403. package/dist/lib/neutral/chunk-F5MESIRH.mjs.map +0 -7
  404. package/dist/lib/neutral/chunk-K34BPPQE.mjs.map +0 -7
  405. package/dist/lib/neutral/chunk-YY62663T.mjs.map +0 -7
  406. package/dist/lib/neutral/create-EPIFSRJA.mjs.map +0 -7
  407. package/dist/lib/neutral/create-object-22WUOWZQ.mjs.map +0 -7
  408. package/dist/lib/neutral/identity-created-57RML5XT.mjs.map +0 -7
  409. package/dist/lib/neutral/join-Z5K4OAIG.mjs +0 -28
  410. package/dist/lib/neutral/join-Z5K4OAIG.mjs.map +0 -7
  411. package/dist/lib/neutral/navigation-handler-QQJYEMAS.mjs.map +0 -7
  412. package/dist/lib/neutral/navigation-resolver-IFVQRCGU.mjs.map +0 -7
  413. package/dist/lib/neutral/open-members-BEXOSSBS.mjs.map +0 -7
  414. package/dist/lib/neutral/open-settings-RHDBW2K5.mjs.map +0 -7
  415. package/dist/lib/neutral/react-surface-LYCTOQLY.mjs.map +0 -7
  416. package/dist/lib/neutral/remove-objects-OWDMA4IF.mjs.map +0 -7
  417. package/dist/lib/neutral/rename-SR6BBSPU.mjs.map +0 -7
  418. package/dist/lib/neutral/rename-object-5H6E5AOX.mjs.map +0 -7
  419. package/dist/lib/neutral/repair-PSYRVSJ6.mjs.map +0 -7
  420. package/dist/lib/neutral/spaces-ready-GBF72QJH.mjs.map +0 -7
  421. package/dist/lib/neutral/state-DPBOZRAW.mjs.map +0 -7
  422. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
  423. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  424. package/dist/types/src/components/SpaceSettings/SpaceSettings.d.ts +0 -8
  425. package/dist/types/src/components/SpaceSettings/SpaceSettings.d.ts.map +0 -1
  426. package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts +0 -7
  427. package/dist/types/src/containers/EntityRenamePopover/EntityRenamePopover.d.ts.map +0 -1
  428. package/dist/types/src/containers/EntityRenamePopover/index.d.ts +0 -2
  429. package/dist/types/src/containers/EntityRenamePopover/index.d.ts.map +0 -1
  430. package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts +0 -10
  431. package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts.map +0 -1
  432. package/dist/types/src/containers/ObjectProperties/index.d.ts +0 -2
  433. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts +0 -7
  434. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +0 -1
  435. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts +0 -2
  436. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts.map +0 -1
  437. package/src/capabilities/app-graph-serializer.ts +0 -85
  438. package/src/components/SpaceSettings/SpaceSettings.tsx +0 -56
  439. package/src/containers/EntityRenamePopover/EntityRenamePopover.tsx +0 -52
  440. package/src/containers/EntityRenamePopover/index.ts +0 -5
  441. package/src/containers/ObjectProperties/ObjectProperties.tsx +0 -32
  442. package/src/containers/ObjectProperties/index.ts +0 -5
  443. package/src/containers/SpaceRenamePopover/SpaceRenamePopover.tsx +0 -54
  444. package/src/containers/SpaceRenamePopover/index.ts +0 -5
  445. /package/dist/lib/neutral/{SmallPresenceLive-GUF4WLUC.mjs.map → SmallPresenceLive-FW3AMEY5.mjs.map} +0 -0
  446. /package/dist/lib/neutral/{SpacePresence-ACEXUS3N.mjs.map → SpacePresence-T37WH43Y.mjs.map} +0 -0
  447. /package/dist/lib/neutral/{add-relation-HV3VCMJG.mjs.map → add-relation-BGTLART5.mjs.map} +0 -0
  448. /package/dist/lib/neutral/{chunk-B7DBIARR.mjs.map → chunk-U5WTDOMV.mjs.map} +0 -0
  449. /package/dist/lib/neutral/{close-FGQN37PK.mjs.map → close-5WEQZRNK.mjs.map} +0 -0
  450. /package/dist/lib/neutral/{delete-LIA5M3WI.mjs.map → delete-SPCU2VFM.mjs.map} +0 -0
  451. /package/dist/lib/neutral/{delete-field-ZIGFXFHY.mjs.map → delete-field-TAKJVEAD.mjs.map} +0 -0
  452. /package/dist/lib/neutral/{duplicate-object-X37FM6PW.mjs.map → duplicate-object-BUPZOO6S.mjs.map} +0 -0
  453. /package/dist/lib/neutral/{export-space-VWJHVXWF.mjs.map → export-space-S5SCAL4M.mjs.map} +0 -0
  454. /package/dist/lib/neutral/{get-share-link-3LEA5FSK.mjs.map → get-share-link-CLM5IQRL.mjs.map} +0 -0
  455. /package/dist/lib/neutral/{import-space-Y5L3QE3C.mjs.map → import-space-LJQK3KT7.mjs.map} +0 -0
  456. /package/dist/lib/neutral/{open-CPWVZSI4.mjs.map → open-JCXTL3SK.mjs.map} +0 -0
  457. /package/dist/lib/neutral/{open-create-object-4LN4PR6N.mjs.map → open-create-object-WAIAU7TA.mjs.map} +0 -0
  458. /package/dist/lib/neutral/{open-create-space-VPAW3F2T.mjs.map → open-create-space-VU47FWPZ.mjs.map} +0 -0
  459. /package/dist/lib/neutral/{open-import-space-VLQ5V55H.mjs.map → open-import-space-GUHIEWYB.mjs.map} +0 -0
  460. /package/dist/lib/neutral/{restore-field-UHDG2ZQM.mjs.map → restore-field-6CQAFOXY.mjs.map} +0 -0
  461. /package/dist/lib/neutral/{restore-objects-2UD5P6OC.mjs.map → restore-objects-3VINLP7C.mjs.map} +0 -0
  462. /package/dist/lib/neutral/{share-5Y4NZA75.mjs.map → share-A4WPILNF.mjs.map} +0 -0
  463. /package/dist/lib/neutral/{snapshot-H3HKOFVP.mjs.map → snapshot-HBYMAPA7.mjs.map} +0 -0
  464. /package/dist/lib/neutral/{wait-for-object-3TAWUWTP.mjs.map → wait-for-object-U6P2NNWY.mjs.map} +0 -0
  465. /package/dist/types/src/{components → containers}/SpaceSettings/index.d.ts +0 -0
  466. /package/src/{components → containers}/SpaceSettings/index.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/JoinDialog/JoinDialog.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation, Paths } from '@dxos/app-toolkit';\nimport { Trigger } from '@dxos/async';\nimport { ObservabilityOperation } from '@dxos/plugin-observability';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { type InvitationResult } from '@dxos/react-client/invitations';\nimport { Dialog, useTranslation } from '@dxos/react-ui';\nimport { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';\nimport { osTranslations } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nexport const JOIN_DIALOG = `${meta.profile.key}.JoinDialog`;\n\nexport type JoinDialogProps = JoinPanelProps & {\n navigableCollections?: boolean;\n};\n\nexport const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialogProps) => {\n const { invokePromise } = useOperationInvoker();\n const client = useClient();\n const { t } = useTranslation(meta.profile.key);\n\n const handleDone = useCallback(\n async (result: InvitationResult | null) => {\n const spaceKey = result?.spaceKey;\n if (!spaceKey) {\n return;\n }\n\n await Promise.all([\n invokePromise(LayoutOperation.AddToast, {\n id: `${meta.profile.key}.join-success`,\n duration: 5_000,\n title: ['join-success.label', { ns: meta.profile.key }],\n closeLabel: ['dismiss.label', { ns: meta.profile.key }],\n }),\n invokePromise(LayoutOperation.UpdateDialog, { state: false }),\n ]);\n\n let space = client.spaces.get(spaceKey);\n if (!space) {\n // TODO(wittjosiah): Add api to wait for a space.\n const trigger = new Trigger<Space>();\n client.spaces.subscribe(() => {\n const space = client.spaces.get(spaceKey);\n if (space) {\n trigger.wake(space);\n }\n });\n space = await trigger.wait();\n }\n\n // TODO(wittjosiah): `result.target` is ignored so acceptance navigates to the space home\n // immediately; revisit how to incorporate the target once immediate navigation is settled.\n await invokePromise(LayoutOperation.Open, {\n subject: [Paths.getSpaceHomePath(space.id)],\n workspace: Paths.getSpacePath(space.id),\n navigation: 'immediate',\n });\n\n onDone?.(result);\n\n if (space) {\n await invokePromise(ObservabilityOperation.SendEvent, {\n name: 'space.join',\n properties: {\n spaceId: space.id,\n },\n });\n }\n },\n [invokePromise, client, navigableCollections, onDone],\n );\n\n // TODO(burdon): Move JoinHeading into Dialog.Heading.\n return (\n <Dialog.Content>\n <Dialog.Title classNames='sr-only'>{t('join-space.label', { ns: osTranslations })}</Dialog.Title>\n <Dialog.Body>\n <JoinPanel\n {...props}\n exitActionParent={<Dialog.Close asChild />}\n doneActionParent={<Dialog.Close asChild />}\n onDone={handleDone}\n />\n </Dialog.Body>\n </Dialog.Content>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,mBAAmB;AAEnC,SAASC,2BAA2B;AACpC,SAASC,iBAAiBC,aAAa;AACvC,SAASC,eAAe;AACxB,SAASC,8BAA8B;AACvC,SAASC,iBAAiB;AAG1B,SAASC,QAAQC,sBAAsB;AACvC,SAASC,iBAAsC;AAC/C,SAASC,sBAAsB;AAE/B,SAASC,YAAY;AAEd,IAAMC,cAAc,GAAGD,KAAKE,QAAQC,GAAG;AAMvC,IAAMC,aAAa,CAAC,EAAEC,sBAAsBC,QAAQ,GAAGC,MAAAA,MAAwB;AACpF,QAAM,EAAEC,cAAa,IAAKlB,oBAAAA;AAC1B,QAAMmB,SAASd,UAAAA;AACf,QAAM,EAAEe,EAAC,IAAKb,eAAeG,KAAKE,QAAQC,GAAG;AAE7C,QAAMQ,aAAatB,YACjB,OAAOuB,WAAAA;AACL,UAAMC,WAAWD,QAAQC;AACzB,QAAI,CAACA,UAAU;AACb;IACF;AAEA,UAAMC,QAAQC,IAAI;MAChBP,cAAcjB,gBAAgByB,UAAU;QACtCC,IAAI,GAAGjB,KAAKE,QAAQC,GAAG;QACvBe,UAAU;QACVC,OAAO;UAAC;UAAsB;YAAEC,IAAIpB,KAAKE,QAAQC;UAAI;;QACrDkB,YAAY;UAAC;UAAiB;YAAED,IAAIpB,KAAKE,QAAQC;UAAI;;MACvD,CAAA;MACAK,cAAcjB,gBAAgB+B,cAAc;QAAEC,OAAO;MAAM,CAAA;KAC5D;AAED,QAAIC,QAAQf,OAAOgB,OAAOC,IAAIb,QAAAA;AAC9B,QAAI,CAACW,OAAO;AAEV,YAAMG,UAAU,IAAIlC,QAAAA;AACpBgB,aAAOgB,OAAOG,UAAU,MAAA;AACtB,cAAMJ,SAAQf,OAAOgB,OAAOC,IAAIb,QAAAA;AAChC,YAAIW,QAAO;AACTG,kBAAQE,KAAKL,MAAAA;QACf;MACF,CAAA;AACAA,cAAQ,MAAMG,QAAQG,KAAI;IAC5B;AAIA,UAAMtB,cAAcjB,gBAAgBwC,MAAM;MACxCC,SAAS;QAACxC,MAAMyC,iBAAiBT,MAAMP,EAAE;;MACzCiB,WAAW1C,MAAM2C,aAAaX,MAAMP,EAAE;MACtCmB,YAAY;IACd,CAAA;AAEA9B,aAASM,MAAAA;AAET,QAAIY,OAAO;AACT,YAAMhB,cAAcd,uBAAuB2C,WAAW;QACpDC,MAAM;QACNC,YAAY;UACVC,SAAShB,MAAMP;QACjB;MACF,CAAA;IACF;EACF,GACA;IAACT;IAAeC;IAAQJ;IAAsBC;GAAO;AAIvD,SACE,sBAAA,cAACV,OAAO6C,SAAO,MACb,sBAAA,cAAC7C,OAAO8C,OAAK;IAACC,YAAW;KAAWjC,EAAE,oBAAoB;IAAEU,IAAIrB;EAAe,CAAA,CAAA,GAC/E,sBAAA,cAACH,OAAOgD,MAAI,MACV,sBAAA,cAAC9C,WAAAA;IACE,GAAGS;IACJsC,kBAAkB,sBAAA,cAACjD,OAAOkD,OAAK;MAACC,SAAAA;;IAChCC,kBAAkB,sBAAA,cAACpD,OAAOkD,OAAK;MAACC,SAAAA;;IAChCzC,QAAQK;;AAKlB;",
6
+ "names": ["React", "useCallback", "useOperationInvoker", "LayoutOperation", "Paths", "Trigger", "ObservabilityOperation", "useClient", "Dialog", "useTranslation", "JoinPanel", "osTranslations", "meta", "JOIN_DIALOG", "profile", "key", "JoinDialog", "navigableCollections", "onDone", "props", "invokePromise", "client", "t", "handleDone", "result", "spaceKey", "Promise", "all", "AddToast", "id", "duration", "title", "ns", "closeLabel", "UpdateDialog", "state", "space", "spaces", "get", "trigger", "subscribe", "wake", "wait", "Open", "subject", "getSpaceHomePath", "workspace", "getSpacePath", "navigation", "SendEvent", "name", "properties", "spaceId", "Content", "Title", "classNames", "Body", "exitActionParent", "Close", "asChild", "doneActionParent"]
7
+ }
@@ -5,14 +5,14 @@ import * as Option from "effect/Option";
5
5
  import React, { useMemo, useState } from "react";
6
6
  import { QR } from "react-qr-rounded";
7
7
  import { useOperationInvoker } from "@dxos/app-framework/ui";
8
- import { RootCollectionAnnotation } from "@dxos/app-toolkit";
8
+ import { AppAnnotation } from "@dxos/app-toolkit";
9
9
  import { Annotation, Obj } from "@dxos/echo";
10
10
  import { log } from "@dxos/log";
11
11
  import { useConfig } from "@dxos/react-client";
12
12
  import { useSpaceInvitations } from "@dxos/react-client/echo";
13
13
  import { Invitation, InvitationEncoder } from "@dxos/react-client/invitations";
14
14
  import { Button, Clipboard, Icon, useId, useTranslation } from "@dxos/react-ui";
15
- import { Settings } from "@dxos/react-ui-form";
15
+ import { Form } from "@dxos/react-ui-form";
16
16
  import { AuthCode, BifurcatedAction, Centered, Emoji, InvitationList, SpaceMemberList, Viewport, translationKey as shellTranslationKey } from "@dxos/shell/react";
17
17
  import { hexToEmoji } from "@dxos/util";
18
18
  import { meta } from "#meta";
@@ -30,7 +30,7 @@ var handleInvitationEvent = (invitation, subscription) => {
30
30
  }
31
31
  };
32
32
  var MembersContainer = ({ space, createInvitationUrl }) => {
33
- const { t } = useTranslation(meta.id);
33
+ const { t } = useTranslation(meta.profile.key);
34
34
  const config = useConfig();
35
35
  const { invokePromise } = useOperationInvoker();
36
36
  const invitations = useSpaceInvitations(space.key);
@@ -42,7 +42,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
42
42
  setInternalActiveAction(nextAction);
43
43
  localStorage.setItem(activeActionKey, nextAction);
44
44
  };
45
- const target = Annotation.get(space.properties, RootCollectionAnnotation).pipe(Option.getOrUndefined)?.target?.objects[0]?.target;
45
+ const target = Annotation.get(space.properties, AppAnnotation.RootCollectionAnnotation).pipe(Option.getOrUndefined)?.target?.objects[0]?.target;
46
46
  const inviteActions = useMemo(() => ({
47
47
  inviteOne: {
48
48
  label: t("invite-one.label", {
@@ -101,10 +101,14 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
101
101
  const handleBack = () => {
102
102
  setSelectedInvitation(null);
103
103
  };
104
- return /* @__PURE__ */ React.createElement(Clipboard.Provider, null, /* @__PURE__ */ React.createElement(Settings.Viewport, null, /* @__PURE__ */ React.createElement(Settings.Section, {
104
+ return /* @__PURE__ */ React.createElement(Clipboard.Provider, null, /* @__PURE__ */ React.createElement(Form.Root, {
105
+ variant: "settings"
106
+ }, /* @__PURE__ */ React.createElement(Form.Viewport, {
107
+ scroll: true
108
+ }, /* @__PURE__ */ React.createElement(Form.Content, null, /* @__PURE__ */ React.createElement(Form.Section, {
105
109
  title: t("members-verbose.label"),
106
110
  description: t("members.description")
107
- }, /* @__PURE__ */ React.createElement(Settings.Panel, null, /* @__PURE__ */ React.createElement("div", {
111
+ }, /* @__PURE__ */ React.createElement(Form.Group, null, /* @__PURE__ */ React.createElement("div", {
108
112
  role: "group",
109
113
  className: "min-w-0"
110
114
  }, /* @__PURE__ */ React.createElement("h3", {
@@ -133,7 +137,7 @@ var MembersContainer = ({ space, createInvitationUrl }) => {
133
137
  activeAction,
134
138
  onChangeActiveAction: setActiveAction,
135
139
  "data-testid": "membersContainer.createInvitation"
136
- })))))));
140
+ })))))))));
137
141
  };
138
142
  var InvitationSection = ({ state = Invitation.State.INIT, authCode, invitationId = "never", url = "never", onBack }) => {
139
143
  const activeView = state < 0 ? "init" : state >= Invitation.State.CANCELLED ? "complete" : state >= Invitation.State.READY_FOR_AUTHENTICATION && authCode ? "auth-code" : "qr-code";
@@ -166,7 +170,7 @@ var InvitationQR = ({ id, url, onCancel }) => {
166
170
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", {
167
171
  className: "text-description"
168
172
  }, t("qr-code.description", {
169
- ns: meta.id
173
+ ns: meta.profile.key
170
174
  })), /* @__PURE__ */ React.createElement("div", {
171
175
  role: "group",
172
176
  className: "grid grid-cols-[1fr_min-content] my-2 gap-2"
@@ -224,4 +228,4 @@ var InvitationComplete = ({ statusValue }) => {
224
228
  export {
225
229
  MembersContainer as default
226
230
  };
227
- //# sourceMappingURL=MembersContainer-KMCQDWCS.mjs.map
231
+ //# sourceMappingURL=MembersContainer-C4ZTP6ZW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/MembersContainer/MembersContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { type Dispatch, type SetStateAction, useMemo, useState } from 'react';\nimport { QR } from 'react-qr-rounded';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppAnnotation } from '@dxos/app-toolkit';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Annotation, Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useConfig } from '@dxos/react-client';\nimport { useSpaceInvitations } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { Button, Clipboard, Icon, useId, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport {\n type ActionMenuItem,\n AuthCode,\n BifurcatedAction,\n Centered,\n Emoji,\n InvitationList,\n SpaceMemberList,\n Viewport,\n translationKey as shellTranslationKey,\n} from '@dxos/shell/react';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { SpaceOperation } from '#operations';\n\n// TODO(wittjosiah): Copied from Shell.\nconst activeActionKey = 'dxos:react-shell/space-manager/active-action';\n\nconst handleInvitationEvent = (invitation: Invitation, subscription: ZenObservable.Subscription) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n subscription.unsubscribe();\n }\n};\n\nexport type MembersContainerProps = AppSurface.SpaceArticleProps<{\n createInvitationUrl: (invitationCode: string) => string;\n}>;\n\nexport const MembersContainer = ({ space, createInvitationUrl }: MembersContainerProps) => {\n const { t } = useTranslation(meta.profile.key);\n const config = useConfig();\n const { invokePromise } = useOperationInvoker();\n const invitations = useSpaceInvitations(space.key);\n const visibleInvitations = invitations?.filter(\n (invitation) => ![Invitation.State.CANCELLED].includes(invitation.get().state),\n );\n\n const [activeAction, setInternalActiveAction] = useState(localStorage.getItem(activeActionKey) ?? 'inviteMany');\n\n const setActiveAction = (nextAction: string) => {\n setInternalActiveAction(nextAction);\n localStorage.setItem(activeActionKey, nextAction);\n };\n\n // TODO(wittjosiah): Track which was the most recently viewed object.\n const target = Annotation.get(space.properties, AppAnnotation.RootCollectionAnnotation).pipe(Option.getOrUndefined)\n ?.target?.objects[0]?.target;\n\n const inviteActions = useMemo(\n (): Record<string, ActionMenuItem> => ({\n inviteOne: {\n label: t('invite-one.label', { ns: shellTranslationKey }),\n description: t('invite-one.description', { ns: shellTranslationKey }),\n icon: 'ph--user-plus--regular',\n testId: 'membersContainer.inviteOne',\n onClick: async () => {\n const { data: invitation } = await invokePromise(SpaceOperation.Share, {\n space,\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.SHARED_SECRET,\n multiUse: false,\n target: target && Obj.getURI(target),\n });\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = (invitation as CancellableInvitationObservable).subscribe(\n (invitation: Invitation) => handleInvitationEvent(invitation, subscription),\n );\n }\n },\n },\n inviteMany: {\n label: t('invite-many.label', { ns: shellTranslationKey }),\n description: t('invite-many.description', { ns: shellTranslationKey }),\n icon: 'ph--users-three--regular',\n testId: 'membersContainer.inviteMany',\n onClick: async () => {\n const { data: invitation } = await invokePromise(SpaceOperation.Share, {\n space,\n type: Invitation.Type.DELEGATED,\n authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,\n multiUse: true,\n target: target && Obj.getURI(target),\n });\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = (invitation as CancellableInvitationObservable).subscribe(\n (invitation: Invitation) => handleInvitationEvent(invitation, subscription),\n );\n }\n },\n },\n }),\n [t, space, target, invokePromise],\n );\n\n const [selectedInvitation, setSelectedInvitation] = useState<CancellableInvitationObservable | null>(null);\n const handleSend = (event: { type: 'selectInvitation'; invitation: CancellableInvitationObservable }) => {\n setSelectedInvitation(event.invitation);\n };\n const handleBack = () => {\n setSelectedInvitation(null);\n };\n\n return (\n <Clipboard.Provider>\n <Form.Root variant='settings'>\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={t('members-verbose.label')} description={t('members.description')}>\n <Form.Group>\n <div role='group' className='min-w-0'>\n <h3 className='text-lg mb-2'>{t('members.label')}</h3>\n <SpaceMemberList spaceKey={space.key} includeSelf />\n </div>\n <div role='group' className='min-w-0'>\n <h3 className='text-lg mb-2'>{t('invitations.label')}</h3>\n {selectedInvitation && <InvitationSection {...selectedInvitation} onBack={handleBack} />}\n {!selectedInvitation && (\n <>\n <p className='text-description mb-2'>{t('space-invitation.description')}</p>\n <InvitationList\n className='mb-2'\n send={handleSend}\n invitations={visibleInvitations ?? []}\n onClickRemove={(invitation) => invitation.cancel()}\n createInvitationUrl={createInvitationUrl}\n />\n <BifurcatedAction\n actions={inviteActions}\n activeAction={activeAction}\n onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}\n data-testid='membersContainer.createInvitation'\n />\n </>\n )}\n </div>\n </Form.Group>\n </Form.Section>\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n </Clipboard.Provider>\n );\n};\n\n// TODO(wittjosiah): Reconcile the below components with DevicesContainer in @dxos/plugin-client.\n\ntype InvitationComponentProps = Partial<\n Pick<Invitation, 'authCode' | 'invitationId'> & {\n state: Invitation.State;\n url: string;\n onBack: () => void;\n }\n>;\n\nconst InvitationSection = ({\n state = Invitation.State.INIT,\n authCode,\n invitationId = 'never',\n url = 'never',\n onBack,\n}: InvitationComponentProps) => {\n const activeView =\n state < 0\n ? 'init'\n : state >= Invitation.State.CANCELLED\n ? 'complete'\n : state >= Invitation.State.READY_FOR_AUTHENTICATION && authCode\n ? 'auth-code'\n : 'qr-code';\n return (\n <Viewport.Root activeView={activeView}>\n <Viewport.Views>\n <Viewport.View id='init'>\n {/* This view intentionally left blank while conditionally rendering the viewport. */}\n </Viewport.View>\n <Viewport.View id='complete'>\n <InvitationComplete statusValue={state} />\n </Viewport.View>\n <Viewport.View id='auth-code'>\n <InvitationAuthCode id={invitationId} code={authCode ?? 'never'} onCancel={onBack} />\n </Viewport.View>\n <Viewport.View id='qr-code'>\n <InvitationQR id={invitationId} url={url} onCancel={onBack} />\n </Viewport.View>\n </Viewport.Views>\n </Viewport.Root>\n );\n};\n\nconst InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel?: () => void }) => {\n const { t } = useTranslation(shellTranslationKey);\n const qrLabel = useId('members-container__qr-code');\n const emoji = hexToEmoji(id);\n return (\n <>\n <p className='text-description'>{t('qr-code.description', { ns: meta.profile.key })}</p>\n <div role='group' className='grid grid-cols-[1fr_min-content] my-2 gap-2'>\n <div className='w-full aspect-square relative text-description'>\n <QR\n rounding={100}\n backgroundColor='transparent'\n color='currentColor'\n aria-labelledby={qrLabel}\n errorCorrectionLevel='Q'\n cutout={true}\n >\n {url ?? 'never'}\n </QR>\n <Centered>\n <Emoji text={emoji} />\n </Centered>\n </div>\n <span id={qrLabel} className='sr-only'>\n {t('qr.label')}\n </span>\n <Clipboard.Button value={url ?? 'never'} />\n </div>\n <Button variant='ghost' onClick={onCancel}>\n {t('cancel.label')}\n </Button>\n </>\n );\n};\n\nconst InvitationAuthCode = ({ id, code, onCancel }: { id: string; code: string; onCancel?: () => void }) => {\n const { t } = useTranslation(shellTranslationKey);\n const emoji = hexToEmoji(id);\n\n return (\n <>\n <p className='text-description'>{t('auth-other-device-emoji.message')}</p>\n {emoji && <Emoji text={emoji} className='mx-auto my-2 text-center' />}\n <p className='text-description'>{t('auth-code.message')}</p>\n <AuthCode code={code} large classNames='mx-auto my-2 text-center grow' />\n <Button variant='ghost' onClick={onCancel}>\n {t('cancel.label')}\n </Button>\n </>\n );\n};\n\nconst InvitationComplete = ({ statusValue }: { statusValue: number }) => {\n return statusValue > 0 ? (\n <Icon icon='ph--check--regular' size={6} classNames='m-1.5' />\n ) : (\n <Icon icon='ph--x--regular' size={6} classNames='m-1.5' />\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Option", "React", "useMemo", "useState", "QR", "useOperationInvoker", "AppAnnotation", "Annotation", "Obj", "log", "useConfig", "useSpaceInvitations", "Invitation", "InvitationEncoder", "Button", "Clipboard", "Icon", "useId", "useTranslation", "Form", "AuthCode", "BifurcatedAction", "Centered", "Emoji", "InvitationList", "SpaceMemberList", "Viewport", "translationKey", "shellTranslationKey", "hexToEmoji", "meta", "SpaceOperation", "invitationCode", "State", "stringify", "authCode", "invitation", "subscription", "unsubscribe", "config", "invokePromise", "invitations", "visibleInvitations", "filter", "includes", "get", "activeAction", "setInternalActiveAction", "setActiveAction", "nextAction", "localStorage", "activeActionKey", "inviteOne", "ns", "description", "icon", "testId", "onClick", "space", "type", "INTERACTIVE", "authMethod", "multiUse", "target", "getURI", "values", "runtime", "inviteMany", "DELEGATED", "t", "setSelectedInvitation", "event", "scroll", "Content", "title", "role", "className", "spaceKey", "includeSelf", "selectedInvitation", "onBack", "handleBack", "send", "handleSend", "onClickRemove", "createInvitationUrl", "actions", "onChangeActiveAction", "data-testid", "InvitationSection", "Root", "activeView", "Views", "id", "InvitationComplete", "statusValue", "InvitationAuthCode", "invitationId", "onCancel", "InvitationQR", "url", "emoji", "profile", "rounding", "backgroundColor", "color", "aria-labelledby", "errorCorrectionLevel", "cutout", "text", "span", "qrLabel", "value", "variant", "code", "large", "classNames", "size"]
7
+ }
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  getSpaceDisplayName
3
- } from "./chunk-7WUJENBF.mjs";
4
- import "./chunk-K34BPPQE.mjs";
3
+ } from "./chunk-52ASDNRA.mjs";
4
+ import "./chunk-F5KLUP2P.mjs";
5
5
  import "./chunk-J5LGTIGS.mjs";
6
6
 
7
7
  // src/containers/MenuFooter/MenuFooter.tsx
8
8
  import React from "react";
9
- import { isPersonalSpace } from "@dxos/app-toolkit";
9
+ import { AppSpace } from "@dxos/app-toolkit";
10
10
  import { getSpace } from "@dxos/client/echo";
11
11
  import { DropdownMenu, Icon, toLocalizedString, useTranslation } from "@dxos/react-ui";
12
12
  import { meta } from "#meta";
13
13
  var MenuFooter = ({ object }) => {
14
- const { t } = useTranslation(meta.id);
14
+ const { t } = useTranslation(meta.profile.key);
15
15
  const space = getSpace(object);
16
16
  const spaceName = space ? getSpaceDisplayName(space, {
17
- personal: isPersonalSpace(space)
17
+ personal: AppSpace.isPersonalSpace(space)
18
18
  }) : "";
19
19
  return space ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(DropdownMenu.Separator, null), /* @__PURE__ */ React.createElement(DropdownMenu.GroupLabel, null, t("menu-footer.label")), /* @__PURE__ */ React.createElement("dl", {
20
20
  className: "ps-2 mb-2 text-xs grid grid-cols-[max-content_1fr] gap-2"
@@ -30,4 +30,4 @@ var MenuFooter = ({ object }) => {
30
30
  export {
31
31
  MenuFooter as default
32
32
  };
33
- //# sourceMappingURL=MenuFooter-5JT7V5FZ.mjs.map
33
+ //# sourceMappingURL=MenuFooter-FWE5LFM4.mjs.map
@@ -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": "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",
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";
@@ -25,14 +25,13 @@ var RelatedArticle = ({ role, companionTo }) => {
25
25
  }, /* @__PURE__ */ React.createElement(Toolbar.Root, null)), /* @__PURE__ */ React.createElement(Panel.Content, {
26
26
  asChild: true
27
27
  }, /* @__PURE__ */ React.createElement(Masonry.Content, {
28
- classNames: "p-2",
29
28
  centered: true
30
29
  }, /* @__PURE__ */ React.createElement(Masonry.Viewport, {
31
30
  items
32
31
  })))));
33
32
  };
34
33
  var ObjectCard = ({ data: subject, classNames }) => {
35
- const { t } = useTranslation(meta.id);
34
+ const { t } = useTranslation(meta.profile.key);
36
35
  const data = useMemo(() => ({
37
36
  subject
38
37
  }), [
@@ -42,22 +41,24 @@ var ObjectCard = ({ data: subject, classNames }) => {
42
41
  const menuItems = useObjectMenuItems(subject);
43
42
  return /* @__PURE__ */ React.createElement(Menu.Root, null, /* @__PURE__ */ React.createElement(Card.Root, {
44
43
  classNames
45
- }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Icon, {
44
+ }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Block, null, /* @__PURE__ */ React.createElement(Icon, {
46
45
  icon
47
- }), /* @__PURE__ */ React.createElement(Card.Title, null, Entity.getLabel(subject, {
46
+ })), /* @__PURE__ */ React.createElement(Card.Title, null, Entity.getLabel(subject, {
48
47
  fallback: "typename"
49
- })), /* @__PURE__ */ React.createElement(Menu.Trigger, {
48
+ })), /* @__PURE__ */ React.createElement(Card.Block, {
49
+ end: true
50
+ }, /* @__PURE__ */ React.createElement(Menu.Trigger, {
50
51
  asChild: true,
51
52
  disabled: !menuItems?.length
52
- }, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
53
+ }, /* @__PURE__ */ React.createElement(IconButton, {
53
54
  iconOnly: true,
54
55
  variant: "ghost",
55
56
  icon: "ph--dots-three-vertical--regular",
56
57
  label: t("more-actions.label")
57
58
  })), /* @__PURE__ */ React.createElement(Menu.Content, {
58
59
  items: menuItems
59
- })), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement(Surface.Surface, {
60
- type: AppSurface.Card,
60
+ }))), /* @__PURE__ */ React.createElement(Card.Body, null, /* @__PURE__ */ React.createElement(Surface.Surface, {
61
+ type: AppSurface.CardContent,
61
62
  data,
62
63
  limit: 1
63
64
  }))));
@@ -65,4 +66,4 @@ var ObjectCard = ({ data: subject, classNames }) => {
65
66
  export {
66
67
  RelatedArticle as default
67
68
  };
68
- //# sourceMappingURL=RelatedArticle-YDNGUDAJ.mjs.map
69
+ //# sourceMappingURL=RelatedArticle-Z777WVDW.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\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 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;AAOd,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,UAAAA;KACf,sBAAA,cAACjB,QAAQkB,UAAQ;IAACT;;AAM9B;AAGA,IAAMK,aAAa,CAAC,EAAEK,MAAMC,SAASC,WAAU,MAAiD;AAC9F,QAAM,EAAEC,EAAC,IAAKvB,eAAeI,KAAKoB,QAAQC,GAAG;AAC7C,QAAML,OAAO/B,QAAQ,OAAO;IAAEgC;EAAQ,IAAI;IAACA;GAAQ;AACnD,QAAMK,OAAOjC,OAAOkC,QAAQN,OAAAA,GAAUK,QAAQ;AAG9C,QAAME,YAAYpC,mBAAmB6B,OAAAA;AAErC,SACE,sBAAA,cAACnB,KAAKW,MAAI,MACR,sBAAA,cAAClB,KAAKkB,MAAI;IAACS;KACT,sBAAA,cAAC3B,KAAKkC,QAAM,MACV,sBAAA,cAAClC,KAAKmC,OAAK,MACT,sBAAA,cAAClC,MAAAA;IAAK8B;OAER,sBAAA,cAAC/B,KAAKoC,OAAK,MAAEtC,OAAOuC,SAASX,SAAS;IAAEY,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;IAAavB;IAAYwB,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", "centered", "Viewport", "data", "subject", "classNames", "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,104 @@
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 isRenameCallback = (subject) => typeof subject.onRename === "function";
14
+ var getName = (subject) => {
15
+ if (isRenameCallback(subject)) {
16
+ return subject.initialValue;
17
+ }
18
+ return (isSpace(subject) ? subject.properties.name : Entity.getLabel(subject)) ?? "";
19
+ };
20
+ var setName = (subject, name) => {
21
+ if (isRenameCallback(subject)) {
22
+ subject.onRename(name);
23
+ } else if (isSpace(subject)) {
24
+ Obj.update(subject.properties, (properties) => {
25
+ properties.name = name;
26
+ });
27
+ } else {
28
+ Entity.update(subject, () => Entity.setLabel(subject, name));
29
+ }
30
+ };
31
+ var RenamePopover = ({ subject }) => {
32
+ const { t } = useTranslation(meta.profile.key);
33
+ const space = !isRenameCallback(subject) && isSpace(subject);
34
+ const { invokePromise } = useOperationInvoker();
35
+ const [name, setNameState] = useState(() => getName(subject));
36
+ const nameRef = useRef(name);
37
+ nameRef.current = name;
38
+ const initialNameRef = useRef(name);
39
+ const cancelledRef = useRef(false);
40
+ const committedRef = useRef(false);
41
+ const write = useCallback(() => {
42
+ try {
43
+ if (!cancelledRef.current && nameRef.current !== initialNameRef.current) {
44
+ setName(subject, nameRef.current);
45
+ }
46
+ } catch (err) {
47
+ log.error("Failed to rename", {
48
+ err
49
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 52, S: void 0 });
50
+ }
51
+ }, [
52
+ subject
53
+ ]);
54
+ const commit = useCallback(() => {
55
+ if (!committedRef.current) {
56
+ committedRef.current = true;
57
+ write();
58
+ }
59
+ }, [
60
+ write
61
+ ]);
62
+ useEffect(() => () => {
63
+ if (!committedRef.current) {
64
+ write();
65
+ }
66
+ }, [
67
+ write
68
+ ]);
69
+ const close = useCallback(() => {
70
+ void invokePromise(LayoutOperation.UpdatePopover, {
71
+ anchorId: "",
72
+ state: false
73
+ });
74
+ }, [
75
+ invokePromise
76
+ ]);
77
+ return /* @__PURE__ */ React.createElement("div", {
78
+ className: "p-2"
79
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
80
+ srOnly: true
81
+ }, t(space ? "space-name.label" : "object-name.label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
82
+ autoFocus: true,
83
+ value: name,
84
+ placeholder: t(space ? "unnamed-space.label" : "object.placeholder"),
85
+ "data-testid": "spacePlugin.rename.input",
86
+ onChange: ({ target: { value } }) => setNameState(value),
87
+ onFocus: (event) => event.target.select(),
88
+ onKeyDown: (event) => {
89
+ if (event.key === "Enter") {
90
+ commit();
91
+ close();
92
+ } else if (event.key === "Escape") {
93
+ event.preventDefault();
94
+ event.stopPropagation();
95
+ cancelledRef.current = true;
96
+ close();
97
+ }
98
+ }
99
+ })));
100
+ };
101
+ export {
102
+ RenamePopover as default
103
+ };
104
+ //# sourceMappingURL=RenamePopover-AZT2KPOF.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 RenameCallback = { initialValue: string; onRename: (name: string) => void };\nexport type RenameSubject = Space | Entity.Unknown | RenameCallback;\n\nconst isRenameCallback = (subject: RenameSubject): subject is RenameCallback =>\n typeof (subject as RenameCallback).onRename === 'function';\n\nconst getName = (subject: RenameSubject): string => {\n if (isRenameCallback(subject)) {\n return subject.initialValue;\n }\n return (isSpace(subject) ? subject.properties.name : Entity.getLabel(subject)) ?? '';\n};\n\nconst setName = (subject: RenameSubject, name: string): void => {\n if (isRenameCallback(subject)) {\n subject.onRename(name);\n } else 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// TODO(wittjosiah): Move RenamePopover, RenameSubject, RenameCallback, and RENAME_POPOVER to @dxos/app-toolkit\n// so any plugin can use the rename popover without depending on plugin-space.\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 = !isRenameCallback(subject) && 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;AAKrB,IAAA,eAAMC;IAIJ,mBAAqBC,CAAAA,YAAU,OAAA,QAAA,aAAA;cACtBA,CAAAA,YAAQC;AACjB,MAAA,iBAAA,OAAA,GAAA;AACA,WAAQN,QAAQK;EAClB;AAEA,UAAME,QAAWF,OAAwBG,IAAAA,QAAAA,WAAAA,OAAAA,OAAAA,SAAAA,OAAAA,MAAAA;;cAE7BC,CAAAA,SAASD,SAAAA;AACnB,MAAA,iBAAmBH,OAAAA,GAAU;AAC3BP,YAAIY,SAAOL,IAAQM;aACjBA,QAAWH,OAAOA,GAAAA;AACpB,QAAA,OAAA,QAAA,YAAA,CAAA,eAAA;AACK,iBAAA,OAAA;IACLX,CAAAA;EACF,OAAA;AACF,WAAA,OAAA,SAAA,MAAA,OAAA,SAAA,SAAA,IAAA,CAAA;EAIA;AACA;AAOQe,IAAAA,gBAASR,CAAAA,EAAiBC,QAAAA,MAAYL;AAC5C,QAAM,EAAEa,EAAAA,IAAAA,eAAkBlB,KAAAA,QAAAA,GAAAA;AAC1B,QAAM,QAAOmB,CAAAA,iBAAgBpB,OAAS,KAAMqB,QAAQV,OAAAA;AAEpD,QAAA,EAAA,cAAA,IAAA,oBAAA;AACA,QAAMW,CAAAA,MAAAA,YAAiBR,IAAAA,SAAAA,MAAAA,QAAAA,OAAAA,CAAAA;AAEvB,QAAMS,UAAAA,OAAiBxB,IAAAA;AACvB,UAAMyB,UAAAA;AACN,QAAA,iBAAA,OAAA,IAAA;AACA,QAAMC,eAAe1B,OAAO,KAAA;QAG1B,eAAI,OAAA,KAAA;gBACGyB,YAAaE,MAAAA;;AAElB,UAAA,CAAA,aAAA,WAAA,QAAA,YAAA,eAAA,SAAA;AACA,gBAAY,SAAA,QAAA,OAAA;MACZrB;aAAgCsB,KAAAA;AAAI,UAAA,MAAA,oBAAA;QACtC;MACC,GAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,OAAA,CAAA;IAAChB;KAAQ;IAEZ;;iBAEIc,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;IAACX,CAAAA;KAAc;IAElB;;SAEI,sBAAA,cAACZ,OAAU;IACIwB,WAAAA;KAAkB,sBAAA,cAAqB,MAAA,MAAA,MAAA,sBACpD,cAAA,MAACxB,OAAMyB;IACLC,QAAAA;OACAC,QAAOpB,qBAAAA,mBAAAA,CAAAA,GAAAA,sBAAAA,cAAAA,MAAAA,WAAAA;IACPqB,WAAAA;IACAC,OAAAA;IACAC,aAAaC,EAAAA,QAAUJ,wBAAcd,oBAAac;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", "isRenameCallback", "subject", "initialValue", "setName", "name", "onRename", "update", "properties", "space", "invokePromise", "setNameState", "getName", "nameRef", "initialNameRef", "cancelledRef", "committedRef", "current", "err", "write", "anchorId", "state", "srOnly", "TextInput", "autoFocus", "value", "placeholder", "data-testid", "onChange", "target", "onFocus", "event", "onKeyDown", "commit", "close"]
7
+ }
@@ -4,13 +4,17 @@ import "./chunk-J5LGTIGS.mjs";
4
4
  import React, { useEffect, useState } from "react";
5
5
  import { Type } from "@dxos/echo";
6
6
  import { useTranslation } from "@dxos/react-ui";
7
- import { Settings } from "@dxos/react-ui-form";
7
+ import { Form } 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
- return /* @__PURE__ */ React.createElement(Settings.Viewport, null, /* @__PURE__ */ React.createElement(Settings.Section, {
13
+ return /* @__PURE__ */ React.createElement(Form.Root, {
14
+ variant: "settings"
15
+ }, /* @__PURE__ */ React.createElement(Form.Viewport, {
16
+ scroll: true
17
+ }, /* @__PURE__ */ React.createElement(Form.Content, null, /* @__PURE__ */ React.createElement(Form.Section, {
14
18
  title: t("schema-verbose.label"),
15
19
  description: t("schema.description")
16
20
  }, /* @__PURE__ */ React.createElement("div", {
@@ -23,7 +27,7 @@ var SchemaContainer = ({ space }) => {
23
27
  className: "text-center py-4"
24
28
  }, t("no-schemas-found.message")), types.map((type) => /* @__PURE__ */ React.createElement("div", {
25
29
  key: type.id
26
- }, Type.getTypename(type))))));
30
+ }, Type.getTypename(type))))))));
27
31
  };
28
32
  var useQuerySpaceTypes = (space) => {
29
33
  const [types, setTypes] = useState(() => [
@@ -46,4 +50,4 @@ var useQuerySpaceTypes = (space) => {
46
50
  export {
47
51
  SchemaContainer as default
48
52
  };
49
- //# sourceMappingURL=SchemaContainer-Q4BP6X2M.mjs.map
53
+ //# sourceMappingURL=SchemaContainer-4GJKQBXM.mjs.map