@dxos/plugin-space 0.9.1-main.c7dcc2e112 → 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 (308) hide show
  1. package/dist/lib/neutral/{CreateObjectDialog-4VMOUKM7.mjs → CreateObjectDialog-5454N3FJ.mjs} +22 -7
  2. package/dist/lib/neutral/CreateObjectDialog-5454N3FJ.mjs.map +7 -0
  3. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs +58 -0
  4. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs.map +7 -0
  5. package/dist/lib/neutral/{JoinDialog-QZGNRJ4P.mjs → JoinDialog-ATNUCNL2.mjs} +7 -31
  6. package/dist/lib/neutral/JoinDialog-ATNUCNL2.mjs.map +7 -0
  7. package/dist/lib/neutral/{MembersContainer-OWCAMBKS.mjs → MembersContainer-C4ZTP6ZW.mjs} +9 -5
  8. package/dist/lib/neutral/MembersContainer-C4ZTP6ZW.mjs.map +7 -0
  9. package/dist/lib/neutral/{MenuFooter-QCNFUIAO.mjs → MenuFooter-FWE5LFM4.mjs} +3 -3
  10. package/dist/lib/neutral/{RelatedArticle-YRCRBIYU.mjs → RelatedArticle-Z777WVDW.mjs} +1 -2
  11. package/dist/lib/neutral/RelatedArticle-Z777WVDW.mjs.map +7 -0
  12. package/dist/lib/neutral/{RenamePopover-XBZAKNM7.mjs → RenamePopover-AZT2KPOF.mjs} +13 -5
  13. package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs.map +7 -0
  14. package/dist/lib/neutral/{SchemaContainer-2NK5YB5O.mjs → SchemaContainer-4GJKQBXM.mjs} +8 -4
  15. package/dist/lib/neutral/SchemaContainer-4GJKQBXM.mjs.map +7 -0
  16. package/dist/lib/neutral/{SmallPresenceLive-L4H7WJOA.mjs → SmallPresenceLive-FW3AMEY5.mjs} +2 -2
  17. package/dist/lib/neutral/{SpaceHomeArticle-ZV7EERLS.mjs → SpaceHomeArticle-Y47TLZ72.mjs} +2 -2
  18. package/dist/lib/neutral/{SpaceHomeArticle-ZV7EERLS.mjs.map → SpaceHomeArticle-Y47TLZ72.mjs.map} +1 -1
  19. package/dist/lib/neutral/{SpaceHomeRecent-ZR4LIIUD.mjs → SpaceHomeRecent-S57AO3EV.mjs} +11 -5
  20. package/dist/lib/neutral/{SpaceHomeRecent-ZR4LIIUD.mjs.map → SpaceHomeRecent-S57AO3EV.mjs.map} +3 -3
  21. package/dist/lib/neutral/SpacePlugin.mjs +1 -1
  22. package/dist/lib/neutral/{SpacePresence-PDTEDHDE.mjs → SpacePresence-T37WH43Y.mjs} +2 -2
  23. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs +60 -0
  24. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs.map +7 -0
  25. package/dist/lib/neutral/{SpaceSettingsContainer-QAFQ4LWC.mjs → SpaceSettingsContainer-72CJWELM.mjs} +39 -36
  26. package/dist/lib/neutral/SpaceSettingsContainer-72CJWELM.mjs.map +7 -0
  27. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs +143 -0
  28. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs.map +7 -0
  29. package/dist/lib/neutral/{add-object-S64XELC3.mjs → add-object-H2N4AOQJ.mjs} +10 -10
  30. package/dist/lib/neutral/add-object-H2N4AOQJ.mjs.map +7 -0
  31. package/dist/lib/neutral/{add-relation-GWSE42BU.mjs → add-relation-BGTLART5.mjs} +3 -3
  32. package/dist/lib/neutral/{add-type-C3KYE6PI.mjs → add-type-JIDLRANR.mjs} +3 -3
  33. package/dist/lib/neutral/{add-type-C3KYE6PI.mjs.map → add-type-JIDLRANR.mjs.map} +1 -1
  34. package/dist/lib/neutral/{app-graph-builder-TMAD2ZTH.mjs → app-graph-builder-7H2KOD4B.mjs} +187 -163
  35. package/dist/lib/neutral/app-graph-builder-7H2KOD4B.mjs.map +7 -0
  36. package/dist/lib/neutral/capabilities/index.mjs +9 -9
  37. package/dist/lib/neutral/capabilities/node.mjs +2 -2
  38. package/dist/lib/neutral/{chunk-PSCIOT7Q.mjs → chunk-52ASDNRA.mjs} +2 -3
  39. package/dist/lib/neutral/{chunk-PSCIOT7Q.mjs.map → chunk-52ASDNRA.mjs.map} +3 -3
  40. package/dist/lib/neutral/{chunk-2RPQHHD7.mjs → chunk-C2ULK22J.mjs} +1 -1
  41. package/dist/lib/neutral/{chunk-DSYEB2UN.mjs → chunk-F5KLUP2P.mjs} +7 -2
  42. package/dist/lib/neutral/chunk-F5KLUP2P.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-F2VJ6VBV.mjs → chunk-LMUG6PEJ.mjs} +3 -4
  44. package/dist/lib/neutral/chunk-LMUG6PEJ.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-2LTGSUGQ.mjs → chunk-RAAHDTVF.mjs} +8 -4
  46. package/dist/lib/neutral/chunk-RAAHDTVF.mjs.map +7 -0
  47. package/dist/lib/neutral/{chunk-LY6XK5MV.mjs → chunk-SPWAMXNR.mjs} +2 -2
  48. package/dist/lib/neutral/{chunk-LY6XK5MV.mjs.map → chunk-SPWAMXNR.mjs.map} +3 -3
  49. package/dist/lib/neutral/chunk-U5WTDOMV.mjs +8 -0
  50. package/dist/lib/neutral/chunk-V7JALUM3.mjs +9 -0
  51. package/dist/lib/neutral/chunk-V7JALUM3.mjs.map +7 -0
  52. package/dist/lib/neutral/{close-YZHFYPUN.mjs → close-5WEQZRNK.mjs} +3 -3
  53. package/dist/lib/neutral/components/index.mjs +18 -19
  54. package/dist/lib/neutral/components/index.mjs.map +4 -4
  55. package/dist/lib/neutral/constants.mjs +16 -0
  56. package/dist/lib/neutral/constants.mjs.map +7 -0
  57. package/dist/lib/neutral/containers/index.mjs +18 -14
  58. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  59. package/dist/lib/neutral/{create-XKU2W6QC.mjs → create-QZ47FHQU.mjs} +4 -4
  60. package/dist/lib/neutral/{create-XKU2W6QC.mjs.map → create-QZ47FHQU.mjs.map} +3 -3
  61. package/dist/lib/neutral/{create-object-22WUOWZQ.mjs → create-object-ZU6FZW5X.mjs} +1 -6
  62. package/dist/lib/neutral/create-object-ZU6FZW5X.mjs.map +7 -0
  63. package/dist/lib/neutral/{delete-EFM7CAVO.mjs → delete-SPCU2VFM.mjs} +3 -3
  64. package/dist/lib/neutral/{delete-field-ONAPFFO5.mjs → delete-field-TAKJVEAD.mjs} +3 -3
  65. package/dist/lib/neutral/{duplicate-object-OJRPFV5I.mjs → duplicate-object-BUPZOO6S.mjs} +3 -3
  66. package/dist/lib/neutral/{export-space-M5RNVUQX.mjs → export-space-S5SCAL4M.mjs} +3 -3
  67. package/dist/lib/neutral/{get-share-link-FUQBJPSQ.mjs → get-share-link-CLM5IQRL.mjs} +3 -3
  68. package/dist/lib/neutral/{identity-created-QMV4DANW.mjs → identity-created-BEYMLBK4.mjs} +2 -2
  69. package/dist/lib/neutral/{identity-created-QMV4DANW.mjs.map → identity-created-BEYMLBK4.mjs.map} +3 -3
  70. package/dist/lib/neutral/{import-space-L3AUIARM.mjs → import-space-LJQK3KT7.mjs} +3 -3
  71. package/dist/lib/neutral/index.mjs +7 -3
  72. package/dist/lib/neutral/join-FSODYIOC.mjs +54 -0
  73. package/dist/lib/neutral/join-FSODYIOC.mjs.map +7 -0
  74. package/dist/lib/neutral/meta.json +1 -1
  75. package/dist/lib/neutral/{migrate-WPUISBC4.mjs → migrate-WHM6LU7L.mjs} +4 -4
  76. package/dist/lib/neutral/{migrate-WPUISBC4.mjs.map → migrate-WHM6LU7L.mjs.map} +3 -3
  77. package/dist/lib/neutral/{navigation-handler-IKXZGMII.mjs → navigation-handler-ZF7MV2HL.mjs} +16 -10
  78. package/dist/lib/neutral/navigation-handler-ZF7MV2HL.mjs.map +7 -0
  79. package/dist/lib/neutral/{navigation-resolver-VBPGMFCE.mjs → navigation-resolver-KBESOSWU.mjs} +5 -5
  80. package/dist/lib/neutral/navigation-resolver-KBESOSWU.mjs.map +7 -0
  81. package/dist/lib/neutral/{open-RRYULTSY.mjs → open-JCXTL3SK.mjs} +3 -3
  82. package/dist/lib/neutral/{open-create-object-BRUVFZSY.mjs → open-create-object-WAIAU7TA.mjs} +6 -6
  83. package/dist/lib/neutral/{open-create-space-ARLQWW65.mjs → open-create-space-VU47FWPZ.mjs} +6 -6
  84. package/dist/lib/neutral/{open-import-space-65H57JXX.mjs → open-import-space-GUHIEWYB.mjs} +6 -6
  85. package/dist/lib/neutral/{open-members-677P6KD3.mjs → open-members-MLLBHKUU.mjs} +3 -3
  86. package/dist/lib/neutral/{open-settings-PRBSGO6D.mjs → open-settings-DTPZF4U4.mjs} +3 -3
  87. package/dist/lib/neutral/operations/index.mjs +3 -3
  88. package/dist/lib/neutral/plugin.mjs +3 -3
  89. package/dist/lib/neutral/{react-surface-5EQ6X4CL.mjs → react-surface-LRA7GIFN.mjs} +33 -14
  90. package/dist/lib/neutral/react-surface-LRA7GIFN.mjs.map +7 -0
  91. package/dist/lib/neutral/{remove-objects-PWJJI36V.mjs → remove-objects-WEO66EDS.mjs} +3 -3
  92. package/dist/lib/neutral/{rename-4727PKI4.mjs → rename-Q6UNCBIM.mjs} +6 -6
  93. package/dist/lib/neutral/{rename-object-FXUAB5FN.mjs → rename-object-2UCEGU7U.mjs} +6 -6
  94. package/dist/lib/neutral/{restore-field-3ICSIHGA.mjs → restore-field-6CQAFOXY.mjs} +3 -3
  95. package/dist/lib/neutral/{restore-objects-V2BTEWN3.mjs → restore-objects-3VINLP7C.mjs} +3 -3
  96. package/dist/lib/neutral/{share-ZOZPAUGI.mjs → share-A4WPILNF.mjs} +3 -3
  97. package/dist/lib/neutral/{snapshot-ZC5PU55W.mjs → snapshot-HBYMAPA7.mjs} +3 -3
  98. package/dist/lib/neutral/{spaces-ready-EXPCJD4N.mjs → spaces-ready-GWMSU72V.mjs} +4 -4
  99. package/dist/lib/neutral/{spaces-ready-EXPCJD4N.mjs.map → spaces-ready-GWMSU72V.mjs.map} +3 -3
  100. package/dist/lib/neutral/testing.mjs +1 -1
  101. package/dist/lib/neutral/translations.mjs +14 -6
  102. package/dist/lib/neutral/translations.mjs.map +2 -2
  103. package/dist/lib/neutral/types/index.mjs +1 -1
  104. package/dist/lib/neutral/{wait-for-object-WURK2SLQ.mjs → wait-for-object-U6P2NNWY.mjs} +3 -3
  105. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  106. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +15 -33
  107. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts +15 -33
  110. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts +3 -2
  112. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +1 -4
  114. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +17 -4
  116. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/create-object.d.ts +1 -33
  118. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts +1 -2
  120. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts.map +1 -1
  121. package/dist/types/src/capabilities/navigation-resolver.d.ts +1 -2
  122. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -1
  123. package/dist/types/src/capabilities/react-root.d.ts +1 -5
  124. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  125. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  126. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  127. package/dist/types/src/capabilities/repair.d.ts +1 -2
  128. package/dist/types/src/capabilities/repair.d.ts.map +1 -1
  129. package/dist/types/src/capabilities/settings.d.ts +1 -3
  130. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  131. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  132. package/dist/types/src/capabilities/state.d.ts +1 -13
  133. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  134. package/dist/types/src/capabilities/undo-mappings.d.ts +2 -3
  135. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
  136. package/dist/types/src/components/ForeignKeys/ForeignKeys.d.ts.map +1 -1
  137. package/dist/types/src/components/index.d.ts +2 -2
  138. package/dist/types/src/components/index.d.ts.map +1 -1
  139. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
  140. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +122 -52
  141. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  142. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +122 -52
  143. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
  144. package/dist/types/src/containers/DefaultProperties/DefaultProperties.d.ts +15 -0
  145. package/dist/types/src/containers/DefaultProperties/DefaultProperties.d.ts.map +1 -0
  146. package/dist/types/src/containers/DefaultProperties/index.d.ts +2 -0
  147. package/dist/types/src/containers/DefaultProperties/index.d.ts.map +1 -0
  148. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
  149. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +122 -52
  150. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
  151. package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts.map +1 -1
  152. package/dist/types/src/containers/RelatedArticle/RelatedArticle.d.ts.map +1 -1
  153. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +5 -1
  154. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -1
  155. package/dist/types/src/containers/RenamePopover/index.d.ts +1 -1
  156. package/dist/types/src/containers/RenamePopover/index.d.ts.map +1 -1
  157. package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts.map +1 -1
  158. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -1
  159. package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -1
  160. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +122 -52
  161. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
  162. package/dist/types/src/containers/SpacePresence/index.d.ts +1 -1
  163. package/dist/types/src/containers/SpacePresence/index.d.ts.map +1 -1
  164. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts +11 -0
  165. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts.map +1 -0
  166. package/dist/types/src/{components → containers}/SpaceSettings/SpaceSettings.stories.d.ts +123 -53
  167. package/dist/types/src/{components → containers}/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
  168. package/dist/types/src/{components → containers}/SpaceSettings/index.d.ts.map +1 -1
  169. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +122 -52
  170. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
  171. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +122 -52
  172. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  173. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts +16 -0
  174. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts.map +1 -0
  175. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts +21 -0
  176. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts.map +1 -0
  177. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts +2 -0
  178. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts.map +1 -0
  179. package/dist/types/src/containers/index.d.ts +4 -1
  180. package/dist/types/src/containers/index.d.ts.map +1 -1
  181. package/dist/types/src/errors.d.ts +33 -0
  182. package/dist/types/src/errors.d.ts.map +1 -0
  183. package/dist/types/src/index.d.ts +1 -0
  184. package/dist/types/src/index.d.ts.map +1 -1
  185. package/dist/types/src/meta.d.ts +4 -0
  186. package/dist/types/src/meta.d.ts.map +1 -1
  187. package/dist/types/src/operations/definitions.d.ts +9 -37
  188. package/dist/types/src/operations/definitions.d.ts.map +1 -1
  189. package/dist/types/src/operations/join.d.ts.map +1 -1
  190. package/dist/types/src/translations.d.ts +122 -52
  191. package/dist/types/src/translations.d.ts.map +1 -1
  192. package/dist/types/src/types/Settings.d.ts +3 -1
  193. package/dist/types/src/types/Settings.d.ts.map +1 -1
  194. package/dist/types/src/types/capabilities.d.ts +1 -1
  195. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  196. package/dist/types/src/util.d.ts.map +1 -1
  197. package/dist/types/tsconfig.tsbuildinfo +1 -1
  198. package/package.json +70 -59
  199. package/src/SpacePlugin.ts +3 -3
  200. package/src/capabilities/app-graph-builder/extensions/collections.ts +45 -52
  201. package/src/capabilities/app-graph-builder/extensions/companions.ts +3 -2
  202. package/src/capabilities/app-graph-builder/extensions/database.ts +108 -84
  203. package/src/capabilities/app-graph-builder/extensions/settings.ts +8 -5
  204. package/src/capabilities/app-graph-builder/extensions/shared.test.ts +13 -9
  205. package/src/capabilities/app-graph-builder/extensions/shared.ts +2 -5
  206. package/src/capabilities/app-graph-builder/extensions/spaces.ts +32 -6
  207. package/src/capabilities/create-object.ts +0 -5
  208. package/src/capabilities/identity-created.ts +1 -1
  209. package/src/capabilities/navigation-handler/navigation-handler.ts +14 -4
  210. package/src/capabilities/navigation-resolver.ts +8 -8
  211. package/src/capabilities/react-surface.tsx +39 -13
  212. package/src/capabilities/spaces-ready.ts +1 -1
  213. package/src/components/ForeignKeys/ForeignKeys.tsx +20 -19
  214. package/src/components/index.ts +3 -3
  215. package/src/containers/CreateObjectDialog/CreateObjectDialog.stories.tsx +1 -1
  216. package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +38 -3
  217. package/src/containers/DefaultProperties/DefaultProperties.tsx +69 -0
  218. package/src/containers/DefaultProperties/index.ts +5 -0
  219. package/src/containers/JoinDialog/JoinDialog.tsx +8 -21
  220. package/src/containers/MembersContainer/MembersContainer.tsx +37 -33
  221. package/src/containers/RelatedArticle/RelatedArticle.tsx +1 -2
  222. package/src/containers/RenamePopover/RenamePopover.tsx +18 -5
  223. package/src/containers/RenamePopover/index.ts +1 -1
  224. package/src/containers/SchemaContainer/SchemaContainer.tsx +21 -17
  225. package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +1 -1
  226. package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +12 -10
  227. package/src/containers/SpacePresence/SpacePresence.tsx +22 -20
  228. package/src/containers/SpacePresence/index.ts +1 -1
  229. package/src/{components → containers}/SpaceSettings/SpaceSettings.stories.tsx +1 -1
  230. package/src/containers/SpaceSettings/SpaceSettings.tsx +75 -0
  231. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +115 -106
  232. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.tsx +116 -0
  233. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.tsx +162 -0
  234. package/src/containers/TypeCollectionArticle/index.ts +5 -0
  235. package/src/containers/index.ts +4 -1
  236. package/src/errors.ts +11 -0
  237. package/src/index.ts +1 -0
  238. package/src/operations/add-object.ts +6 -5
  239. package/src/operations/add-type.ts +1 -1
  240. package/src/operations/create.ts +2 -2
  241. package/src/operations/definitions.ts +1 -2
  242. package/src/operations/join.ts +19 -0
  243. package/src/operations/migrate.ts +1 -1
  244. package/src/translations.ts +15 -6
  245. package/src/types/Settings.ts +10 -1
  246. package/src/types/capabilities.ts +1 -1
  247. package/src/util.ts +0 -1
  248. package/dist/lib/neutral/CreateObjectDialog-4VMOUKM7.mjs.map +0 -7
  249. package/dist/lib/neutral/JoinDialog-QZGNRJ4P.mjs.map +0 -7
  250. package/dist/lib/neutral/MembersContainer-OWCAMBKS.mjs.map +0 -7
  251. package/dist/lib/neutral/ObjectProperties-BF6KGFFC.mjs +0 -33
  252. package/dist/lib/neutral/ObjectProperties-BF6KGFFC.mjs.map +0 -7
  253. package/dist/lib/neutral/RelatedArticle-YRCRBIYU.mjs.map +0 -7
  254. package/dist/lib/neutral/RenamePopover-XBZAKNM7.mjs.map +0 -7
  255. package/dist/lib/neutral/SchemaContainer-2NK5YB5O.mjs.map +0 -7
  256. package/dist/lib/neutral/SpaceSettings-IVTCSLNT.mjs +0 -37
  257. package/dist/lib/neutral/SpaceSettings-IVTCSLNT.mjs.map +0 -7
  258. package/dist/lib/neutral/SpaceSettingsContainer-QAFQ4LWC.mjs.map +0 -7
  259. package/dist/lib/neutral/add-object-S64XELC3.mjs.map +0 -7
  260. package/dist/lib/neutral/app-graph-builder-TMAD2ZTH.mjs.map +0 -7
  261. package/dist/lib/neutral/chunk-2LTGSUGQ.mjs.map +0 -7
  262. package/dist/lib/neutral/chunk-DSYEB2UN.mjs.map +0 -7
  263. package/dist/lib/neutral/chunk-F2VJ6VBV.mjs.map +0 -7
  264. package/dist/lib/neutral/chunk-I5JXVBXX.mjs +0 -8
  265. package/dist/lib/neutral/create-object-22WUOWZQ.mjs.map +0 -7
  266. package/dist/lib/neutral/join-VY3QYBU7.mjs +0 -28
  267. package/dist/lib/neutral/join-VY3QYBU7.mjs.map +0 -7
  268. package/dist/lib/neutral/navigation-handler-IKXZGMII.mjs.map +0 -7
  269. package/dist/lib/neutral/navigation-resolver-VBPGMFCE.mjs.map +0 -7
  270. package/dist/lib/neutral/react-surface-5EQ6X4CL.mjs.map +0 -7
  271. package/dist/types/src/components/SpaceSettings/SpaceSettings.d.ts +0 -8
  272. package/dist/types/src/components/SpaceSettings/SpaceSettings.d.ts.map +0 -1
  273. package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts +0 -10
  274. package/dist/types/src/containers/ObjectProperties/ObjectProperties.d.ts.map +0 -1
  275. package/dist/types/src/containers/ObjectProperties/index.d.ts +0 -2
  276. package/dist/types/src/containers/ObjectProperties/index.d.ts.map +0 -1
  277. package/src/components/SpaceSettings/SpaceSettings.tsx +0 -56
  278. package/src/containers/ObjectProperties/ObjectProperties.tsx +0 -32
  279. package/src/containers/ObjectProperties/index.ts +0 -5
  280. /package/dist/lib/neutral/{MenuFooter-QCNFUIAO.mjs.map → MenuFooter-FWE5LFM4.mjs.map} +0 -0
  281. /package/dist/lib/neutral/{SmallPresenceLive-L4H7WJOA.mjs.map → SmallPresenceLive-FW3AMEY5.mjs.map} +0 -0
  282. /package/dist/lib/neutral/{SpacePresence-PDTEDHDE.mjs.map → SpacePresence-T37WH43Y.mjs.map} +0 -0
  283. /package/dist/lib/neutral/{add-relation-GWSE42BU.mjs.map → add-relation-BGTLART5.mjs.map} +0 -0
  284. /package/dist/lib/neutral/{chunk-2RPQHHD7.mjs.map → chunk-C2ULK22J.mjs.map} +0 -0
  285. /package/dist/lib/neutral/{chunk-I5JXVBXX.mjs.map → chunk-U5WTDOMV.mjs.map} +0 -0
  286. /package/dist/lib/neutral/{close-YZHFYPUN.mjs.map → close-5WEQZRNK.mjs.map} +0 -0
  287. /package/dist/lib/neutral/{delete-EFM7CAVO.mjs.map → delete-SPCU2VFM.mjs.map} +0 -0
  288. /package/dist/lib/neutral/{delete-field-ONAPFFO5.mjs.map → delete-field-TAKJVEAD.mjs.map} +0 -0
  289. /package/dist/lib/neutral/{duplicate-object-OJRPFV5I.mjs.map → duplicate-object-BUPZOO6S.mjs.map} +0 -0
  290. /package/dist/lib/neutral/{export-space-M5RNVUQX.mjs.map → export-space-S5SCAL4M.mjs.map} +0 -0
  291. /package/dist/lib/neutral/{get-share-link-FUQBJPSQ.mjs.map → get-share-link-CLM5IQRL.mjs.map} +0 -0
  292. /package/dist/lib/neutral/{import-space-L3AUIARM.mjs.map → import-space-LJQK3KT7.mjs.map} +0 -0
  293. /package/dist/lib/neutral/{open-RRYULTSY.mjs.map → open-JCXTL3SK.mjs.map} +0 -0
  294. /package/dist/lib/neutral/{open-create-object-BRUVFZSY.mjs.map → open-create-object-WAIAU7TA.mjs.map} +0 -0
  295. /package/dist/lib/neutral/{open-create-space-ARLQWW65.mjs.map → open-create-space-VU47FWPZ.mjs.map} +0 -0
  296. /package/dist/lib/neutral/{open-import-space-65H57JXX.mjs.map → open-import-space-GUHIEWYB.mjs.map} +0 -0
  297. /package/dist/lib/neutral/{open-members-677P6KD3.mjs.map → open-members-MLLBHKUU.mjs.map} +0 -0
  298. /package/dist/lib/neutral/{open-settings-PRBSGO6D.mjs.map → open-settings-DTPZF4U4.mjs.map} +0 -0
  299. /package/dist/lib/neutral/{remove-objects-PWJJI36V.mjs.map → remove-objects-WEO66EDS.mjs.map} +0 -0
  300. /package/dist/lib/neutral/{rename-4727PKI4.mjs.map → rename-Q6UNCBIM.mjs.map} +0 -0
  301. /package/dist/lib/neutral/{rename-object-FXUAB5FN.mjs.map → rename-object-2UCEGU7U.mjs.map} +0 -0
  302. /package/dist/lib/neutral/{restore-field-3ICSIHGA.mjs.map → restore-field-6CQAFOXY.mjs.map} +0 -0
  303. /package/dist/lib/neutral/{restore-objects-V2BTEWN3.mjs.map → restore-objects-3VINLP7C.mjs.map} +0 -0
  304. /package/dist/lib/neutral/{share-ZOZPAUGI.mjs.map → share-A4WPILNF.mjs.map} +0 -0
  305. /package/dist/lib/neutral/{snapshot-ZC5PU55W.mjs.map → snapshot-HBYMAPA7.mjs.map} +0 -0
  306. /package/dist/lib/neutral/{wait-for-object-WURK2SLQ.mjs.map → wait-for-object-U6P2NNWY.mjs.map} +0 -0
  307. /package/dist/types/src/{components → containers}/SpaceSettings/index.d.ts +0 -0
  308. /package/src/{components → containers}/SpaceSettings/index.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getSpaceDisplayName
