@dxos/plugin-space 0.8.4-main.c85a9c8dae → 0.8.4-main.d05673bc65

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 (344) hide show
  1. package/dist/lib/browser/{CollectionArticle-WASDM637.mjs → CollectionArticle-WPLUW5HF.mjs} +5 -36
  2. package/dist/lib/browser/CollectionArticle-WPLUW5HF.mjs.map +7 -0
  3. package/dist/lib/browser/{CollectionSection-LK4O6QDD.mjs → CollectionSection-H2MBNI63.mjs} +2 -2
  4. package/dist/lib/browser/{CreateObjectDialog-MA6DPYMD.mjs → CreateObjectDialog-YUBUWSEL.mjs} +17 -21
  5. package/dist/lib/browser/CreateObjectDialog-YUBUWSEL.mjs.map +7 -0
  6. package/dist/lib/browser/{CreateSpaceDialog-WCEICWIE.mjs → CreateSpaceDialog-3M2LAWV6.mjs} +7 -7
  7. package/dist/lib/browser/CreateSpaceDialog-3M2LAWV6.mjs.map +7 -0
  8. package/dist/lib/browser/{InlineSyncStatus-BT7BRBCO.mjs → InlineSyncStatus-K5MZ3YMZ.mjs} +9 -18
  9. package/dist/lib/browser/InlineSyncStatus-K5MZ3YMZ.mjs.map +7 -0
  10. package/dist/lib/browser/{JoinDialog-PMCAIRCU.mjs → JoinDialog-PBK2RE5F.mjs} +8 -10
  11. package/dist/lib/browser/JoinDialog-PBK2RE5F.mjs.map +7 -0
  12. package/dist/lib/browser/{MembersContainer-MMFCXLVZ.mjs → MembersContainer-OGYV2L4M.mjs} +4 -4
  13. package/dist/lib/browser/{MenuFooter-HYBTNOBT.mjs → MenuFooter-XCBDK7WP.mjs} +3 -4
  14. package/dist/lib/{node-esm/MenuFooter-2QB3453Y.mjs.map → browser/MenuFooter-XCBDK7WP.mjs.map} +1 -1
  15. package/dist/lib/browser/{ObjectCardStack-CHWNLUYQ.mjs → ObjectCardStack-OMXF2DSG.mjs} +6 -6
  16. package/dist/lib/browser/{ObjectDetails-YUGVDNSA.mjs → ObjectDetails-QFTQQN4W.mjs} +6 -6
  17. package/dist/lib/browser/{ObjectRenamePopover-RQUOVPFH.mjs → ObjectRenamePopover-JNPJIFIR.mjs} +3 -3
  18. package/dist/lib/browser/{ObjectRenamePopover-RQUOVPFH.mjs.map → ObjectRenamePopover-JNPJIFIR.mjs.map} +1 -1
  19. package/dist/lib/browser/{RecordArticle-ONWKYM3Z.mjs → RecordArticle-BO2XHBFN.mjs} +2 -2
  20. package/dist/lib/browser/{SchemaContainer-62AJXKAF.mjs → SchemaContainer-QWCSIZBS.mjs} +2 -2
  21. package/dist/lib/browser/SmallPresenceLive-AHHLBAUP.mjs +9 -0
  22. package/dist/lib/browser/{SpacePluginSettings-BRJTADV5.mjs → SpacePluginSettings-QGZKNQLK.mjs} +4 -4
  23. package/dist/lib/browser/SpacePresence-JIWLBUWO.mjs +12 -0
  24. package/dist/lib/browser/{SpaceRenamePopover-SAKMPDLX.mjs → SpaceRenamePopover-ZL6RRZ2B.mjs} +3 -3
  25. package/dist/lib/browser/{SpaceRenamePopover-SAKMPDLX.mjs.map → SpaceRenamePopover-ZL6RRZ2B.mjs.map} +1 -1
  26. package/dist/lib/browser/{SpaceSettingsContainer-UBMVKUPR.mjs → SpaceSettingsContainer-MIOOT63N.mjs} +5 -5
  27. package/dist/lib/browser/SpaceSettingsContainer-MIOOT63N.mjs.map +7 -0
  28. package/dist/lib/browser/{SyncStatus-5UQ7CIII.mjs → SyncStatus-6N7JJ7XF.mjs} +6 -6
  29. package/dist/lib/browser/{ViewEditor-F74RR542.mjs → ViewEditor-3FX5HDRT.mjs} +4 -7
  30. package/dist/lib/browser/ViewEditor-3FX5HDRT.mjs.map +7 -0
  31. package/dist/lib/browser/app-graph-builder-JORZZE3P.mjs +1203 -0
  32. package/dist/lib/browser/app-graph-builder-JORZZE3P.mjs.map +7 -0
  33. package/dist/lib/browser/{app-graph-serializer-KTQOBYUF.mjs → app-graph-serializer-UZWWGLGY.mjs} +5 -5
  34. package/dist/lib/browser/{chunk-RWOK4F4G.mjs → chunk-2WHUSAHE.mjs} +17 -14
  35. package/dist/lib/browser/chunk-2WHUSAHE.mjs.map +7 -0
  36. package/dist/lib/browser/{chunk-USN5QKRV.mjs → chunk-6IT5IBB5.mjs} +54 -86
  37. package/dist/lib/browser/chunk-6IT5IBB5.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-6OA75CWN.mjs +77 -0
  39. package/dist/lib/browser/chunk-6OA75CWN.mjs.map +7 -0
  40. package/dist/lib/browser/{chunk-PXVKN4LU.mjs → chunk-AUX3RRLY.mjs} +34 -9
  41. package/dist/lib/browser/chunk-AUX3RRLY.mjs.map +7 -0
  42. package/dist/lib/browser/{chunk-HSMQFM57.mjs → chunk-CBWGVOJE.mjs} +2 -2
  43. package/dist/lib/browser/{chunk-HSMQFM57.mjs.map → chunk-CBWGVOJE.mjs.map} +1 -1
  44. package/dist/lib/browser/{chunk-XIIYC7P5.mjs → chunk-ICXESMDI.mjs} +6 -6
  45. package/dist/lib/browser/chunk-ICXESMDI.mjs.map +7 -0
  46. package/dist/lib/browser/chunk-RJUOHI3B.mjs +19 -0
  47. package/dist/lib/browser/{chunk-ASV6DYFH.mjs.map → chunk-RJUOHI3B.mjs.map} +1 -1
  48. package/dist/lib/browser/{chunk-J5F4LUJD.mjs → chunk-SSTUPFZ2.mjs} +3 -3
  49. package/dist/lib/browser/{chunk-ABCDB5YC.mjs → chunk-UYOJYBGW.mjs} +7 -16
  50. package/dist/lib/browser/chunk-UYOJYBGW.mjs.map +7 -0
  51. package/dist/lib/browser/cli/index.mjs +8 -17
  52. package/dist/lib/browser/cli/index.mjs.map +3 -3
  53. package/dist/lib/browser/{identity-created-VKLIZOXJ.mjs → identity-created-ETXNQYR6.mjs} +4 -4
  54. package/dist/lib/browser/{identity-created-VKLIZOXJ.mjs.map → identity-created-ETXNQYR6.mjs.map} +3 -3
  55. package/dist/lib/browser/index.mjs +33 -53
  56. package/dist/lib/browser/index.mjs.map +3 -3
  57. package/dist/lib/browser/meta.json +1 -1
  58. package/dist/lib/browser/{operation-resolver-Y3HYRXX7.mjs → operation-resolver-D4LHB4D4.mjs} +64 -88
  59. package/dist/lib/browser/operation-resolver-D4LHB4D4.mjs.map +7 -0
  60. package/dist/lib/browser/{react-root-UYBW5RE7.mjs → react-root-OD2HP63B.mjs} +6 -6
  61. package/dist/lib/browser/{react-surface-NJ23NZFF.mjs → react-surface-E4TAFED5.mjs} +57 -79
  62. package/dist/lib/browser/react-surface-E4TAFED5.mjs.map +7 -0
  63. package/dist/lib/browser/repair-NUVEV4AK.mjs +31 -0
  64. package/dist/lib/browser/repair-NUVEV4AK.mjs.map +7 -0
  65. package/dist/lib/browser/{settings-2ELVUFDR.mjs → settings-RUDP2Q56.mjs} +3 -3
  66. package/dist/lib/browser/{spaces-ready-Q6JASPT4.mjs → spaces-ready-B2GYL5IN.mjs} +6 -6
  67. package/dist/lib/browser/spaces-ready-B2GYL5IN.mjs.map +7 -0
  68. package/dist/lib/browser/{state-CTX4WQOM.mjs → state-I6JDZCDE.mjs} +5 -5
  69. package/dist/lib/browser/{state-CTX4WQOM.mjs.map → state-I6JDZCDE.mjs.map} +2 -2
  70. package/dist/lib/browser/types/index.mjs +2 -2
  71. package/dist/lib/node-esm/{CollectionArticle-A6GGG73Z.mjs → CollectionArticle-JGVNBX66.mjs} +5 -36
  72. package/dist/lib/node-esm/CollectionArticle-JGVNBX66.mjs.map +7 -0
  73. package/dist/lib/node-esm/{CollectionSection-WWKDOAAT.mjs → CollectionSection-BI66Y34F.mjs} +2 -2
  74. package/dist/lib/node-esm/{CreateObjectDialog-4WEFNDDF.mjs → CreateObjectDialog-B6OLP5VQ.mjs} +17 -21
  75. package/dist/lib/node-esm/CreateObjectDialog-B6OLP5VQ.mjs.map +7 -0
  76. package/dist/lib/node-esm/{CreateSpaceDialog-P7QCPB5J.mjs → CreateSpaceDialog-J47M5FPQ.mjs} +7 -7
  77. package/dist/lib/node-esm/CreateSpaceDialog-J47M5FPQ.mjs.map +7 -0
  78. package/dist/lib/node-esm/{InlineSyncStatus-3PCXU7NX.mjs → InlineSyncStatus-BLD57LB5.mjs} +9 -18
  79. package/dist/lib/node-esm/InlineSyncStatus-BLD57LB5.mjs.map +7 -0
  80. package/dist/lib/node-esm/{JoinDialog-XEOLJZVN.mjs → JoinDialog-XCOYKSHA.mjs} +8 -10
  81. package/dist/lib/node-esm/JoinDialog-XCOYKSHA.mjs.map +7 -0
  82. package/dist/lib/node-esm/{MembersContainer-UQZLW3YA.mjs → MembersContainer-4PV3Z4BA.mjs} +4 -4
  83. package/dist/lib/node-esm/{MenuFooter-2QB3453Y.mjs → MenuFooter-PXG2GV6A.mjs} +3 -4
  84. package/dist/lib/node-esm/{ObjectCardStack-UXEWG6RV.mjs → ObjectCardStack-457SNNVF.mjs} +6 -6
  85. package/dist/lib/node-esm/{ObjectDetails-26PVHUQL.mjs → ObjectDetails-OLF7HSM4.mjs} +6 -6
  86. package/dist/lib/node-esm/{ObjectRenamePopover-EHTP76G7.mjs → ObjectRenamePopover-BRPKVNVF.mjs} +3 -3
  87. package/dist/lib/node-esm/{ObjectRenamePopover-EHTP76G7.mjs.map → ObjectRenamePopover-BRPKVNVF.mjs.map} +1 -1
  88. package/dist/lib/node-esm/{RecordArticle-APY2WKUW.mjs → RecordArticle-XUIT25PP.mjs} +2 -2
  89. package/dist/lib/node-esm/{SchemaContainer-XR2D6MYX.mjs → SchemaContainer-5G4R3Z6O.mjs} +2 -2
  90. package/dist/lib/node-esm/SmallPresenceLive-4K7RJS74.mjs +10 -0
  91. package/dist/lib/node-esm/SmallPresenceLive-4K7RJS74.mjs.map +7 -0
  92. package/dist/lib/node-esm/{SpacePluginSettings-VEB5IGG7.mjs → SpacePluginSettings-PENV4GHL.mjs} +4 -4
  93. package/dist/lib/node-esm/SpacePresence-H3VZWFJV.mjs +13 -0
  94. package/dist/lib/node-esm/SpacePresence-H3VZWFJV.mjs.map +7 -0
  95. package/dist/lib/node-esm/{SpaceRenamePopover-WHM632OT.mjs → SpaceRenamePopover-XEMTI4PU.mjs} +3 -3
  96. package/dist/lib/node-esm/{SpaceRenamePopover-WHM632OT.mjs.map → SpaceRenamePopover-XEMTI4PU.mjs.map} +1 -1
  97. package/dist/lib/node-esm/{SpaceSettingsContainer-Y62J2L65.mjs → SpaceSettingsContainer-WI4D7RWA.mjs} +5 -5
  98. package/dist/lib/node-esm/SpaceSettingsContainer-WI4D7RWA.mjs.map +7 -0
  99. package/dist/lib/node-esm/{SyncStatus-XTJAVHPN.mjs → SyncStatus-YEBGTNSD.mjs} +6 -6
  100. package/dist/lib/node-esm/{ViewEditor-B2BLYF5U.mjs → ViewEditor-CUQVNM2H.mjs} +4 -7
  101. package/dist/lib/node-esm/ViewEditor-CUQVNM2H.mjs.map +7 -0
  102. package/dist/lib/node-esm/app-graph-builder-WTM6SSX7.mjs +1204 -0
  103. package/dist/lib/node-esm/app-graph-builder-WTM6SSX7.mjs.map +7 -0
  104. package/dist/lib/node-esm/{app-graph-serializer-GXQYSQAZ.mjs → app-graph-serializer-RT2RQTV2.mjs} +5 -5
  105. package/dist/lib/node-esm/{chunk-OSFH2XKO.mjs → chunk-2OLR2ZKH.mjs} +6 -6
  106. package/dist/lib/node-esm/chunk-2OLR2ZKH.mjs.map +7 -0
  107. package/dist/lib/node-esm/chunk-5KTTTTEX.mjs +20 -0
  108. package/dist/lib/node-esm/{chunk-CVXULIYC.mjs.map → chunk-5KTTTTEX.mjs.map} +1 -1
  109. package/dist/lib/node-esm/{chunk-SL4BJSUG.mjs → chunk-63N5JJXI.mjs} +2 -2
  110. package/dist/lib/node-esm/{chunk-SL4BJSUG.mjs.map → chunk-63N5JJXI.mjs.map} +1 -1
  111. package/dist/lib/node-esm/{chunk-UJQUBDQS.mjs → chunk-EDC2RUJU.mjs} +7 -16
  112. package/dist/lib/node-esm/chunk-EDC2RUJU.mjs.map +7 -0
  113. package/dist/lib/node-esm/{chunk-3DWZCVVQ.mjs → chunk-EVNSLSQS.mjs} +54 -86
  114. package/dist/lib/node-esm/chunk-EVNSLSQS.mjs.map +7 -0
  115. package/dist/lib/node-esm/chunk-GEGWQVZX.mjs +78 -0
  116. package/dist/lib/node-esm/chunk-GEGWQVZX.mjs.map +7 -0
  117. package/dist/lib/node-esm/{chunk-P2AVANDG.mjs → chunk-RYQQXNI7.mjs} +34 -9
  118. package/dist/lib/node-esm/chunk-RYQQXNI7.mjs.map +7 -0
  119. package/dist/lib/node-esm/{chunk-GWUPFA7J.mjs → chunk-S5BQUCL4.mjs} +17 -14
  120. package/dist/lib/node-esm/chunk-S5BQUCL4.mjs.map +7 -0
  121. package/dist/lib/node-esm/{chunk-S2IELCDF.mjs → chunk-XYLDAH5C.mjs} +3 -3
  122. package/dist/lib/node-esm/cli/index.mjs +8 -17
  123. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  124. package/dist/lib/node-esm/{identity-created-EGSTETJ5.mjs → identity-created-U5LGULVL.mjs} +4 -4
  125. package/dist/lib/node-esm/{identity-created-EGSTETJ5.mjs.map → identity-created-U5LGULVL.mjs.map} +3 -3
  126. package/dist/lib/node-esm/index.mjs +33 -53
  127. package/dist/lib/node-esm/index.mjs.map +3 -3
  128. package/dist/lib/node-esm/meta.json +1 -1
  129. package/dist/lib/node-esm/{operation-resolver-IRQ2NVUQ.mjs → operation-resolver-IL2AHNPN.mjs} +64 -88
  130. package/dist/lib/node-esm/operation-resolver-IL2AHNPN.mjs.map +7 -0
  131. package/dist/lib/node-esm/{react-root-UEN3LLJD.mjs → react-root-RILC5MBD.mjs} +6 -6
  132. package/dist/lib/node-esm/{react-surface-UDO3PGH6.mjs → react-surface-SWKRVK4S.mjs} +57 -79
  133. package/dist/lib/node-esm/react-surface-SWKRVK4S.mjs.map +7 -0
  134. package/dist/lib/node-esm/repair-LRZHFPSJ.mjs +32 -0
  135. package/dist/lib/node-esm/repair-LRZHFPSJ.mjs.map +7 -0
  136. package/dist/lib/node-esm/{settings-DCTVM2BV.mjs → settings-3EKSEAAG.mjs} +3 -3
  137. package/dist/lib/node-esm/{spaces-ready-XLGRTJV2.mjs → spaces-ready-QK3EHBOS.mjs} +6 -6
  138. package/dist/lib/node-esm/spaces-ready-QK3EHBOS.mjs.map +7 -0
  139. package/dist/lib/node-esm/{state-G74V3WZG.mjs → state-W36RRYUO.mjs} +5 -5
  140. package/dist/lib/node-esm/{state-G74V3WZG.mjs.map → state-W36RRYUO.mjs.map} +2 -2
  141. package/dist/lib/node-esm/types/index.mjs +2 -2
  142. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  143. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -2
  144. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  145. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +33 -0
  146. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -0
  147. package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts +19 -0
  148. package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts.map +1 -0
  149. package/dist/types/src/capabilities/app-graph-builder/extensions/index.d.ts +6 -0
  150. package/dist/types/src/capabilities/app-graph-builder/extensions/index.d.ts.map +1 -0
  151. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts +12 -0
  152. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts.map +1 -0
  153. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +57 -0
  154. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -0
  155. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.test.d.ts +2 -0
  156. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.test.d.ts.map +1 -0
  157. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +24 -0
  158. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -0
  159. package/dist/types/src/capabilities/app-graph-builder/extensions/types.d.ts +38 -0
  160. package/dist/types/src/capabilities/app-graph-builder/extensions/types.d.ts.map +1 -0
  161. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  162. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  163. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -1
  164. package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
  165. package/dist/types/src/cli/commands/database/add.d.ts +0 -1
  166. package/dist/types/src/cli/commands/database/add.d.ts.map +1 -1
  167. package/dist/types/src/cli/plugin.d.ts.map +1 -1
  168. package/dist/types/src/components/AwaitingObject/AwaitingObject.d.ts.map +1 -0
  169. package/dist/types/src/components/AwaitingObject/index.d.ts +2 -0
  170. package/dist/types/src/components/AwaitingObject/index.d.ts.map +1 -0
  171. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +0 -1
  172. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  173. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts +68 -14
  174. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts.map +1 -1
  176. package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts +1 -2
  177. package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts.map +1 -1
  178. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts +2 -1
  179. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
  180. package/dist/types/src/containers/CreateObjectDialog/index.d.ts +2 -2
  181. package/dist/types/src/containers/CreateObjectDialog/index.d.ts.map +1 -1
  182. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
  183. package/dist/types/src/containers/InlineSyncStatus/InlineSyncStatus.d.ts.map +1 -1
  184. package/dist/types/src/containers/JoinDialog/index.d.ts +2 -2
  185. package/dist/types/src/containers/JoinDialog/index.d.ts.map +1 -1
  186. package/dist/types/src/containers/ObjectDetails/ObjectDetails.d.ts +1 -0
  187. package/dist/types/src/containers/ObjectDetails/ObjectDetails.d.ts.map +1 -1
  188. package/dist/types/src/containers/SmallPresenceLive/index.d.ts +1 -1
  189. package/dist/types/src/containers/SmallPresenceLive/index.d.ts.map +1 -1
  190. package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -1
  191. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +67 -13
  192. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
  193. package/dist/types/src/containers/SpacePresence/index.d.ts +2 -2
  194. package/dist/types/src/containers/SpacePresence/index.d.ts.map +1 -1
  195. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +67 -13
  196. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
  197. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +67 -13
  198. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  199. package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts.map +1 -1
  200. package/dist/types/src/containers/index.d.ts +1 -1
  201. package/dist/types/src/containers/index.d.ts.map +1 -1
  202. package/dist/types/src/translations.d.ts +67 -13
  203. package/dist/types/src/translations.d.ts.map +1 -1
  204. package/dist/types/src/types/form.d.ts +0 -2
  205. package/dist/types/src/types/form.d.ts.map +1 -1
  206. package/dist/types/src/types/types.d.ts +29 -46
  207. package/dist/types/src/types/types.d.ts.map +1 -1
  208. package/dist/types/src/util.d.ts +4 -161
  209. package/dist/types/src/util.d.ts.map +1 -1
  210. package/dist/types/tsconfig.tsbuildinfo +1 -1
  211. package/package.json +57 -57
  212. package/src/SpacePlugin.ts +14 -22
  213. package/src/capabilities/app-graph-builder/app-graph-builder.ts +14 -657
  214. package/src/capabilities/app-graph-builder/extensions/collections.ts +351 -0
  215. package/src/capabilities/app-graph-builder/extensions/companions.ts +80 -0
  216. package/src/capabilities/app-graph-builder/extensions/index.ts +9 -0
  217. package/src/capabilities/app-graph-builder/extensions/settings.ts +60 -0
  218. package/src/capabilities/app-graph-builder/extensions/shared.test.ts +112 -0
  219. package/src/capabilities/app-graph-builder/extensions/shared.ts +171 -0
  220. package/src/capabilities/app-graph-builder/extensions/spaces.ts +338 -0
  221. package/src/capabilities/app-graph-builder/extensions/types.ts +421 -0
  222. package/src/capabilities/identity-created/identity-created.ts +3 -3
  223. package/src/capabilities/operation-resolver/operation-resolver.ts +65 -73
  224. package/src/capabilities/react-surface/react-surface.tsx +33 -58
  225. package/src/capabilities/repair/repair.ts +3 -32
  226. package/src/capabilities/spaces-ready/spaces-ready.ts +2 -2
  227. package/src/capabilities/state/state.ts +4 -2
  228. package/src/cli/commands/database/add.ts +0 -1
  229. package/src/cli/commands/space/close/close.ts +1 -1
  230. package/src/cli/commands/space/create/create.ts +1 -1
  231. package/src/cli/commands/space/join/join.ts +1 -1
  232. package/src/cli/commands/space/open/open.ts +1 -1
  233. package/src/cli/plugin.ts +0 -1
  234. package/src/components/{AwaitingObject.tsx → AwaitingObject/AwaitingObject.tsx} +2 -2
  235. package/src/components/AwaitingObject/index.ts +5 -0
  236. package/src/components/CreateDialog/CreateObjectPanel.tsx +5 -2
  237. package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +4 -4
  238. package/src/components/ObjectDetails/BaseObjectSettings.tsx +4 -4
  239. package/src/components/ObjectForm/ObjectForm.tsx +6 -4
  240. package/src/constants.ts +5 -5
  241. package/src/containers/CollectionArticle/CollectionArticle.tsx +7 -54
  242. package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +10 -10
  243. package/src/containers/CreateObjectDialog/index.ts +2 -3
  244. package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +5 -3
  245. package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +7 -18
  246. package/src/containers/JoinDialog/JoinDialog.tsx +4 -4
  247. package/src/containers/JoinDialog/index.ts +2 -3
  248. package/src/containers/ObjectRenamePopover/ObjectRenamePopover.tsx +1 -1
  249. package/src/containers/SmallPresenceLive/index.ts +1 -1
  250. package/src/containers/SpacePresence/SpacePresence.tsx +4 -16
  251. package/src/containers/SpacePresence/index.ts +2 -3
  252. package/src/containers/SpaceRenamePopover/SpaceRenamePopover.tsx +1 -1
  253. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +2 -2
  254. package/src/containers/ViewEditor/ViewEditor.tsx +0 -1
  255. package/src/containers/index.ts +1 -1
  256. package/src/helpers/query.test.ts +1 -1
  257. package/src/hooks/useActiveSpace.ts +4 -4
  258. package/src/meta.ts +1 -1
  259. package/src/translations.ts +27 -1
  260. package/src/types/capabilities.ts +7 -7
  261. package/src/types/events.ts +5 -5
  262. package/src/types/form.ts +1 -8
  263. package/src/types/types.ts +36 -58
  264. package/src/util.ts +82 -0
  265. package/dist/lib/browser/CollectionArticle-WASDM637.mjs.map +0 -7
  266. package/dist/lib/browser/CreateObjectDialog-MA6DPYMD.mjs.map +0 -7
  267. package/dist/lib/browser/CreateSpaceDialog-WCEICWIE.mjs.map +0 -7
  268. package/dist/lib/browser/InlineSyncStatus-BT7BRBCO.mjs.map +0 -7
  269. package/dist/lib/browser/JoinDialog-PMCAIRCU.mjs.map +0 -7
  270. package/dist/lib/browser/SmallPresenceLive-LZD2NGKK.mjs +0 -10
  271. package/dist/lib/browser/SpacePresence-MLU576L6.mjs +0 -13
  272. package/dist/lib/browser/SpacePresence-MLU576L6.mjs.map +0 -7
  273. package/dist/lib/browser/SpaceSettingsContainer-UBMVKUPR.mjs.map +0 -7
  274. package/dist/lib/browser/ViewEditor-F74RR542.mjs.map +0 -7
  275. package/dist/lib/browser/app-graph-builder-VFYFI7CD.mjs +0 -593
  276. package/dist/lib/browser/app-graph-builder-VFYFI7CD.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-ABCDB5YC.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-ASV6DYFH.mjs +0 -19
  279. package/dist/lib/browser/chunk-PXVKN4LU.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-RWOK4F4G.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-TPZUQ5DC.mjs +0 -749
  282. package/dist/lib/browser/chunk-TPZUQ5DC.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-USN5QKRV.mjs.map +0 -7
  284. package/dist/lib/browser/chunk-XIIYC7P5.mjs.map +0 -7
  285. package/dist/lib/browser/operation-resolver-Y3HYRXX7.mjs.map +0 -7
  286. package/dist/lib/browser/react-surface-NJ23NZFF.mjs.map +0 -7
  287. package/dist/lib/browser/repair-N2I4DR2Z.mjs +0 -50
  288. package/dist/lib/browser/repair-N2I4DR2Z.mjs.map +0 -7
  289. package/dist/lib/browser/spaces-ready-Q6JASPT4.mjs.map +0 -7
  290. package/dist/lib/node-esm/CollectionArticle-A6GGG73Z.mjs.map +0 -7
  291. package/dist/lib/node-esm/CreateObjectDialog-4WEFNDDF.mjs.map +0 -7
  292. package/dist/lib/node-esm/CreateSpaceDialog-P7QCPB5J.mjs.map +0 -7
  293. package/dist/lib/node-esm/InlineSyncStatus-3PCXU7NX.mjs.map +0 -7
  294. package/dist/lib/node-esm/JoinDialog-XEOLJZVN.mjs.map +0 -7
  295. package/dist/lib/node-esm/SmallPresenceLive-K4243KXR.mjs +0 -11
  296. package/dist/lib/node-esm/SpacePresence-HC2XGQ54.mjs +0 -14
  297. package/dist/lib/node-esm/SpacePresence-HC2XGQ54.mjs.map +0 -7
  298. package/dist/lib/node-esm/SpaceSettingsContainer-Y62J2L65.mjs.map +0 -7
  299. package/dist/lib/node-esm/ViewEditor-B2BLYF5U.mjs.map +0 -7
  300. package/dist/lib/node-esm/app-graph-builder-N37ED6UI.mjs +0 -594
  301. package/dist/lib/node-esm/app-graph-builder-N37ED6UI.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-3DWZCVVQ.mjs.map +0 -7
  303. package/dist/lib/node-esm/chunk-CVXULIYC.mjs +0 -20
  304. package/dist/lib/node-esm/chunk-GWUPFA7J.mjs.map +0 -7
  305. package/dist/lib/node-esm/chunk-OSFH2XKO.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-P2AVANDG.mjs.map +0 -7
  307. package/dist/lib/node-esm/chunk-UJQUBDQS.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-WW6YYBRG.mjs +0 -750
  309. package/dist/lib/node-esm/chunk-WW6YYBRG.mjs.map +0 -7
  310. package/dist/lib/node-esm/operation-resolver-IRQ2NVUQ.mjs.map +0 -7
  311. package/dist/lib/node-esm/react-surface-UDO3PGH6.mjs.map +0 -7
  312. package/dist/lib/node-esm/repair-P6ND7ZRU.mjs +0 -51
  313. package/dist/lib/node-esm/repair-P6ND7ZRU.mjs.map +0 -7
  314. package/dist/lib/node-esm/spaces-ready-XLGRTJV2.mjs.map +0 -7
  315. package/dist/types/src/components/AwaitingObject.d.ts.map +0 -1
  316. package/src/util.tsx +0 -956
  317. /package/dist/lib/browser/{CollectionSection-LK4O6QDD.mjs.map → CollectionSection-H2MBNI63.mjs.map} +0 -0
  318. /package/dist/lib/browser/{MembersContainer-MMFCXLVZ.mjs.map → MembersContainer-OGYV2L4M.mjs.map} +0 -0
  319. /package/dist/lib/browser/{ObjectCardStack-CHWNLUYQ.mjs.map → ObjectCardStack-OMXF2DSG.mjs.map} +0 -0
  320. /package/dist/lib/browser/{ObjectDetails-YUGVDNSA.mjs.map → ObjectDetails-QFTQQN4W.mjs.map} +0 -0
  321. /package/dist/lib/browser/{RecordArticle-ONWKYM3Z.mjs.map → RecordArticle-BO2XHBFN.mjs.map} +0 -0
  322. /package/dist/lib/browser/{SchemaContainer-62AJXKAF.mjs.map → SchemaContainer-QWCSIZBS.mjs.map} +0 -0
  323. /package/dist/lib/browser/{SmallPresenceLive-LZD2NGKK.mjs.map → SmallPresenceLive-AHHLBAUP.mjs.map} +0 -0
  324. /package/dist/lib/browser/{SpacePluginSettings-BRJTADV5.mjs.map → SpacePluginSettings-QGZKNQLK.mjs.map} +0 -0
  325. /package/dist/lib/{node-esm/SmallPresenceLive-K4243KXR.mjs.map → browser/SpacePresence-JIWLBUWO.mjs.map} +0 -0
  326. /package/dist/lib/browser/{SyncStatus-5UQ7CIII.mjs.map → SyncStatus-6N7JJ7XF.mjs.map} +0 -0
  327. /package/dist/lib/browser/{app-graph-serializer-KTQOBYUF.mjs.map → app-graph-serializer-UZWWGLGY.mjs.map} +0 -0
  328. /package/dist/lib/browser/{chunk-J5F4LUJD.mjs.map → chunk-SSTUPFZ2.mjs.map} +0 -0
  329. /package/dist/lib/browser/{react-root-UYBW5RE7.mjs.map → react-root-OD2HP63B.mjs.map} +0 -0
  330. /package/dist/lib/browser/{settings-2ELVUFDR.mjs.map → settings-RUDP2Q56.mjs.map} +0 -0
  331. /package/dist/lib/node-esm/{CollectionSection-WWKDOAAT.mjs.map → CollectionSection-BI66Y34F.mjs.map} +0 -0
  332. /package/dist/lib/node-esm/{MembersContainer-UQZLW3YA.mjs.map → MembersContainer-4PV3Z4BA.mjs.map} +0 -0
  333. /package/dist/lib/{browser/MenuFooter-HYBTNOBT.mjs.map → node-esm/MenuFooter-PXG2GV6A.mjs.map} +0 -0
  334. /package/dist/lib/node-esm/{ObjectCardStack-UXEWG6RV.mjs.map → ObjectCardStack-457SNNVF.mjs.map} +0 -0
  335. /package/dist/lib/node-esm/{ObjectDetails-26PVHUQL.mjs.map → ObjectDetails-OLF7HSM4.mjs.map} +0 -0
  336. /package/dist/lib/node-esm/{RecordArticle-APY2WKUW.mjs.map → RecordArticle-XUIT25PP.mjs.map} +0 -0
  337. /package/dist/lib/node-esm/{SchemaContainer-XR2D6MYX.mjs.map → SchemaContainer-5G4R3Z6O.mjs.map} +0 -0
  338. /package/dist/lib/node-esm/{SpacePluginSettings-VEB5IGG7.mjs.map → SpacePluginSettings-PENV4GHL.mjs.map} +0 -0
  339. /package/dist/lib/node-esm/{SyncStatus-XTJAVHPN.mjs.map → SyncStatus-YEBGTNSD.mjs.map} +0 -0
  340. /package/dist/lib/node-esm/{app-graph-serializer-GXQYSQAZ.mjs.map → app-graph-serializer-RT2RQTV2.mjs.map} +0 -0
  341. /package/dist/lib/node-esm/{chunk-S2IELCDF.mjs.map → chunk-XYLDAH5C.mjs.map} +0 -0
  342. /package/dist/lib/node-esm/{react-root-UEN3LLJD.mjs.map → react-root-RILC5MBD.mjs.map} +0 -0
  343. /package/dist/lib/node-esm/{settings-DCTVM2BV.mjs.map → settings-3EKSEAAG.mjs.map} +0 -0
  344. /package/dist/types/src/components/{AwaitingObject.d.ts → AwaitingObject/AwaitingObject.d.ts} +0 -0
