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