3
- } from "./chunk-PSCIOT7Q.mjs";
4
- import "./chunk-DSYEB2UN.mjs";
3
+ } from "./chunk-52ASDNRA.mjs";
4
+ import "./chunk-F5KLUP2P.mjs";
5
5
  import "./chunk-J5LGTIGS.mjs";
6
6
 
7
7
  // src/containers/CreateObjectDialog/CreateObjectDialog.tsx
@@ -14,13 +14,13 @@ import { useOperationInvoker, usePluginManager } from "@dxos/app-framework/ui";
14
14
  import { AppSpace, LayoutOperation, TypeOptions } from "@dxos/app-toolkit";
15
15
  import { PluginRegistryButton, useLayout } from "@dxos/app-toolkit/ui";
16
16
  import { Operation } from "@dxos/compute";
17
- import { Annotation, Database, Obj, Type } from "@dxos/echo";
17
+ import { Annotation, Collection, Database, Obj, Type } from "@dxos/echo";
18
18
  import { EffectEx } from "@dxos/effect";
19
19
  import { invariant } from "@dxos/invariant";
20
20
  import { useClient } from "@dxos/react-client";
21
21
  import { useQuery, useSpaces } from "@dxos/react-client/echo";
22
22
  import { Dialog, toLocalizedString, useTranslation } from "@dxos/react-ui";