@@ -0,0 +1,171 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Atom } from '@effect-atom/atom-react';
6
+ import * as Option from 'effect/Option';
7
+
8
+ import { type Space, SpaceState, isSpace } from '@dxos/client/echo';
9
+ import { Filter, Obj, type Type } from '@dxos/echo';
10
+ import { AtomObj, AtomQuery } from '@dxos/echo-atom';
11
+ import { Migrations } from '@dxos/migrations';
12
+ import { type Operation } from '@dxos/operation';
13
+ import { type Node } from '@dxos/plugin-graph';
14
+ import { type TreeData } from '@dxos/react-ui-list';
15
+ import { ViewAnnotation, getTypenameFromQuery } from '@dxos/schema';
16
+ import { type Label } from '@dxos/ui-types';
17
+
18
+ import { meta } from '../../../meta';
19
+ import { SPACE_TYPE } from '../../../types';
20
+
21
+ export {
22
+ type MetadataResolver,
23
+ ACCEPT_ECHO_CLASS,
24
+ CACHEABLE_PROPS,
25
+ CAN_DROP_OBJECT,
26
+ blockInstructionCache,
27
+ buildCollectionPartials,
28
+ collectionPartialsCache,
29
+ createFactory,
30
+ createObjectNode,
31
+ getAcceptPersistenceKey,
32
+ getCollectionGraphNodePartials,
33
+ getDynamicLabel,
34
+ rearrangeCache,
35
+ } from '@dxos/app-toolkit';
36
+
37
+ //
38
+ // Virtual Node Types
39
+ //
40
+
41
+ export const TYPES_SECTION_TYPE = `${meta.id}.types`;
42
+ export const COLLECTIONS_SECTION_TYPE = `${meta.id}.collections`;
43
+ export const TYPE_COLLECTION_TYPE = `${meta.id}.type-collection`;
44
+ export const STATIC_SCHEMA_TYPE = `${meta.id}.static-schema`;
45
+
46
+ //
47
+ // Constants
48
+ //
49
+
50
+ /** Shared translation namespace descriptor. */
51
+ export const META_NS: { ns: string } = { ns: meta.id };
52
+
53
+ //
54
+ // Stable Callbacks
55
+ //
56
+
57
+ export const BLOCK_REORDER_ABOVE = (_source: TreeData, instruction: any) => instruction.type === 'reorder-above';
58
+ export const CAN_DROP_SPACE = (source: TreeData) => Obj.isObject(source.item.data) || isSpace(source.item.data);
59
+
60
+ //
61
+ // Matchers
62
+ //
63
+
64
+ /** Match space nodes and return the Space object. */
65
+ export const whenSpace = (node: Node.Node): Option.Option<Space> =>
66
+ node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none();
67
+
68
+ //
69
+ // Caches (space-specific, not moved to app-toolkit)
70
+ //
71
+
72
+ export const spaceActionsCache = new Map<
73
+ string,
74
+ {
75
+ state: SpaceState;
76
+ hasPendingMigration: boolean;
77
+ migrating: boolean;
78
+ actions: Node.NodeArg<Node.ActionData<Operation.Service>>[];
79
+ }
80
+ >();
81
+ export const spaceRearrangeCache = new Map<string, (nextOrder: Space[]) => void>();
82
+
83
+ //
84
+ // Static Labels
85
+ //
86
+
87
+ export const ADD_VIEW_TO_SCHEMA_LABEL: Label = ['add view to schema label', META_NS];
88
+ export const COPY_LINK_LABEL: Label = ['copy link label', META_NS];
89
+ export const CREATE_OBJECT_IN_COLLECTION_LABEL: Label = ['create object in collection label', META_NS];
90
+ export const CREATE_OBJECT_IN_SPACE_LABEL: Label = ['create object in space label', META_NS];
91
+ export const EXPOSE_OBJECT_LABEL: Label = ['expose object label', META_NS];
92
+ export const MIGRATE_SPACE_LABEL: Label = ['migrate space label', META_NS];
93
+ export const NEW_TYPE_LABEL: Label = ['new type label', META_NS];
94
+ export const REMOVE_FROM_COLLECTION_LABEL: Label = ['remove from collection label', META_NS];
95
+ export const RENAME_SPACE_LABEL: Label = ['rename space label', META_NS];
96
+ export const SETTINGS_PANEL_LABEL: Label = ['settings panel label', META_NS];
97
+ export const SNAPSHOT_BY_SCHEMA_LABEL: Label = ['snapshot by schema label', META_NS];
98
+
99
+ //
100
+ // Helpers
101
+ //
102
+
103
+ export const checkPendingMigration = (space: Space) => {
104
+ return (
105
+ space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
106
+ (space.state.get() === SpaceState.SPACE_READY &&
107
+ !!Migrations.versionProperty &&
108
+ space.properties[Migrations.versionProperty] !== Migrations.targetVersion)
109
+ );
110
+ };
111
+
112
+ export const downloadBlob = async (blob: Blob, filename: string) => {
113
+ const url = URL.createObjectURL(blob);
114
+ const anchor = document.createElement('a');
115
+ anchor.href = url;
116
+ anchor.download = filename;
117
+
118
+ document.body.appendChild(anchor);
119
+ anchor.click();
120
+
121
+ document.body.removeChild(anchor);
122
+ URL.revokeObjectURL(url);
123
+ };
124
+
125
+ //
126
+ // View Index
127
+ //
128
+
129
+ /**
130
+ * Index of view objects grouped by their target typename.
131
+ */
132
+ export type ViewIndex = {
133
+ /** Typenames that have at least one straightforward view targeting them. */
134
+ typenamesWithViews: Set<string>;
135
+ /** View objects targeting a specific typename. */
136
+ getViewsForTypename: (typename: string) => Obj.Any[];
137
+ };
138
+
139
+ /**
140
+ * Builds an index of view objects by scanning view-annotated schemas and resolving the target
141
+ * typename from each view's query AST. Only straightforward views whose query resolves to a
142
+ * simple typename via getTypenameFromQuery are included.
143
+ */
144
+ // TODO(wittjosiah): Make reactive to schema registry changes (currently only object/view mutations trigger updates).
145
+ export const buildViewIndex = (get: Atom.Context, space: Space, schemas: Type.AnyEntity[]): ViewIndex => {
146
+ const viewSchemas = schemas.filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
147
+
148
+ const viewsByTypename = new Map<string, Obj.Any[]>();
149
+
150
+ if (viewSchemas.length > 0) {
151
+ const filter = Filter.or(...viewSchemas.map((schema) => Filter.type(schema)));
152
+ const viewObjects = get(AtomQuery.make(space.db, filter));
153
+
154
+ for (const viewObject of viewObjects) {
155
+ const viewSnapshot = get(AtomObj.make(viewObject));
156
+ const viewRef = viewSnapshot.view;
157
+ const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : undefined;
158
+ const typename = getTypenameFromQuery(viewTarget?.query?.ast);
159
+ if (typename) {
160
+ const existing = viewsByTypename.get(typename) ?? [];
161
+ existing.push(viewObject);
162
+ viewsByTypename.set(typename, existing);
163
+ }
164
+ }
165
+ }
166
+
167
+ return {
168
+ typenamesWithViews: new Set(viewsByTypename.keys()),
169
+ getViewsForTypename: (typename) => viewsByTypename.get(typename) ?? [],
170
+ };
171
+ };
@@ -0,0 +1,338 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities, COMPANION_PREFIX } from '@dxos/app-toolkit';
9
+ import { type Space, SpaceState } from '@dxos/client/echo';
10
+ import { Filter, Obj } from '@dxos/echo';
11
+ import { AtomObj, AtomQuery } from '@dxos/echo-atom';
12
+ import { Migrations } from '@dxos/migrations';
13
+ import { Operation } from '@dxos/operation';
14
+ import { ClientCapabilities } from '@dxos/plugin-client';
15
+ import { CreateAtom, Graph, GraphBuilder, Node, NodeMatcher } from '@dxos/plugin-graph';
16
+ import { Expando } from '@dxos/schema';
17
+
18
+ import { getActiveSpace } from '../../../hooks';
19
+ import { meta } from '../../../meta';
20
+ import { SPACE_TYPE, SpaceCapabilities, SpaceOperation } from '../../../types';
21
+ import { SHARED, getSpaceDisplayName } from '../../../util';
22
+
23
+ import {
24
+ CACHEABLE_PROPS,
25
+ CAN_DROP_SPACE,
26
+ CREATE_OBJECT_IN_SPACE_LABEL,
27
+ MIGRATE_SPACE_LABEL,
28
+ RENAME_SPACE_LABEL,
29
+ SETTINGS_PANEL_LABEL,
30
+ checkPendingMigration,
31
+ spaceActionsCache,
32
+ spaceRearrangeCache,
33
+ whenSpace,
34
+ } from './shared';
35
+
36
+ //
37
+ // Extension Factory
38
+ //
39
+
40
+ /** Creates space-related extensions: primary actions, space nodes, and space actions. */
41
+ export const createSpaceExtensions = Effect.fnUntraced(function* () {
42
+ const capabilities = yield* Capability.Service;
43
+
44
+ return yield* Effect.all([
45
+ GraphBuilder.createExtension({
46
+ id: `${meta.id}.primary-actions`,
47
+ position: 'hoist',
48
+ match: NodeMatcher.whenRoot,
49
+ actions: () =>
50
+ Effect.succeed([
51
+ {
52
+ id: SpaceOperation.OpenCreateSpace.meta.key,
53
+ data: () => Operation.invoke(SpaceOperation.OpenCreateSpace),
54
+ properties: {
55
+ label: ['create space label', { ns: meta.id }],
56
+ icon: 'ph--plus--regular',
57
+ testId: 'spacePlugin.createSpace',
58
+ disposition: 'menu',
59
+ },
60
+ },
61
+ {
62
+ id: SpaceOperation.Join.meta.key,
63
+ data: () => Operation.invoke(SpaceOperation.Join, {}),
64
+ properties: {
65
+ label: ['join space label', { ns: meta.id }],
66
+ icon: 'ph--sign-in--regular',
67
+ testId: 'spacePlugin.joinSpace',
68
+ disposition: 'menu',
69
+ },
70
+ },
71
+ {
72
+ id: SpaceOperation.OpenMembers.meta.key,
73
+ data: Effect.fnUntraced(function* () {
74
+ const client = yield* Capability.get(ClientCapabilities.Client);
75
+ const space = getActiveSpace(capabilities) ?? client.spaces.default;
76
+ yield* Operation.invoke(SpaceOperation.OpenMembers, { space });
77
+ }),
78
+ properties: {
79
+ label: ['share space label', { ns: meta.id }],
80
+ icon: 'ph--users--regular',
81
+ testId: 'spacePlugin.shareSpace',
82
+ keyBinding: {
83
+ macos: 'meta+.',
84
+ windows: 'alt+.',
85
+ },
86
+ },
87
+ },
88
+ {
89
+ id: SpaceOperation.OpenSettings.meta.key,
90
+ data: Effect.fnUntraced(function* () {
91
+ const client = yield* Capability.get(ClientCapabilities.Client);
92
+ const space = getActiveSpace(capabilities) ?? client.spaces.default;
93
+ yield* Operation.invoke(SpaceOperation.OpenSettings, { space });
94
+ }),
95
+ properties: {
96
+ label: ['open current space settings label', { ns: meta.id }],
97
+ icon: 'ph--faders--regular',
98
+ keyBinding: {
99
+ macos: 'meta+shift+,',
100
+ windows: 'ctrl+shift+,',
101
+ },
102
+ },
103
+ },
104
+ ]),
105
+ }),
106
+
107
+ GraphBuilder.createExtension({
108
+ id: `${meta.id}.spaces`,
109
+ match: NodeMatcher.whenRoot,
110
+ connector: (_node, get) => {
111
+ const client = capabilities.get(ClientCapabilities.Client);
112
+ const stateAtom = capabilities.get(SpaceCapabilities.State);
113
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
114
+ const spacesAtom = CreateAtom.fromObservable(client.spaces);
115
+ const isReadyAtom = CreateAtom.fromObservable(client.spaces.isReady);
116
+
117
+ const spaces = get(spacesAtom);
118
+ const isReady = get(isReadyAtom);
119
+
120
+ if (!spaces || !isReady) {
121
+ return Effect.succeed([]);
122
+ }
123
+
124
+ const settingsAtom = capabilities.get(SpaceCapabilities.Settings);
125
+ const settings = get(settingsAtom);
126
+ const state = get(stateAtom);
127
+ const ephemeralState = get(ephemeralAtom);
128
+
129
+ try {
130
+ const [spacesOrder] = get(
131
+ AtomQuery.make(client.spaces.default.db, Filter.type(Expando.Expando, { key: SHARED })),
132
+ );
133
+ const { graph } = capabilities.get(AppCapabilities.AppGraph);
134
+
135
+ const spacesOrderSnapshot = spacesOrder ? get(AtomObj.make(spacesOrder)) : undefined;
136
+ const order: string[] = (spacesOrderSnapshot as any)?.order ?? [];
137
+ const orderMap = new Map(order.map((id, index) => [id, index]));
138
+
139
+ const spaceStates = spaces.map((space) => get(CreateAtom.fromObservable(space.state)));
140
+
141
+ spaces.forEach((space) => {
142
+ if (space.state.get() === SpaceState.SPACE_READY) {
143
+ get(AtomObj.make(space.properties));
144
+ }
145
+ });
146
+
147
+ return Effect.succeed(
148
+ [
149
+ ...spaces
150
+ .filter((space) => orderMap.has(space.id))
151
+ .sort((sortA, sortB) => orderMap.get(sortA.id)! - orderMap.get(sortB.id)!),
152
+ ...spaces.filter((space) => !orderMap.has(space.id)),
153
+ ]
154
+ .filter((space, idx) => (settings?.showHidden ? true : spaceStates[idx] !== SpaceState.SPACE_INACTIVE))
155
+ .map((space) =>
156
+ constructSpaceNode({
157
+ space,
158
+ navigable: ephemeralState.navigableCollections,
159
+ personal: space === client.spaces.default,
160
+ namesCache: state.spaceNames,
161
+ graph,
162
+ spacesOrder,
163
+ }),
164
+ ),
165
+ );
166
+ } catch {
167
+ return Effect.succeed([]);
168
+ }
169
+ },
170
+ // TODO(graph-path-ids): Resolver temporarily disabled; redesign needed for path-based IDs.
171
+ // resolver: (id, get) => { ... },
172
+ }),
173
+
174
+ GraphBuilder.createExtension({
175
+ id: `${meta.id}.actions`,
176
+ match: whenSpace,
177
+ actions: (space, get) => {
178
+ const [client] = get(capabilities.atom(ClientCapabilities.Client));
179
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
180
+ const ephemeralState = get(ephemeralAtom);
181
+
182
+ if (!client) {
183
+ return Effect.succeed([]);
184
+ }
185
+
186
+ return Effect.succeed(
187
+ constructSpaceActions({
188
+ space,
189
+ migrating: ephemeralState.sdkMigrationRunning[space.id],
190
+ }),
191
+ );
192
+ },
193
+ }),
194
+ ]);
195
+ });
196
+
197
+ //
198
+ // Helpers
199
+ //
200
+
201
+ /** Builds an app-graph node for a space, including settings children and optional rearrange handler. */
202
+ const constructSpaceNode = ({
203
+ space,
204
+ navigable = false,
205
+ personal,
206
+ namesCache,
207
+ graph,
208
+ spacesOrder,
209
+ }: {
210
+ space: Space;
211
+ navigable?: boolean;
212
+ personal?: boolean;
213
+ namesCache?: Record<string, string>;
214
+ graph?: Graph.ExpandableGraph;
215
+ spacesOrder?: Obj.Any;
216
+ }) => {
217
+ const hasPendingMigration = checkPendingMigration(space);
218
+
219
+ let onRearrange: ((nextOrder: Space[]) => void) | undefined;
220
+ if (graph && spacesOrder) {
221
+ onRearrange = spaceRearrangeCache.get(space.id);
222
+ if (!onRearrange) {
223
+ onRearrange = (nextOrder: Space[]) => {
224
+ Graph.sortEdges(
225
+ graph,
226
+ Node.RootId,
227
+ 'outbound',
228
+ nextOrder.map(({ id }) => id),
229
+ );
230
+
231
+ Obj.change(spacesOrder, (mutableOrder: any) => {
232
+ mutableOrder.order = nextOrder.map(({ id }) => id);
233
+ });
234
+ };
235
+ spaceRearrangeCache.set(space.id, onRearrange);
236
+ }
237
+ }
238
+
239
+ return {
240
+ id: space.id,
241
+ type: SPACE_TYPE,
242
+ cacheable: CACHEABLE_PROPS,
243
+ data: space,
244
+ properties: {
245
+ label: getSpaceDisplayName(space, { personal, namesCache }),
246
+ description: space.state.get() === SpaceState.SPACE_READY && space.properties.description,
247
+ hue: space.state.get() === SpaceState.SPACE_READY && space.properties.hue,
248
+ icon:
249
+ space.state.get() === SpaceState.SPACE_READY && space.properties.icon
250
+ ? `ph--${space.properties.icon}--regular`
251
+ : undefined,
252
+ iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
253
+ disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
254
+ disposition: 'workspace',
255
+ testId: 'spacePlugin.space',
256
+ onRearrange,
257
+ canDrop: CAN_DROP_SPACE,
258
+ },
259
+ nodes: [
260
+ {
261
+ id: 'settings',
262
+ type: `${meta.id}.settings`,
263
+ data: null,
264
+ properties: {
265
+ label: SETTINGS_PANEL_LABEL,
266
+ icon: 'ph--faders--regular',
267
+ disposition: 'alternate-tree',
268
+ },
269
+ },
270
+ ],
271
+ };
272
+ };
273
+
274
+ /** Builds the action list for a space node (migrate, create object, rename). */
275
+ const constructSpaceActions = ({ space, migrating }: { space: Space; migrating?: boolean }) => {
276
+ const state = space.state.get();
277
+ const hasPendingMigration = checkPendingMigration(space);
278
+ const isMigrating = migrating || Migrations.running(space);
279
+
280
+ const cached = spaceActionsCache.get(space.id);
281
+ if (
282
+ cached &&
283
+ cached.state === state &&
284
+ cached.hasPendingMigration === hasPendingMigration &&
285
+ cached.migrating === isMigrating
286
+ ) {
287
+ return cached.actions;
288
+ }
289
+
290
+ const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [];
291
+
292
+ if (hasPendingMigration) {
293
+ actions.push({
294
+ id: SpaceOperation.Migrate.meta.key,
295
+ type: Node.ActionGroupType,
296
+ data: () => Operation.invoke(SpaceOperation.Migrate, { space }),
297
+ properties: {
298
+ label: MIGRATE_SPACE_LABEL,
299
+ icon: 'ph--database--regular',
300
+ disposition: 'list-item-primary',
301
+ disabled: isMigrating,
302
+ },
303
+ });
304
+ }
305
+
306
+ if (state === SpaceState.SPACE_READY && !hasPendingMigration) {
307
+ actions.push(
308
+ {
309
+ id: SpaceOperation.OpenCreateObject.meta.key,
310
+ type: Node.ActionType,
311
+ data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: space.db }),
312
+ properties: {
313
+ label: CREATE_OBJECT_IN_SPACE_LABEL,
314
+ icon: 'ph--plus--regular',
315
+ disposition: 'list-item-primary',
316
+ testId: 'spacePlugin.createObject',
317
+ },
318
+ },
319
+ {
320
+ id: SpaceOperation.Rename.meta.key,
321
+ type: Node.ActionType,
322
+ data: (params?: Node.InvokeProps) =>
323
+ Operation.invoke(SpaceOperation.Rename, { space, caller: `${params?.caller}:${params?.parent?.id}` }),
324
+ properties: {
325
+ label: RENAME_SPACE_LABEL,
326
+ icon: 'ph--pencil-simple-line--regular',
327
+ keyBinding: {
328
+ macos: 'shift+F6',
329
+ windows: 'shift+F6',
330
+ },
331
+ },
332
+ },
333
+ );
334
+ }
335
+
336
+ spaceActionsCache.set(space.id, { state, hasPendingMigration, migrating: isMigrating, actions });
337
+ return actions;
338
+ };