@dxos/plugin-space 0.8.4-main.3c1ae3b → 0.8.4-main.3eb6e50203

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 (535) hide show
  1. package/dist/lib/browser/CollectionArticle-XXLUNK3F.mjs +127 -0
  2. package/dist/lib/browser/CollectionArticle-XXLUNK3F.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectCardStack-CXNBCSMR.mjs +148 -0
  4. package/dist/lib/browser/ObjectCardStack-CXNBCSMR.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectDetails-HXV4IQEM.mjs +143 -0
  6. package/dist/lib/browser/ObjectDetails-HXV4IQEM.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-36LDKFWF.mjs +108 -0
  8. package/dist/lib/browser/RecordArticle-36LDKFWF.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-GLV46QSI.mjs +530 -0
  10. package/dist/lib/browser/app-graph-builder-GLV46QSI.mjs.map +7 -0
  11. package/dist/lib/browser/app-graph-serializer-VOLRDNVE.mjs +85 -0
  12. package/dist/lib/browser/app-graph-serializer-VOLRDNVE.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-POFUXISV.mjs → chunk-7D63MVRS.mjs} +6 -5
  14. package/dist/lib/browser/chunk-7D63MVRS.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-5CSSKOWR.mjs → chunk-A7ZCVQGZ.mjs} +43 -45
  16. package/dist/lib/browser/chunk-A7ZCVQGZ.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-ASV6DYFH.mjs +19 -0
  18. package/dist/lib/browser/chunk-ASV6DYFH.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-CMLRMQNM.mjs +1889 -0
  20. package/dist/lib/browser/chunk-CMLRMQNM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-VZBIIYFM.mjs → chunk-HSMQFM57.mjs} +1 -1
  22. package/dist/lib/browser/chunk-HSMQFM57.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-KGLWYGIF.mjs +715 -0
  24. package/dist/lib/browser/chunk-KGLWYGIF.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-NF3ZFAB4.mjs +13 -0
  26. package/dist/lib/browser/chunk-NF3ZFAB4.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-IJCMB5B5.mjs → chunk-WAOJLA2S.mjs} +195 -196
  28. package/dist/lib/browser/chunk-WAOJLA2S.mjs.map +7 -0
  29. package/dist/lib/browser/cli/index.mjs +851 -0
  30. package/dist/lib/browser/cli/index.mjs.map +7 -0
  31. package/dist/lib/browser/identity-created-VCFYLSBB.mjs +23 -0
  32. package/dist/lib/browser/identity-created-VCFYLSBB.mjs.map +7 -0
  33. package/dist/lib/browser/index.mjs +215 -189
  34. package/dist/lib/browser/index.mjs.map +4 -4
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/operation-resolver-PJJ3PCM7.mjs +830 -0
  37. package/dist/lib/browser/operation-resolver-PJJ3PCM7.mjs.map +7 -0
  38. package/dist/lib/browser/react-root-ITWAPZIY.mjs +30 -0
  39. package/dist/lib/browser/react-root-ITWAPZIY.mjs.map +7 -0
  40. package/dist/lib/browser/react-surface-6GD6K4I4.mjs +383 -0
  41. package/dist/lib/browser/react-surface-6GD6K4I4.mjs.map +7 -0
  42. package/dist/lib/browser/{repair-CNLE35NF.mjs → repair-DKU4TUD2.mjs} +16 -10
  43. package/dist/lib/browser/repair-DKU4TUD2.mjs.map +7 -0
  44. package/dist/lib/browser/settings-M2DMD2ZA.mjs +34 -0
  45. package/dist/lib/browser/settings-M2DMD2ZA.mjs.map +7 -0
  46. package/dist/lib/browser/spaces-ready-XWJUJ43N.mjs +243 -0
  47. package/dist/lib/browser/spaces-ready-XWJUJ43N.mjs.map +7 -0
  48. package/dist/lib/browser/state-V637BLIM.mjs +58 -0
  49. package/dist/lib/browser/state-V637BLIM.mjs.map +7 -0
  50. package/dist/lib/browser/types/index.mjs +10 -8
  51. package/dist/lib/node-esm/CollectionArticle-KFFKKP37.mjs +128 -0
  52. package/dist/lib/node-esm/CollectionArticle-KFFKKP37.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectCardStack-EHXPNRQW.mjs +149 -0
  54. package/dist/lib/node-esm/ObjectCardStack-EHXPNRQW.mjs.map +7 -0
  55. package/dist/lib/node-esm/ObjectDetails-N73UI4ZL.mjs +144 -0
  56. package/dist/lib/node-esm/ObjectDetails-N73UI4ZL.mjs.map +7 -0
  57. package/dist/lib/node-esm/RecordArticle-CMEXNNOZ.mjs +109 -0
  58. package/dist/lib/node-esm/RecordArticle-CMEXNNOZ.mjs.map +7 -0
  59. package/dist/lib/node-esm/app-graph-builder-KCEHEKVS.mjs +531 -0
  60. package/dist/lib/node-esm/app-graph-builder-KCEHEKVS.mjs.map +7 -0
  61. package/dist/lib/node-esm/app-graph-serializer-7C4MV5NB.mjs +86 -0
  62. package/dist/lib/node-esm/app-graph-serializer-7C4MV5NB.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-2NM62ORP.mjs +1890 -0
  64. package/dist/lib/node-esm/chunk-2NM62ORP.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-AX3UGL5D.mjs → chunk-5N3YIAXD.mjs} +6 -5
  66. package/dist/lib/node-esm/chunk-5N3YIAXD.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-UMZ7G6G4.mjs → chunk-A5A7M37T.mjs} +43 -45
  68. package/dist/lib/node-esm/chunk-A5A7M37T.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-CVXULIYC.mjs +20 -0
  70. package/dist/lib/node-esm/chunk-CVXULIYC.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-3D4NGZPW.mjs → chunk-FB5YNROS.mjs} +195 -196
  72. package/dist/lib/node-esm/chunk-FB5YNROS.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-NYSDQPNM.mjs +716 -0
  74. package/dist/lib/node-esm/chunk-NYSDQPNM.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-PG7DNOEX.mjs +15 -0
  76. package/dist/lib/node-esm/chunk-PG7DNOEX.mjs.map +7 -0
  77. package/dist/lib/node-esm/{chunk-BDEFTL6K.mjs → chunk-SL4BJSUG.mjs} +1 -1
  78. package/dist/lib/node-esm/chunk-SL4BJSUG.mjs.map +7 -0
  79. package/dist/lib/node-esm/cli/index.mjs +852 -0
  80. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  81. package/dist/lib/node-esm/identity-created-2SJABVJD.mjs +25 -0
  82. package/dist/lib/node-esm/identity-created-2SJABVJD.mjs.map +7 -0
  83. package/dist/lib/node-esm/index.mjs +215 -189
  84. package/dist/lib/node-esm/index.mjs.map +4 -4
  85. package/dist/lib/node-esm/meta.json +1 -1
  86. package/dist/lib/node-esm/operation-resolver-2K7N4KYC.mjs +831 -0
  87. package/dist/lib/node-esm/operation-resolver-2K7N4KYC.mjs.map +7 -0
  88. package/dist/lib/node-esm/react-root-GIQAKDQ2.mjs +31 -0
  89. package/dist/lib/node-esm/react-root-GIQAKDQ2.mjs.map +7 -0
  90. package/dist/lib/node-esm/react-surface-KWP2DNFG.mjs +384 -0
  91. package/dist/lib/node-esm/react-surface-KWP2DNFG.mjs.map +7 -0
  92. package/dist/lib/node-esm/{repair-EHZS6MFY.mjs → repair-C2H6JQCL.mjs} +16 -10
  93. package/dist/lib/node-esm/repair-C2H6JQCL.mjs.map +7 -0
  94. package/dist/lib/node-esm/settings-VCPCNBOY.mjs +35 -0
  95. package/dist/lib/node-esm/settings-VCPCNBOY.mjs.map +7 -0
  96. package/dist/lib/node-esm/spaces-ready-5JOGEWON.mjs +244 -0
  97. package/dist/lib/node-esm/spaces-ready-5JOGEWON.mjs.map +7 -0
  98. package/dist/lib/node-esm/state-5MCEPWN3.mjs +59 -0
  99. package/dist/lib/node-esm/state-5MCEPWN3.mjs.map +7 -0
  100. package/dist/lib/node-esm/types/index.mjs +10 -8
  101. package/dist/types/src/SpacePlugin.d.ts +3 -15
  102. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +7 -0
  104. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  106. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  108. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/identity-created/identity-created.d.ts +5 -0
  112. package/dist/types/src/capabilities/identity-created/identity-created.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/identity-created/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/identity-created/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/index.d.ts +10 -20
  116. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/operation-resolver/index.d.ts +6 -0
  118. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +9 -0
  120. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  122. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  124. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/react-surface/index.d.ts +5 -0
  126. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +8 -0
  128. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  130. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  132. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/settings/index.d.ts +7 -0
  134. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  135. package/dist/types/src/capabilities/settings/settings.d.ts +10 -0
  136. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  137. package/dist/types/src/capabilities/spaces-ready/index.d.ts +3 -0
  138. package/dist/types/src/capabilities/spaces-ready/index.d.ts.map +1 -0
  139. package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts +5 -0
  140. package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts.map +1 -0
  141. package/dist/types/src/capabilities/state/index.d.ts +13 -0
  142. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  143. package/dist/types/src/capabilities/state/state.d.ts +17 -0
  144. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  145. package/dist/types/src/cli/commands/database/add.d.ts +17 -0
  146. package/dist/types/src/cli/commands/database/add.d.ts.map +1 -0
  147. package/dist/types/src/cli/commands/database/index.d.ts +3 -0
  148. package/dist/types/src/cli/commands/database/index.d.ts.map +1 -0
  149. package/dist/types/src/cli/commands/database/query/index.d.ts +2 -0
  150. package/dist/types/src/cli/commands/database/query/index.d.ts.map +1 -0
  151. package/dist/types/src/cli/commands/database/query/query.d.ts +13 -0
  152. package/dist/types/src/cli/commands/database/query/query.d.ts.map +1 -0
  153. package/dist/types/src/cli/commands/database/query/query.test.d.ts +2 -0
  154. package/dist/types/src/cli/commands/database/query/query.test.d.ts.map +1 -0
  155. package/dist/types/src/cli/commands/database/remove.d.ts +9 -0
  156. package/dist/types/src/cli/commands/database/remove.d.ts.map +1 -0
  157. package/dist/types/src/cli/commands/database/stats.d.ts +6 -0
  158. package/dist/types/src/cli/commands/database/stats.d.ts.map +1 -0
  159. package/dist/types/src/cli/commands/database/util.d.ts +14 -0
  160. package/dist/types/src/cli/commands/database/util.d.ts.map +1 -0
  161. package/dist/types/src/cli/commands/index.d.ts +4 -0
  162. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  163. package/dist/types/src/cli/commands/queue/index.d.ts +7 -0
  164. package/dist/types/src/cli/commands/queue/index.d.ts.map +1 -0
  165. package/dist/types/src/cli/commands/queue/query.d.ts +8 -0
  166. package/dist/types/src/cli/commands/queue/query.d.ts.map +1 -0
  167. package/dist/types/src/cli/commands/queue/util.d.ts +6 -0
  168. package/dist/types/src/cli/commands/queue/util.d.ts.map +1 -0
  169. package/dist/types/src/cli/commands/space/close/close.d.ts +12 -0
  170. package/dist/types/src/cli/commands/space/close/close.d.ts.map +1 -0
  171. package/dist/types/src/cli/commands/space/close/index.d.ts +2 -0
  172. package/dist/types/src/cli/commands/space/close/index.d.ts.map +1 -0
  173. package/dist/types/src/cli/commands/space/create/create.d.ts +12 -0
  174. package/dist/types/src/cli/commands/space/create/create.d.ts.map +1 -0
  175. package/dist/types/src/cli/commands/space/create/create.test.d.ts +2 -0
  176. package/dist/types/src/cli/commands/space/create/create.test.d.ts.map +1 -0
  177. package/dist/types/src/cli/commands/space/create/index.d.ts +2 -0
  178. package/dist/types/src/cli/commands/space/create/index.d.ts.map +1 -0
  179. package/dist/types/src/cli/commands/space/index.d.ts +31 -0
  180. package/dist/types/src/cli/commands/space/index.d.ts.map +1 -0
  181. package/dist/types/src/cli/commands/space/info/index.d.ts +2 -0
  182. package/dist/types/src/cli/commands/space/info/index.d.ts.map +1 -0
  183. package/dist/types/src/cli/commands/space/info/info.d.ts +13 -0
  184. package/dist/types/src/cli/commands/space/info/info.d.ts.map +1 -0
  185. package/dist/types/src/cli/commands/space/info/info.test.d.ts +2 -0
  186. package/dist/types/src/cli/commands/space/info/info.test.d.ts.map +1 -0
  187. package/dist/types/src/cli/commands/space/join/index.d.ts +2 -0
  188. package/dist/types/src/cli/commands/space/join/index.d.ts.map +1 -0
  189. package/dist/types/src/cli/commands/space/join/join.d.ts +14 -0
  190. package/dist/types/src/cli/commands/space/join/join.d.ts.map +1 -0
  191. package/dist/types/src/cli/commands/space/join/util.d.ts +17 -0
  192. package/dist/types/src/cli/commands/space/join/util.d.ts.map +1 -0
  193. package/dist/types/src/cli/commands/space/list/index.d.ts +2 -0
  194. package/dist/types/src/cli/commands/space/list/index.d.ts.map +1 -0
  195. package/dist/types/src/cli/commands/space/list/list.d.ts +7 -0
  196. package/dist/types/src/cli/commands/space/list/list.d.ts.map +1 -0
  197. package/dist/types/src/cli/commands/space/list/list.test.d.ts +2 -0
  198. package/dist/types/src/cli/commands/space/list/list.test.d.ts.map +1 -0
  199. package/dist/types/src/cli/commands/space/members/index.d.ts +2 -0
  200. package/dist/types/src/cli/commands/space/members/index.d.ts.map +1 -0
  201. package/dist/types/src/cli/commands/space/members/members.d.ts +13 -0
  202. package/dist/types/src/cli/commands/space/members/members.d.ts.map +1 -0
  203. package/dist/types/src/cli/commands/space/members/members.test.d.ts +2 -0
  204. package/dist/types/src/cli/commands/space/members/members.test.d.ts.map +1 -0
  205. package/dist/types/src/cli/commands/space/members/util.d.ts +9 -0
  206. package/dist/types/src/cli/commands/space/members/util.d.ts.map +1 -0
  207. package/dist/types/src/cli/commands/space/open/index.d.ts +2 -0
  208. package/dist/types/src/cli/commands/space/open/index.d.ts.map +1 -0
  209. package/dist/types/src/cli/commands/space/open/open.d.ts +12 -0
  210. package/dist/types/src/cli/commands/space/open/open.d.ts.map +1 -0
  211. package/dist/types/src/cli/commands/space/schema/index.d.ts +8 -0
  212. package/dist/types/src/cli/commands/space/schema/index.d.ts.map +1 -0
  213. package/dist/types/src/cli/commands/space/schema/list/index.d.ts +2 -0
  214. package/dist/types/src/cli/commands/space/schema/list/index.d.ts.map +1 -0
  215. package/dist/types/src/cli/commands/space/schema/list/list.d.ts +15 -0
  216. package/dist/types/src/cli/commands/space/schema/list/list.d.ts.map +1 -0
  217. package/dist/types/src/cli/commands/space/schema/list/list.test.d.ts +2 -0
  218. package/dist/types/src/cli/commands/space/schema/list/list.test.d.ts.map +1 -0
  219. package/dist/types/src/cli/commands/space/schema/list/util.d.ts +15 -0
  220. package/dist/types/src/cli/commands/space/schema/list/util.d.ts.map +1 -0
  221. package/dist/types/src/cli/commands/space/share/index.d.ts +2 -0
  222. package/dist/types/src/cli/commands/space/share/index.d.ts.map +1 -0
  223. package/dist/types/src/cli/commands/space/share/share.d.ts +19 -0
  224. package/dist/types/src/cli/commands/space/share/share.d.ts.map +1 -0
  225. package/dist/types/src/cli/commands/space/sync/index.d.ts +2 -0
  226. package/dist/types/src/cli/commands/space/sync/index.d.ts.map +1 -0
  227. package/dist/types/src/cli/commands/space/sync/sync.d.ts +6 -0
  228. package/dist/types/src/cli/commands/space/sync/sync.d.ts.map +1 -0
  229. package/dist/types/src/cli/commands/space/sync/sync.test.d.ts +2 -0
  230. package/dist/types/src/cli/commands/space/sync/sync.test.d.ts.map +1 -0
  231. package/dist/types/src/cli/index.d.ts +2 -0
  232. package/dist/types/src/cli/index.d.ts.map +1 -0
  233. package/dist/types/src/cli/plugin.d.ts +4 -0
  234. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  235. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  236. package/dist/types/src/components/CollectionArticle.d.ts +6 -3
  237. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -1
  238. package/dist/types/src/components/CollectionSection.d.ts +1 -1
  239. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  240. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -2
  241. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  242. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +17 -7
  243. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  244. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +9 -5
  245. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  246. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  247. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -1
  248. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -1
  249. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +11 -2
  250. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -1
  251. package/dist/types/src/components/MenuFooter.d.ts +1 -1
  252. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  253. package/dist/types/src/components/ObjectCardStack/ObjectCardStack.d.ts +1 -1
  254. package/dist/types/src/components/ObjectCardStack/ObjectCardStack.d.ts.map +1 -1
  255. package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts +1 -1
  256. package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts.map +1 -1
  257. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.d.ts +1 -1
  258. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.d.ts.map +1 -1
  259. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts +9 -0
  260. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts.map +1 -1
  261. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts +6 -5
  262. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts.map +1 -1
  263. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +1 -1
  264. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -1
  265. package/dist/types/src/components/RecordArticle.d.ts +2 -2
  266. package/dist/types/src/components/RecordArticle.d.ts.map +1 -1
  267. package/dist/types/src/components/RecordArticle.stories.d.ts +11 -2
  268. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -1
  269. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  270. package/dist/types/src/components/SpacePluginSettings.d.ts +4 -2
  271. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  272. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts +4 -4
  273. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -1
  274. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +9 -0
  275. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
  276. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -1
  277. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +4 -1
  278. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  279. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +13 -1
  280. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  281. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +9 -0
  282. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  283. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  284. package/dist/types/src/components/index.d.ts +11 -6
  285. package/dist/types/src/components/index.d.ts.map +1 -1
  286. package/dist/types/src/constants.d.ts +6 -0
  287. package/dist/types/src/constants.d.ts.map +1 -0
  288. package/dist/types/src/helpers/query.d.ts +3 -3
  289. package/dist/types/src/helpers/query.d.ts.map +1 -1
  290. package/dist/types/src/hooks/useActiveSpace.d.ts +2 -2
  291. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  292. package/dist/types/src/hooks/usePath.d.ts +2 -2
  293. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  294. package/dist/types/src/index.d.ts +1 -2
  295. package/dist/types/src/index.d.ts.map +1 -1
  296. package/dist/types/src/meta.d.ts +2 -2
  297. package/dist/types/src/meta.d.ts.map +1 -1
  298. package/dist/types/src/translations.d.ts +9 -0
  299. package/dist/types/src/translations.d.ts.map +1 -1
  300. package/dist/types/src/types/capabilities.d.ts +71 -0
  301. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  302. package/dist/types/src/types/events.d.ts +9 -0
  303. package/dist/types/src/types/events.d.ts.map +1 -0
  304. package/dist/types/src/types/index.d.ts +2 -0
  305. package/dist/types/src/types/index.d.ts.map +1 -1
  306. package/dist/types/src/types/types.d.ts +643 -354
  307. package/dist/types/src/types/types.d.ts.map +1 -1
  308. package/dist/types/src/util.d.ts +36 -31
  309. package/dist/types/src/util.d.ts.map +1 -1
  310. package/dist/types/tsconfig.tsbuildinfo +1 -1
  311. package/package.json +83 -69
  312. package/src/SpacePlugin.ts +174 -194
  313. package/src/capabilities/app-graph-builder/app-graph-builder.ts +621 -0
  314. package/src/capabilities/app-graph-builder/index.ts +7 -0
  315. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +83 -0
  316. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  317. package/src/capabilities/identity-created/identity-created.ts +29 -0
  318. package/src/capabilities/identity-created/index.ts +7 -0
  319. package/src/capabilities/index.ts +10 -14
  320. package/src/capabilities/operation-resolver/index.ts +7 -0
  321. package/src/capabilities/operation-resolver/operation-resolver.ts +762 -0
  322. package/src/capabilities/react-root/index.ts +7 -0
  323. package/src/capabilities/react-root/react-root.tsx +25 -0
  324. package/src/capabilities/react-surface/index.ts +7 -0
  325. package/src/capabilities/react-surface/react-surface.tsx +377 -0
  326. package/src/capabilities/repair/index.ts +7 -0
  327. package/src/capabilities/{repair.ts → repair/repair.ts} +21 -11
  328. package/src/capabilities/settings/index.ts +7 -0
  329. package/src/capabilities/settings/settings.ts +33 -0
  330. package/src/capabilities/spaces-ready/index.ts +7 -0
  331. package/src/capabilities/spaces-ready/spaces-ready.ts +290 -0
  332. package/src/capabilities/state/index.ts +7 -0
  333. package/src/capabilities/state/state.ts +64 -0
  334. package/src/cli/commands/database/add.ts +115 -0
  335. package/src/cli/commands/database/index.ts +16 -0
  336. package/src/cli/commands/database/query/index.ts +5 -0
  337. package/src/cli/commands/database/query/query.test.ts +55 -0
  338. package/src/cli/commands/database/query/query.ts +44 -0
  339. package/src/cli/commands/database/remove.ts +51 -0
  340. package/src/cli/commands/database/stats.ts +44 -0
  341. package/src/cli/commands/database/util.ts +32 -0
  342. package/src/cli/commands/index.ts +7 -0
  343. package/src/cli/commands/queue/index.ts +12 -0
  344. package/src/cli/commands/queue/query.ts +45 -0
  345. package/src/cli/commands/queue/util.ts +19 -0
  346. package/src/cli/commands/space/close/close.ts +40 -0
  347. package/src/cli/commands/space/close/index.ts +5 -0
  348. package/src/cli/commands/space/create/create.test.ts +67 -0
  349. package/src/cli/commands/space/create/create.ts +61 -0
  350. package/src/cli/commands/space/create/index.ts +5 -0
  351. package/src/cli/commands/space/index.ts +21 -0
  352. package/src/cli/commands/space/info/index.ts +5 -0
  353. package/src/cli/commands/space/info/info.test.ts +47 -0
  354. package/src/cli/commands/space/info/info.ts +37 -0
  355. package/src/cli/commands/space/join/index.ts +5 -0
  356. package/src/cli/commands/space/join/join.ts +122 -0
  357. package/src/cli/commands/space/join/util.ts +82 -0
  358. package/src/cli/commands/space/list/index.ts +5 -0
  359. package/src/cli/commands/space/list/list.test.ts +36 -0
  360. package/src/cli/commands/space/list/list.ts +30 -0
  361. package/src/cli/commands/space/members/index.ts +5 -0
  362. package/src/cli/commands/space/members/members.test.ts +46 -0
  363. package/src/cli/commands/space/members/members.ts +40 -0
  364. package/src/cli/commands/space/members/util.ts +29 -0
  365. package/src/cli/commands/space/open/index.ts +5 -0
  366. package/src/cli/commands/space/open/open.ts +39 -0
  367. package/src/cli/commands/space/schema/index.ts +12 -0
  368. package/src/cli/commands/space/schema/list/index.ts +5 -0
  369. package/src/cli/commands/space/schema/list/list.test.ts +42 -0
  370. package/src/cli/commands/space/schema/list/list.ts +64 -0
  371. package/src/cli/commands/space/schema/list/util.ts +39 -0
  372. package/src/cli/commands/space/share/index.ts +5 -0
  373. package/src/cli/commands/space/share/share.ts +112 -0
  374. package/src/cli/commands/space/sync/index.ts +5 -0
  375. package/src/cli/commands/space/sync/sync.test.ts +12 -0
  376. package/src/cli/commands/space/sync/sync.ts +33 -0
  377. package/src/cli/index.ts +5 -0
  378. package/src/cli/plugin.ts +88 -0
  379. package/src/components/AwaitingObject.tsx +14 -10
  380. package/src/components/CollectionArticle.tsx +142 -19
  381. package/src/components/CollectionSection.tsx +1 -1
  382. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +28 -22
  383. package/src/components/CreateDialog/CreateObjectDialog.tsx +55 -60
  384. package/src/components/CreateDialog/CreateObjectPanel.tsx +102 -52
  385. package/src/components/CreateDialog/CreateSpaceDialog.tsx +34 -51
  386. package/src/components/JoinDialog/JoinDialog.tsx +26 -52
  387. package/src/components/MembersContainer/MembersContainer.stories.tsx +3 -3
  388. package/src/components/MembersContainer/MembersContainer.tsx +76 -81
  389. package/src/components/MenuFooter.tsx +1 -1
  390. package/src/components/ObjectCardStack/ObjectCardStack.tsx +13 -10
  391. package/src/components/ObjectCardStack/ObjectForm.tsx +34 -27
  392. package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +8 -8
  393. package/src/components/ObjectDetails/BaseObjectSettings.tsx +35 -31
  394. package/src/components/ObjectDetails/ObjectDetails.tsx +9 -11
  395. package/src/components/ObjectRenamePopover/ObjectRenamePopover.tsx +9 -13
  396. package/src/components/RecordArticle.stories.tsx +14 -13
  397. package/src/components/RecordArticle.tsx +47 -37
  398. package/src/components/SchemaContainer.tsx +20 -17
  399. package/src/components/SpacePluginSettings.tsx +42 -35
  400. package/src/components/SpacePresence/SpacePresence.stories.tsx +1 -1
  401. package/src/components/SpacePresence/SpacePresence.tsx +15 -16
  402. package/src/components/SpaceRenamePopover/SpaceRenamePopover.tsx +11 -12
  403. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +5 -5
  404. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +165 -182
  405. package/src/components/SyncStatus/InlineSyncStatus.tsx +1 -1
  406. package/src/components/SyncStatus/SyncStatus.stories.tsx +1 -1
  407. package/src/components/SyncStatus/SyncStatus.tsx +1 -1
  408. package/src/components/SyncStatus/save-tracker.ts +2 -2
  409. package/src/components/ViewEditor.tsx +16 -12
  410. package/src/constants.ts +11 -0
  411. package/src/helpers/query.ts +7 -6
  412. package/src/hooks/useActiveSpace.ts +8 -5
  413. package/src/hooks/useInputSurfaceLookup.tsx +3 -3
  414. package/src/hooks/usePath.ts +4 -4
  415. package/src/index.ts +1 -2
  416. package/src/meta.ts +2 -2
  417. package/src/translations.ts +4 -2
  418. package/src/types/capabilities.ts +73 -0
  419. package/src/types/events.ts +16 -0
  420. package/src/types/index.ts +2 -0
  421. package/src/types/types.ts +533 -245
  422. package/src/util.tsx +222 -230
  423. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs +0 -31
  424. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +0 -7
  425. package/dist/lib/browser/ObjectCardStack-TE7AWPMH.mjs +0 -144
  426. package/dist/lib/browser/ObjectCardStack-TE7AWPMH.mjs.map +0 -7
  427. package/dist/lib/browser/ObjectDetails-666IBRHE.mjs +0 -144
  428. package/dist/lib/browser/ObjectDetails-666IBRHE.mjs.map +0 -7
  429. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs +0 -116
  430. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +0 -7
  431. package/dist/lib/browser/app-graph-builder-USKWFIDK.mjs +0 -551
  432. package/dist/lib/browser/app-graph-builder-USKWFIDK.mjs.map +0 -7
  433. package/dist/lib/browser/app-graph-serializer-SXIQ425K.mjs +0 -80
  434. package/dist/lib/browser/app-graph-serializer-SXIQ425K.mjs.map +0 -7
  435. package/dist/lib/browser/chunk-5CSSKOWR.mjs.map +0 -7
  436. package/dist/lib/browser/chunk-C6DAPIFF.mjs +0 -20
  437. package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +0 -7
  438. package/dist/lib/browser/chunk-E4BEMEZ3.mjs +0 -399
  439. package/dist/lib/browser/chunk-E4BEMEZ3.mjs.map +0 -7
  440. package/dist/lib/browser/chunk-IJCMB5B5.mjs.map +0 -7
  441. package/dist/lib/browser/chunk-POFUXISV.mjs.map +0 -7
  442. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +0 -7
  443. package/dist/lib/browser/chunk-WJXU4GKV.mjs +0 -19
  444. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +0 -7
  445. package/dist/lib/browser/chunk-XKQCDLXX.mjs +0 -2103
  446. package/dist/lib/browser/chunk-XKQCDLXX.mjs.map +0 -7
  447. package/dist/lib/browser/identity-created-NAXTPQXE.mjs +0 -23
  448. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +0 -7
  449. package/dist/lib/browser/intent-resolver-QEIM7NQT.mjs +0 -769
  450. package/dist/lib/browser/intent-resolver-QEIM7NQT.mjs.map +0 -7
  451. package/dist/lib/browser/react-root-T6ZETLD2.mjs +0 -30
  452. package/dist/lib/browser/react-root-T6ZETLD2.mjs.map +0 -7
  453. package/dist/lib/browser/react-surface-MLN5BZ2G.mjs +0 -374
  454. package/dist/lib/browser/react-surface-MLN5BZ2G.mjs.map +0 -7
  455. package/dist/lib/browser/repair-CNLE35NF.mjs.map +0 -7
  456. package/dist/lib/browser/settings-EGTCHS7U.mjs +0 -24
  457. package/dist/lib/browser/settings-EGTCHS7U.mjs.map +0 -7
  458. package/dist/lib/browser/spaces-ready-YS4BBZXW.mjs +0 -208
  459. package/dist/lib/browser/spaces-ready-YS4BBZXW.mjs.map +0 -7
  460. package/dist/lib/browser/state-C7N6EDDZ.mjs +0 -47
  461. package/dist/lib/browser/state-C7N6EDDZ.mjs.map +0 -7
  462. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs +0 -32
  463. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +0 -7
  464. package/dist/lib/node-esm/ObjectCardStack-AAKMAQ6T.mjs +0 -145
  465. package/dist/lib/node-esm/ObjectCardStack-AAKMAQ6T.mjs.map +0 -7
  466. package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.mjs +0 -145
  467. package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.mjs.map +0 -7
  468. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +0 -117
  469. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +0 -7
  470. package/dist/lib/node-esm/app-graph-builder-QRQ5EQLB.mjs +0 -552
  471. package/dist/lib/node-esm/app-graph-builder-QRQ5EQLB.mjs.map +0 -7
  472. package/dist/lib/node-esm/app-graph-serializer-P2X4W7LI.mjs +0 -81
  473. package/dist/lib/node-esm/app-graph-serializer-P2X4W7LI.mjs.map +0 -7
  474. package/dist/lib/node-esm/chunk-3D4NGZPW.mjs.map +0 -7
  475. package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +0 -7
  476. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +0 -7
  477. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +0 -20
  478. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +0 -7
  479. package/dist/lib/node-esm/chunk-QQQE2ZCX.mjs +0 -400
  480. package/dist/lib/node-esm/chunk-QQQE2ZCX.mjs.map +0 -7
  481. package/dist/lib/node-esm/chunk-UMZ7G6G4.mjs.map +0 -7
  482. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs +0 -21
  483. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +0 -7
  484. package/dist/lib/node-esm/chunk-XD532BVR.mjs +0 -2104
  485. package/dist/lib/node-esm/chunk-XD532BVR.mjs.map +0 -7
  486. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs +0 -25
  487. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +0 -7
  488. package/dist/lib/node-esm/intent-resolver-ZWCBVABN.mjs +0 -770
  489. package/dist/lib/node-esm/intent-resolver-ZWCBVABN.mjs.map +0 -7
  490. package/dist/lib/node-esm/react-root-SKB4UJ4K.mjs +0 -31
  491. package/dist/lib/node-esm/react-root-SKB4UJ4K.mjs.map +0 -7
  492. package/dist/lib/node-esm/react-surface-BVZGNSBB.mjs +0 -375
  493. package/dist/lib/node-esm/react-surface-BVZGNSBB.mjs.map +0 -7
  494. package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +0 -7
  495. package/dist/lib/node-esm/settings-N3F6JCIR.mjs +0 -25
  496. package/dist/lib/node-esm/settings-N3F6JCIR.mjs.map +0 -7
  497. package/dist/lib/node-esm/spaces-ready-U2K5P4LB.mjs +0 -209
  498. package/dist/lib/node-esm/spaces-ready-U2K5P4LB.mjs.map +0 -7
  499. package/dist/lib/node-esm/state-45TXZQJ6.mjs +0 -48
  500. package/dist/lib/node-esm/state-45TXZQJ6.mjs.map +0 -7
  501. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  502. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  503. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  504. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  505. package/dist/types/src/capabilities/capabilities.d.ts +0 -34
  506. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  507. package/dist/types/src/capabilities/identity-created.d.ts +0 -4
  508. package/dist/types/src/capabilities/identity-created.d.ts.map +0 -1
  509. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -9
  510. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  511. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  512. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  513. package/dist/types/src/capabilities/react-surface.d.ts +0 -7
  514. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  515. package/dist/types/src/capabilities/repair.d.ts +0 -4
  516. package/dist/types/src/capabilities/repair.d.ts.map +0 -1
  517. package/dist/types/src/capabilities/settings.d.ts +0 -4
  518. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  519. package/dist/types/src/capabilities/spaces-ready.d.ts +0 -4
  520. package/dist/types/src/capabilities/spaces-ready.d.ts.map +0 -1
  521. package/dist/types/src/capabilities/state.d.ts +0 -5
  522. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  523. package/dist/types/src/events.d.ts +0 -8
  524. package/dist/types/src/events.d.ts.map +0 -1
  525. package/src/capabilities/app-graph-builder.ts +0 -724
  526. package/src/capabilities/app-graph-serializer.ts +0 -76
  527. package/src/capabilities/capabilities.ts +0 -40
  528. package/src/capabilities/identity-created.ts +0 -25
  529. package/src/capabilities/intent-resolver.ts +0 -705
  530. package/src/capabilities/react-root.tsx +0 -22
  531. package/src/capabilities/react-surface.tsx +0 -358
  532. package/src/capabilities/settings.ts +0 -21
  533. package/src/capabilities/spaces-ready.ts +0 -252
  534. package/src/capabilities/state.ts +0 -46
  535. package/src/events.ts +0 -15