23
- import { ViewAnnotation } from "@dxos/schema";
23
+ import { CollectionItemAnnotation, ViewAnnotation } from "@dxos/schema";
24
24
  import { makeCreateObjectEntryForDatabaseType } from "#capabilities";
25
25
  import { CreateObjectPanel } from "#components";
26
26
  import { meta } from "#meta";
@@ -108,7 +108,20 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, vi
108
108
  }, [
109
109
  typeByTypename
110
110
  ]);
111
- const options = useMemo(() => createObjectEntries.filter((entry) => views === true ? viewTypenames.has(entry.id) : true).map((entry) => {
111
+ const collectionItemTypenames = useMemo(() => {
112
+ const set = /* @__PURE__ */ new Set();
113
+ const collectionTypename = Type.getTypename(Collection.Collection);
114
+ for (const [name, type] of typeByTypename) {
115
+ if (name === collectionTypename || CollectionItemAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => false))) {
116
+ set.add(name);
117
+ }
118
+ }
119
+ return set;
120
+ }, [
121
+ typeByTypename
122
+ ]);
123
+ const collectionTarget = Collection.isCollection(target);
124
+ const options = useMemo(() => createObjectEntries.filter((entry) => views === true ? viewTypenames.has(entry.id) : collectionTarget ? collectionItemTypenames.has(entry.id) : true).map((entry) => {
112
125
  const type = typeByTypename.get(entry.id);
113
126
  const schema = type && Type.getSchema(type);
114
127
  const iconAnnotation = schema ? Annotation.IconAnnotation.get(schema).pipe(Option.getOrUndefined) : void 0;
@@ -128,6 +141,8 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, vi
128
141
  createObjectEntries,
129
142
  views,
130
143
  viewTypenames,
144
+ collectionTarget,
145
+ collectionItemTypenames,
131
146
  typeByTypename,
132
147
  t,
133
148
  pluginNameByEntryId,
@@ -139,7 +154,7 @@ var CreateObjectDialog = ({ target: initialTarget, typename: initialTypename, vi
139
154
  }
140
155
  closeRef.current?.click();
141
156
  const db2 = Database.isDatabase(target) ? target : target && Obj.getDatabase(target);
142
- invariant(db2, "Missing database", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 145, S: this, A: ["db", "'Missing database'"] });
157
+ invariant(db2, "Missing database", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 163, S: this, A: ["db", "'Missing database'"] });
143
158
  const result = yield* metadata.createObject(data, {
144
159
  db: db2,
145
160
  target,
@@ -203,4 +218,4 @@ export {
203
218
  CreateObjectDialog,
204
219
  CreateObjectDialog as default
205
220
  };
206
- //# sourceMappingURL=CreateObjectDialog-4VMOUKM7.mjs.map
221
+ //# sourceMappingURL=CreateObjectDialog-5454N3FJ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/CreateObjectDialog/CreateObjectDialog.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Capability } from '@dxos/app-framework';\nimport { useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';\nimport { AppSpace, LayoutOperation, TypeOptions } from '@dxos/app-toolkit';\nimport { PluginRegistryButton, useLayout } from '@dxos/app-toolkit/ui';\nimport { Operation } from '@dxos/compute';\nimport { Annotation, Collection, Database, Obj, Type } from '@dxos/echo';\nimport { EffectEx } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { useQuery, useSpaces } from '@dxos/react-client/echo';\nimport { Dialog, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { CollectionItemAnnotation, ViewAnnotation } from '@dxos/schema';\n\nimport { makeCreateObjectEntryForDatabaseType } from '#capabilities';\nimport { type CreateObjectOption, CreateObjectPanel, type CreateObjectPanelProps } from '#components';\nimport { meta } from '#meta';\nimport { SpaceCapabilities } from '#types';\n\nimport { getSpaceDisplayName } from '../../util';\n\nexport const CREATE_OBJECT_DIALOG = `${meta.profile.key}.CreateObjectDialog`;\n\nexport type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'initialFormValues'> & {\n views?: boolean;\n onCreateObject?: (object: Obj.Unknown) => void;\n shouldNavigate?: (object: Obj.Unknown) => boolean;\n targetNodeId?: string;\n};\n\nexport const CreateObjectDialog = ({\n target: initialTarget,\n typename: initialTypename,\n views,\n initialFormValues,\n onCreateObject,\n shouldNavigate: _shouldNavigate,\n targetNodeId,\n}: CreateObjectDialogProps) => {\n const { t } = useTranslation(meta.profile.key);\n const manager = usePluginManager();\n const operationInvoker = useOperationInvoker();\n const { invoke } = operationInvoker;\n const [target, setTarget] = useState<Database.Database | Collection.Collection | undefined>(initialTarget);\n const [typename, setTypename] = useState<string | undefined>(initialTypename);\n const client = useClient();\n const spaces = useSpaces();\n const layout = useLayout();\n const closeRef = useRef<HTMLButtonElement | null>(null);\n\n const db = Database.isDatabase(target) ? target : target && Obj.getDatabase(target);\n const allTypes = useQuery(db, TypeOptions.allTypesQuery);\n const space = useMemo(() => spaces.find((s) => s.db === db), [spaces, db]);\n const spaceLabel = useMemo(\n () =>\n space &&\n toLocalizedString(\n getSpaceDisplayName(space, { personal: space.id === AppSpace.getPersonalSpace(client)?.id }),\n t,\n ),\n [space, client, t],\n );\n\n // Index all types by typename for label/icon lookups.\n const typeByTypename = useMemo(() => {\n const map = new Map<string, Type.AnyEntity>();\n for (const type of allTypes) {\n map.set(Type.getTypename(type), type);\n }\n return map;\n }, [allTypes]);\n\n const entriesByModule = useAtomValue(manager.capabilities.atomByModule(SpaceCapabilities.CreateObjectEntry));\n\n const { capabilityEntries, pluginNameByEntryId } = useMemo(() => {\n const entries: SpaceCapabilities.CreateObjectEntry[] = [];\n const pluginByEntryId = new Map<string, string>();\n const plugins = manager.getPlugins();\n for (const [moduleId, contributions] of Object.entries(entriesByModule)) {\n const owningPlugin = plugins.find((plugin) => plugin.modules.some((module) => module.id === moduleId));\n for (const entry of contributions) {\n entries.push(entry);\n if (owningPlugin) {\n pluginByEntryId.set(entry.id, owningPlugin.meta.profile.name);\n }\n }\n }\n return { capabilityEntries: entries, pluginNameByEntryId: pluginByEntryId };\n }, [entriesByModule, manager]);\n\n // Synthesize entries for database-persisted object schemas that have no registered capability.\n const createObjectEntries = useMemo(() => {\n const registeredIds = new Set(capabilityEntries.map((e) => e.id));\n // allTypesQuery returns meta-schema entities which may be any entity kind at runtime,\n // but the query's TypeScript type is conservatively AnyType[]; widen to enable kind narrowing below.\n const dbEntries = (allTypes as Type.AnyEntity[])\n .filter((type): type is Type.AnyObj => Type.isObject(type) && Type.getDatabase(type) != null)\n .filter((type) => !registeredIds.has(Type.getTypename(type)))\n .map((type) => makeCreateObjectEntryForDatabaseType(type));\n return [...capabilityEntries, ...dbEntries];\n }, [capabilityEntries, allTypes]);\n\n const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(\n (id) => createObjectEntries.find((entry) => entry.id === id),\n [createObjectEntries],\n );\n\n // The type selector is shown while no type has been resolved; the registry button is only relevant then.\n const showTypeSelector = !(typename && resolve(typename));\n\n const viewTypenames = useMemo(() => {\n const set = new Set<string>();\n for (const [name, type] of typeByTypename) {\n if (ViewAnnotation.has(type)) {\n set.add(name);\n }\n }\n return set;\n }, [typeByTypename]);\n\n // Types eligible to live inside a collection: collections themselves, plus types carrying\n // CollectionItemAnnotation. Used to filter the create dialog when targeting a collection.\n const collectionItemTypenames = useMemo(() => {\n const set = new Set<string>();\n const collectionTypename = Type.getTypename(Collection.Collection);\n for (const [name, type] of typeByTypename) {\n if (\n name === collectionTypename ||\n CollectionItemAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => false))\n ) {\n set.add(name);\n }\n }\n return set;\n }, [typeByTypename]);\n\n // When creating into a collection, offer only collection-eligible types (mirrors the `views` filter).\n const collectionTarget = Collection.isCollection(target);\n\n const options = useMemo<CreateObjectOption[]>(\n () =>\n createObjectEntries\n .filter((entry) =>\n views === true\n ? viewTypenames.has(entry.id)\n : collectionTarget\n ? collectionItemTypenames.has(entry.id)\n : true,\n )\n .map((entry) => {\n const type = typeByTypename.get(entry.id);\n const schema = type && Type.getSchema(type);\n const iconAnnotation = schema ? Annotation.IconAnnotation.get(schema).pipe(Option.getOrUndefined) : undefined;\n const isDatabase = type ? Type.getDatabase(type) != null : false;\n return {\n id: entry.id,\n label:\n (isDatabase && type ? Type.getLabel(type) : undefined) ??\n t('typename.label', { ns: entry.id, defaultValue: entry.id }),\n icon: iconAnnotation?.icon,\n iconHue: iconAnnotation?.hue,\n plugin: pluginNameByEntryId.get(entry.id),\n description: isDatabase ? spaceLabel : undefined,\n };\n }),\n [\n createObjectEntries,\n views,\n viewTypenames,\n collectionTarget,\n collectionItemTypenames,\n typeByTypename,\n t,\n pluginNameByEntryId,\n spaceLabel,\n ],\n );\n\n const handleCreateObject = useCallback<NonNullable<CreateObjectPanelProps['onCreateObject']>>(\n ({ metadata, data = {} }) =>\n Effect.gen(function* () {\n if (!target) {\n // TODO(wittjosiah): UI feedback.\n return;\n }\n\n // NOTE: Must close before navigating or attention won't follow object.\n closeRef.current?.click();\n\n const db = Database.isDatabase(target) ? target : target && Obj.getDatabase(target);\n invariant(db, 'Missing database');\n const result = yield* metadata.createObject(data, { db, target, targetNodeId });\n const shouldNavigate = _shouldNavigate ?? (() => true);\n if (result.subject.length > 0 && shouldNavigate(result.object)) {\n if (layout.mode === 'multi') {\n yield* invoke(LayoutOperation.Set, {\n subject: [...result.subject],\n });\n yield* invoke(LayoutOperation.Expose, {\n subject: result.subject[0],\n });\n } else {\n yield* invoke(LayoutOperation.Open, {\n subject: [...result.subject],\n navigation: 'immediate',\n });\n }\n }\n\n onCreateObject?.(result.object);\n }).pipe(\n Effect.provideService(Capability.Service, manager.capabilities),\n Effect.provideService(Operation.Service, operationInvoker),\n EffectEx.runAndForwardErrors,\n ),\n [target, _shouldNavigate, onCreateObject, manager.capabilities, invoke, layout.mode],\n );\n\n return (\n <Dialog.Content>\n <Dialog.Header>\n <Dialog.Title>\n {t('create-object-dialog.title', {\n object: t('typename.label', { ns: typename, defaultValue: views ? 'View' : 'Object' }),\n })}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Dialog.ActionIconButton action='close' ref={closeRef} />\n </Dialog.Close>\n </Dialog.Header>\n <Dialog.Body>\n <CreateObjectPanel\n options={options}\n spaces={spaces}\n target={target}\n typename={typename}\n initialFormValues={initialFormValues}\n defaultSpaceId={AppSpace.getPersonalSpace(client)?.id ?? client.spaces.get()[0]?.id}\n resolve={resolve}\n onCreateObject={handleCreateObject}\n onTargetChange={setTarget}\n onTypenameChange={setTypename}\n />\n </Dialog.Body>\n {showTypeSelector && (\n <Dialog.ActionBar>\n <Dialog.Close asChild>\n <PluginRegistryButton />\n </Dialog.Close>\n </Dialog.ActionBar>\n )}\n </Dialog.Content>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["useAtomValue", "Effect", "Option", "React", "useCallback", "useMemo", "useRef", "useState", "Capability", "useOperationInvoker", "usePluginManager", "AppSpace", "LayoutOperation", "TypeOptions", "PluginRegistryButton", "useLayout", "Operation", "Annotation", "Collection", "Database", "Obj", "Type", "EffectEx", "invariant", "useClient", "useQuery", "useSpaces", "Dialog", "toLocalizedString", "useTranslation", "CollectionItemAnnotation", "ViewAnnotation", "makeCreateObjectEntryForDatabaseType", "CreateObjectPanel", "meta", "SpaceCapabilities", "CREATE_OBJECT_DIALOG", "meta", "profile", "manager", "usePluginManager", "operationInvoker", "useOperationInvoker", "initialTarget", "typename", "setTypename", "client", "useClient", "spaces", "useSpaces", "layout", "useLayout", "closeRef", "db", "Database", "isDatabase", "allTypes", "useQuery", "space", "useMemo", "s", "t", "map", "Type", "getTypename", "pluginByEntryId", "Map", "plugins", "contributions", "owningPlugin", "find", "entry", "entries", "pluginNameByEntryId", "entriesByModule", "capabilityEntries", "dbEntries", "Set", "type", "typeByTypename", "ViewAnnotation", "set", "add", "name", "collectionTypename", "CollectionItemAnnotation", "get", "schema", "iconAnnotation", "Annotation", "getDatabase", "id", "label", "ns", "defaultValue", "icon", "iconHue", "plugin", "description", "createObjectEntries", "views", "viewTypenames", "collectionTarget", "collectionItemTypenames", "spaceLabel", "invariant", "result", "createObject", "target", "targetNodeId", "invoke", "LayoutOperation", "subject", "navigation", "onCreateObject", "pipe", "_shouldNavigate", "mode", "Dialog", "asChild", "ActionIconButton", "action", "options", "initialFormValues", "defaultSpaceId", "resolve", "handleCreateObject", "onTargetChange", "onTypenameChange", "showTypeSelector", "PluginRegistryButton"]
7
+ }
@@ -0,0 +1,58 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/DefaultProperties/DefaultProperties.tsx
4
+ import * as Effect from "effect/Effect";
5
+ import React, { forwardRef, useCallback, useMemo } from "react";
6
+ import { Capability } from "@dxos/app-framework";
7
+ import { Surface, useCapabilities, useOperationInvoker, usePluginManager } from "@dxos/app-framework/ui";
8
+ import { AppSurface } from "@dxos/app-toolkit/ui";
9
+ import { Operation } from "@dxos/compute";
10
+ import { Panel, Toolbar } from "@dxos/react-ui";
11
+ import { ObjectProperties } from "@dxos/react-ui-form";
12
+ import { SpaceCapabilities } from "#types";
13
+ var DefaultProperties = /* @__PURE__ */ forwardRef(({ role, subject: object }, forwardedRef) => {
14
+ const manager = usePluginManager();
15
+ const operationInvoker = useOperationInvoker();
16
+ const createEntries = useCapabilities(SpaceCapabilities.CreateObjectEntry);
17
+ const data = useMemo(() => ({
18
+ subject: object
19
+ }), [
20
+ object
21
+ ]);
22
+ const resolveCreateEntry = useCallback((typename) => {
23
+ const entry = createEntries.find((createEntry) => createEntry.id === typename);
24
+ if (!entry?.inputSchema && !entry?.createObject) {
25
+ return void 0;
26
+ }
27
+ return {
28
+ inputSchema: entry.inputSchema,
29
+ createObject: async (values, db) => {
30
+ const result = await entry.createObject(values, {
31
+ db,
32
+ target: db
33
+ }).pipe(Effect.provideService(Capability.Service, manager.capabilities), Effect.provideService(Operation.Service, operationInvoker), Effect.runPromise);
34
+ return result.object;
35
+ }
36
+ };
37
+ }, [
38
+ createEntries,
39
+ manager,
40
+ operationInvoker
41
+ ]);
42
+ return /* @__PURE__ */ React.createElement(Panel.Root, {
43
+ role,
44
+ ref: forwardedRef
45
+ }, /* @__PURE__ */ React.createElement(Panel.Toolbar, null, /* @__PURE__ */ React.createElement(Toolbar.Root, {
46
+ className: "dx-document"
47
+ })), /* @__PURE__ */ React.createElement(Panel.Content, null, /* @__PURE__ */ React.createElement(ObjectProperties, {
48
+ object,
49
+ resolveCreateEntry
50
+ }, /* @__PURE__ */ React.createElement(Surface.Surface, {
51
+ type: AppSurface.ObjectProperties,
52
+ data
53
+ }))));
54
+ });
55
+ export {
56
+ DefaultProperties as default
57
+ };
58
+ //# sourceMappingURL=DefaultProperties-5SAWQC6I.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/DefaultProperties/DefaultProperties.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Surface, useCapabilities, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Operation } from '@dxos/compute';\nimport { type Database, type Obj } from '@dxos/echo';\nimport { Panel, Toolbar } from '@dxos/react-ui';\nimport { type CreateEntryOverride, ObjectProperties } from '@dxos/react-ui-form';\n\nimport { SpaceCapabilities } from '#types';\n\nexport type DefaultPropertiesProps = AppSurface.ObjectPropertiesProps<Obj.Unknown>;\n\n/**\n * Generic object-properties companion rendered for any object: a schema-driven {@link ObjectProperties}\n * form plus the `object-properties` surface, so plugins whose properties are plain editable fields need\n * not register a bespoke surface (mirrors `DefaultSettings` for plugin settings).\n */\nexport const DefaultProperties = forwardRef<HTMLDivElement, DefaultPropertiesProps>(\n ({ role, subject: object }, forwardedRef) => {\n const manager = usePluginManager();\n const operationInvoker = useOperationInvoker();\n const createEntries = useCapabilities(SpaceCapabilities.CreateObjectEntry);\n const data = useMemo<AppSurface.ObjectPropertiesData>(() => ({ subject: object }), [object]);\n\n const resolveCreateEntry = useCallback(\n (typename: string): CreateEntryOverride | undefined => {\n const entry = createEntries.find((createEntry) => createEntry.id === typename);\n if (!entry?.inputSchema && !entry?.createObject) {\n return undefined;\n }\n return {\n inputSchema: entry.inputSchema,\n createObject: async (values: any, db: Database.Database): Promise<Obj.Unknown> => {\n const result = await entry\n .createObject(values, { db, target: db })\n .pipe(\n Effect.provideService(Capability.Service, manager.capabilities),\n Effect.provideService(Operation.Service, operationInvoker),\n Effect.runPromise,\n );\n return result.object;\n },\n };\n },\n [createEntries, manager, operationInvoker],\n );\n\n return (\n <Panel.Root role={role} ref={forwardedRef}>\n <Panel.Toolbar>\n <Toolbar.Root className='dx-document' />\n </Panel.Toolbar>\n <Panel.Content>\n <ObjectProperties object={object} resolveCreateEntry={resolveCreateEntry}>\n {/* TODO(burdon): Ambiguous naming since providers only replace parts; can't update Toolbar, etc. Consider DefaultSettings pattern. */}\n <Surface.Surface type={AppSurface.ObjectProperties} data={data} />\n </ObjectProperties>\n </Panel.Content>\n </Panel.Root>\n );\n },\n);\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AACxB,OAAOC,SAASC,YAAYC,aAAaC,eAAe;AAExD,SAASC,kBAAkB;AAC3B,SAASC,SAASC,iBAAiBC,qBAAqBC,wBAAwB;AAChF,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAE1B,SAASC,OAAOC,eAAe;AAC/B,SAAmCC,wBAAwB;AAE3D,SAASC,yBAAyB;AAS3B,IAAMC,oBAAoBd,2BAC/B,CAAC,EAAEe,MAAMC,SAASC,OAAM,GAAIC,iBAAAA;AAC1B,QAAMC,UAAUZ,iBAAAA;AAChB,QAAMa,mBAAmBd,oBAAAA;AACzB,QAAMe,gBAAgBhB,gBAAgBQ,kBAAkBS,iBAAiB;AACzE,QAAMC,OAAOrB,QAAyC,OAAO;IAAEc,SAASC;EAAO,IAAI;IAACA;GAAO;AAE3F,QAAMO,qBAAqBvB,YACzB,CAACwB,aAAAA;AACC,UAAMC,QAAQL,cAAcM,KAAK,CAACC,gBAAgBA,YAAYC,OAAOJ,QAAAA;AACrE,QAAI,CAACC,OAAOI,eAAe,CAACJ,OAAOK,cAAc;AAC/C,aAAOC;IACT;AACA,WAAO;MACLF,aAAaJ,MAAMI;MACnBC,cAAc,OAAOE,QAAaC,OAAAA;AAChC,cAAMC,SAAS,MAAMT,MAClBK,aAAaE,QAAQ;UAAEC;UAAIE,QAAQF;QAAG,CAAA,EACtCG,KACQC,sBAAenC,WAAWoC,SAASpB,QAAQqB,YAAY,GACvDF,sBAAe7B,UAAU8B,SAASnB,gBAAAA,GAClCqB,iBAAU;AAErB,eAAON,OAAOlB;MAChB;IACF;EACF,GACA;IAACI;IAAeF;IAASC;GAAiB;AAG5C,SACE,sBAAA,cAACV,MAAMgC,MAAI;IAAC3B;IAAY4B,KAAKzB;KAC3B,sBAAA,cAACR,MAAMC,SAAO,MACZ,sBAAA,cAACA,QAAQ+B,MAAI;IAACE,WAAU;OAE1B,sBAAA,cAAClC,MAAMmC,SAAO,MACZ,sBAAA,cAACjC,kBAAAA;IAAiBK;IAAgBO;KAEhC,sBAAA,cAACpB,QAAQA,SAAO;IAAC0C,MAAMtC,WAAWI;IAAkBW;;AAK9D,CAAA;",
6
+ "names": ["Effect", "React", "forwardRef", "useCallback", "useMemo", "Capability", "Surface", "useCapabilities", "useOperationInvoker", "usePluginManager", "AppSurface", "Operation", "Panel", "Toolbar", "ObjectProperties", "SpaceCapabilities", "DefaultProperties", "role", "subject", "object", "forwardedRef", "manager", "operationInvoker", "createEntries", "CreateObjectEntry", "data", "resolveCreateEntry", "typename", "entry", "find", "createEntry", "id", "inputSchema", "createObject", "undefined", "values", "db", "result", "target", "pipe", "provideService", "Service", "capabilities", "runPromise", "Root", "ref", "className", "Content", "type"]
7
+ }
@@ -4,9 +4,7 @@ import "./chunk-J5LGTIGS.mjs";
4
4
  import React, { useCallback } from "react";
5
5
  import { useOperationInvoker } from "@dxos/app-framework/ui";
6
6
  import { LayoutOperation, Paths } from "@dxos/app-toolkit";
7
- import { useAppGraph } from "@dxos/app-toolkit/ui";
8
7
  import { Trigger } from "@dxos/async";
9
- import { Graph } from "@dxos/plugin-graph";
10
8
  import { ObservabilityOperation } from "@dxos/plugin-observability";
11
9
  import { useClient } from "@dxos/react-client";
12
10
  import { Dialog, useTranslation } from "@dxos/react-ui";
@@ -17,7 +15,6 @@ var JOIN_DIALOG = `${meta.profile.key}.JoinDialog`;
17
15
  var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
18
16
  const { invokePromise } = useOperationInvoker();
19
17
  const client = useClient();
20
- const { graph } = useAppGraph();
21
18
  const { t } = useTranslation(meta.profile.key);
22
19
  const handleDone = useCallback(async (result) => {
23
20
  const spaceKey = result?.spaceKey;
@@ -56,33 +53,13 @@ var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
56
53
  });
57
54
  space = await trigger.wait();
58
55
  }
59
- await invokePromise(LayoutOperation.SwitchWorkspace, {
60
- subject: Paths.getSpacePath(space.id)
56
+ await invokePromise(LayoutOperation.Open, {
57
+ subject: [
58
+ Paths.getSpaceHomePath(space.id)
59
+ ],
60
+ workspace: Paths.getSpacePath(space.id),
61
+ navigation: "immediate"
61
62
  });
62
- const target = result?.target;
63
- if (target) {
64
- await Graph.waitForPath(graph, {
65
- target
66
- }).catch(() => {
67
- });
68
- await Promise.all([
69
- invokePromise(LayoutOperation.Open, {
70
- subject: [
71
- target
72
- ]
73
- }),
74
- invokePromise(LayoutOperation.Expose, {
75
- subject: target
76
- })
77
- ]);
78
- } else {
79
- await invokePromise(LayoutOperation.Open, {
80
- subject: [
81
- Paths.getSpaceHomePath(space.id)
82
- ],
83
- workspace: Paths.getSpacePath(space.id)
84
- });
85
- }
86
63
  onDone?.(result);
87
64
  if (space) {
88
65
  await invokePromise(ObservabilityOperation.SendEvent, {
@@ -95,7 +72,6 @@ var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
95
72
  }, [
96
73
  invokePromise,
97
74
  client,
98
- graph,
99
75
  navigableCollections,
100
76
  onDone
101
77
  ]);
@@ -118,4 +94,4 @@ export {
118
94
  JoinDialog,
119
95
  JoinDialog as default
120
96
  };
121
- //# sourceMappingURL=JoinDialog-QZGNRJ4P.mjs.map
97
+ //# sourceMappingURL=JoinDialog-ATNUCNL2.mjs.map
@@ -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
+ }
@@ -12,7 +12,7 @@ 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";
@@ -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";
@@ -224,4 +228,4 @@ var InvitationComplete = ({ statusValue }) => {
224
228
  export {
225
229
  MembersContainer as default
226
230
  };
227
- //# sourceMappingURL=MembersContainer-OWCAMBKS.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,7 +1,7 @@
1
1
  import {
2
2
  getSpaceDisplayName
3
- } from "./chunk-PSCIOT7Q.mjs";
4
- import "./chunk-DSYEB2UN.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
@@ -30,4 +30,4 @@ var MenuFooter = ({ object }) => {
30
30
  export {
31
31
  MenuFooter as default
32
32
  };
33
- //# sourceMappingURL=MenuFooter-QCNFUIAO.mjs.map
33
+ //# sourceMappingURL=MenuFooter-FWE5LFM4.mjs.map
@@ -25,7 +25,6 @@ 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
@@ -67,4 +66,4 @@ var ObjectCard = ({ data: subject, classNames }) => {
67
66
  export {
68
67
  RelatedArticle as default
69
68
  };
70
- //# sourceMappingURL=RelatedArticle-YRCRBIYU.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
+ }
@@ -10,9 +10,17 @@ import { isSpace } from "@dxos/react-client/echo";
10
10
  import { Input, useTranslation } from "@dxos/react-ui";
11
11
  import { meta } from "#meta";
12
12
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-space/src/containers/RenamePopover/RenamePopover.tsx";
13
- var getName = (subject) => (isSpace(subject) ? subject.properties.name : Entity.getLabel(subject)) ?? "";
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
+ };
14
20
  var setName = (subject, name) => {
15
- if (isSpace(subject)) {
21
+ if (isRenameCallback(subject)) {
22
+ subject.onRename(name);
23
+ } else if (isSpace(subject)) {
16
24
  Obj.update(subject.properties, (properties) => {
17
25
  properties.name = name;
18
26
  });
@@ -22,7 +30,7 @@ var setName = (subject, name) => {
22
30
  };
23
31
  var RenamePopover = ({ subject }) => {
24
32
  const { t } = useTranslation(meta.profile.key);
25
- const space = isSpace(subject);
33
+ const space = !isRenameCallback(subject) && isSpace(subject);
26
34
  const { invokePromise } = useOperationInvoker();
27
35
  const [name, setNameState] = useState(() => getName(subject));
28
36
  const nameRef = useRef(name);
@@ -38,7 +46,7 @@ var RenamePopover = ({ subject }) => {
38
46
  } catch (err) {
39
47
  log.error("Failed to rename", {
40
48
  err
41
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 42, S: void 0 });
49
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 52, S: void 0 });
42
50
  }
43
51
  }, [
44
52
  subject
@@ -93,4 +101,4 @@ var RenamePopover = ({ subject }) => {
93
101
  export {
94
102
  RenamePopover as default
95
103
  };
96
- //# sourceMappingURL=RenamePopover-XBZAKNM7.mjs.map
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
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-2NK5YB5O.mjs.map
53
+ //# sourceMappingURL=SchemaContainer-4GJKQBXM.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/SchemaContainer/SchemaContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Type } from '@dxos/echo';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nexport const SchemaContainer = ({ space }: AppSurface.SpaceArticleProps) => {\n const { t } = useTranslation(meta.profile.key);\n const types = useQuerySpaceTypes(space);\n\n return (\n <Form.Root variant='settings'>\n <Form.Viewport scroll>\n <Form.Content>\n <Form.Section title={t('schema-verbose.label')} description={t('schema.description')}>\n <div\n className={mx([\n 'grid md:col-span-2 grid-cols-subgrid gap-trim-sm items-center',\n '*:first:mt-0! *:last:mb-0! px-trim-md py-trim-md',\n 'border border-separator rounded-md',\n ])}\n >\n {types.length === 0 && <div className='text-center py-4'>{t('no-schemas-found.message')}</div>}\n {types.map((type) => (\n <div key={type.id}>{Type.getTypename(type)}</div>\n ))}\n </div>\n </Form.Section>\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\n/**\n * Subscribe to and retrieve all types from a space's registry.\n */\nexport const useQuerySpaceTypes = (space: Space): Type.AnyEntity[] => {\n const [types, setTypes] = useState<Type.AnyEntity[]>(() => [...space.db.graph.registry.list().filter(Type.isType)]);\n\n useEffect(() => {\n setTypes([...space.db.graph.registry.list().filter(Type.isType)]);\n return space.db.graph.registry.changed.on(() => {\n setTypes([...space.db.graph.registry.list().filter(Type.isType)]);\n });\n }, [space]);\n\n return types;\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,WAAWC,gBAAgB;AAG3C,SAASC,YAAY;AAErB,SAASC,sBAAsB;AAC/B,SAASC,YAAY;AACrB,SAASC,UAAU;AAEnB,SAASC,YAAY;AAEd,IAAMC,kBAAkB,CAAC,EAAEC,MAAK,MAAgC;AACrE,QAAM,EAAEC,EAAC,IAAKN,eAAeG,KAAKI,QAAQC,GAAG;AAC7C,QAAMC,QAAQC,mBAAmBL,KAAAA;AAEjC,SACE,sBAAA,cAACJ,KAAKU,MAAI;IAACC,SAAQ;KACjB,sBAAA,cAACX,KAAKY,UAAQ;IAACC,QAAAA;KACb,sBAAA,cAACb,KAAKc,SAAO,MACX,sBAAA,cAACd,KAAKe,SAAO;IAACC,OAAOX,EAAE,sBAAA;IAAyBY,aAAaZ,EAAE,oBAAA;KAC7D,sBAAA,cAACa,OAAAA;IACCC,WAAWlB,GAAG;MACZ;MACA;MACA;KACD;KAEAO,MAAMY,WAAW,KAAK,sBAAA,cAACF,OAAAA;IAAIC,WAAU;KAAoBd,EAAE,0BAAA,CAAA,GAC3DG,MAAMa,IAAI,CAACC,SACV,sBAAA,cAACJ,OAAAA;IAAIX,KAAKe,KAAKC;KAAKzB,KAAK0B,YAAYF,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAQrD;AAKO,IAAMb,qBAAqB,CAACL,UAAAA;AACjC,QAAM,CAACI,OAAOiB,QAAAA,IAAY5B,SAA2B,MAAM;OAAIO,MAAMsB,GAAGC,MAAMC,SAASC,KAAI,EAAGC,OAAOhC,KAAKiC,MAAM;GAAE;AAElHnC,YAAU,MAAA;AACR6B,aAAS;SAAIrB,MAAMsB,GAAGC,MAAMC,SAASC,KAAI,EAAGC,OAAOhC,KAAKiC,MAAM;KAAE;AAChE,WAAO3B,MAAMsB,GAAGC,MAAMC,SAASI,QAAQC,GAAG,MAAA;AACxCR,eAAS;WAAIrB,MAAMsB,GAAGC,MAAMC,SAASC,KAAI,EAAGC,OAAOhC,KAAKiC,MAAM;OAAE;IAClE,CAAA;EACF,GAAG;IAAC3B;GAAM;AAEV,SAAOI;AACT;",
6
+ "names": ["React", "useEffect", "useState", "Type", "useTranslation", "Form", "mx", "meta", "SchemaContainer", "space", "t", "profile", "key", "types", "useQuerySpaceTypes", "Root", "variant", "Viewport", "scroll", "Content", "Section", "title", "description", "div", "className", "length", "map", "type", "id", "getTypename", "setTypes", "db", "graph", "registry", "list", "filter", "isType", "changed", "on"]
7
+ }
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  SmallPresenceLive
3
- } from "./chunk-2LTGSUGQ.mjs";
3
+ } from "./chunk-RAAHDTVF.mjs";
4
4
  import "./chunk-J5LGTIGS.mjs";
5
5
  export {
6
6
  SmallPresenceLive as default
7
7
  };
8
- //# sourceMappingURL=SmallPresenceLive-L4H7WJOA.mjs.map
8
+ //# sourceMappingURL=SmallPresenceLive-FW3AMEY5.mjs.map
@@ -30,7 +30,7 @@ var SpaceHomeArticle = ({ role, attendableId, space }) => {
30
30
  centered: true,
31
31
  padding: true
32
32
  }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement("div", {
33
- className: "dx-document flex flex-col gap-4 py-4"
33
+ className: "dx-document flex flex-col gap-4 pb-12"
34
34
  }, /* @__PURE__ */ React.createElement(Surface.Surface, {
35
35
  type: SpaceHomeContent,
36
36
  data: {
@@ -75,4 +75,4 @@ var useMenuActions = (attendableId) => {
75
75
  export {
76
76
  SpaceHomeArticle as default
77
77
  };
78
- //# sourceMappingURL=SpaceHomeArticle-ZV7EERLS.mjs.map
78
+ //# sourceMappingURL=SpaceHomeArticle-Y47TLZ72.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { Column, Panel, ScrollArea } from '@dxos/react-ui';\nimport {\n type ActionExecutor,\n type ActionGraphProps,\n Menu,\n MenuBuilder,\n graphActions,\n useMenuBuilder,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { SpaceHomeContent, SpaceHomePinBottom } from '#types';\n\nexport type SpaceHomeArticleProps = AppSurface.SpaceArticleProps;\n\n/**\n * Per-space Home article shell. Owns only the chrome: a toolbar sourced from graph actions\n * contributed with `disposition: 'toolbar'` (e.g. Start tour / Hide Welcome from plugin-support),\n * and a Column layout that delegates its body to surface contributors:\n *\n * - `space-home-content`: scrollable region (Welcome panel, recent-objects masonry, starter prompts).\n * - `space-home-pin-bottom`: pinned region (assistant prompt), capped at one contributor.\n *\n * The Space is read from `data.subject` (the Home node carries the Space as its data).\n */\nexport const SpaceHomeArticle = ({ role, attendableId, space }: SpaceHomeArticleProps) => {\n const { actions, onAction } = useMenuActions(attendableId);\n\n return (\n <Panel.Root role={role}>\n <Menu.Root {...actions} attendableId={attendableId} onAction={onAction}>\n <Panel.Toolbar asChild>\n <Menu.Toolbar />\n </Panel.Toolbar>\n </Menu.Root>\n <Panel.Content asChild>\n <Column.Root style={{ gridTemplateRows: 'minmax(0,1fr) auto' }}>\n <ScrollArea.Root orientation='vertical' centered padding>\n <ScrollArea.Viewport>\n <div className='dx-document flex flex-col gap-4 py-4'>\n <Surface.Surface type={SpaceHomeContent} data={{ space }} />\n </div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <Column.Center classNames='dx-document pb-4'>\n <Surface.Surface type={SpaceHomePinBottom} data={{ space }} limit={1} />\n </Column.Center>\n </Column.Root>\n </Panel.Content>\n </Panel.Root>\n );\n};\n\n//\n// Hooks\n//\n\n/**\n * Builds the toolbar from contributed graph actions for the Home node. Actions opt into the\n * toolbar via `disposition: 'toolbar'`; the Home shell contributes none itself, so the toolbar\n * is empty unless another plugin (e.g. plugin-support's tour/welcome actions) contributes.\n */\nconst useMenuActions = (\n attendableId?: string,\n): { actions: ReturnType<typeof useMenuBuilder>; onAction: ActionExecutor } => {\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n\n const menuActions = useMenuBuilder(\n (get): ActionGraphProps => {\n if (!attendableId) {\n return MenuBuilder.make().build();\n }\n return MenuBuilder.make()\n .subgraph(\n graphActions(graph, get, attendableId, { filter: (action) => action.properties.disposition === 'toolbar' }),\n )\n .build();\n },\n [graph, attendableId],\n );\n\n const onAction: ActionExecutor = useCallback(\n (action) => {\n void runAction(action, { caller: meta.profile.key });\n },\n [runAction],\n );\n\n return { actions: menuActions, onAction };\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { Column, Panel, ScrollArea } from '@dxos/react-ui';\nimport {\n type ActionExecutor,\n type ActionGraphProps,\n Menu,\n MenuBuilder,\n graphActions,\n useMenuBuilder,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { SpaceHomeContent, SpaceHomePinBottom } from '#types';\n\nexport type SpaceHomeArticleProps = AppSurface.SpaceArticleProps;\n\n/**\n * Per-space Home article shell. Owns only the chrome: a toolbar sourced from graph actions\n * contributed with `disposition: 'toolbar'` (e.g. Start tour / Hide Welcome from plugin-support),\n * and a Column layout that delegates its body to surface contributors:\n *\n * - `space-home-content`: scrollable region (Welcome panel, recent-objects masonry, starter prompts).\n * - `space-home-pin-bottom`: pinned region (assistant prompt), capped at one contributor.\n *\n * The Space is read from `data.subject` (the Home node carries the Space as its data).\n */\nexport const SpaceHomeArticle = ({ role, attendableId, space }: SpaceHomeArticleProps) => {\n const { actions, onAction } = useMenuActions(attendableId);\n\n return (\n <Panel.Root role={role}>\n <Menu.Root {...actions} attendableId={attendableId} onAction={onAction}>\n <Panel.Toolbar asChild>\n <Menu.Toolbar />\n </Panel.Toolbar>\n </Menu.Root>\n <Panel.Content asChild>\n <Column.Root style={{ gridTemplateRows: 'minmax(0,1fr) auto' }}>\n <ScrollArea.Root orientation='vertical' centered padding>\n <ScrollArea.Viewport>\n <div className='dx-document flex flex-col gap-4 pb-12'>\n <Surface.Surface type={SpaceHomeContent} data={{ space }} />\n </div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <Column.Center classNames='dx-document pb-4'>\n <Surface.Surface type={SpaceHomePinBottom} data={{ space }} limit={1} />\n </Column.Center>\n </Column.Root>\n </Panel.Content>\n </Panel.Root>\n );\n};\n\n//\n// Hooks\n//\n\n/**\n * Builds the toolbar from contributed graph actions for the Home node. Actions opt into the\n * toolbar via `disposition: 'toolbar'`; the Home shell contributes none itself, so the toolbar\n * is empty unless another plugin (e.g. plugin-support's tour/welcome actions) contributes.\n */\nconst useMenuActions = (\n attendableId?: string,\n): { actions: ReturnType<typeof useMenuBuilder>; onAction: ActionExecutor } => {\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n\n const menuActions = useMenuBuilder(\n (get): ActionGraphProps => {\n if (!attendableId) {\n return MenuBuilder.make().build();\n }\n return MenuBuilder.make()\n .subgraph(\n graphActions(graph, get, attendableId, { filter: (action) => action.properties.disposition === 'toolbar' }),\n )\n .build();\n },\n [graph, attendableId],\n );\n\n const onAction: ActionExecutor = useCallback(\n (action) => {\n void runAction(action, { caller: meta.profile.key });\n },\n [runAction],\n );\n\n return { actions: menuActions, onAction };\n};\n"],
5
5
  "mappings": ";;;AAIA,OAAOA,SAASC,mBAAmB;AAEnC,SAASC,eAAe;AACxB,SAA0BC,mBAAmB;AAC7C,SAASC,uBAAuB;AAChC,SAASC,QAAQC,OAAOC,kBAAkB;AAC1C,SAGEC,MACAC,aACAC,cACAC,sBACK;AAEP,SAASC,YAAY;AACrB,SAASC,kBAAkBC,0BAA0B;AAc9C,IAAMC,mBAAmB,CAAC,EAAEC,MAAMC,cAAcC,MAAK,MAAyB;AACnF,QAAM,EAAEC,SAASC,SAAQ,IAAKC,eAAeJ,YAAAA;AAE7C,SACE,sBAAA,cAACX,MAAMgB,MAAI;IAACN;KACV,sBAAA,cAACR,KAAKc,MAAI;IAAE,GAAGH;IAASF;IAA4BG;KAClD,sBAAA,cAACd,MAAMiB,SAAO;IAACC,SAAAA;KACb,sBAAA,cAAChB,KAAKe,SAAO,IAAA,CAAA,CAAA,GAGjB,sBAAA,cAACjB,MAAMmB,SAAO;IAACD,SAAAA;KACb,sBAAA,cAACnB,OAAOiB,MAAI;IAACI,OAAO;MAAEC,kBAAkB;IAAqB;KAC3D,sBAAA,cAACpB,WAAWe,MAAI;IAACM,aAAY;IAAWC,UAAAA;IAASC,SAAAA;KAC/C,sBAAA,cAACvB,WAAWwB,UAAQ,MAClB,sBAAA,cAACC,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAAC/B,QAAQA,SAAO;IAACgC,MAAMrB;IAAkBsB,MAAM;MAAEjB;IAAM;SAI7D,sBAAA,cAACb,OAAO+B,QAAM;IAACC,YAAW;KACxB,sBAAA,cAACnC,QAAQA,SAAO;IAACgC,MAAMpB;IAAoBqB,MAAM;MAAEjB;IAAM;IAAGoB,OAAO;;AAM/E;AAWA,IAAMjB,iBAAiB,CACrBJ,iBAAAA;AAEA,QAAM,EAAEsB,MAAK,IAAKpC,YAAAA;AAClB,QAAMqC,YAAYpC,gBAAAA;AAElB,QAAMqC,cAAc9B,eAClB,CAAC+B,QAAAA;AACC,QAAI,CAACzB,cAAc;AACjB,aAAOR,YAAYkC,KAAI,EAAGC,MAAK;IACjC;AACA,WAAOnC,YAAYkC,KAAI,EACpBE,SACCnC,aAAa6B,OAAOG,KAAKzB,cAAc;MAAE6B,QAAQ,CAACC,WAAWA,OAAOC,WAAWC,gBAAgB;IAAU,CAAA,CAAA,EAE1GL,MAAK;EACV,GACA;IAACL;IAAOtB;GAAa;AAGvB,QAAMG,WAA2BnB,YAC/B,CAAC8C,WAAAA;AACC,SAAKP,UAAUO,QAAQ;MAAEG,QAAQtC,KAAKuC,QAAQC;IAAI,CAAA;EACpD,GACA;IAACZ;GAAU;AAGb,SAAO;IAAErB,SAASsB;IAAarB;EAAS;AAC1C;",
6
6
  "names": ["React", "useCallback", "Surface", "useAppGraph", "useActionRunner", "Column", "Panel", "ScrollArea", "Menu", "MenuBuilder", "graphActions", "useMenuBuilder", "meta", "SpaceHomeContent", "SpaceHomePinBottom", "SpaceHomeArticle", "role", "attendableId", "space", "actions", "onAction", "useMenuActions", "Root", "Toolbar", "asChild", "Content", "style", "gridTemplateRows", "orientation", "centered", "padding", "Viewport", "div", "className", "type", "data", "Center", "classNames", "limit", "graph", "runAction", "menuActions", "get", "make", "build", "subgraph", "filter", "action", "properties", "disposition", "caller", "profile", "key"]
7
7
  }