@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,1203 @@
1
+ import {
2
+ getActiveSpace
3
+ } from "./chunk-ICXESMDI.mjs";
4
+ import {
5
+ SHARED,
6
+ getSpaceDisplayName
7
+ } from "./chunk-6OA75CWN.mjs";
8
+ import {
9
+ SPACE_TYPE,
10
+ SpaceCapabilities,
11
+ SpaceOperation
12
+ } from "./chunk-6IT5IBB5.mjs";
13
+ import {
14
+ meta
15
+ } from "./chunk-CBWGVOJE.mjs";
16
+
17
+ // src/capabilities/app-graph-builder/app-graph-builder.ts
18
+ import * as Effect6 from "effect/Effect";
19
+ import { Capability as Capability4 } from "@dxos/app-framework";
20
+ import { AppCapabilities as AppCapabilities4 } from "@dxos/app-toolkit";
21
+
22
+ // src/capabilities/app-graph-builder/extensions/spaces.ts
23
+ import * as Effect from "effect/Effect";
24
+ import { Capability } from "@dxos/app-framework";
25
+ import { AppCapabilities } from "@dxos/app-toolkit";
26
+ import { SpaceState as SpaceState2 } from "@dxos/client/echo";
27
+ import { Filter as Filter2, Obj as Obj2 } from "@dxos/echo";
28
+ import { AtomObj as AtomObj2, AtomQuery as AtomQuery2 } from "@dxos/echo-atom";
29
+ import { Migrations as Migrations2 } from "@dxos/migrations";
30
+ import { Operation } from "@dxos/operation";
31
+ import { ClientCapabilities } from "@dxos/plugin-client";
32
+ import { CreateAtom, Graph, GraphBuilder, Node, NodeMatcher } from "@dxos/plugin-graph";
33
+ import { Expando } from "@dxos/schema";
34
+
35
+ // src/capabilities/app-graph-builder/extensions/shared.ts
36
+ import * as Option from "effect/Option";
37
+ import { SpaceState, isSpace } from "@dxos/client/echo";
38
+ import { Filter, Obj } from "@dxos/echo";
39
+ import { AtomObj, AtomQuery } from "@dxos/echo-atom";
40
+ import { Migrations } from "@dxos/migrations";
41
+ import { ViewAnnotation, getTypenameFromQuery } from "@dxos/schema";
42
+ import { ACCEPT_ECHO_CLASS, CACHEABLE_PROPS, CAN_DROP_OBJECT, blockInstructionCache, buildCollectionPartials, collectionPartialsCache, createFactory, createObjectNode, getAcceptPersistenceKey, getCollectionGraphNodePartials, getDynamicLabel, rearrangeCache } from "@dxos/app-toolkit";
43
+ var TYPES_SECTION_TYPE = `${meta.id}.types`;
44
+ var COLLECTIONS_SECTION_TYPE = `${meta.id}.collections`;
45
+ var TYPE_COLLECTION_TYPE = `${meta.id}.type-collection`;
46
+ var STATIC_SCHEMA_TYPE = `${meta.id}.static-schema`;
47
+ var META_NS = {
48
+ ns: meta.id
49
+ };
50
+ var BLOCK_REORDER_ABOVE = (_source, instruction) => instruction.type === "reorder-above";
51
+ var CAN_DROP_SPACE = (source) => Obj.isObject(source.item.data) || isSpace(source.item.data);
52
+ var whenSpace = (node) => node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none();
53
+ var spaceActionsCache = /* @__PURE__ */ new Map();
54
+ var spaceRearrangeCache = /* @__PURE__ */ new Map();
55
+ var ADD_VIEW_TO_SCHEMA_LABEL = [
56
+ "add view to schema label",
57
+ META_NS
58
+ ];
59
+ var COPY_LINK_LABEL = [
60
+ "copy link label",
61
+ META_NS
62
+ ];
63
+ var CREATE_OBJECT_IN_COLLECTION_LABEL = [
64
+ "create object in collection label",
65
+ META_NS
66
+ ];
67
+ var CREATE_OBJECT_IN_SPACE_LABEL = [
68
+ "create object in space label",
69
+ META_NS
70
+ ];
71
+ var EXPOSE_OBJECT_LABEL = [
72
+ "expose object label",
73
+ META_NS
74
+ ];
75
+ var MIGRATE_SPACE_LABEL = [
76
+ "migrate space label",
77
+ META_NS
78
+ ];
79
+ var REMOVE_FROM_COLLECTION_LABEL = [
80
+ "remove from collection label",
81
+ META_NS
82
+ ];
83
+ var RENAME_SPACE_LABEL = [
84
+ "rename space label",
85
+ META_NS
86
+ ];
87
+ var SETTINGS_PANEL_LABEL = [
88
+ "settings panel label",
89
+ META_NS
90
+ ];
91
+ var SNAPSHOT_BY_SCHEMA_LABEL = [
92
+ "snapshot by schema label",
93
+ META_NS
94
+ ];
95
+ var checkPendingMigration = (space) => {
96
+ return space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION || space.state.get() === SpaceState.SPACE_READY && !!Migrations.versionProperty && space.properties[Migrations.versionProperty] !== Migrations.targetVersion;
97
+ };
98
+ var downloadBlob = async (blob, filename) => {
99
+ const url = URL.createObjectURL(blob);
100
+ const anchor = document.createElement("a");
101
+ anchor.href = url;
102
+ anchor.download = filename;
103
+ document.body.appendChild(anchor);
104
+ anchor.click();
105
+ document.body.removeChild(anchor);
106
+ URL.revokeObjectURL(url);
107
+ };
108
+ var buildViewIndex = (get, space, schemas) => {
109
+ const viewSchemas = schemas.filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
110
+ const viewsByTypename = /* @__PURE__ */ new Map();
111
+ if (viewSchemas.length > 0) {
112
+ const filter = Filter.or(...viewSchemas.map((schema) => Filter.type(schema)));
113
+ const viewObjects = get(AtomQuery.make(space.db, filter));
114
+ for (const viewObject of viewObjects) {
115
+ const viewSnapshot = get(AtomObj.make(viewObject));
116
+ const viewRef = viewSnapshot.view;
117
+ const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : void 0;
118
+ const typename = getTypenameFromQuery(viewTarget?.query?.ast);
119
+ if (typename) {
120
+ const existing = viewsByTypename.get(typename) ?? [];
121
+ existing.push(viewObject);
122
+ viewsByTypename.set(typename, existing);
123
+ }
124
+ }
125
+ }
126
+ return {
127
+ typenamesWithViews: new Set(viewsByTypename.keys()),
128
+ getViewsForTypename: (typename) => viewsByTypename.get(typename) ?? []
129
+ };
130
+ };
131
+
132
+ // src/capabilities/app-graph-builder/extensions/spaces.ts
133
+ var createSpaceExtensions = Effect.fnUntraced(function* () {
134
+ const capabilities = yield* Capability.Service;
135
+ return yield* Effect.all([
136
+ GraphBuilder.createExtension({
137
+ id: `${meta.id}.primary-actions`,
138
+ position: "hoist",
139
+ match: NodeMatcher.whenRoot,
140
+ actions: () => Effect.succeed([
141
+ {
142
+ id: SpaceOperation.OpenCreateSpace.meta.key,
143
+ data: () => Operation.invoke(SpaceOperation.OpenCreateSpace),
144
+ properties: {
145
+ label: [
146
+ "create space label",
147
+ {
148
+ ns: meta.id
149
+ }
150
+ ],
151
+ icon: "ph--plus--regular",
152
+ testId: "spacePlugin.createSpace",
153
+ disposition: "menu"
154
+ }
155
+ },
156
+ {
157
+ id: SpaceOperation.Join.meta.key,
158
+ data: () => Operation.invoke(SpaceOperation.Join, {}),
159
+ properties: {
160
+ label: [
161
+ "join space label",
162
+ {
163
+ ns: meta.id
164
+ }
165
+ ],
166
+ icon: "ph--sign-in--regular",
167
+ testId: "spacePlugin.joinSpace",
168
+ disposition: "menu"
169
+ }
170
+ },
171
+ {
172
+ id: SpaceOperation.OpenMembers.meta.key,
173
+ data: Effect.fnUntraced(function* () {
174
+ const client = yield* Capability.get(ClientCapabilities.Client);
175
+ const space = getActiveSpace(capabilities) ?? client.spaces.default;
176
+ yield* Operation.invoke(SpaceOperation.OpenMembers, {
177
+ space
178
+ });
179
+ }),
180
+ properties: {
181
+ label: [
182
+ "share space label",
183
+ {
184
+ ns: meta.id
185
+ }
186
+ ],
187
+ icon: "ph--users--regular",
188
+ testId: "spacePlugin.shareSpace",
189
+ keyBinding: {
190
+ macos: "meta+.",
191
+ windows: "alt+."
192
+ }
193
+ }
194
+ },
195
+ {
196
+ id: SpaceOperation.OpenSettings.meta.key,
197
+ data: Effect.fnUntraced(function* () {
198
+ const client = yield* Capability.get(ClientCapabilities.Client);
199
+ const space = getActiveSpace(capabilities) ?? client.spaces.default;
200
+ yield* Operation.invoke(SpaceOperation.OpenSettings, {
201
+ space
202
+ });
203
+ }),
204
+ properties: {
205
+ label: [
206
+ "open current space settings label",
207
+ {
208
+ ns: meta.id
209
+ }
210
+ ],
211
+ icon: "ph--faders--regular",
212
+ keyBinding: {
213
+ macos: "meta+shift+,",
214
+ windows: "ctrl+shift+,"
215
+ }
216
+ }
217
+ }
218
+ ])
219
+ }),
220
+ GraphBuilder.createExtension({
221
+ id: `${meta.id}.spaces`,
222
+ match: NodeMatcher.whenRoot,
223
+ connector: (_node, get) => {
224
+ const client = capabilities.get(ClientCapabilities.Client);
225
+ const stateAtom = capabilities.get(SpaceCapabilities.State);
226
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
227
+ const spacesAtom = CreateAtom.fromObservable(client.spaces);
228
+ const isReadyAtom = CreateAtom.fromObservable(client.spaces.isReady);
229
+ const spaces = get(spacesAtom);
230
+ const isReady = get(isReadyAtom);
231
+ if (!spaces || !isReady) {
232
+ return Effect.succeed([]);
233
+ }
234
+ const settingsAtom = capabilities.get(SpaceCapabilities.Settings);
235
+ const settings = get(settingsAtom);
236
+ const state = get(stateAtom);
237
+ const ephemeralState = get(ephemeralAtom);
238
+ try {
239
+ const [spacesOrder] = get(AtomQuery2.make(client.spaces.default.db, Filter2.type(Expando.Expando, {
240
+ key: SHARED
241
+ })));
242
+ const { graph } = capabilities.get(AppCapabilities.AppGraph);
243
+ const spacesOrderSnapshot = spacesOrder ? get(AtomObj2.make(spacesOrder)) : void 0;
244
+ const order = spacesOrderSnapshot?.order ?? [];
245
+ const orderMap = new Map(order.map((id, index) => [
246
+ id,
247
+ index
248
+ ]));
249
+ const spaceStates = spaces.map((space) => get(CreateAtom.fromObservable(space.state)));
250
+ spaces.forEach((space) => {
251
+ if (space.state.get() === SpaceState2.SPACE_READY) {
252
+ get(AtomObj2.make(space.properties));
253
+ }
254
+ });
255
+ return Effect.succeed([
256
+ ...spaces.filter((space) => orderMap.has(space.id)).sort((sortA, sortB) => orderMap.get(sortA.id) - orderMap.get(sortB.id)),
257
+ ...spaces.filter((space) => !orderMap.has(space.id))
258
+ ].filter((space, idx) => settings?.showHidden ? true : spaceStates[idx] !== SpaceState2.SPACE_INACTIVE).map((space) => constructSpaceNode({
259
+ space,
260
+ navigable: ephemeralState.navigableCollections,
261
+ personal: space === client.spaces.default,
262
+ namesCache: state.spaceNames,
263
+ graph,
264
+ spacesOrder
265
+ })));
266
+ } catch {
267
+ return Effect.succeed([]);
268
+ }
269
+ }
270
+ }),
271
+ GraphBuilder.createExtension({
272
+ id: `${meta.id}.actions`,
273
+ match: whenSpace,
274
+ actions: (space, get) => {
275
+ const [client] = get(capabilities.atom(ClientCapabilities.Client));
276
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
277
+ const ephemeralState = get(ephemeralAtom);
278
+ if (!client) {
279
+ return Effect.succeed([]);
280
+ }
281
+ return Effect.succeed(constructSpaceActions({
282
+ space,
283
+ migrating: ephemeralState.sdkMigrationRunning[space.id]
284
+ }));
285
+ }
286
+ })
287
+ ]);
288
+ });
289
+ var constructSpaceNode = ({ space, navigable = false, personal, namesCache, graph, spacesOrder }) => {
290
+ const hasPendingMigration = checkPendingMigration(space);
291
+ let onRearrange;
292
+ if (graph && spacesOrder) {
293
+ onRearrange = spaceRearrangeCache.get(space.id);
294
+ if (!onRearrange) {
295
+ onRearrange = (nextOrder) => {
296
+ Graph.sortEdges(graph, Node.RootId, "outbound", nextOrder.map(({ id }) => id));
297
+ Obj2.change(spacesOrder, (mutableOrder) => {
298
+ mutableOrder.order = nextOrder.map(({ id }) => id);
299
+ });
300
+ };
301
+ spaceRearrangeCache.set(space.id, onRearrange);
302
+ }
303
+ }
304
+ return {
305
+ id: space.id,
306
+ type: SPACE_TYPE,
307
+ cacheable: CACHEABLE_PROPS,
308
+ data: space,
309
+ properties: {
310
+ label: getSpaceDisplayName(space, {
311
+ personal,
312
+ namesCache
313
+ }),
314
+ description: space.state.get() === SpaceState2.SPACE_READY && space.properties.description,
315
+ hue: space.state.get() === SpaceState2.SPACE_READY && space.properties.hue,
316
+ icon: space.state.get() === SpaceState2.SPACE_READY && space.properties.icon ? `ph--${space.properties.icon}--regular` : void 0,
317
+ iconHue: space.state.get() === SpaceState2.SPACE_READY && space.properties.iconHue,
318
+ disabled: !navigable || space.state.get() !== SpaceState2.SPACE_READY || hasPendingMigration,
319
+ disposition: "workspace",
320
+ testId: "spacePlugin.space",
321
+ onRearrange,
322
+ canDrop: CAN_DROP_SPACE
323
+ },
324
+ nodes: [
325
+ {
326
+ id: "settings",
327
+ type: `${meta.id}.settings`,
328
+ data: null,
329
+ properties: {
330
+ label: SETTINGS_PANEL_LABEL,
331
+ icon: "ph--faders--regular",
332
+ disposition: "alternate-tree"
333
+ }
334
+ }
335
+ ]
336
+ };
337
+ };
338
+ var constructSpaceActions = ({ space, migrating }) => {
339
+ const state = space.state.get();
340
+ const hasPendingMigration = checkPendingMigration(space);
341
+ const isMigrating = migrating || Migrations2.running(space);
342
+ const cached = spaceActionsCache.get(space.id);
343
+ if (cached && cached.state === state && cached.hasPendingMigration === hasPendingMigration && cached.migrating === isMigrating) {
344
+ return cached.actions;
345
+ }
346
+ const actions = [];
347
+ if (hasPendingMigration) {
348
+ actions.push({
349
+ id: SpaceOperation.Migrate.meta.key,
350
+ type: Node.ActionGroupType,
351
+ data: () => Operation.invoke(SpaceOperation.Migrate, {
352
+ space
353
+ }),
354
+ properties: {
355
+ label: MIGRATE_SPACE_LABEL,
356
+ icon: "ph--database--regular",
357
+ disposition: "list-item-primary",
358
+ disabled: isMigrating
359
+ }
360
+ });
361
+ }
362
+ if (state === SpaceState2.SPACE_READY && !hasPendingMigration) {
363
+ actions.push({
364
+ id: SpaceOperation.OpenCreateObject.meta.key,
365
+ type: Node.ActionType,
366
+ data: () => Operation.invoke(SpaceOperation.OpenCreateObject, {
367
+ target: space.db
368
+ }),
369
+ properties: {
370
+ label: CREATE_OBJECT_IN_SPACE_LABEL,
371
+ icon: "ph--plus--regular",
372
+ disposition: "list-item-primary",
373
+ testId: "spacePlugin.createObject"
374
+ }
375
+ }, {
376
+ id: SpaceOperation.Rename.meta.key,
377
+ type: Node.ActionType,
378
+ data: (params) => Operation.invoke(SpaceOperation.Rename, {
379
+ space,
380
+ caller: `${params?.caller}:${params?.parent?.id}`
381
+ }),
382
+ properties: {
383
+ label: RENAME_SPACE_LABEL,
384
+ icon: "ph--pencil-simple-line--regular",
385
+ keyBinding: {
386
+ macos: "shift+F6",
387
+ windows: "shift+F6"
388
+ }
389
+ }
390
+ });
391
+ }
392
+ spaceActionsCache.set(space.id, {
393
+ state,
394
+ hasPendingMigration,
395
+ migrating: isMigrating,
396
+ actions
397
+ });
398
+ return actions;
399
+ };
400
+
401
+ // src/capabilities/app-graph-builder/extensions/types.ts
402
+ import * as Effect2 from "effect/Effect";
403
+ import * as Match from "effect/Match";
404
+ import * as Option2 from "effect/Option";
405
+ import * as Schema from "effect/Schema";
406
+ import { Capability as Capability2 } from "@dxos/app-framework";
407
+ import { AppCapabilities as AppCapabilities2, LayoutOperation, Segments } from "@dxos/app-toolkit";
408
+ import { SpaceState as SpaceState3, isSpace as isSpace2 } from "@dxos/client/echo";
409
+ import { Collection, Filter as Filter3, Obj as Obj3, Query, Type } from "@dxos/echo";
410
+ import { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from "@dxos/echo/internal";
411
+ import { AtomObj as AtomObj3, AtomQuery as AtomQuery3 } from "@dxos/echo-atom";
412
+ import { Operation as Operation2 } from "@dxos/operation";
413
+ import { ClientCapabilities as ClientCapabilities2 } from "@dxos/plugin-client";
414
+ import { CreateAtom as CreateAtom2, GraphBuilder as GraphBuilder2, Node as Node2 } from "@dxos/plugin-graph";
415
+ import { ViewAnnotation as ViewAnnotation2 } from "@dxos/schema";
416
+ import { createFilename, isNonNullable } from "@dxos/util";
417
+ var createTypeExtensions = Effect2.fnUntraced(function* () {
418
+ const capabilities = yield* Capability2.Service;
419
+ const resolve = (_get) => (typename) => capabilities.getAll(AppCapabilities2.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
420
+ return yield* Effect2.all([
421
+ // Types section virtual node under each space.
422
+ GraphBuilder2.createExtension({
423
+ id: `${meta.id}.types-section`,
424
+ match: whenSpace,
425
+ connector: (space, get) => {
426
+ const spaceState = get(CreateAtom2.fromObservable(space.state));
427
+ if (spaceState !== SpaceState3.SPACE_READY) {
428
+ return Effect2.succeed([]);
429
+ }
430
+ return Effect2.succeed([
431
+ {
432
+ id: Segments.types,
433
+ type: TYPES_SECTION_TYPE,
434
+ data: null,
435
+ properties: {
436
+ label: [
437
+ "types section label",
438
+ {
439
+ ns: meta.id
440
+ }
441
+ ],
442
+ icon: "ph--shapes--regular",
443
+ iconHue: "neutral",
444
+ role: "branch",
445
+ testId: "spacePlugin.typesSection",
446
+ draggable: false,
447
+ droppable: false,
448
+ space
449
+ }
450
+ }
451
+ ]);
452
+ }
453
+ }),
454
+ // Schema nodes under the Types virtual node.
455
+ GraphBuilder2.createExtension({
456
+ id: `${meta.id}.types`,
457
+ match: (node) => {
458
+ const space = isSpace2(node.properties.space) ? node.properties.space : void 0;
459
+ return node.type === TYPES_SECTION_TYPE && space ? Option2.some(space) : Option2.none();
460
+ },
461
+ connector: (space, get) => {
462
+ get(AtomQuery3.make(space.db, Filter3.type(Type.PersistentType)));
463
+ get(capabilities.atom(AppCapabilities2.Schema));
464
+ const allSchemas = space.db.schemaRegistry.query({
465
+ location: [
466
+ "runtime",
467
+ "database"
468
+ ]
469
+ }).runSync();
470
+ const userSchemas = allSchemas.filter((schema) => {
471
+ if (getTypeAnnotation(schema)?.kind === EntityKind.Relation) {
472
+ return false;
473
+ }
474
+ if (SystemTypeAnnotation.get(schema).pipe(Option2.getOrElse(() => false))) {
475
+ return false;
476
+ }
477
+ if (ViewAnnotation2.get(schema).pipe(Option2.getOrElse(() => false))) {
478
+ return false;
479
+ }
480
+ if (Type.getTypename(schema) === Collection.Collection.typename) {
481
+ return false;
482
+ }
483
+ return true;
484
+ });
485
+ const viewIndex = buildViewIndex(get, space, allSchemas);
486
+ const visibleSchemas = userSchemas.filter((schema) => {
487
+ if (Type.isMutable(schema)) {
488
+ return true;
489
+ }
490
+ const typename = Type.getTypename(schema);
491
+ const objects = get(AtomQuery3.make(space.db, Filter3.typename(typename)));
492
+ return objects.length > 0 || viewIndex.typenamesWithViews.has(typename);
493
+ });
494
+ return Effect2.succeed(visibleSchemas.map((schema) => createSchemaNode({
495
+ schema,
496
+ space,
497
+ resolve: resolve(get),
498
+ get
499
+ })));
500
+ }
501
+ }),
502
+ // {All} virtual node + view objects under each schema node.
503
+ GraphBuilder2.createExtension({
504
+ id: `${meta.id}.schema-children`,
505
+ match: (node) => {
506
+ const space = isSpace2(node.properties.space) ? node.properties.space : void 0;
507
+ return space && (Obj3.instanceOf(Type.PersistentType, node.data) || Schema.isSchema(node.data)) ? Option2.some({
508
+ space,
509
+ schema: node.data
510
+ }) : Option2.none();
511
+ },
512
+ connector: ({ space, schema }, get) => {
513
+ const client = get(capabilities.atom(ClientCapabilities2.Client)).at(0);
514
+ const schemas = client?.graph.schemaRegistry.query({
515
+ location: [
516
+ "runtime"
517
+ ]
518
+ }).runSync() ?? [];
519
+ const typename = Schema.isSchema(schema) ? Type.getTypename(schema) : schema.typename;
520
+ const allNode = {
521
+ id: "all",
522
+ type: TYPE_COLLECTION_TYPE,
523
+ data: {
524
+ space,
525
+ typename
526
+ },
527
+ properties: {
528
+ label: [
529
+ "type collection all label",
530
+ {
531
+ ns: meta.id
532
+ }
533
+ ],
534
+ icon: "ph--list--regular",
535
+ iconHue: "neutral",
536
+ role: "branch",
537
+ testId: `spacePlugin.typeCollectionAll.${typename}`,
538
+ selectable: false,
539
+ draggable: false,
540
+ droppable: false,
541
+ childrenDroppable: false,
542
+ blockInstruction: BLOCK_REORDER_ABOVE
543
+ }
544
+ };
545
+ const viewIndex = buildViewIndex(get, space, schemas);
546
+ const viewNodes = viewIndex.getViewsForTypename(typename).map((object) => createObjectNode({
547
+ db: space.db,
548
+ object,
549
+ resolve: resolve(get),
550
+ droppable: false
551
+ })).filter(isNonNullable);
552
+ return Effect2.succeed([
553
+ allNode,
554
+ ...viewNodes
555
+ ]);
556
+ }
557
+ }),
558
+ // Objects of the schema type under the {All} node.
559
+ GraphBuilder2.createExtension({
560
+ id: `${meta.id}.type-collection-objects`,
561
+ match: (node) => {
562
+ if (node.type !== TYPE_COLLECTION_TYPE || !node.data?.space || !node.data?.typename) {
563
+ return Option2.none();
564
+ }
565
+ return Option2.some({
566
+ space: node.data.space,
567
+ typename: node.data.typename
568
+ });
569
+ },
570
+ connector: ({ space, typename }, get) => {
571
+ const objects = get(AtomQuery3.make(space.db, Filter3.typename(typename)));
572
+ return Effect2.succeed(objects.map((object) => {
573
+ get(AtomObj3.make(object));
574
+ return createObjectNode({
575
+ db: space.db,
576
+ object,
577
+ resolve: resolve(get),
578
+ droppable: false
579
+ });
580
+ }).filter(isNonNullable));
581
+ }
582
+ }),
583
+ // Actions for schema nodes.
584
+ GraphBuilder2.createExtension({
585
+ id: `${meta.id}.schema-actions`,
586
+ match: (node) => {
587
+ const space = isSpace2(node.properties.space) ? node.properties.space : void 0;
588
+ return space && Schema.isSchema(node.data) ? Option2.some({
589
+ space,
590
+ schema: node.data
591
+ }) : Option2.none();
592
+ },
593
+ actions: ({ space, schema }, get) => {
594
+ const client = get(capabilities.atom(ClientCapabilities2.Client)).at(0);
595
+ const schemas = client?.graph.schemaRegistry.query({
596
+ location: [
597
+ "runtime"
598
+ ]
599
+ }).runSync() ?? [];
600
+ const targetTypename = Type.getTypename(schema);
601
+ const viewIndex = buildViewIndex(get, space, schemas);
602
+ const deletable = Type.isMutable(schema) && viewIndex.getViewsForTypename(targetTypename).length === 0;
603
+ return Effect2.succeed(createSchemaActions({
604
+ schema,
605
+ space,
606
+ deletable,
607
+ resolve: resolve(get)
608
+ }));
609
+ }
610
+ })
611
+ ]);
612
+ });
613
+ var createSchemaNode = ({ schema, space, resolve, get }) => {
614
+ const typename = Type.getTypename(schema);
615
+ const metadata = resolve(typename);
616
+ const { label, nodeId } = Match.value(schema).pipe(Match.when(Type.isMutable, (mutableSchema) => {
617
+ const persistentSchema = mutableSchema.persistentSchema;
618
+ const snapshot = get(AtomObj3.make(persistentSchema));
619
+ return {
620
+ label: snapshot.name || [
621
+ "object name placeholder",
622
+ {
623
+ ns: Type.PersistentType.typename
624
+ }
625
+ ],
626
+ nodeId: typename
627
+ };
628
+ }), Match.orElse(() => ({
629
+ label: getDynamicLabel("typename label", typename, {
630
+ count: 2,
631
+ default: typename
632
+ }),
633
+ nodeId: typename
634
+ })));
635
+ const icon = Type.isMutable(schema) ? "ph--cube--regular" : metadata.icon ?? "ph--placeholder--regular";
636
+ const iconHue = Type.isMutable(schema) ? "neutral" : metadata.iconHue;
637
+ return {
638
+ id: nodeId,
639
+ type: STATIC_SCHEMA_TYPE,
640
+ data: schema,
641
+ properties: {
642
+ label,
643
+ icon,
644
+ iconHue,
645
+ role: "branch",
646
+ testId: `spacePlugin.schemaNode.${typename}`,
647
+ selectable: false,
648
+ draggable: false,
649
+ droppable: false,
650
+ childrenDroppable: false,
651
+ space
652
+ }
653
+ };
654
+ };
655
+ var createSchemaActions = ({ schema, space, deletable, resolve }) => {
656
+ const typename = Type.getTypename(schema);
657
+ const metadata = resolve(typename);
658
+ const createObjectFn = metadata.createObject;
659
+ const inputSchema = metadata.inputSchema;
660
+ const actions = [
661
+ ...createObjectFn ? [
662
+ {
663
+ id: SpaceOperation.OpenCreateObject.meta.key,
664
+ type: Node2.ActionType,
665
+ data: Effect2.fnUntraced(function* () {
666
+ if (inputSchema) {
667
+ yield* Operation2.invoke(SpaceOperation.OpenCreateObject, {
668
+ target: space.db,
669
+ typename
670
+ });
671
+ } else {
672
+ const createdObject = yield* createObjectFn({}, {
673
+ db: space.db
674
+ });
675
+ const addResult = yield* Operation2.invoke(SpaceOperation.AddObject, {
676
+ target: space.db,
677
+ hidden: true,
678
+ object: createdObject
679
+ });
680
+ if (addResult.subject) {
681
+ yield* Operation2.invoke(LayoutOperation.Open, {
682
+ subject: addResult.subject
683
+ });
684
+ }
685
+ }
686
+ }),
687
+ properties: {
688
+ label: getDynamicLabel("add object label", typename),
689
+ icon: "ph--plus--regular",
690
+ disposition: "list-item-primary",
691
+ testId: "spacePlugin.createObject"
692
+ }
693
+ }
694
+ ] : [],
695
+ {
696
+ id: `${SpaceOperation.AddObject.meta.key}-view`,
697
+ type: Node2.ActionType,
698
+ data: () => Operation2.invoke(SpaceOperation.OpenCreateObject, {
699
+ target: space.db,
700
+ views: true,
701
+ initialFormValues: {
702
+ typename: Type.getTypename(schema)
703
+ }
704
+ }),
705
+ properties: {
706
+ label: ADD_VIEW_TO_SCHEMA_LABEL,
707
+ icon: "ph--circles-three-plus--regular",
708
+ disposition: "list-item",
709
+ testId: "spacePlugin.addViewToSchema"
710
+ }
711
+ },
712
+ {
713
+ id: SpaceOperation.RenameObject.meta.key,
714
+ type: Node2.ActionType,
715
+ data: (params) => Type.isMutable(schema) ? Operation2.invoke(SpaceOperation.RenameObject, {
716
+ object: schema.persistentSchema,
717
+ caller: `${params?.caller}:${params?.parent?.id}`
718
+ }) : Effect2.fail(new Error("Cannot rename immutable schema")),
719
+ properties: {
720
+ label: getDynamicLabel("rename object label", Type.getTypename(Type.PersistentType)),
721
+ icon: "ph--pencil-simple-line--regular",
722
+ disabled: !Type.isMutable(schema),
723
+ disposition: "list-item",
724
+ testId: "spacePlugin.renameObject"
725
+ }
726
+ },
727
+ {
728
+ id: SpaceOperation.RemoveObjects.meta.key,
729
+ type: Node2.ActionType,
730
+ data: () => Type.isMutable(schema) ? Operation2.invoke(SpaceOperation.RemoveObjects, {
731
+ objects: [
732
+ schema.persistentSchema
733
+ ]
734
+ }) : Effect2.succeed(void 0),
735
+ properties: {
736
+ label: getDynamicLabel("delete object label", Type.getTypename(Type.PersistentType)),
737
+ icon: "ph--trash--regular",
738
+ disposition: "list-item",
739
+ disabled: !deletable,
740
+ testId: "spacePlugin.deleteObject"
741
+ }
742
+ },
743
+ {
744
+ id: SpaceOperation.Snapshot.meta.key,
745
+ type: Node2.ActionType,
746
+ data: Effect2.fnUntraced(function* () {
747
+ const result = yield* Operation2.invoke(SpaceOperation.Snapshot, {
748
+ db: space.db,
749
+ query: Query.select(Filter3.type(schema)).ast
750
+ });
751
+ if (result.snapshot) {
752
+ yield* Effect2.tryPromise(() => downloadBlob(result.snapshot, createFilename({
753
+ parts: [
754
+ space.id,
755
+ Type.getTypename(schema)
756
+ ],
757
+ ext: "json"
758
+ })));
759
+ }
760
+ }),
761
+ properties: {
762
+ label: SNAPSHOT_BY_SCHEMA_LABEL,
763
+ icon: "ph--camera--regular",
764
+ disposition: "list-item"
765
+ }
766
+ }
767
+ ];
768
+ return actions;
769
+ };
770
+
771
+ // src/capabilities/app-graph-builder/extensions/collections.ts
772
+ import * as Effect3 from "effect/Effect";
773
+ import * as Option3 from "effect/Option";
774
+ import { Capabilities, Capability as Capability3 } from "@dxos/app-framework";
775
+ import { AppCapabilities as AppCapabilities3, LayoutOperation as LayoutOperation2, Segments as Segments2, getObjectPathFromObject } from "@dxos/app-toolkit";
776
+ import { SpaceState as SpaceState4, getSpace, isSpace as isSpace3 } from "@dxos/client/echo";
777
+ import { Collection as Collection2, Obj as Obj4, Type as Type2 } from "@dxos/echo";
778
+ import { AtomObj as AtomObj4 } from "@dxos/echo-atom";
779
+ import { invariant } from "@dxos/invariant";
780
+ import { Operation as Operation3 } from "@dxos/operation";
781
+ import { CreateAtom as CreateAtom3, Graph as Graph2, GraphBuilder as GraphBuilder3, Node as Node3 } from "@dxos/plugin-graph";
782
+ import { isNonNullable as isNonNullable2 } from "@dxos/util";
783
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-space/src/capabilities/app-graph-builder/extensions/collections.ts";
784
+ var createCollectionExtensions = Effect3.fnUntraced(function* ({ shareableLinkOrigin }) {
785
+ const capabilities = yield* Capability3.Service;
786
+ const resolve = (get) => (typename) => capabilities.getAll(AppCapabilities3.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
787
+ return yield* Effect3.all([
788
+ // Collections section virtual node under each space.
789
+ GraphBuilder3.createExtension({
790
+ id: `${meta.id}.collections-section`,
791
+ match: whenSpace,
792
+ connector: (space, get) => {
793
+ const spaceState = get(CreateAtom3.fromObservable(space.state));
794
+ if (spaceState !== SpaceState4.SPACE_READY) {
795
+ return Effect3.succeed([]);
796
+ }
797
+ const propertiesSnapshot = get(AtomObj4.make(space.properties));
798
+ const collectionRef = propertiesSnapshot[Collection2.Collection.typename];
799
+ if (collectionRef) {
800
+ get(AtomObj4.make(collectionRef));
801
+ }
802
+ const rootCollection = collectionRef?.target;
803
+ const collectionPartials = rootCollection ? getCollectionGraphNodePartials({
804
+ collection: rootCollection,
805
+ db: space.db,
806
+ resolve: resolve(get)
807
+ }) : void 0;
808
+ return Effect3.succeed([
809
+ {
810
+ id: Segments2.collections,
811
+ type: COLLECTIONS_SECTION_TYPE,
812
+ data: null,
813
+ properties: {
814
+ label: [
815
+ "collections section label",
816
+ {
817
+ ns: meta.id
818
+ }
819
+ ],
820
+ icon: "ph--folder--regular",
821
+ iconHue: "neutral",
822
+ role: "branch",
823
+ position: "hoist",
824
+ testId: "spacePlugin.collectionsSection",
825
+ draggable: false,
826
+ droppable: false,
827
+ space,
828
+ ...collectionPartials
829
+ }
830
+ }
831
+ ]);
832
+ }
833
+ }),
834
+ // Root collection objects under the Collections virtual node.
835
+ GraphBuilder3.createExtension({
836
+ id: `${meta.id}.collections`,
837
+ match: (node) => {
838
+ const space = isSpace3(node.properties.space) ? node.properties.space : void 0;
839
+ return node.type === COLLECTIONS_SECTION_TYPE && space ? Option3.some(space) : Option3.none();
840
+ },
841
+ connector: (space, get) => {
842
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
843
+ const ephemeralState = get(ephemeralAtom);
844
+ const propertiesSnapshot = get(AtomObj4.make(space.properties));
845
+ const collectionRef = propertiesSnapshot[Collection2.Collection.typename];
846
+ const collection = collectionRef ? get(AtomObj4.make(collectionRef)) : void 0;
847
+ if (!collection) {
848
+ return Effect3.succeed([]);
849
+ }
850
+ const rawRefs = collection.objects ?? [];
851
+ const objects = rawRefs.map((ref) => {
852
+ get(AtomObj4.make(ref));
853
+ return ref.target;
854
+ }).filter(isNonNullable2);
855
+ return Effect3.succeed(objects.map((object) => createObjectNode({
856
+ db: space.db,
857
+ object,
858
+ resolve: resolve(get),
859
+ navigable: ephemeralState.navigableCollections,
860
+ parentCollection: collectionRef?.target
861
+ })).filter(isNonNullable2));
862
+ }
863
+ }),
864
+ // Children of Collection.Collection nodes.
865
+ GraphBuilder3.createExtension({
866
+ id: `${meta.id}.objects`,
867
+ match: (node) => Obj4.instanceOf(Collection2.Collection, node.data) ? Option3.some(node.data) : Option3.none(),
868
+ connector: (collection, get) => {
869
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
870
+ const ephemeralState = get(ephemeralAtom);
871
+ const space = getSpace(collection);
872
+ const collectionSnapshot = get(AtomObj4.make(collection));
873
+ const refs = collectionSnapshot.objects ?? [];
874
+ const objects = refs.map((ref) => {
875
+ get(AtomObj4.make(ref));
876
+ return ref.target;
877
+ }).filter(isNonNullable2);
878
+ return Effect3.succeed(objects.map((object) => space && createObjectNode({
879
+ object,
880
+ db: space.db,
881
+ resolve: resolve(get),
882
+ navigable: ephemeralState.navigableCollections,
883
+ parentCollection: collection
884
+ })).filter(isNonNullable2));
885
+ }
886
+ }),
887
+ // Object actions.
888
+ GraphBuilder3.createExtension({
889
+ id: `${meta.id}.object-actions`,
890
+ match: (node) => {
891
+ const space = getSpace(node.data);
892
+ return space && Obj4.isObject(node.data) && Obj4.getTypename(node.data) === node.type ? Option3.some({
893
+ space,
894
+ object: node.data,
895
+ nodeId: node.id
896
+ }) : Option3.none();
897
+ },
898
+ actions: ({ space, object, nodeId }, get) => {
899
+ const deletable = !Obj4.instanceOf(Type2.PersistentType, object);
900
+ const [appGraph] = get(capabilities.atom(AppCapabilities3.AppGraph));
901
+ const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
902
+ const ephemeralState = get(ephemeralAtom);
903
+ if (!appGraph) {
904
+ return Effect3.succeed([]);
905
+ }
906
+ const parentId = nodeId.substring(0, nodeId.lastIndexOf("/"));
907
+ const parentNode = Option3.getOrUndefined(Graph2.getNode(appGraph.graph, parentId));
908
+ const parentCollection = parentNode && Obj4.instanceOf(Collection2.Collection, parentNode.data) ? parentNode.data : void 0;
909
+ return Effect3.succeed(constructObjectActions({
910
+ object,
911
+ nodeId,
912
+ resolve: resolve(get),
913
+ deletable,
914
+ navigable: ephemeralState.navigableCollections,
915
+ shareableLinkOrigin,
916
+ parentCollection
917
+ }));
918
+ }
919
+ })
920
+ ]);
921
+ });
922
+ var constructObjectActions = ({ object, nodeId, resolve, deletable = true, navigable = false, shareableLinkOrigin, parentCollection }) => {
923
+ const db = Obj4.getDatabase(object);
924
+ invariant(db, "Database not found", {
925
+ F: __dxlog_file,
926
+ L: 238,
927
+ S: void 0,
928
+ A: [
929
+ "db",
930
+ "'Database not found'"
931
+ ]
932
+ });
933
+ const typename = Obj4.getTypename(object);
934
+ invariant(typename, "Object has no typename", {
935
+ F: __dxlog_file,
936
+ L: 240,
937
+ S: void 0,
938
+ A: [
939
+ "typename",
940
+ "'Object has no typename'"
941
+ ]
942
+ });
943
+ const actions = [
944
+ ...Obj4.instanceOf(Collection2.Collection, object) ? [
945
+ {
946
+ id: SpaceOperation.OpenCreateObject.meta.key,
947
+ type: Node3.ActionType,
948
+ data: () => Operation3.invoke(SpaceOperation.OpenCreateObject, {
949
+ target: object,
950
+ targetNodeId: nodeId
951
+ }),
952
+ properties: {
953
+ label: CREATE_OBJECT_IN_COLLECTION_LABEL,
954
+ icon: "ph--plus--regular",
955
+ disposition: "list-item-primary",
956
+ testId: "spacePlugin.createObject"
957
+ }
958
+ }
959
+ ] : [],
960
+ {
961
+ id: SpaceOperation.RenameObject.meta.key,
962
+ type: Node3.ActionType,
963
+ data: (params) => Operation3.invoke(SpaceOperation.RenameObject, {
964
+ object,
965
+ caller: `${params?.caller}:${params?.parent?.id}`
966
+ }),
967
+ properties: {
968
+ label: getDynamicLabel("rename object label", typename, {
969
+ defaultValue: "Rename"
970
+ }),
971
+ icon: "ph--pencil-simple-line--regular",
972
+ disposition: "list-item",
973
+ testId: "spacePlugin.renameObject"
974
+ }
975
+ },
976
+ ...parentCollection && !Obj4.instanceOf(Collection2.Collection, object) ? [
977
+ {
978
+ id: "remove-from-collection",
979
+ type: Node3.ActionType,
980
+ data: () => Effect3.gen(function* () {
981
+ const index = parentCollection.objects.findIndex((ref) => ref.target === object);
982
+ if (index !== -1) {
983
+ const layout = yield* Capabilities.getAtomValue(AppCapabilities3.Layout);
984
+ const isActive = layout.active.includes(nodeId);
985
+ Obj4.change(parentCollection, (mutable) => {
986
+ mutable.objects.splice(index, 1);
987
+ });
988
+ if (isActive) {
989
+ yield* Operation3.invoke(LayoutOperation2.Open, {
990
+ subject: [
991
+ getObjectPathFromObject(object)
992
+ ]
993
+ });
994
+ }
995
+ }
996
+ }),
997
+ properties: {
998
+ label: REMOVE_FROM_COLLECTION_LABEL,
999
+ icon: "ph--minus-circle--regular",
1000
+ disposition: "list-item",
1001
+ testId: "spacePlugin.removeFromCollection"
1002
+ }
1003
+ }
1004
+ ] : [],
1005
+ {
1006
+ id: SpaceOperation.RemoveObjects.meta.key,
1007
+ type: Node3.ActionType,
1008
+ data: () => Operation3.invoke(SpaceOperation.RemoveObjects, {
1009
+ objects: [
1010
+ object
1011
+ ],
1012
+ target: parentCollection
1013
+ }),
1014
+ properties: {
1015
+ label: getDynamicLabel("delete object label", typename, {
1016
+ defaultValue: "Delete"
1017
+ }),
1018
+ icon: "ph--trash--regular",
1019
+ disposition: "list-item",
1020
+ disabled: !deletable,
1021
+ testId: "spacePlugin.deleteObject"
1022
+ }
1023
+ },
1024
+ ...navigable || !Obj4.instanceOf(Collection2.Collection, object) ? [
1025
+ {
1026
+ id: "copy-link",
1027
+ type: Node3.ActionType,
1028
+ data: () => Effect3.promise(async () => {
1029
+ const url = `${shareableLinkOrigin}/${db.spaceId}/${Obj4.getDXN(object).toString()}`;
1030
+ await navigator.clipboard.writeText(url);
1031
+ }),
1032
+ properties: {
1033
+ label: COPY_LINK_LABEL,
1034
+ icon: "ph--link--regular",
1035
+ disposition: "list-item",
1036
+ testId: "spacePlugin.copyLink"
1037
+ }
1038
+ }
1039
+ ] : [],
1040
+ {
1041
+ id: LayoutOperation2.Expose.meta.key,
1042
+ type: Node3.ActionType,
1043
+ data: () => Operation3.invoke(LayoutOperation2.Expose, {
1044
+ subject: getObjectPathFromObject(object)
1045
+ }),
1046
+ properties: {
1047
+ label: EXPOSE_OBJECT_LABEL,
1048
+ icon: "ph--eye--regular",
1049
+ disposition: "heading-list-item",
1050
+ testId: "spacePlugin.exposeObject"
1051
+ }
1052
+ }
1053
+ ];
1054
+ return actions;
1055
+ };
1056
+
1057
+ // src/capabilities/app-graph-builder/extensions/companions.ts
1058
+ import * as Effect4 from "effect/Effect";
1059
+ import * as Option4 from "effect/Option";
1060
+ import { COMPANION_PREFIX } from "@dxos/app-toolkit";
1061
+ import { Obj as Obj5 } from "@dxos/echo";
1062
+ import { PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
1063
+ import { GraphBuilder as GraphBuilder4, NodeMatcher as NodeMatcher2 } from "@dxos/plugin-graph";
1064
+ import { ViewAnnotation as ViewAnnotation3 } from "@dxos/schema";
1065
+ var createCompanionExtensions = Effect4.fnUntraced(function* () {
1066
+ return yield* Effect4.all([
1067
+ // Object settings plank companion.
1068
+ GraphBuilder4.createExtension({
1069
+ id: `${meta.id}.settings`,
1070
+ match: NodeMatcher2.whenEchoObjectMatches,
1071
+ connector: (node) => Effect4.succeed([
1072
+ {
1073
+ id: `${COMPANION_PREFIX}settings`,
1074
+ type: PLANK_COMPANION_TYPE,
1075
+ data: "settings",
1076
+ properties: {
1077
+ label: [
1078
+ "object settings label",
1079
+ {
1080
+ ns: meta.id
1081
+ }
1082
+ ],
1083
+ icon: "ph--sliders--regular",
1084
+ disposition: "hidden",
1085
+ position: "fallback"
1086
+ }
1087
+ }
1088
+ ])
1089
+ }),
1090
+ // View selected objects companion.
1091
+ GraphBuilder4.createExtension({
1092
+ id: `${meta.id}.selected-objects`,
1093
+ match: (node) => {
1094
+ if (!Obj5.isObject(node.data)) {
1095
+ return Option4.none();
1096
+ }
1097
+ const schema = Obj5.getSchema(node.data);
1098
+ const isView = Option4.fromNullable(schema).pipe(Option4.flatMap((candidate) => ViewAnnotation3.get(candidate)), Option4.getOrElse(() => false));
1099
+ if (!isView) {
1100
+ return Option4.none();
1101
+ }
1102
+ return Option4.some(node);
1103
+ },
1104
+ connector: (node) => Effect4.succeed([
1105
+ {
1106
+ id: `${COMPANION_PREFIX}selected-objects`,
1107
+ type: PLANK_COMPANION_TYPE,
1108
+ data: "selected-objects",
1109
+ properties: {
1110
+ label: [
1111
+ "companion selected objects label",
1112
+ {
1113
+ ns: meta.id
1114
+ }
1115
+ ],
1116
+ icon: "ph--tree-view--regular",
1117
+ disposition: "hidden"
1118
+ }
1119
+ }
1120
+ ])
1121
+ })
1122
+ ]);
1123
+ });
1124
+
1125
+ // src/capabilities/app-graph-builder/extensions/settings.ts
1126
+ import * as Effect5 from "effect/Effect";
1127
+ import { GraphBuilder as GraphBuilder5, NodeMatcher as NodeMatcher3 } from "@dxos/plugin-graph";
1128
+ var createSettingsExtensions = Effect5.fnUntraced(function* () {
1129
+ const extension = yield* GraphBuilder5.createExtension({
1130
+ id: `${meta.id}.settings-sections`,
1131
+ match: NodeMatcher3.whenNodeType(`${meta.id}.settings`),
1132
+ connector: (node) => Effect5.succeed([
1133
+ {
1134
+ id: `${meta.id}.general`,
1135
+ type: `${meta.id}.general`,
1136
+ data: `${meta.id}.general`,
1137
+ properties: {
1138
+ label: [
1139
+ "space settings properties label",
1140
+ {
1141
+ ns: meta.id
1142
+ }
1143
+ ],
1144
+ icon: "ph--sliders--regular",
1145
+ position: "hoist",
1146
+ testId: "spacePlugin.general"
1147
+ }
1148
+ },
1149
+ {
1150
+ id: `${meta.id}.members`,
1151
+ type: `${meta.id}.members`,
1152
+ data: `${meta.id}.members`,
1153
+ properties: {
1154
+ label: [
1155
+ "members panel label",
1156
+ {
1157
+ ns: meta.id
1158
+ }
1159
+ ],
1160
+ icon: "ph--users--regular",
1161
+ position: "hoist",
1162
+ testId: "spacePlugin.members"
1163
+ }
1164
+ },
1165
+ {
1166
+ id: `${meta.id}.schema`,
1167
+ type: `${meta.id}.schema`,
1168
+ data: `${meta.id}.schema`,
1169
+ properties: {
1170
+ label: [
1171
+ "space settings schema label",
1172
+ {
1173
+ ns: meta.id
1174
+ }
1175
+ ],
1176
+ icon: "ph--shapes--regular",
1177
+ testId: "spacePlugin.schema"
1178
+ }
1179
+ }
1180
+ ])
1181
+ });
1182
+ return [
1183
+ extension
1184
+ ];
1185
+ });
1186
+
1187
+ // src/capabilities/app-graph-builder/app-graph-builder.ts
1188
+ var app_graph_builder_default = Capability4.makeModule(Effect6.fnUntraced(function* ({ shareableLinkOrigin = window.location.origin } = {}) {
1189
+ const extensions = yield* Effect6.all([
1190
+ createSpaceExtensions(),
1191
+ createTypeExtensions(),
1192
+ createCollectionExtensions({
1193
+ shareableLinkOrigin
1194
+ }),
1195
+ createCompanionExtensions(),
1196
+ createSettingsExtensions()
1197
+ ]);
1198
+ return Capability4.contributes(AppCapabilities4.AppGraphBuilder, extensions.flat());
1199
+ }));
1200
+ export {
1201
+ app_graph_builder_default as default
1202
+ };
1203
+ //# sourceMappingURL=app-graph-builder-JORZZE3P.mjs.map