@@ -0,0 +1,621 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Atom } from '@effect-atom/atom-react';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Option from 'effect/Option';
8
+ import * as Schema from 'effect/Schema';
9
+
10
+ import { Capability } from '@dxos/app-framework';
11
+ import { AppCapabilities } from '@dxos/app-toolkit';
12
+ import { type Space, SpaceState, getSpace, isSpace, parseId } from '@dxos/client/echo';
13
+ import { DXN, Filter, Obj, type Ref, Type } from '@dxos/echo';
14
+ import { AtomObj, AtomQuery } from '@dxos/echo-atom';
15
+ import { Operation } from '@dxos/operation';
16
+ import { ClientCapabilities } from '@dxos/plugin-client';
17
+ import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
18
+ import { CreateAtom, GraphBuilder, type Node, NodeMatcher } from '@dxos/plugin-graph';
19
+ import { Collection, Expando, ViewAnnotation, getTypenameFromQuery } from '@dxos/schema';
20
+ import { isNonNullable } from '@dxos/util';
21
+
22
+ import { getActiveSpace } from '../../hooks';
23
+ import { meta } from '../../meta';
24
+ import { SPACE_TYPE, SpaceCapabilities, SpaceOperation, type SpacePluginOptions } from '../../types';
25
+ import {
26
+ SHARED,
27
+ constructObjectActions,
28
+ constructSpaceActions,
29
+ constructSpaceNode,
30
+ createObjectNode,
31
+ createStaticSchemaActions,
32
+ createStaticSchemaNode,
33
+ } from '../../util';
34
+
35
+ /** Match space nodes and return the Space object. */
36
+ const whenSpace = (node: Node.Node): Option.Option<Space> =>
37
+ node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none();
38
+
39
+ export default Capability.makeModule(
40
+ Effect.fnUntraced(function* (props?: SpacePluginOptions) {
41
+ const { shareableLinkOrigin = window.location.origin } = props ?? {};
42
+ const capabilities = yield* Capability.Service;
43
+
44
+ // TODO(wittjosiah): Using `get` and being reactive seems to cause a bug with Atom where disposed atoms are accessed.
45
+ const resolve = (get: Atom.Context) => (typename: string) =>
46
+ capabilities.getAll(AppCapabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
47
+
48
+ const extensions = yield* Effect.all([
49
+ // Primary actions.
50
+ GraphBuilder.createExtension({
51
+ id: `${meta.id}/primary-actions`,
52
+ position: 'hoist',
53
+ match: NodeMatcher.whenRoot,
54
+ actions: () =>
55
+ Effect.succeed([
56
+ {
57
+ id: SpaceOperation.OpenCreateSpace.meta.key,
58
+ data: () => Operation.invoke(SpaceOperation.OpenCreateSpace),
59
+ properties: {
60
+ label: ['create space label', { ns: meta.id }],
61
+ icon: 'ph--plus--regular',
62
+ testId: 'spacePlugin.createSpace',
63
+ disposition: 'menu',
64
+ },
65
+ },
66
+ {
67
+ id: SpaceOperation.Join.meta.key,
68
+ data: () => Operation.invoke(SpaceOperation.Join, {}),
69
+ properties: {
70
+ label: ['join space label', { ns: meta.id }],
71
+ icon: 'ph--sign-in--regular',
72
+ testId: 'spacePlugin.joinSpace',
73
+ disposition: 'menu',
74
+ },
75
+ },
76
+ {
77
+ id: SpaceOperation.OpenMembers.meta.key,
78
+ data: Effect.fnUntraced(function* () {
79
+ const client = yield* Capability.get(ClientCapabilities.Client);
80
+ const space = getActiveSpace(capabilities) ?? client.spaces.default;
81
+ yield* Operation.invoke(SpaceOperation.OpenMembers, { space });
82
+ }),
83
+ properties: {
84
+ label: ['share space label', { ns: meta.id }],
85
+ icon: 'ph--users--regular',
86
+ testId: 'spacePlugin.shareSpace',
87
+ keyBinding: {
88
+ macos: 'meta+.',
89
+ windows: 'alt+.',
90
+ },
91
+ },
92
+ },
93
+ {
94
+ id: SpaceOperation.OpenSettings.meta.key,
95
+ data: Effect.fnUntraced(function* () {
96
+ const client = yield* Capability.get(ClientCapabilities.Client);
97
+ const space = getActiveSpace(capabilities) ?? client.spaces.default;
98
+ yield* Operation.invoke(SpaceOperation.OpenSettings, { space });
99
+ }),
100
+ properties: {
101
+ label: ['open current space settings label', { ns: meta.id }],
102
+ icon: 'ph--faders--regular',
103
+ keyBinding: {
104
+ macos: 'meta+shift+,',
105
+ windows: 'ctrl+shift+,',
106
+ },
107
+ },
108
+ },
109
+ ]),
110
+ }),
111
+
112
+ // Create space nodes.
113
+ GraphBuilder.createExtension({
114
+ id: `${meta.id}/spaces`,
115
+ match: NodeMatcher.whenRoot,
116
+ connector: (node, get) => {
117
+ const client = capabilities.get(ClientCapabilities.Client);
118
+ const stateAtom = capabilities.get(SpaceCapabilities.State);
119
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
120
+ const spacesAtom = CreateAtom.fromObservable(client.spaces);
121
+ const isReadyAtom = CreateAtom.fromObservable(client.spaces.isReady);
122
+
123
+ const spaces = get(spacesAtom);
124
+ const isReady = get(isReadyAtom);
125
+
126
+ if (!spaces || !isReady) {
127
+ return Effect.succeed([]);
128
+ }
129
+
130
+ const settingsAtom = capabilities.get(SpaceCapabilities.Settings);
131
+ const settings = get(settingsAtom);
132
+ const state = get(stateAtom);
133
+ const ephemeralState = get(ephemeralAtom);
134
+
135
+ try {
136
+ const [spacesOrder] = get(
137
+ AtomQuery.make(client.spaces.default.db, Filter.type(Expando.Expando, { key: SHARED })),
138
+ );
139
+ const { graph } = capabilities.get(AppCapabilities.AppGraph);
140
+
141
+ // Get order from spacesOrder snapshot using AtomObj (cached via Atom.family).
142
+ const spacesOrderSnapshot = spacesOrder ? get(AtomObj.make(spacesOrder)) : undefined;
143
+ const order: string[] = (spacesOrderSnapshot as any)?.order ?? [];
144
+ const orderMap = new Map(order.map((id, index) => [id, index]));
145
+
146
+ // Subscribe to space states for filtering.
147
+ const spaceStates = spaces.map((space) => get(CreateAtom.fromObservable(space.state)));
148
+
149
+ // Subscribe to space properties to react when root collection is assigned.
150
+ spaces.forEach((space) => {
151
+ if (space.state.get() === SpaceState.SPACE_READY) {
152
+ get(AtomObj.make(space.properties));
153
+ }
154
+ });
155
+
156
+ return Effect.succeed(
157
+ [
158
+ ...spaces
159
+ .filter((space) => orderMap.has(space.id))
160
+ .sort((a, b) => orderMap.get(a.id)! - orderMap.get(b.id)!),
161
+ ...spaces.filter((space) => !orderMap.has(space.id)),
162
+ ]
163
+ .filter((space, i) => (settings?.showHidden ? true : spaceStates[i] !== SpaceState.SPACE_INACTIVE))
164
+ .map((space) =>
165
+ constructSpaceNode({
166
+ space,
167
+ navigable: ephemeralState.navigableCollections,
168
+ personal: space === client.spaces.default,
169
+ namesCache: state.spaceNames,
170
+ resolve: resolve(get),
171
+ graph,
172
+ spacesOrder,
173
+ }),
174
+ ),
175
+ );
176
+ } catch {
177
+ return Effect.succeed([]);
178
+ }
179
+ },
180
+ resolver: (id, get) => {
181
+ // Resolve space ID to space node.
182
+ const { spaceId } = parseId(id);
183
+ if (!spaceId) {
184
+ return Effect.succeed(null);
185
+ }
186
+
187
+ const client = capabilities.get(ClientCapabilities.Client);
188
+
189
+ // Subscribe to spaces observable to react when space becomes available.
190
+ const spaces = get(CreateAtom.fromObservable(client.spaces));
191
+ const space = spaces?.find((s) => s.id === spaceId);
192
+ if (!space) {
193
+ return Effect.succeed(null);
194
+ }
195
+
196
+ // Only subscribe to these atoms if the space exists.
197
+ const state = get(capabilities.get(SpaceCapabilities.State));
198
+ const ephemeralState = get(capabilities.get(SpaceCapabilities.EphemeralState));
199
+
200
+ const { graph } = capabilities.get(AppCapabilities.AppGraph);
201
+ const [spacesOrder] = get(
202
+ AtomQuery.make(client.spaces.default.db, Filter.type(Expando.Expando, { key: SHARED })),
203
+ );
204
+
205
+ return Effect.succeed(
206
+ constructSpaceNode({
207
+ space,
208
+ navigable: ephemeralState.navigableCollections,
209
+ personal: space === client.spaces.default,
210
+ namesCache: state.spaceNames,
211
+ resolve: resolve(get),
212
+ graph,
213
+ spacesOrder,
214
+ }),
215
+ );
216
+ },
217
+ }),
218
+
219
+ // Create space actions.
220
+ GraphBuilder.createExtension({
221
+ id: `${meta.id}/actions`,
222
+ match: whenSpace,
223
+ actions: (space, get) => {
224
+ const [client] = get(capabilities.atom(ClientCapabilities.Client));
225
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
226
+ const ephemeralState = get(ephemeralAtom);
227
+
228
+ if (!client) {
229
+ return Effect.succeed([]);
230
+ }
231
+
232
+ return Effect.succeed(
233
+ constructSpaceActions({
234
+ space,
235
+ personal: space === client.spaces.default,
236
+ migrating: ephemeralState.sdkMigrationRunning[space.id],
237
+ }),
238
+ );
239
+ },
240
+ }),
241
+
242
+ // Create nodes for objects in the root collection of a space.
243
+ GraphBuilder.createExtension({
244
+ id: `${meta.id}/root-collection`,
245
+ match: whenSpace,
246
+ connector: (space, get) => {
247
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
248
+ const ephemeralState = get(ephemeralAtom);
249
+ const spaceState = get(CreateAtom.fromObservable(space.state));
250
+ if (spaceState !== SpaceState.SPACE_READY) {
251
+ return Effect.succeed([]);
252
+ }
253
+
254
+ // Get the collection ref from space.properties snapshot (AtomObj cached via Atom.family).
255
+ const propertiesSnapshot = get(AtomObj.make(space.properties));
256
+ const collectionRef = propertiesSnapshot[Collection.Collection.typename] as
257
+ | Ref.Ref<Collection.Collection>
258
+ | undefined;
259
+ // Resolve the collection using AtomObj (subscribes to collection changes).
260
+ const collection = collectionRef ? get(AtomObj.make(collectionRef)) : undefined;
261
+ if (!collection) {
262
+ return Effect.succeed([]);
263
+ }
264
+
265
+ const rawRefs = collection.objects ?? [];
266
+
267
+ // TODO(wittjosiah): Workaround for Obj.getTypename not working on snapshots.
268
+ // AtomObj.make(ref) returns snapshots (plain objects without ECHO metadata),
269
+ // but createObjectNode needs live objects to access typename and other metadata.
270
+ // Once Obj.getTypename works on snapshots, we can use snapshots directly.
271
+ const objects = rawRefs
272
+ .map((ref) => {
273
+ // Subscribe to the ref for reactivity (triggers re-render when target changes).
274
+ get(AtomObj.make(ref));
275
+ // Return the live object for createObjectNode (has typename metadata).
276
+ return ref.target;
277
+ })
278
+ .filter(isNonNullable);
279
+
280
+ return Effect.succeed(
281
+ objects
282
+ .map((object) =>
283
+ createObjectNode({
284
+ db: space.db,
285
+ object,
286
+ resolve: resolve(get),
287
+ navigable: ephemeralState.navigableCollections,
288
+ parentCollection: collectionRef?.target,
289
+ }),
290
+ )
291
+ .filter(isNonNullable),
292
+ );
293
+ },
294
+ }),
295
+
296
+ // Create nodes for objects in a collection or by its DXN.
297
+ GraphBuilder.createExtension({
298
+ id: `${meta.id}/objects`,
299
+ match: (node) => (Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none()),
300
+ connector: (collection, get) => {
301
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
302
+ const ephemeralState = get(ephemeralAtom);
303
+ const space = getSpace(collection);
304
+
305
+ // Get collection snapshot using AtomObj (cached via Atom.family).
306
+ const collectionSnapshot = get(AtomObj.make(collection));
307
+ const refs = collectionSnapshot.objects ?? [];
308
+
309
+ // TODO(wittjosiah): Workaround for Obj.getTypename not working on snapshots.
310
+ // See root-collection connector for details.
311
+ const objects = refs
312
+ .map((ref) => {
313
+ get(AtomObj.make(ref));
314
+ return ref.target;
315
+ })
316
+ .filter(isNonNullable);
317
+
318
+ return Effect.succeed(
319
+ objects
320
+ .map(
321
+ (object) =>
322
+ space &&
323
+ createObjectNode({
324
+ object,
325
+ db: space.db,
326
+ resolve: resolve(get),
327
+ navigable: ephemeralState.navigableCollections,
328
+ parentCollection: collection,
329
+ }),
330
+ )
331
+ .filter(isNonNullable),
332
+ );
333
+ },
334
+ resolver: (id, get) => {
335
+ const client = capabilities.get(ClientCapabilities.Client);
336
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
337
+ if (!dxn || !dxn.spaceId) {
338
+ return Effect.succeed(null);
339
+ }
340
+
341
+ const space = client.spaces.get(dxn.spaceId);
342
+ if (!space) {
343
+ return Effect.succeed(null);
344
+ }
345
+
346
+ const object = get(AtomQuery.make(space.db, Filter.id(dxn.echoId))).at(0);
347
+ if (!Obj.isObject(object)) {
348
+ return Effect.succeed(null);
349
+ }
350
+
351
+ return Effect.succeed(
352
+ createObjectNode({
353
+ object,
354
+ db: space.db,
355
+ resolve: resolve(get),
356
+ disposition: 'hidden',
357
+ }),
358
+ );
359
+ },
360
+ }),
361
+
362
+ // Create object nodes for schema-based system collections.
363
+ GraphBuilder.createExtension({
364
+ id: `${meta.id}/system-collections`,
365
+ match: (node) => (Obj.instanceOf(Collection.Managed, node.data) ? Option.some(node.data) : Option.none()),
366
+ connector: (collection, get) => {
367
+ const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);
368
+ const space = getSpace(collection);
369
+ const schema = client?.graph.schemaRegistry
370
+ .query({ typename: collection.key, location: ['runtime'], includeSystem: true })
371
+ .runSync()[0];
372
+ if (!space || !schema) {
373
+ return Effect.succeed([]);
374
+ }
375
+
376
+ return Effect.succeed(
377
+ get(AtomQuery.make(space.db, Filter.type(schema)))
378
+ .map((object) => {
379
+ get(AtomObj.make(object));
380
+ return createObjectNode({
381
+ object,
382
+ db: space.db,
383
+ managedCollectionChild: true,
384
+ resolve: resolve(get),
385
+ });
386
+ })
387
+ .filter(isNonNullable),
388
+ );
389
+ },
390
+ }),
391
+
392
+ // Create branch nodes for static schema record types.
393
+ GraphBuilder.createExtension({
394
+ id: `${meta.id}/static-schemas`,
395
+ match: (node: Node.Node) =>
396
+ Obj.instanceOf(Collection.Managed, node.data) && node.data.key === Type.getTypename(Type.PersistentType)
397
+ ? Option.some(node.data)
398
+ : Option.none(),
399
+ connector: (collection, get) => {
400
+ const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);
401
+ const space = getSpace(collection);
402
+ if (!space) {
403
+ return Effect.succeed([]);
404
+ }
405
+
406
+ // Get staticRecords from properties snapshot (AtomObj cached via Atom.family).
407
+ const propertiesSnapshot = get(AtomObj.make(space.properties));
408
+ const staticRecords = (propertiesSnapshot.staticRecords ?? []) as string[];
409
+
410
+ return Effect.succeed(
411
+ staticRecords
412
+ .map((typename) => client?.graph.schemaRegistry.query({ typename, location: ['runtime'] }).runSync()[0])
413
+ .filter(isNonNullable)
414
+ .map((schema) => createStaticSchemaNode({ schema, space })),
415
+ );
416
+ },
417
+ }),
418
+
419
+ // Create actions for static schema record types.
420
+ GraphBuilder.createExtension({
421
+ id: `${meta.id}/static-schema-actions`,
422
+ match: (node) => {
423
+ const space = isSpace(node.properties.space) ? node.properties.space : undefined;
424
+ return space && Schema.isSchema(node.data) ? Option.some({ space, schema: node.data }) : Option.none();
425
+ },
426
+ actions: ({ space, schema }, get) => {
427
+ const schemas =
428
+ get(capabilities.atom(ClientCapabilities.Client))
429
+ .at(0)
430
+ ?.graph.schemaRegistry.query({ location: ['runtime'] })
431
+ .runSync() ?? [];
432
+ const filter = Filter.or(
433
+ ...schemas
434
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
435
+ .map((schema) => Filter.type(schema)),
436
+ );
437
+
438
+ const objects = get(AtomQuery.make(space.db, filter));
439
+
440
+ // Filter views that match the schema typename using AtomObj and AtomRef (cached via Atom.family).
441
+ const targetTypename = Type.getTypename(schema as Type.Obj.Any);
442
+ const filteredViews = objects.filter((viewObject) => {
443
+ const viewSnapshot = get(AtomObj.make(viewObject));
444
+ const viewRef = (viewSnapshot as any).view;
445
+ const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : undefined;
446
+ return getTypenameFromQuery((viewTarget as any)?.query?.ast) === targetTypename;
447
+ });
448
+ const deletable = filteredViews.length === 0;
449
+
450
+ return Effect.succeed(
451
+ createStaticSchemaActions({
452
+ schema: schema as Type.Obj.Any,
453
+ space,
454
+ deletable,
455
+ }),
456
+ );
457
+ },
458
+ }),
459
+
460
+ // Create nodes for views of record types.
461
+ GraphBuilder.createExtension({
462
+ id: `${meta.id}/schema-views`,
463
+ match: (node) => {
464
+ const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
465
+ return space && (Obj.instanceOf(Type.PersistentType, node.data) || Schema.isSchema(node.data))
466
+ ? Option.some({ space, schema: node.data })
467
+ : Option.none();
468
+ },
469
+ connector: ({ space, schema }, get) => {
470
+ const schemas =
471
+ get(capabilities.atom(ClientCapabilities.Client))
472
+ .at(0)
473
+ ?.graph.schemaRegistry.query({ location: ['runtime'] })
474
+ .runSync() ?? [];
475
+ const filter = Filter.or(
476
+ ...schemas
477
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
478
+ .map((schema) => Filter.type(schema)),
479
+ );
480
+
481
+ const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
482
+ const objects = get(AtomQuery.make(space.db, filter));
483
+
484
+ // Filter and map using AtomObj and AtomRef (cached via Atom.family).
485
+ return Effect.succeed(
486
+ objects
487
+ .filter((object) => {
488
+ const objectSnapshot = get(AtomObj.make(object));
489
+ const viewRef = (objectSnapshot as any).view;
490
+ const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : undefined;
491
+ return getTypenameFromQuery((viewTarget as any)?.query?.ast) === typename;
492
+ })
493
+ .map((object) =>
494
+ createObjectNode({
495
+ object,
496
+ db: space.db,
497
+ resolve: resolve(get),
498
+ droppable: false,
499
+ }),
500
+ )
501
+ .filter(isNonNullable),
502
+ );
503
+ },
504
+ }),
505
+
506
+ // Create collection actions and action groups.
507
+ GraphBuilder.createExtension({
508
+ id: `${meta.id}/object-actions`,
509
+ match: (node) => {
510
+ const space = getSpace(node.data);
511
+ return space && Obj.isObject(node.data) && Obj.getTypename(node.data) === node.type
512
+ ? Option.some({ space, object: node.data })
513
+ : Option.none();
514
+ },
515
+ actions: ({ space, object }, get) => {
516
+ const schemas =
517
+ get(capabilities.atom(ClientCapabilities.Client))
518
+ .at(0)
519
+ ?.graph.schemaRegistry.query({ location: ['runtime'] })
520
+ .runSync() ?? [];
521
+ const filter = Filter.or(
522
+ ...schemas
523
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
524
+ .map((schema) => Filter.type(schema)),
525
+ );
526
+
527
+ const isSchema = Obj.instanceOf(Type.PersistentType, object);
528
+
529
+ let deletable = !isSchema && !Obj.instanceOf(Collection.Managed, object);
530
+ if (isSchema) {
531
+ const objects = get(AtomQuery.make(space.db, filter));
532
+ // Filter views using AtomObj and AtomRef (cached via Atom.family).
533
+ const filteredViews = objects.filter((viewObject) => {
534
+ const viewSnapshot = get(AtomObj.make(viewObject));
535
+ const viewRef = (viewSnapshot as any).view;
536
+ const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : undefined;
537
+ return getTypenameFromQuery((viewTarget as any)?.query?.ast) === object.typename;
538
+ });
539
+ deletable = filteredViews.length === 0;
540
+ }
541
+
542
+ const [appGraph] = get(capabilities.atom(AppCapabilities.AppGraph));
543
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
544
+ const ephemeralState = get(ephemeralAtom);
545
+
546
+ if (!appGraph) {
547
+ return Effect.succeed([]);
548
+ }
549
+
550
+ return Effect.succeed(
551
+ constructObjectActions({
552
+ object,
553
+ graph: appGraph.graph,
554
+ resolve: resolve(get),
555
+ capabilities,
556
+ deletable,
557
+ navigable: ephemeralState.navigableCollections,
558
+ shareableLinkOrigin,
559
+ }),
560
+ );
561
+ },
562
+ }),
563
+
564
+ // View selected objects.
565
+ GraphBuilder.createExtension({
566
+ id: `${meta.id}/selected-objects`,
567
+ match: (node) => {
568
+ if (!Obj.isObject(node.data)) {
569
+ return Option.none();
570
+ }
571
+
572
+ const schema = Obj.getSchema(node.data);
573
+ const isView = Option.fromNullable(schema).pipe(
574
+ Option.flatMap((schema) => ViewAnnotation.get(schema)),
575
+ Option.getOrElse(() => false),
576
+ );
577
+ if (!isView) {
578
+ return Option.none();
579
+ }
580
+
581
+ return Option.some(node);
582
+ },
583
+ connector: (node) =>
584
+ Effect.succeed([
585
+ {
586
+ id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
587
+ type: PLANK_COMPANION_TYPE,
588
+ data: 'selected-objects',
589
+ properties: {
590
+ label: ['companion selected objects label', { ns: meta.id }],
591
+ icon: 'ph--tree-view--regular',
592
+ disposition: 'hidden',
593
+ },
594
+ },
595
+ ]),
596
+ }),
597
+
598
+ // Object settings plank companion.
599
+ GraphBuilder.createExtension({
600
+ id: `${meta.id}/settings`,
601
+ match: NodeMatcher.whenEchoObjectMatches,
602
+ connector: (node) =>
603
+ Effect.succeed([
604
+ {
605
+ id: [node.id, 'settings'].join(ATTENDABLE_PATH_SEPARATOR),
606
+ type: PLANK_COMPANION_TYPE,
607
+ data: 'settings',
608
+ properties: {
609
+ label: ['object settings label', { ns: meta.id }],
610
+ icon: 'ph--sliders--regular',
611
+ disposition: 'hidden',
612
+ position: 'fallback',
613
+ },
614
+ },
615
+ ]),
616
+ }),
617
+ ]);
618
+
619
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
620
+ }),
621
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));