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

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 (785) hide show
  1. package/dist/lib/browser/CollectionArticle-WASDM637.mjs +142 -0
  2. package/dist/lib/browser/CollectionArticle-WASDM637.mjs.map +7 -0
  3. package/dist/lib/browser/CollectionSection-LK4O6QDD.mjs +23 -0
  4. package/dist/lib/browser/CollectionSection-LK4O6QDD.mjs.map +7 -0
  5. package/dist/lib/browser/CreateObjectDialog-MA6DPYMD.mjs +146 -0
  6. package/dist/lib/browser/CreateObjectDialog-MA6DPYMD.mjs.map +7 -0
  7. package/dist/lib/browser/CreateSpaceDialog-WCEICWIE.mjs +64 -0
  8. package/dist/lib/browser/CreateSpaceDialog-WCEICWIE.mjs.map +7 -0
  9. package/dist/lib/browser/InlineSyncStatus-BT7BRBCO.mjs +62 -0
  10. package/dist/lib/browser/InlineSyncStatus-BT7BRBCO.mjs.map +7 -0
  11. package/dist/lib/browser/JoinDialog-PMCAIRCU.mjs +117 -0
  12. package/dist/lib/browser/JoinDialog-PMCAIRCU.mjs.map +7 -0
  13. package/dist/lib/browser/MembersContainer-MMFCXLVZ.mjs +257 -0
  14. package/dist/lib/browser/MembersContainer-MMFCXLVZ.mjs.map +7 -0
  15. package/dist/lib/browser/MenuFooter-HYBTNOBT.mjs +38 -0
  16. package/dist/lib/browser/MenuFooter-HYBTNOBT.mjs.map +7 -0
  17. package/dist/lib/browser/ObjectCardStack-CHWNLUYQ.mjs +64 -0
  18. package/dist/lib/browser/ObjectCardStack-CHWNLUYQ.mjs.map +7 -0
  19. package/dist/lib/browser/ObjectDetails-YUGVDNSA.mjs +43 -0
  20. package/dist/lib/browser/ObjectDetails-YUGVDNSA.mjs.map +7 -0
  21. package/dist/lib/browser/ObjectRenamePopover-RQUOVPFH.mjs +70 -0
  22. package/dist/lib/browser/ObjectRenamePopover-RQUOVPFH.mjs.map +7 -0
  23. package/dist/lib/browser/RecordArticle-ONWKYM3Z.mjs +112 -0
  24. package/dist/lib/browser/RecordArticle-ONWKYM3Z.mjs.map +7 -0
  25. package/dist/lib/browser/SchemaContainer-62AJXKAF.mjs +49 -0
  26. package/dist/lib/browser/SchemaContainer-62AJXKAF.mjs.map +7 -0
  27. package/dist/lib/browser/SmallPresenceLive-LZD2NGKK.mjs +10 -0
  28. package/dist/lib/browser/SmallPresenceLive-LZD2NGKK.mjs.map +7 -0
  29. package/dist/lib/browser/SpacePluginSettings-BRJTADV5.mjs +59 -0
  30. package/dist/lib/browser/SpacePluginSettings-BRJTADV5.mjs.map +7 -0
  31. package/dist/lib/browser/SpacePresence-MLU576L6.mjs +13 -0
  32. package/dist/lib/browser/SpacePresence-MLU576L6.mjs.map +7 -0
  33. package/dist/lib/browser/SpaceRenamePopover-SAKMPDLX.mjs +62 -0
  34. package/dist/lib/browser/SpaceRenamePopover-SAKMPDLX.mjs.map +7 -0
  35. package/dist/lib/browser/SpaceSettingsContainer-UBMVKUPR.mjs +242 -0
  36. package/dist/lib/browser/SpaceSettingsContainer-UBMVKUPR.mjs.map +7 -0
  37. package/dist/lib/browser/SyncStatus-5UQ7CIII.mjs +141 -0
  38. package/dist/lib/browser/SyncStatus-5UQ7CIII.mjs.map +7 -0
  39. package/dist/lib/browser/ViewEditor-F74RR542.mjs +116 -0
  40. package/dist/lib/browser/ViewEditor-F74RR542.mjs.map +7 -0
  41. package/dist/lib/browser/app-graph-builder-VFYFI7CD.mjs +593 -0
  42. package/dist/lib/browser/app-graph-builder-VFYFI7CD.mjs.map +7 -0
  43. package/dist/lib/browser/app-graph-serializer-KTQOBYUF.mjs +85 -0
  44. package/dist/lib/browser/app-graph-serializer-KTQOBYUF.mjs.map +7 -0
  45. package/dist/lib/browser/chunk-ABCDB5YC.mjs +177 -0
  46. package/dist/lib/browser/chunk-ABCDB5YC.mjs.map +7 -0
  47. package/dist/lib/browser/chunk-ASV6DYFH.mjs +19 -0
  48. package/dist/lib/browser/chunk-ASV6DYFH.mjs.map +7 -0
  49. package/dist/lib/browser/chunk-HSMQFM57.mjs +16 -0
  50. package/dist/lib/browser/chunk-HSMQFM57.mjs.map +7 -0
  51. package/dist/lib/browser/chunk-J5F4LUJD.mjs +13 -0
  52. package/dist/lib/browser/chunk-J5F4LUJD.mjs.map +7 -0
  53. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-PXVKN4LU.mjs} +70 -62
  54. package/dist/lib/browser/chunk-PXVKN4LU.mjs.map +7 -0
  55. package/dist/lib/browser/chunk-RWOK4F4G.mjs +576 -0
  56. package/dist/lib/browser/chunk-RWOK4F4G.mjs.map +7 -0
  57. package/dist/lib/browser/chunk-SJCNERZI.mjs +115 -0
  58. package/dist/lib/browser/chunk-SJCNERZI.mjs.map +7 -0
  59. package/dist/lib/browser/chunk-TPZUQ5DC.mjs +749 -0
  60. package/dist/lib/browser/chunk-TPZUQ5DC.mjs.map +7 -0
  61. package/dist/lib/browser/chunk-USN5QKRV.mjs +715 -0
  62. package/dist/lib/browser/chunk-USN5QKRV.mjs.map +7 -0
  63. package/dist/lib/browser/chunk-XIIYC7P5.mjs +118 -0
  64. package/dist/lib/browser/chunk-XIIYC7P5.mjs.map +7 -0
  65. package/dist/lib/browser/cli/index.mjs +852 -0
  66. package/dist/lib/browser/cli/index.mjs.map +7 -0
  67. package/dist/lib/browser/identity-created-VKLIZOXJ.mjs +23 -0
  68. package/dist/lib/browser/identity-created-VKLIZOXJ.mjs.map +7 -0
  69. package/dist/lib/browser/index.mjs +241 -303
  70. package/dist/lib/browser/index.mjs.map +4 -4
  71. package/dist/lib/browser/meta.json +1 -1
  72. package/dist/lib/browser/operation-resolver-Y3HYRXX7.mjs +831 -0
  73. package/dist/lib/browser/operation-resolver-Y3HYRXX7.mjs.map +7 -0
  74. package/dist/lib/browser/react-root-UYBW5RE7.mjs +30 -0
  75. package/dist/lib/browser/react-root-UYBW5RE7.mjs.map +7 -0
  76. package/dist/lib/browser/react-surface-NJ23NZFF.mjs +386 -0
  77. package/dist/lib/browser/react-surface-NJ23NZFF.mjs.map +7 -0
  78. package/dist/lib/browser/repair-N2I4DR2Z.mjs +50 -0
  79. package/dist/lib/browser/repair-N2I4DR2Z.mjs.map +7 -0
  80. package/dist/lib/browser/settings-2ELVUFDR.mjs +34 -0
  81. package/dist/lib/browser/settings-2ELVUFDR.mjs.map +7 -0
  82. package/dist/lib/browser/spaces-ready-Q6JASPT4.mjs +243 -0
  83. package/dist/lib/browser/spaces-ready-Q6JASPT4.mjs.map +7 -0
  84. package/dist/lib/browser/state-CTX4WQOM.mjs +58 -0
  85. package/dist/lib/browser/state-CTX4WQOM.mjs.map +7 -0
  86. package/dist/lib/browser/types/index.mjs +18 -10
  87. package/dist/lib/node-esm/CollectionArticle-A6GGG73Z.mjs +143 -0
  88. package/dist/lib/node-esm/CollectionArticle-A6GGG73Z.mjs.map +7 -0
  89. package/dist/lib/node-esm/CollectionSection-WWKDOAAT.mjs +24 -0
  90. package/dist/lib/node-esm/CollectionSection-WWKDOAAT.mjs.map +7 -0
  91. package/dist/lib/node-esm/CreateObjectDialog-4WEFNDDF.mjs +147 -0
  92. package/dist/lib/node-esm/CreateObjectDialog-4WEFNDDF.mjs.map +7 -0
  93. package/dist/lib/node-esm/CreateSpaceDialog-P7QCPB5J.mjs +65 -0
  94. package/dist/lib/node-esm/CreateSpaceDialog-P7QCPB5J.mjs.map +7 -0
  95. package/dist/lib/node-esm/InlineSyncStatus-3PCXU7NX.mjs +63 -0
  96. package/dist/lib/node-esm/InlineSyncStatus-3PCXU7NX.mjs.map +7 -0
  97. package/dist/lib/node-esm/JoinDialog-XEOLJZVN.mjs +118 -0
  98. package/dist/lib/node-esm/JoinDialog-XEOLJZVN.mjs.map +7 -0
  99. package/dist/lib/node-esm/MembersContainer-UQZLW3YA.mjs +258 -0
  100. package/dist/lib/node-esm/MembersContainer-UQZLW3YA.mjs.map +7 -0
  101. package/dist/lib/node-esm/MenuFooter-2QB3453Y.mjs +39 -0
  102. package/dist/lib/node-esm/MenuFooter-2QB3453Y.mjs.map +7 -0
  103. package/dist/lib/node-esm/ObjectCardStack-UXEWG6RV.mjs +65 -0
  104. package/dist/lib/node-esm/ObjectCardStack-UXEWG6RV.mjs.map +7 -0
  105. package/dist/lib/node-esm/ObjectDetails-26PVHUQL.mjs +44 -0
  106. package/dist/lib/node-esm/ObjectDetails-26PVHUQL.mjs.map +7 -0
  107. package/dist/lib/node-esm/ObjectRenamePopover-EHTP76G7.mjs +71 -0
  108. package/dist/lib/node-esm/ObjectRenamePopover-EHTP76G7.mjs.map +7 -0
  109. package/dist/lib/node-esm/RecordArticle-APY2WKUW.mjs +113 -0
  110. package/dist/lib/node-esm/RecordArticle-APY2WKUW.mjs.map +7 -0
  111. package/dist/lib/node-esm/SchemaContainer-XR2D6MYX.mjs +50 -0
  112. package/dist/lib/node-esm/SchemaContainer-XR2D6MYX.mjs.map +7 -0
  113. package/dist/lib/node-esm/SmallPresenceLive-K4243KXR.mjs +11 -0
  114. package/dist/lib/node-esm/SmallPresenceLive-K4243KXR.mjs.map +7 -0
  115. package/dist/lib/node-esm/SpacePluginSettings-VEB5IGG7.mjs +60 -0
  116. package/dist/lib/node-esm/SpacePluginSettings-VEB5IGG7.mjs.map +7 -0
  117. package/dist/lib/node-esm/SpacePresence-HC2XGQ54.mjs +14 -0
  118. package/dist/lib/node-esm/SpacePresence-HC2XGQ54.mjs.map +7 -0
  119. package/dist/lib/node-esm/SpaceRenamePopover-WHM632OT.mjs +63 -0
  120. package/dist/lib/node-esm/SpaceRenamePopover-WHM632OT.mjs.map +7 -0
  121. package/dist/lib/node-esm/SpaceSettingsContainer-Y62J2L65.mjs +243 -0
  122. package/dist/lib/node-esm/SpaceSettingsContainer-Y62J2L65.mjs.map +7 -0
  123. package/dist/lib/node-esm/SyncStatus-XTJAVHPN.mjs +142 -0
  124. package/dist/lib/node-esm/SyncStatus-XTJAVHPN.mjs.map +7 -0
  125. package/dist/lib/node-esm/ViewEditor-B2BLYF5U.mjs +117 -0
  126. package/dist/lib/node-esm/ViewEditor-B2BLYF5U.mjs.map +7 -0
  127. package/dist/lib/node-esm/app-graph-builder-N37ED6UI.mjs +594 -0
  128. package/dist/lib/node-esm/app-graph-builder-N37ED6UI.mjs.map +7 -0
  129. package/dist/lib/node-esm/app-graph-serializer-GXQYSQAZ.mjs +86 -0
  130. package/dist/lib/node-esm/app-graph-serializer-GXQYSQAZ.mjs.map +7 -0
  131. package/dist/lib/node-esm/chunk-3DWZCVVQ.mjs +716 -0
  132. package/dist/lib/node-esm/chunk-3DWZCVVQ.mjs.map +7 -0
  133. package/dist/lib/node-esm/chunk-CVXULIYC.mjs +20 -0
  134. package/dist/lib/node-esm/chunk-CVXULIYC.mjs.map +7 -0
  135. package/dist/lib/node-esm/chunk-GWUPFA7J.mjs +577 -0
  136. package/dist/lib/node-esm/chunk-GWUPFA7J.mjs.map +7 -0
  137. package/dist/lib/node-esm/chunk-IV7VKVGC.mjs +117 -0
  138. package/dist/lib/node-esm/chunk-IV7VKVGC.mjs.map +7 -0
  139. package/dist/lib/node-esm/chunk-OSFH2XKO.mjs +119 -0
  140. package/dist/lib/node-esm/chunk-OSFH2XKO.mjs.map +7 -0
  141. package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-P2AVANDG.mjs} +70 -62
  142. package/dist/lib/node-esm/chunk-P2AVANDG.mjs.map +7 -0
  143. package/dist/lib/node-esm/chunk-S2IELCDF.mjs +15 -0
  144. package/dist/lib/node-esm/chunk-S2IELCDF.mjs.map +7 -0
  145. package/dist/lib/node-esm/chunk-SL4BJSUG.mjs +18 -0
  146. package/dist/lib/node-esm/chunk-SL4BJSUG.mjs.map +7 -0
  147. package/dist/lib/node-esm/chunk-UJQUBDQS.mjs +178 -0
  148. package/dist/lib/node-esm/chunk-UJQUBDQS.mjs.map +7 -0
  149. package/dist/lib/node-esm/chunk-WW6YYBRG.mjs +750 -0
  150. package/dist/lib/node-esm/chunk-WW6YYBRG.mjs.map +7 -0
  151. package/dist/lib/node-esm/cli/index.mjs +853 -0
  152. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  153. package/dist/lib/node-esm/identity-created-EGSTETJ5.mjs +25 -0
  154. package/dist/lib/node-esm/identity-created-EGSTETJ5.mjs.map +7 -0
  155. package/dist/lib/node-esm/index.mjs +241 -303
  156. package/dist/lib/node-esm/index.mjs.map +4 -4
  157. package/dist/lib/node-esm/meta.json +1 -1
  158. package/dist/lib/node-esm/operation-resolver-IRQ2NVUQ.mjs +832 -0
  159. package/dist/lib/node-esm/operation-resolver-IRQ2NVUQ.mjs.map +7 -0
  160. package/dist/lib/node-esm/react-root-UEN3LLJD.mjs +31 -0
  161. package/dist/lib/node-esm/react-root-UEN3LLJD.mjs.map +7 -0
  162. package/dist/lib/node-esm/react-surface-UDO3PGH6.mjs +387 -0
  163. package/dist/lib/node-esm/react-surface-UDO3PGH6.mjs.map +7 -0
  164. package/dist/lib/node-esm/repair-P6ND7ZRU.mjs +51 -0
  165. package/dist/lib/node-esm/repair-P6ND7ZRU.mjs.map +7 -0
  166. package/dist/lib/node-esm/settings-DCTVM2BV.mjs +35 -0
  167. package/dist/lib/node-esm/settings-DCTVM2BV.mjs.map +7 -0
  168. package/dist/lib/node-esm/spaces-ready-XLGRTJV2.mjs +244 -0
  169. package/dist/lib/node-esm/spaces-ready-XLGRTJV2.mjs.map +7 -0
  170. package/dist/lib/node-esm/state-G74V3WZG.mjs +59 -0
  171. package/dist/lib/node-esm/state-G74V3WZG.mjs.map +7 -0
  172. package/dist/lib/node-esm/types/index.mjs +18 -10
  173. package/dist/types/src/SpacePlugin.d.ts +3 -15
  174. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  175. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +7 -0
  176. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  177. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  178. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  179. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  180. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  181. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  182. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  183. package/dist/types/src/capabilities/identity-created/identity-created.d.ts +5 -0
  184. package/dist/types/src/capabilities/identity-created/identity-created.d.ts.map +1 -0
  185. package/dist/types/src/capabilities/identity-created/index.d.ts +3 -0
  186. package/dist/types/src/capabilities/identity-created/index.d.ts.map +1 -0
  187. package/dist/types/src/capabilities/index.d.ts +10 -21
  188. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  189. package/dist/types/src/capabilities/operation-resolver/index.d.ts +6 -0
  190. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  191. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +9 -0
  192. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  193. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  194. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  195. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  196. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  197. package/dist/types/src/capabilities/react-surface/index.d.ts +5 -0
  198. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  199. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +8 -0
  200. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  201. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  202. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  203. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  204. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  205. package/dist/types/src/capabilities/settings/index.d.ts +7 -0
  206. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  207. package/dist/types/src/capabilities/settings/settings.d.ts +10 -0
  208. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  209. package/dist/types/src/capabilities/spaces-ready/index.d.ts +3 -0
  210. package/dist/types/src/capabilities/spaces-ready/index.d.ts.map +1 -0
  211. package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts +5 -0
  212. package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts.map +1 -0
  213. package/dist/types/src/capabilities/state/index.d.ts +13 -0
  214. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  215. package/dist/types/src/capabilities/state/state.d.ts +17 -0
  216. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  217. package/dist/types/src/cli/commands/database/add.d.ts +17 -0
  218. package/dist/types/src/cli/commands/database/add.d.ts.map +1 -0
  219. package/dist/types/src/cli/commands/database/index.d.ts +3 -0
  220. package/dist/types/src/cli/commands/database/index.d.ts.map +1 -0
  221. package/dist/types/src/cli/commands/database/query/index.d.ts +2 -0
  222. package/dist/types/src/cli/commands/database/query/index.d.ts.map +1 -0
  223. package/dist/types/src/cli/commands/database/query/query.d.ts +13 -0
  224. package/dist/types/src/cli/commands/database/query/query.d.ts.map +1 -0
  225. package/dist/types/src/cli/commands/database/query/query.test.d.ts +2 -0
  226. package/dist/types/src/cli/commands/database/query/query.test.d.ts.map +1 -0
  227. package/dist/types/src/cli/commands/database/remove.d.ts +9 -0
  228. package/dist/types/src/cli/commands/database/remove.d.ts.map +1 -0
  229. package/dist/types/src/cli/commands/database/stats.d.ts +6 -0
  230. package/dist/types/src/cli/commands/database/stats.d.ts.map +1 -0
  231. package/dist/types/src/cli/commands/database/util.d.ts +14 -0
  232. package/dist/types/src/cli/commands/database/util.d.ts.map +1 -0
  233. package/dist/types/src/cli/commands/index.d.ts +4 -0
  234. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  235. package/dist/types/src/cli/commands/queue/index.d.ts +7 -0
  236. package/dist/types/src/cli/commands/queue/index.d.ts.map +1 -0
  237. package/dist/types/src/cli/commands/queue/query.d.ts +8 -0
  238. package/dist/types/src/cli/commands/queue/query.d.ts.map +1 -0
  239. package/dist/types/src/cli/commands/queue/util.d.ts +6 -0
  240. package/dist/types/src/cli/commands/queue/util.d.ts.map +1 -0
  241. package/dist/types/src/cli/commands/space/close/close.d.ts +12 -0
  242. package/dist/types/src/cli/commands/space/close/close.d.ts.map +1 -0
  243. package/dist/types/src/cli/commands/space/close/index.d.ts +2 -0
  244. package/dist/types/src/cli/commands/space/close/index.d.ts.map +1 -0
  245. package/dist/types/src/cli/commands/space/create/create.d.ts +12 -0
  246. package/dist/types/src/cli/commands/space/create/create.d.ts.map +1 -0
  247. package/dist/types/src/cli/commands/space/create/create.test.d.ts +2 -0
  248. package/dist/types/src/cli/commands/space/create/create.test.d.ts.map +1 -0
  249. package/dist/types/src/cli/commands/space/create/index.d.ts +2 -0
  250. package/dist/types/src/cli/commands/space/create/index.d.ts.map +1 -0
  251. package/dist/types/src/cli/commands/space/index.d.ts +31 -0
  252. package/dist/types/src/cli/commands/space/index.d.ts.map +1 -0
  253. package/dist/types/src/cli/commands/space/info/index.d.ts +2 -0
  254. package/dist/types/src/cli/commands/space/info/index.d.ts.map +1 -0
  255. package/dist/types/src/cli/commands/space/info/info.d.ts +13 -0
  256. package/dist/types/src/cli/commands/space/info/info.d.ts.map +1 -0
  257. package/dist/types/src/cli/commands/space/info/info.test.d.ts +2 -0
  258. package/dist/types/src/cli/commands/space/info/info.test.d.ts.map +1 -0
  259. package/dist/types/src/cli/commands/space/join/index.d.ts +2 -0
  260. package/dist/types/src/cli/commands/space/join/index.d.ts.map +1 -0
  261. package/dist/types/src/cli/commands/space/join/join.d.ts +14 -0
  262. package/dist/types/src/cli/commands/space/join/join.d.ts.map +1 -0
  263. package/dist/types/src/cli/commands/space/join/util.d.ts +17 -0
  264. package/dist/types/src/cli/commands/space/join/util.d.ts.map +1 -0
  265. package/dist/types/src/cli/commands/space/list/index.d.ts +2 -0
  266. package/dist/types/src/cli/commands/space/list/index.d.ts.map +1 -0
  267. package/dist/types/src/cli/commands/space/list/list.d.ts +7 -0
  268. package/dist/types/src/cli/commands/space/list/list.d.ts.map +1 -0
  269. package/dist/types/src/cli/commands/space/list/list.test.d.ts +2 -0
  270. package/dist/types/src/cli/commands/space/list/list.test.d.ts.map +1 -0
  271. package/dist/types/src/cli/commands/space/members/index.d.ts +2 -0
  272. package/dist/types/src/cli/commands/space/members/index.d.ts.map +1 -0
  273. package/dist/types/src/cli/commands/space/members/members.d.ts +13 -0
  274. package/dist/types/src/cli/commands/space/members/members.d.ts.map +1 -0
  275. package/dist/types/src/cli/commands/space/members/members.test.d.ts +2 -0
  276. package/dist/types/src/cli/commands/space/members/members.test.d.ts.map +1 -0
  277. package/dist/types/src/cli/commands/space/members/util.d.ts +9 -0
  278. package/dist/types/src/cli/commands/space/members/util.d.ts.map +1 -0
  279. package/dist/types/src/cli/commands/space/open/index.d.ts +2 -0
  280. package/dist/types/src/cli/commands/space/open/index.d.ts.map +1 -0
  281. package/dist/types/src/cli/commands/space/open/open.d.ts +12 -0
  282. package/dist/types/src/cli/commands/space/open/open.d.ts.map +1 -0
  283. package/dist/types/src/cli/commands/space/schema/index.d.ts +8 -0
  284. package/dist/types/src/cli/commands/space/schema/index.d.ts.map +1 -0
  285. package/dist/types/src/cli/commands/space/schema/list/index.d.ts +2 -0
  286. package/dist/types/src/cli/commands/space/schema/list/index.d.ts.map +1 -0
  287. package/dist/types/src/cli/commands/space/schema/list/list.d.ts +15 -0
  288. package/dist/types/src/cli/commands/space/schema/list/list.d.ts.map +1 -0
  289. package/dist/types/src/cli/commands/space/schema/list/list.test.d.ts +2 -0
  290. package/dist/types/src/cli/commands/space/schema/list/list.test.d.ts.map +1 -0
  291. package/dist/types/src/cli/commands/space/schema/list/util.d.ts +15 -0
  292. package/dist/types/src/cli/commands/space/schema/list/util.d.ts.map +1 -0
  293. package/dist/types/src/cli/commands/space/share/index.d.ts +2 -0
  294. package/dist/types/src/cli/commands/space/share/index.d.ts.map +1 -0
  295. package/dist/types/src/cli/commands/space/share/share.d.ts +19 -0
  296. package/dist/types/src/cli/commands/space/share/share.d.ts.map +1 -0
  297. package/dist/types/src/cli/commands/space/sync/index.d.ts +2 -0
  298. package/dist/types/src/cli/commands/space/sync/index.d.ts.map +1 -0
  299. package/dist/types/src/cli/commands/space/sync/sync.d.ts +6 -0
  300. package/dist/types/src/cli/commands/space/sync/sync.d.ts.map +1 -0
  301. package/dist/types/src/cli/commands/space/sync/sync.test.d.ts +2 -0
  302. package/dist/types/src/cli/commands/space/sync/sync.test.d.ts.map +1 -0
  303. package/dist/types/src/cli/index.d.ts +2 -0
  304. package/dist/types/src/cli/index.d.ts.map +1 -0
  305. package/dist/types/src/cli/plugin.d.ts +4 -0
  306. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  307. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  308. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +28 -10
  309. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  310. package/dist/types/src/components/CreateDialog/index.d.ts +1 -2
  311. package/dist/types/src/components/CreateDialog/index.d.ts.map +1 -1
  312. package/dist/types/src/components/{ObjectSettings → ObjectDetails}/BaseObjectSettings.d.ts +3 -3
  313. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.d.ts.map +1 -0
  314. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts +1433 -0
  315. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts.map +1 -0
  316. package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts +8 -0
  317. package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts.map +1 -0
  318. package/dist/types/src/components/ObjectDetails/index.d.ts +3 -0
  319. package/dist/types/src/components/ObjectDetails/index.d.ts.map +1 -0
  320. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts +9 -0
  321. package/dist/types/src/components/ObjectForm/ObjectForm.d.ts.map +1 -0
  322. package/dist/types/src/components/ObjectForm/index.d.ts +2 -0
  323. package/dist/types/src/components/ObjectForm/index.d.ts.map +1 -0
  324. package/dist/types/src/components/SyncStatus/index.d.ts +2 -2
  325. package/dist/types/src/components/SyncStatus/index.d.ts.map +1 -1
  326. package/dist/types/src/components/index.d.ts +2 -20
  327. package/dist/types/src/components/index.d.ts.map +1 -1
  328. package/dist/types/src/constants.d.ts +6 -0
  329. package/dist/types/src/constants.d.ts.map +1 -0
  330. package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts +9 -0
  331. package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts.map +1 -0
  332. package/dist/types/src/containers/CollectionArticle/index.d.ts +3 -0
  333. package/dist/types/src/containers/CollectionArticle/index.d.ts.map +1 -0
  334. package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts +5 -0
  335. package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts.map +1 -0
  336. package/dist/types/src/containers/CollectionSection/index.d.ts +3 -0
  337. package/dist/types/src/containers/CollectionSection/index.d.ts.map +1 -0
  338. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts +11 -0
  339. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -0
  340. package/dist/types/src/containers/CreateObjectDialog/index.d.ts +3 -0
  341. package/dist/types/src/containers/CreateObjectDialog/index.d.ts.map +1 -0
  342. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts +4 -0
  343. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -0
  344. package/dist/types/src/containers/CreateSpaceDialog/index.d.ts +3 -0
  345. package/dist/types/src/containers/CreateSpaceDialog/index.d.ts.map +1 -0
  346. package/dist/types/src/containers/InlineSyncStatus/InlineSyncStatus.d.ts.map +1 -0
  347. package/dist/types/src/containers/InlineSyncStatus/index.d.ts +3 -0
  348. package/dist/types/src/containers/InlineSyncStatus/index.d.ts.map +1 -0
  349. package/dist/types/src/{components → containers/JoinDialog}/JoinDialog.d.ts +1 -1
  350. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -0
  351. package/dist/types/src/containers/JoinDialog/index.d.ts +3 -0
  352. package/dist/types/src/containers/JoinDialog/index.d.ts.map +1 -0
  353. package/dist/types/src/{components → containers/MembersContainer}/MembersContainer.d.ts +3 -2
  354. package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts.map +1 -0
  355. package/dist/types/src/containers/MembersContainer/index.d.ts +3 -0
  356. package/dist/types/src/containers/MembersContainer/index.d.ts.map +1 -0
  357. package/dist/types/src/{components → containers/MenuFooter}/MenuFooter.d.ts +1 -1
  358. package/dist/types/src/containers/MenuFooter/MenuFooter.d.ts.map +1 -0
  359. package/dist/types/src/containers/MenuFooter/index.d.ts +3 -0
  360. package/dist/types/src/containers/MenuFooter/index.d.ts.map +1 -0
  361. package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts +11 -0
  362. package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts.map +1 -0
  363. package/dist/types/src/containers/ObjectCardStack/index.d.ts +3 -0
  364. package/dist/types/src/containers/ObjectCardStack/index.d.ts.map +1 -0
  365. package/dist/types/src/containers/ObjectDetails/ObjectDetails.d.ts +9 -0
  366. package/dist/types/src/containers/ObjectDetails/ObjectDetails.d.ts.map +1 -0
  367. package/dist/types/src/containers/ObjectDetails/index.d.ts +3 -0
  368. package/dist/types/src/containers/ObjectDetails/index.d.ts.map +1 -0
  369. package/dist/types/src/containers/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  370. package/dist/types/src/containers/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  371. package/dist/types/src/containers/ObjectRenamePopover/index.d.ts +3 -0
  372. package/dist/types/src/containers/ObjectRenamePopover/index.d.ts.map +1 -0
  373. package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts +4 -0
  374. package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -0
  375. package/dist/types/src/containers/RecordArticle/index.d.ts +3 -0
  376. package/dist/types/src/containers/RecordArticle/index.d.ts.map +1 -0
  377. package/dist/types/src/{components → containers/SchemaContainer}/SchemaContainer.d.ts +2 -2
  378. package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts.map +1 -0
  379. package/dist/types/src/containers/SchemaContainer/index.d.ts +3 -0
  380. package/dist/types/src/containers/SchemaContainer/index.d.ts.map +1 -0
  381. package/dist/types/src/containers/SmallPresenceLive/index.d.ts +2 -0
  382. package/dist/types/src/containers/SmallPresenceLive/index.d.ts.map +1 -0
  383. package/dist/types/src/containers/SpacePluginSettings/SpacePluginSettings.d.ts +8 -0
  384. package/dist/types/src/containers/SpacePluginSettings/SpacePluginSettings.d.ts.map +1 -0
  385. package/dist/types/src/containers/SpacePluginSettings/index.d.ts +3 -0
  386. package/dist/types/src/containers/SpacePluginSettings/index.d.ts.map +1 -0
  387. package/dist/types/src/{components → containers/SpacePresence}/SpacePresence.d.ts +7 -6
  388. package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -0
  389. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +1430 -0
  390. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  391. package/dist/types/src/containers/SpacePresence/index.d.ts +3 -0
  392. package/dist/types/src/containers/SpacePresence/index.d.ts.map +1 -0
  393. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  394. package/dist/types/src/containers/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  395. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts +3 -0
  396. package/dist/types/src/containers/SpaceRenamePopover/index.d.ts.map +1 -0
  397. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.d.ts +10 -0
  398. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.d.ts.map +1 -0
  399. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +1436 -0
  400. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -0
  401. package/dist/types/src/containers/SpaceSettingsContainer/index.d.ts +3 -0
  402. package/dist/types/src/containers/SpaceSettingsContainer/index.d.ts.map +1 -0
  403. package/dist/types/src/containers/SyncStatus/SyncStatus.d.ts.map +1 -0
  404. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +1435 -0
  405. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -0
  406. package/dist/types/src/containers/SyncStatus/index.d.ts +3 -0
  407. package/dist/types/src/containers/SyncStatus/index.d.ts.map +1 -0
  408. package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts +7 -0
  409. package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts.map +1 -0
  410. package/dist/types/src/containers/ViewEditor/index.d.ts +3 -0
  411. package/dist/types/src/containers/ViewEditor/index.d.ts.map +1 -0
  412. package/dist/types/src/containers/index.d.ts +23 -0
  413. package/dist/types/src/containers/index.d.ts.map +1 -0
  414. package/dist/types/src/helpers/index.d.ts +2 -0
  415. package/dist/types/src/helpers/index.d.ts.map +1 -0
  416. package/dist/types/src/helpers/query.d.ts +7 -0
  417. package/dist/types/src/helpers/query.d.ts.map +1 -0
  418. package/dist/types/src/helpers/query.test.d.ts +2 -0
  419. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  420. package/dist/types/src/hooks/index.d.ts +1 -0
  421. package/dist/types/src/hooks/index.d.ts.map +1 -1
  422. package/dist/types/src/hooks/useActiveSpace.d.ts +2 -2
  423. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  424. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +2 -8
  425. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  426. package/dist/types/src/hooks/usePath.d.ts +3 -3
  427. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  428. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  429. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  430. package/dist/types/src/index.d.ts +3 -3
  431. package/dist/types/src/index.d.ts.map +1 -1
  432. package/dist/types/src/meta.d.ts +2 -3
  433. package/dist/types/src/meta.d.ts.map +1 -1
  434. package/dist/types/src/translations.d.ts +1270 -67
  435. package/dist/types/src/translations.d.ts.map +1 -1
  436. package/dist/types/src/types/capabilities.d.ts +71 -0
  437. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  438. package/dist/types/src/types/events.d.ts +9 -0
  439. package/dist/types/src/types/events.d.ts.map +1 -0
  440. package/dist/types/src/types/form.d.ts +22 -0
  441. package/dist/types/src/types/form.d.ts.map +1 -0
  442. package/dist/types/src/types/index.d.ts +3 -0
  443. package/dist/types/src/types/index.d.ts.map +1 -1
  444. package/dist/types/src/types/types.d.ts +597 -419
  445. package/dist/types/src/types/types.d.ts.map +1 -1
  446. package/dist/types/src/util.d.ts +126 -91
  447. package/dist/types/src/util.d.ts.map +1 -1
  448. package/dist/types/tsconfig.tsbuildinfo +1 -1
  449. package/package.json +87 -62
  450. package/src/SpacePlugin.ts +196 -255
  451. package/src/capabilities/app-graph-builder/app-graph-builder.ts +675 -0
  452. package/src/capabilities/app-graph-builder/index.ts +7 -0
  453. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +83 -0
  454. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  455. package/src/capabilities/identity-created/identity-created.ts +29 -0
  456. package/src/capabilities/identity-created/index.ts +7 -0
  457. package/src/capabilities/index.ts +10 -15
  458. package/src/capabilities/operation-resolver/index.ts +7 -0
  459. package/src/capabilities/operation-resolver/operation-resolver.ts +771 -0
  460. package/src/capabilities/react-root/index.ts +7 -0
  461. package/src/capabilities/react-root/react-root.tsx +25 -0
  462. package/src/capabilities/react-surface/index.ts +7 -0
  463. package/src/capabilities/react-surface/react-surface.tsx +380 -0
  464. package/src/capabilities/repair/index.ts +7 -0
  465. package/src/capabilities/repair/repair.ts +71 -0
  466. package/src/capabilities/settings/index.ts +7 -0
  467. package/src/capabilities/settings/settings.ts +33 -0
  468. package/src/capabilities/spaces-ready/index.ts +7 -0
  469. package/src/capabilities/spaces-ready/spaces-ready.ts +290 -0
  470. package/src/capabilities/state/index.ts +7 -0
  471. package/src/capabilities/state/state.ts +64 -0
  472. package/src/cli/commands/database/add.ts +115 -0
  473. package/src/cli/commands/database/index.ts +16 -0
  474. package/src/cli/commands/database/query/index.ts +5 -0
  475. package/src/cli/commands/database/query/query.test.ts +55 -0
  476. package/src/cli/commands/database/query/query.ts +44 -0
  477. package/src/cli/commands/database/remove.ts +51 -0
  478. package/src/cli/commands/database/stats.ts +44 -0
  479. package/src/cli/commands/database/util.ts +32 -0
  480. package/src/cli/commands/index.ts +7 -0
  481. package/src/cli/commands/queue/index.ts +12 -0
  482. package/src/cli/commands/queue/query.ts +45 -0
  483. package/src/cli/commands/queue/util.ts +19 -0
  484. package/src/cli/commands/space/close/close.ts +40 -0
  485. package/src/cli/commands/space/close/index.ts +5 -0
  486. package/src/cli/commands/space/create/create.test.ts +67 -0
  487. package/src/cli/commands/space/create/create.ts +61 -0
  488. package/src/cli/commands/space/create/index.ts +5 -0
  489. package/src/cli/commands/space/index.ts +21 -0
  490. package/src/cli/commands/space/info/index.ts +5 -0
  491. package/src/cli/commands/space/info/info.test.ts +47 -0
  492. package/src/cli/commands/space/info/info.ts +37 -0
  493. package/src/cli/commands/space/join/index.ts +5 -0
  494. package/src/cli/commands/space/join/join.ts +122 -0
  495. package/src/cli/commands/space/join/util.ts +82 -0
  496. package/src/cli/commands/space/list/index.ts +5 -0
  497. package/src/cli/commands/space/list/list.test.ts +36 -0
  498. package/src/cli/commands/space/list/list.ts +30 -0
  499. package/src/cli/commands/space/members/index.ts +5 -0
  500. package/src/cli/commands/space/members/members.test.ts +46 -0
  501. package/src/cli/commands/space/members/members.ts +40 -0
  502. package/src/cli/commands/space/members/util.ts +29 -0
  503. package/src/cli/commands/space/open/index.ts +5 -0
  504. package/src/cli/commands/space/open/open.ts +39 -0
  505. package/src/cli/commands/space/schema/index.ts +12 -0
  506. package/src/cli/commands/space/schema/list/index.ts +5 -0
  507. package/src/cli/commands/space/schema/list/list.test.ts +42 -0
  508. package/src/cli/commands/space/schema/list/list.ts +64 -0
  509. package/src/cli/commands/space/schema/list/util.ts +39 -0
  510. package/src/cli/commands/space/share/index.ts +5 -0
  511. package/src/cli/commands/space/share/share.ts +112 -0
  512. package/src/cli/commands/space/sync/index.ts +5 -0
  513. package/src/cli/commands/space/sync/sync.test.ts +12 -0
  514. package/src/cli/commands/space/sync/sync.ts +33 -0
  515. package/src/cli/index.ts +5 -0
  516. package/src/cli/plugin.ts +89 -0
  517. package/src/components/AwaitingObject.tsx +23 -21
  518. package/src/components/CreateDialog/CreateObjectPanel.tsx +157 -108
  519. package/src/components/CreateDialog/index.ts +1 -2
  520. package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +63 -0
  521. package/src/components/ObjectDetails/BaseObjectSettings.tsx +122 -0
  522. package/src/components/{ObjectSettings → ObjectDetails}/ForeignKeys.tsx +7 -7
  523. package/src/components/ObjectDetails/index.ts +6 -0
  524. package/src/components/ObjectForm/ObjectForm.tsx +97 -0
  525. package/src/components/ObjectForm/index.ts +5 -0
  526. package/src/components/SyncStatus/index.ts +2 -2
  527. package/src/components/SyncStatus/save-tracker.ts +2 -2
  528. package/src/components/index.ts +2 -18
  529. package/src/constants.ts +11 -0
  530. package/src/containers/CollectionArticle/CollectionArticle.tsx +180 -0
  531. package/src/containers/CollectionArticle/index.ts +7 -0
  532. package/src/containers/CollectionSection/CollectionSection.tsx +22 -0
  533. package/src/containers/CollectionSection/index.ts +7 -0
  534. package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +164 -0
  535. package/src/containers/CreateObjectDialog/index.ts +7 -0
  536. package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +70 -0
  537. package/src/containers/CreateSpaceDialog/index.ts +7 -0
  538. package/src/{components/SyncStatus → containers/InlineSyncStatus}/InlineSyncStatus.tsx +9 -9
  539. package/src/containers/InlineSyncStatus/index.ts +7 -0
  540. package/src/{components → containers/JoinDialog}/JoinDialog.tsx +29 -39
  541. package/src/containers/JoinDialog/index.ts +7 -0
  542. package/src/{components → containers/MembersContainer}/MembersContainer.tsx +94 -98
  543. package/src/containers/MembersContainer/index.ts +7 -0
  544. package/src/{components → containers/MenuFooter}/MenuFooter.tsx +7 -7
  545. package/src/containers/MenuFooter/index.ts +7 -0
  546. package/src/containers/ObjectCardStack/ObjectCardStack.tsx +82 -0
  547. package/src/containers/ObjectCardStack/index.ts +7 -0
  548. package/src/containers/ObjectDetails/ObjectDetails.tsx +36 -0
  549. package/src/containers/ObjectDetails/index.ts +7 -0
  550. package/src/containers/ObjectRenamePopover/ObjectRenamePopover.tsx +52 -0
  551. package/src/containers/ObjectRenamePopover/index.ts +7 -0
  552. package/src/containers/RecordArticle/RecordArticle.tsx +124 -0
  553. package/src/containers/RecordArticle/index.ts +7 -0
  554. package/src/containers/SchemaContainer/SchemaContainer.tsx +60 -0
  555. package/src/containers/SchemaContainer/index.ts +7 -0
  556. package/src/containers/SmallPresenceLive/index.ts +5 -0
  557. package/src/containers/SpacePluginSettings/SpacePluginSettings.tsx +65 -0
  558. package/src/containers/SpacePluginSettings/index.ts +7 -0
  559. package/src/{components → containers/SpacePresence}/SpacePresence.stories.tsx +24 -23
  560. package/src/{components → containers/SpacePresence}/SpacePresence.tsx +34 -30
  561. package/src/containers/SpacePresence/index.ts +7 -0
  562. package/src/{components/PopoverRenameSpace.tsx → containers/SpaceRenamePopover/SpaceRenamePopover.tsx} +16 -16
  563. package/src/containers/SpaceRenamePopover/index.ts +7 -0
  564. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.tsx +46 -0
  565. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +202 -0
  566. package/src/containers/SpaceSettingsContainer/index.ts +7 -0
  567. package/src/{components → containers}/SyncStatus/SyncStatus.stories.tsx +10 -10
  568. package/src/containers/SyncStatus/SyncStatus.tsx +153 -0
  569. package/src/containers/SyncStatus/index.ts +7 -0
  570. package/src/containers/ViewEditor/ViewEditor.tsx +103 -0
  571. package/src/containers/ViewEditor/index.ts +7 -0
  572. package/src/containers/index.ts +28 -0
  573. package/src/helpers/index.ts +5 -0
  574. package/src/helpers/query.test.ts +24 -0
  575. package/src/helpers/query.ts +166 -0
  576. package/src/hooks/index.ts +1 -0
  577. package/src/hooks/useActiveSpace.ts +8 -4
  578. package/src/hooks/useInputSurfaceLookup.tsx +9 -13
  579. package/src/hooks/usePath.ts +5 -5
  580. package/src/hooks/useTypeOptions.ts +25 -0
  581. package/src/index.ts +4 -3
  582. package/src/meta.ts +8 -5
  583. package/src/translations.ts +70 -58
  584. package/src/types/capabilities.ts +73 -0
  585. package/src/types/events.ts +16 -0
  586. package/src/types/form.ts +69 -0
  587. package/src/types/index.ts +3 -0
  588. package/src/types/types.ts +541 -254
  589. package/src/util.tsx +726 -438
  590. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs +0 -31
  591. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  592. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
  593. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  594. package/dist/lib/browser/app-graph-builder-7CZZJS3S.mjs +0 -479
  595. package/dist/lib/browser/app-graph-builder-7CZZJS3S.mjs.map +0 -7
  596. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs +0 -80
  597. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  598. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  599. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  600. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  601. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  602. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  603. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  604. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  605. package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
  606. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  607. package/dist/lib/browser/chunk-V7MJSSBQ.mjs +0 -1984
  608. package/dist/lib/browser/chunk-V7MJSSBQ.mjs.map +0 -7
  609. package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
  610. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  611. package/dist/lib/browser/chunk-XUYKJUU7.mjs +0 -649
  612. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  613. package/dist/lib/browser/identity-created-23XJJV2N.mjs +0 -23
  614. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  615. package/dist/lib/browser/intent-resolver-TIXVDYN7.mjs +0 -760
  616. package/dist/lib/browser/intent-resolver-TIXVDYN7.mjs.map +0 -7
  617. package/dist/lib/browser/react-root-N2J7TDRX.mjs +0 -29
  618. package/dist/lib/browser/react-root-N2J7TDRX.mjs.map +0 -7
  619. package/dist/lib/browser/react-surface-TPNLWJJH.mjs +0 -374
  620. package/dist/lib/browser/react-surface-TPNLWJJH.mjs.map +0 -7
  621. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs +0 -26
  622. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  623. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  624. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  625. package/dist/lib/browser/settings-4IMP5RYT.mjs +0 -24
  626. package/dist/lib/browser/settings-4IMP5RYT.mjs.map +0 -7
  627. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs +0 -199
  628. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  629. package/dist/lib/browser/state-QYZAB45H.mjs +0 -47
  630. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  631. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs +0 -32
  632. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  633. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
  634. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  635. package/dist/lib/node-esm/app-graph-builder-KGIGWC72.mjs +0 -480
  636. package/dist/lib/node-esm/app-graph-builder-KGIGWC72.mjs.map +0 -7
  637. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs +0 -81
  638. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  639. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs +0 -650
  640. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  641. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  642. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  643. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  644. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  645. package/dist/lib/node-esm/chunk-6X5DLJM5.mjs +0 -1985
  646. package/dist/lib/node-esm/chunk-6X5DLJM5.mjs.map +0 -7
  647. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  648. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  649. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs +0 -339
  650. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  651. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  652. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
  653. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  654. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs +0 -25
  655. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  656. package/dist/lib/node-esm/intent-resolver-MHGHRGDT.mjs +0 -761
  657. package/dist/lib/node-esm/intent-resolver-MHGHRGDT.mjs.map +0 -7
  658. package/dist/lib/node-esm/react-root-KW3TGJGY.mjs +0 -30
  659. package/dist/lib/node-esm/react-root-KW3TGJGY.mjs.map +0 -7
  660. package/dist/lib/node-esm/react-surface-UUIUUD6P.mjs +0 -375
  661. package/dist/lib/node-esm/react-surface-UUIUUD6P.mjs.map +0 -7
  662. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs +0 -27
  663. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  664. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  665. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  666. package/dist/lib/node-esm/settings-SAOBPND3.mjs +0 -25
  667. package/dist/lib/node-esm/settings-SAOBPND3.mjs.map +0 -7
  668. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs +0 -200
  669. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  670. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs +0 -48
  671. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
  672. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  673. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  674. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  675. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  676. package/dist/types/src/capabilities/capabilities.d.ts +0 -28
  677. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  678. package/dist/types/src/capabilities/identity-created.d.ts +0 -4
  679. package/dist/types/src/capabilities/identity-created.d.ts.map +0 -1
  680. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -9
  681. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  682. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  683. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  684. package/dist/types/src/capabilities/react-surface.d.ts +0 -7
  685. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  686. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  687. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  688. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  689. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  690. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  691. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  692. package/dist/types/src/capabilities/settings.d.ts +0 -4
  693. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  694. package/dist/types/src/capabilities/spaces-ready.d.ts +0 -4
  695. package/dist/types/src/capabilities/spaces-ready.d.ts.map +0 -1
  696. package/dist/types/src/capabilities/state.d.ts +0 -5
  697. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  698. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  699. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  700. package/dist/types/src/components/CollectionSection.d.ts +0 -6
  701. package/dist/types/src/components/CollectionSection.d.ts.map +0 -1
  702. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +0 -10
  703. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +0 -1
  704. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +0 -10
  705. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +0 -1
  706. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +0 -4
  707. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +0 -1
  708. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  709. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  710. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  711. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  712. package/dist/types/src/components/MenuFooter.d.ts.map +0 -1
  713. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  714. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  715. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts +0 -7
  716. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
  717. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +0 -1
  718. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +0 -8
  719. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +0 -1
  720. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +0 -8
  721. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +0 -1
  722. package/dist/types/src/components/ObjectSettings/index.d.ts +0 -2
  723. package/dist/types/src/components/ObjectSettings/index.d.ts.map +0 -1
  724. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  725. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  726. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  727. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  728. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  729. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  730. package/dist/types/src/components/SchemaContainer.d.ts.map +0 -1
  731. package/dist/types/src/components/SpacePluginSettings.d.ts +0 -6
  732. package/dist/types/src/components/SpacePluginSettings.d.ts.map +0 -1
  733. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  734. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  735. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  736. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +0 -7
  737. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +0 -1
  738. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +0 -7
  739. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +0 -1
  740. package/dist/types/src/components/SpaceSettings/index.d.ts +0 -2
  741. package/dist/types/src/components/SpaceSettings/index.d.ts.map +0 -1
  742. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +0 -1
  743. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +0 -1
  744. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +0 -9
  745. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +0 -1
  746. package/dist/types/src/components/ViewEditor.d.ts +0 -8
  747. package/dist/types/src/components/ViewEditor.d.ts.map +0 -1
  748. package/dist/types/src/events.d.ts +0 -8
  749. package/dist/types/src/events.d.ts.map +0 -1
  750. package/src/capabilities/app-graph-builder.ts +0 -699
  751. package/src/capabilities/app-graph-serializer.ts +0 -76
  752. package/src/capabilities/capabilities.ts +0 -29
  753. package/src/capabilities/identity-created.ts +0 -25
  754. package/src/capabilities/intent-resolver.ts +0 -694
  755. package/src/capabilities/react-root.tsx +0 -20
  756. package/src/capabilities/react-surface.tsx +0 -386
  757. package/src/capabilities/schema-defs.ts +0 -30
  758. package/src/capabilities/schema-tool.test.ts +0 -44
  759. package/src/capabilities/schema-tools.ts +0 -125
  760. package/src/capabilities/settings.ts +0 -21
  761. package/src/capabilities/spaces-ready.ts +0 -231
  762. package/src/capabilities/state.ts +0 -45
  763. package/src/components/CollectionMain.tsx +0 -32
  764. package/src/components/CollectionSection.tsx +0 -20
  765. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +0 -84
  766. package/src/components/CreateDialog/CreateObjectDialog.tsx +0 -124
  767. package/src/components/CreateDialog/CreateSpaceDialog.tsx +0 -66
  768. package/src/components/MembersContainer.stories.tsx +0 -30
  769. package/src/components/ObjectDetailsPanel.tsx +0 -77
  770. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +0 -80
  771. package/src/components/ObjectSettings/BaseObjectSettings.tsx +0 -47
  772. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +0 -36
  773. package/src/components/ObjectSettings/index.ts +0 -5
  774. package/src/components/PersistenceStatus.tsx +0 -83
  775. package/src/components/PopoverRenameObject.tsx +0 -62
  776. package/src/components/SchemaContainer.tsx +0 -59
  777. package/src/components/SpacePluginSettings.tsx +0 -53
  778. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +0 -38
  779. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +0 -184
  780. package/src/components/SpaceSettings/index.ts +0 -5
  781. package/src/components/SyncStatus/SyncStatus.tsx +0 -58
  782. package/src/components/ViewEditor.tsx +0 -64
  783. package/src/events.ts +0 -15
  784. /package/dist/types/src/{components/SyncStatus → containers/InlineSyncStatus}/InlineSyncStatus.d.ts +0 -0
  785. /package/dist/types/src/{components → containers}/SyncStatus/SyncStatus.d.ts +0 -0
package/src/util.tsx CHANGED
@@ -2,229 +2,202 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
6
- import { pipe } from 'effect';
7
-
8
- import { chain, createIntent, LayoutAction, type PromiseIntentDispatcher } from '@dxos/app-framework';
9
- import { Obj, Ref, Type } from '@dxos/echo';
10
- import { type AnyEchoObject, EXPANDO_TYPENAME } from '@dxos/echo-schema';
5
+ import { type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Match from 'effect/Match';
8
+ import * as Option from 'effect/Option';
9
+
10
+ import { type CapabilityManager } from '@dxos/app-framework';
11
+ import { LayoutOperation } from '@dxos/app-toolkit';
12
+ import { type Space, SpaceState, isSpace } from '@dxos/client/echo';
13
+ import { type Database, Feed, Filter, JsonSchema, Obj, Query, Ref, Type } from '@dxos/echo';
14
+ import { Collection } from '@dxos/echo';
11
15
  import { invariant } from '@dxos/invariant';
12
16
  import { Migrations } from '@dxos/migrations';
13
- import {
14
- ACTION_GROUP_TYPE,
15
- ACTION_TYPE,
16
- type ReadableGraph,
17
- type ActionData,
18
- type InvokeParams,
19
- type Node,
20
- type NodeArg,
21
- isGraphNode,
22
- } from '@dxos/plugin-graph';
23
- import { fullyQualifiedId, getSpace, type QueryResult, SpaceState, type Space, isSpace } from '@dxos/react-client/echo';
24
- import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
17
+ import { Operation } from '@dxos/operation';
18
+ import { Graph, Node } from '@dxos/plugin-graph';
19
+ import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention/types';
25
20
  import { type TreeData } from '@dxos/react-ui-list';
26
- import { DataType } from '@dxos/schema';
21
+ import { Expando, ManagedCollection } from '@dxos/schema';
22
+ import { type Label } from '@dxos/ui-types';
23
+ import { createFilename } from '@dxos/util';
24
+
25
+ import { meta } from './meta';
26
+ import { SPACE_TYPE, SpaceOperation } from './types';
27
27
 
28
- import { SPACE_PLUGIN } from './meta';
29
- import { SpaceAction, SPACE_TYPE, type ObjectForm } from './types';
28
+ //
29
+ // Constants
30
+ //
30
31
 
31
- export const SPACES = `${SPACE_PLUGIN}-spaces`;
32
- export const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';
32
+ const CACHEABLE_PROPS: string[] = ['label', 'icon', 'role'];
33
+ const ACCEPT_ECHO_CLASS: Set<string> = new Set(['echo']);
34
+
35
+ /** Shared translation namespace descriptor. */
36
+ const META_NS: { ns: string } = { ns: meta.id };
37
+
38
+ /** Static label tuples (translation key + namespace). */
39
+ const PERSONAL_SPACE_LABEL: Label = ['personal space label', META_NS];
40
+ const UNNAMED_SPACE_LABEL: Label = ['unnamed space label', META_NS];
41
+ const SETTINGS_PANEL_LABEL: Label = ['settings panel label', META_NS];
42
+ const MIGRATE_SPACE_LABEL: Label = ['migrate space label', META_NS];
43
+ const CREATE_OBJECT_IN_SPACE_LABEL: Label = ['create object in space label', META_NS];
44
+ const RENAME_SPACE_LABEL: Label = ['rename space label', META_NS];
45
+ const ADD_VIEW_TO_SCHEMA_LABEL: Label = ['add view to schema label', META_NS];
46
+ const SNAPSHOT_BY_SCHEMA_LABEL: Label = ['snapshot by schema label', META_NS];
47
+ const CREATE_OBJECT_IN_COLLECTION_LABEL: Label = ['create object in collection label', META_NS];
48
+ const CREATE_OBJECT_IN_SYSTEM_COLLECTION_LABEL: Label = ['create object in system collection label', META_NS];
49
+ const COPY_LINK_LABEL: Label = ['copy link label', META_NS];
50
+ const EXPOSE_OBJECT_LABEL: Label = ['expose object label', META_NS];
51
+
52
+ /** Stable callback constants (no closed-over state). */
53
+ const CAN_DROP_FALSE = () => false;
54
+ const CAN_DROP_SPACE = (source: TreeData) => Obj.isObject(source.item.data) || isSpace(source.item.data);
55
+ const CAN_DROP_OBJECT = (source: TreeData) => Node.isGraphNode(source.item) && Obj.isObject(source.item.data);
56
+
57
+ export const SPACES = `${meta.id}-spaces`;
58
+ export const COMPOSER_SPACE_LOCK = `${meta.id}/lock`;
33
59
  // TODO(wittjosiah): Remove.
34
60
  export const SHARED = 'shared-spaces';
35
61
 
36
- /**
37
- * Convert a query result to an Rx value of the objects.
38
- */
39
- export const rxFromQuery = <T extends AnyEchoObject>(query: QueryResult<T>): Rx.Rx<T[]> => {
40
- return Rx.make((get) => {
41
- const unsubscribe = query.subscribe((result) => {
42
- get.setSelf(result.objects);
43
- });
44
-
45
- get.addFinalizer(() => unsubscribe());
46
- return query.objects;
47
- });
48
- };
49
-
50
- // TODO(wittjosiah): Factor out? Expose via capability?
51
- export const getSpaceDisplayName = (
52
- space: Space,
53
- { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},
54
- ): string | [string, { ns: string }] => {
55
- return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0
56
- ? space.properties.name
57
- : namesCache[space.id]
58
- ? namesCache[space.id]
59
- : personal
60
- ? ['personal space label', { ns: SPACE_PLUGIN }]
61
- : ['unnamed space label', { ns: SPACE_PLUGIN }];
62
- };
62
+ const SCHEMA_GRAPH_NODE_PARTIALS = {
63
+ role: 'branch',
64
+ canDrop: CAN_DROP_FALSE,
65
+ } as const;
63
66
 
64
- const getCollectionGraphNodePartials = ({
65
- collection,
66
- space,
67
- resolve,
68
- }: {
69
- collection: DataType.Collection;
70
- space: Space;
71
- resolve: (typename: string) => Record<string, any>;
72
- }) => {
73
- return {
74
- acceptPersistenceClass: new Set(['echo']),
75
- acceptPersistenceKey: new Set([space.id]),
76
- role: 'branch',
77
- onRearrangeChildren: (nextOrder: unknown[]) => {
78
- // Change on disk.
79
- collection.objects = nextOrder.filter(Obj.isObject).map(Ref.make);
80
- },
81
- onTransferStart: (child: Node<Obj.Any>, index?: number) => {
82
- // TODO(wittjosiah): Support transfer between spaces.
83
- // const childSpace = getSpace(child.data);
84
- // if (space && childSpace && !childSpace.key.equals(space.key)) {
85
- // // Create clone of child and add to destination space.
86
- // const newObject = clone(child.data, {
87
- // // TODO(wittjosiah): This needs to be generalized and not hardcoded here.
88
- // additional: [
89
- // child.data.content,
90
- // ...(child.data.objects ?? []),
91
- // ...(child.data.objects ?? []).map((object: TypedObject) => object.content),
92
- // ],
93
- // });
94
- // space.db.add(newObject);
95
- // collection.objects.push(newObject);
96
- // } else {
97
-
98
- // Add child to destination collection.
99
- // TODO(dmaretskyi): Compare by id.
100
- if (!collection.objects.find((object) => object.target === child.data)) {
101
- if (typeof index !== 'undefined') {
102
- collection.objects.splice(index, 0, Ref.make(child.data));
103
- } else {
104
- collection.objects.push(Ref.make(child.data));
105
- }
106
- }
107
-
108
- // }
109
- },
110
- onTransferEnd: (child: Node<Obj.Any>, destination: Node) => {
111
- // Remove child from origin collection.
112
- const index = collection.objects.findIndex((object) => object.target === child.data);
113
- if (index > -1) {
114
- collection.objects.splice(index, 1);
115
- }
116
-
117
- // TODO(wittjosiah): Support transfer between spaces.
118
- // const childSpace = getSpace(child.data);
119
- // const destinationSpace =
120
- // destination.data instanceof SpaceProxy ? destination.data : getSpace(destination.data);
121
- // if (destinationSpace && childSpace && !childSpace.key.equals(destinationSpace.key)) {
122
- // // Mark child as deleted in origin space.
123
- // childSpace.db.remove(child.data);
124
- // }
125
- },
126
- onCopy: async (child: Node<Obj.Any>, index?: number) => {
127
- // Create clone of child and add to destination space.
128
- const newObject = await cloneObject(child.data, resolve, space);
129
- space.db.add(newObject);
130
- if (typeof index !== 'undefined') {
131
- collection.objects.splice(index, 0, Ref.make(newObject));
132
- } else {
133
- collection.objects.push(Ref.make(newObject));
134
- }
135
- },
136
- };
137
- };
67
+ const getSchemaGraphNodePartials = () => SCHEMA_GRAPH_NODE_PARTIALS;
138
68
 
139
- const getQueryCollectionNodePartials = ({
140
- collection,
141
- space,
142
- resolve,
143
- }: {
144
- collection: DataType.QueryCollection;
145
- space: Space;
146
- resolve: (typename: string) => Record<string, any>;
147
- }) => {
148
- return {
149
- icon: collection.query.typename && resolve(collection.query.typename)?.icon,
150
- acceptPersistenceClass: new Set(['echo']),
151
- acceptPersistenceKey: new Set([space.id]),
152
- role: 'branch',
153
- canDrop: (source: TreeData) => {
154
- return (
155
- isGraphNode(source.item) &&
156
- Obj.isObject(source.item.data) &&
157
- Obj.getTypename(source.item.data) === collection.query.typename
158
- );
159
- },
160
- onTransferStart: (child: Node<Obj.Any>, index?: number) => {
161
- // No-op. Objects are moved into query collections by being removed from their original collection.
162
- },
163
- onTransferEnd: (child: Node<Obj.Any>, destination: Node) => {
164
- // No-op. Objects are moved out of query collections by being added to another collection.
165
- },
166
- };
167
- };
69
+ //
70
+ // Caching Infrastructure
71
+ //
168
72
 
169
- const getSchemaGraphNodePartials = () => {
170
- return {
171
- role: 'branch',
172
- canDrop: () => false,
73
+ /** Creates a string-keyed memoized factory. Returns the same instance for the same key. */
74
+ // TODO(wittjosiah): Factor out as app-graph utility.
75
+ function createFactory<T>(create: (key: string) => T): (key: string) => T;
76
+ function createFactory<TArgs extends any[], T>(
77
+ create: (...args: TArgs) => T,
78
+ keyFn: (...args: TArgs) => string,
79
+ ): (...args: TArgs) => T;
80
+ function createFactory<TArgs extends any[], T>(
81
+ create: (...args: TArgs) => T,
82
+ keyFn?: (...args: TArgs) => string,
83
+ ): (...args: TArgs) => T {
84
+ const cache = new Map<string, T>();
85
+ return (...args: TArgs) => {
86
+ const key = keyFn ? keyFn(...args) : (args[0] as string);
87
+ if (cache.has(key)) {
88
+ return cache.get(key)!;
89
+ }
90
+ const value = create(...args);
91
+ cache.set(key, value);
92
+ return value;
173
93
  };
174
- };
175
-
176
- const getViewGraphNodePartials = ({
177
- view,
178
- resolve,
179
- }: {
180
- view: DataType.View;
181
- resolve: (typename: string) => Record<string, any>;
182
- }) => {
183
- const presentation = view.presentation.target;
184
- const typename = presentation ? Obj.getTypename(presentation) : undefined;
185
- const metadata = typename ? resolve(typename) : {};
94
+ }
95
+
96
+ /** Stable Set instances keyed by spaceId. */
97
+ const getAcceptPersistenceKey = createFactory((spaceId: string) => new Set([spaceId]));
98
+
99
+ /** Caches for closures that capture ECHO objects, keyed by DXN/ID string. */
100
+ const rearrangeCache = new Map<string, (nextOrder: unknown[]) => void>();
101
+ const blockInstructionCache = new Map<string, (source: TreeData, instruction: Instruction) => boolean>();
102
+ const spaceRearrangeCache = new Map<string, (nextOrder: Space[]) => void>();
103
+ const collectionPartialsCache = new Map<string, ReturnType<typeof buildCollectionPartials>>();
104
+ const systemCollectionPartialsCache = new Map<
105
+ string,
106
+ {
107
+ label: Label;
108
+ icon?: string;
109
+ iconHue?: string;
110
+ acceptPersistenceClass: Set<string>;
111
+ acceptPersistenceKey: Set<string>;
112
+ role: string;
113
+ }
114
+ >();
115
+ const spaceActionsCache = new Map<
116
+ string,
117
+ {
118
+ state: SpaceState;
119
+ hasPendingMigration: boolean;
120
+ migrating: boolean;
121
+ actions: Node.NodeArg<Node.ActionData<Operation.Service>>[];
122
+ }
123
+ >();
186
124
 
187
- return {
188
- label: view.name || ['object name placeholder', { ns: typename, default: 'New view' }],
189
- icon: metadata.icon,
190
- canDrop: () => false,
191
- };
192
- };
125
+ /** Dynamic label tuples keyed by composite key string. */
126
+ const getDynamicLabel = createFactory(
127
+ (key: string, ns: string, extra?: Record<string, any>): Label => [key, { ns, ...extra }],
128
+ (key: string, ns: string, extra?: Record<string, any>) => `${key}\0${ns}${extra ? `\0${JSON.stringify(extra)}` : ''}`,
129
+ );
193
130
 
194
- const checkPendingMigration = (space: Space) => {
195
- return (
196
- space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
197
- (space.state.get() === SpaceState.SPACE_READY &&
198
- !!Migrations.versionProperty &&
199
- space.properties[Migrations.versionProperty] !== Migrations.targetVersion)
200
- );
201
- };
131
+ //
132
+ // Node Constructors
133
+ //
202
134
 
135
+ /**
136
+ * Builds an app-graph node for a space (workspace), including settings children and optional rearrange handler.
137
+ *
138
+ * @param space - Space to wrap as a graph node.
139
+ * @param navigable - Whether the space node is navigable; affects disabled state.
140
+ * @param personal - Passed to display name resolution (e.g. "Personal space" fallback).
141
+ * @param namesCache - Optional cache of space id to display name.
142
+ * @param resolve - Metadata resolver for typename.
143
+ * @param graph - Optional expandable graph for sorting edges on rearrange.
144
+ * @param spacesOrder - Optional ECHO object holding workspace order; used with graph for persist on rearrange.
145
+ * @returns A graph node for the space.
146
+ */
203
147
  export const constructSpaceNode = ({
204
148
  space,
205
149
  navigable = false,
206
150
  personal,
207
151
  namesCache,
208
152
  resolve,
153
+ graph,
154
+ spacesOrder,
209
155
  }: {
210
156
  space: Space;
211
157
  navigable?: boolean;
212
158
  personal?: boolean;
213
159
  namesCache?: Record<string, string>;
214
160
  resolve: (typename: string) => Record<string, any>;
161
+ /** Graph for sorting edges on rearrange. */
162
+ graph?: Graph.ExpandableGraph;
163
+ // TODO(wittjosiah): Should be Type.Expando but it doesn't work with the AtomQuery result type.
164
+ /** Spaces order object for persisting workspace order. */
165
+ spacesOrder?: Obj.Any;
215
166
  }) => {
216
167
  const hasPendingMigration = checkPendingMigration(space);
217
168
  const collection =
218
- space.state.get() === SpaceState.SPACE_READY && space.properties[DataType.Collection.typename]?.target;
169
+ space.state.get() === SpaceState.SPACE_READY && space.properties[Collection.Collection.typename]?.target;
219
170
  const partials =
220
- space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(DataType.Collection, collection)
221
- ? getCollectionGraphNodePartials({ collection, space, resolve })
171
+ space.state.get() === SpaceState.SPACE_READY && Obj.instanceOf(Collection.Collection, collection)
172
+ ? getCollectionGraphNodePartials({ collection, db: space.db, resolve })
222
173
  : {};
223
174
 
175
+ let onRearrange: ((nextOrder: Space[]) => void) | undefined;
176
+ if (graph && spacesOrder) {
177
+ onRearrange = spaceRearrangeCache.get(space.id);
178
+ if (!onRearrange) {
179
+ onRearrange = (nextOrder: Space[]) => {
180
+ // NOTE: This is needed to ensure order is updated by next animation frame.
181
+ Graph.sortEdges(
182
+ graph,
183
+ Node.RootId,
184
+ 'outbound',
185
+ nextOrder.map(({ id }) => id),
186
+ );
187
+
188
+ // Persist order to database.
189
+ Obj.change(spacesOrder, (mutableOrder: any) => {
190
+ mutableOrder.order = nextOrder.map(({ id }) => id);
191
+ });
192
+ };
193
+ spaceRearrangeCache.set(space.id, onRearrange);
194
+ }
195
+ }
196
+
224
197
  return {
225
198
  id: space.id,
226
199
  type: SPACE_TYPE,
227
- cacheable: ['label', 'icon', 'role'],
200
+ cacheable: CACHEABLE_PROPS,
228
201
  data: space,
229
202
  properties: {
230
203
  ...partials,
@@ -235,87 +208,215 @@ export const constructSpaceNode = ({
235
208
  space.state.get() === SpaceState.SPACE_READY && space.properties.icon
236
209
  ? `ph--${space.properties.icon}--regular`
237
210
  : undefined,
211
+ iconHue: space.state.get() === SpaceState.SPACE_READY && space.properties.iconHue,
238
212
  disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,
213
+ disposition: 'workspace',
239
214
  testId: 'spacePlugin.space',
240
- canDrop: (source: TreeData) => {
241
- // TODO(wittjosiah): Find a way to only allow space as source for rearranging.
242
- return Obj.isObject(source.item.data) || isSpace(source.item.data);
243
- },
215
+ onRearrange,
216
+ // TODO(wittjosiah): Find a way to only allow space as source for rearranging.
217
+ canDrop: CAN_DROP_SPACE,
244
218
  },
245
219
  nodes: [
246
220
  {
247
221
  id: `settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
248
- type: `${SPACE_PLUGIN}/settings`,
222
+ type: `${meta.id}/settings`,
249
223
  data: null,
250
224
  properties: {
251
- label: ['settings panel label', { ns: SPACE_PLUGIN }],
225
+ label: SETTINGS_PANEL_LABEL,
252
226
  icon: 'ph--faders--regular',
253
227
  disposition: 'alternate-tree',
254
228
  },
255
- nodes: [
256
- {
257
- id: `properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
258
- type: `${SPACE_PLUGIN}/properties`,
259
- data: `${SPACE_PLUGIN}/properties`,
260
- properties: {
261
- label: ['space settings properties label', { ns: SPACE_PLUGIN }],
262
- icon: 'ph--sliders--regular',
263
- position: 'hoist',
264
- },
265
- },
266
- {
267
- id: `members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
268
- type: `${SPACE_PLUGIN}/members`,
269
- data: `${SPACE_PLUGIN}/members`,
270
- properties: {
271
- label: ['members panel label', { ns: SPACE_PLUGIN }],
272
- icon: 'ph--users--regular',
273
- position: 'hoist',
274
- },
275
- },
276
- {
277
- id: `schema-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`,
278
- type: `${SPACE_PLUGIN}/schema`,
279
- data: `${SPACE_PLUGIN}/schema`,
280
- properties: {
281
- label: ['space settings schema label', { ns: SPACE_PLUGIN }],
282
- icon: 'ph--shapes--regular',
283
- },
284
- },
285
- ],
286
229
  },
287
230
  ],
288
231
  };
289
232
  };
290
233
 
291
- export const constructSpaceActions = ({
292
- space,
293
- dispatch,
294
- personal,
295
- migrating,
234
+ /**
235
+ * Builds an app-graph node for an ECHO object (collection, managed feed, schema, or generic object).
236
+ *
237
+ * @param db - Database for the object's space.
238
+ * @param object - ECHO object to wrap.
239
+ * @param disposition - Optional UI disposition.
240
+ * @param droppable - Whether the node accepts drops.
241
+ * @param navigable - Whether the node is navigable.
242
+ * @param managedCollectionChild - Whether the object is a managed collection child (affects blockInstruction).
243
+ * @param resolve - Metadata resolver for typename.
244
+ * @param parentCollection - Parent collection for rearranging objects.
245
+ * @returns A graph node or null if the object has no typename.
246
+ */
247
+ export const createObjectNode = ({
248
+ db,
249
+ object,
250
+ disposition,
251
+ droppable = true,
252
+ navigable = false,
253
+ managedCollectionChild = false,
254
+ resolve,
255
+ parentCollection,
296
256
  }: {
297
- space: Space;
298
- dispatch: PromiseIntentDispatcher;
299
- personal?: boolean;
300
- migrating?: boolean;
257
+ db: Database.Database;
258
+ object: Obj.Unknown;
259
+ disposition?: string;
260
+ droppable?: boolean;
261
+ navigable?: boolean;
262
+ managedCollectionChild?: boolean;
263
+ resolve: (typename: string) => Record<string, any>;
264
+ /** Parent collection for rearranging objects. */
265
+ parentCollection?: Collection.Collection;
301
266
  }) => {
267
+ const type = Obj.getTypename(object);
268
+ if (!type) {
269
+ return null;
270
+ }
271
+
272
+ // For feeds, use the kind property for metadata lookup instead of the generic Feed typename.
273
+ const metadataKey = Obj.instanceOf(Feed.Feed, object) ? (object.kind ?? type) : type;
274
+ const metadata = resolve(metadataKey);
275
+ const partials = Obj.instanceOf(Collection.Collection, object)
276
+ ? getCollectionGraphNodePartials({ collection: object, db, resolve })
277
+ : Obj.instanceOf(ManagedCollection.ManagedCollection, object)
278
+ ? getSystemCollectionNodePartials({ collection: object, db, resolve })
279
+ : Obj.instanceOf(Type.PersistentType, object)
280
+ ? getSchemaGraphNodePartials()
281
+ : metadata.graphProps;
282
+
283
+ // TODO(wittjosiah): Obj.getLabel isn't triggering reactivity in some cases.
284
+ // e.g., create new collection with no name and rename it.
285
+ const label =
286
+ (object as any).name ||
287
+ Obj.getLabel(object) ||
288
+ // TODO(wittjosiah): Remove metadata labels.
289
+ metadata.label?.(object) ||
290
+ getDynamicLabel('object name placeholder', metadataKey, { default: 'New item' });
291
+
292
+ const selectable =
293
+ (!Obj.instanceOf(Type.PersistentType, object) &&
294
+ !Obj.instanceOf(ManagedCollection.ManagedCollection, object) &&
295
+ !Obj.instanceOf(Collection.Collection, object)) ||
296
+ (navigable && Obj.instanceOf(Collection.Collection, object));
297
+
298
+ let onRearrange: ((nextOrder: unknown[]) => void) | undefined;
299
+ if (parentCollection) {
300
+ const collectionId = Obj.getDXN(parentCollection).toString();
301
+ onRearrange = rearrangeCache.get(collectionId);
302
+ if (!onRearrange) {
303
+ onRearrange = (nextOrder: unknown[]) => {
304
+ Obj.change(parentCollection, (c) => {
305
+ c.objects = nextOrder.filter(Obj.isObject).map(Ref.make);
306
+ });
307
+ };
308
+ rearrangeCache.set(collectionId, onRearrange);
309
+ }
310
+ }
311
+
312
+ const objectId = Obj.getDXN(object).toString();
313
+ const blockInstructionKey = `${objectId}:${managedCollectionChild}`;
314
+ let blockInstruction = blockInstructionCache.get(blockInstructionKey);
315
+ if (!blockInstruction) {
316
+ blockInstruction = (source: TreeData, instruction: Instruction) => {
317
+ if (source.item.properties.managedCollectionChild) {
318
+ return true;
319
+ }
320
+ if (Obj.instanceOf(ManagedCollection.ManagedCollection, object)) {
321
+ return !instruction.type.startsWith('reorder');
322
+ }
323
+ return managedCollectionChild;
324
+ };
325
+ blockInstructionCache.set(blockInstructionKey, blockInstruction);
326
+ }
327
+
328
+ const canDrop = droppable ? CAN_DROP_OBJECT : CAN_DROP_FALSE;
329
+
330
+ return {
331
+ id: Obj.getDXN(object).toString(),
332
+ type,
333
+ cacheable: CACHEABLE_PROPS,
334
+ data: object,
335
+ properties: {
336
+ label,
337
+ icon: metadata.icon ?? 'ph--placeholder--regular',
338
+ iconHue: metadata.iconHue,
339
+ disposition,
340
+ testId: 'spacePlugin.object',
341
+ persistenceClass: 'echo',
342
+ persistenceKey: db.spaceId,
343
+ selectable,
344
+ managedCollectionChild,
345
+ onRearrange,
346
+ blockInstruction,
347
+ canDrop,
348
+ ...partials,
349
+ },
350
+ };
351
+ };
352
+
353
+ /**
354
+ * Builds a static schema node for the app graph.
355
+ *
356
+ * @param schema - ECHO schema entity.
357
+ * @param space - Space that owns the schema.
358
+ * @returns A graph node for the schema.
359
+ */
360
+ export const createStaticSchemaNode = ({ schema, space }: { schema: Type.AnyEntity; space: Space }): Node.Node => {
361
+ return {
362
+ id: `${space.id}/${Type.getTypename(schema)}`,
363
+ type: `${meta.id}/static-schema`,
364
+ data: schema,
365
+ properties: {
366
+ label: getDynamicLabel('typename label', Type.getTypename(schema), {
367
+ count: 2,
368
+ default: Type.getTypename(schema),
369
+ }),
370
+ icon: 'ph--database--regular',
371
+ iconHue: 'green',
372
+ role: 'branch',
373
+ selectable: false,
374
+ canDrop: CAN_DROP_FALSE,
375
+ space,
376
+ },
377
+ };
378
+ };
379
+
380
+ //
381
+ // Action Constructors
382
+ //
383
+
384
+ /**
385
+ * Builds the action list for a space node (migrate, create object, rename).
386
+ * Results are cached by space id and state flags.
387
+ *
388
+ * @param space - Space to build actions for.
389
+ * @param migrating - When true, treats the space as currently migrating (disables migrate action).
390
+ * @returns Array of graph action descriptors for the space.
391
+ */
392
+ export const constructSpaceActions = ({ space, migrating }: { space: Space; migrating?: boolean }) => {
302
393
  const state = space.state.get();
303
394
  const hasPendingMigration = checkPendingMigration(space);
395
+ const isMigrating = migrating || Migrations.running(space);
396
+
397
+ const cached = spaceActionsCache.get(space.id);
398
+ if (
399
+ cached &&
400
+ cached.state === state &&
401
+ cached.hasPendingMigration === hasPendingMigration &&
402
+ cached.migrating === isMigrating
403
+ ) {
404
+ return cached.actions;
405
+ }
406
+
304
407
  const getId = (id: string) => `${id}/${space.id}`;
305
- const actions: NodeArg<ActionData>[] = [];
408
+ const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [];
306
409
 
307
410
  if (hasPendingMigration) {
308
411
  actions.push({
309
- id: getId(SpaceAction.Migrate._tag),
310
- type: ACTION_GROUP_TYPE,
311
- data: async () => {
312
- await dispatch(createIntent(SpaceAction.Migrate, { space }));
313
- },
412
+ id: getId(SpaceOperation.Migrate.meta.key),
413
+ type: Node.ActionGroupType,
414
+ data: () => Operation.invoke(SpaceOperation.Migrate, { space }),
314
415
  properties: {
315
- label: ['migrate space label', { ns: SPACE_PLUGIN }],
416
+ label: MIGRATE_SPACE_LABEL,
316
417
  icon: 'ph--database--regular',
317
418
  disposition: 'list-item-primary',
318
- disabled: migrating || Migrations.running(space),
419
+ disabled: isMigrating,
319
420
  },
320
421
  });
321
422
  }
@@ -323,26 +424,22 @@ export const constructSpaceActions = ({
323
424
  if (state === SpaceState.SPACE_READY && !hasPendingMigration) {
324
425
  actions.push(
325
426
  {
326
- id: getId(SpaceAction.OpenCreateObject._tag),
327
- type: ACTION_TYPE,
328
- data: async () => {
329
- await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
330
- },
427
+ id: getId(SpaceOperation.OpenCreateObject.meta.key),
428
+ type: Node.ActionType,
429
+ data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: space.db }),
331
430
  properties: {
332
- label: ['create object in space label', { ns: SPACE_PLUGIN }],
431
+ label: CREATE_OBJECT_IN_SPACE_LABEL,
333
432
  icon: 'ph--plus--regular',
334
- disposition: 'item',
433
+ disposition: 'list-item-primary',
335
434
  testId: 'spacePlugin.createObject',
336
435
  },
337
436
  },
338
437
  {
339
- id: getId(SpaceAction.Rename._tag),
340
- type: ACTION_TYPE,
341
- data: async (params?: InvokeParams) => {
342
- await dispatch(createIntent(SpaceAction.Rename, { space, caller: params?.caller }));
343
- },
438
+ id: getId(SpaceOperation.Rename.meta.key),
439
+ type: Node.ActionType,
440
+ data: (params?: Node.InvokeProps) => Operation.invoke(SpaceOperation.Rename, { space, caller: params?.caller }),
344
441
  properties: {
345
- label: ['rename space label', { ns: SPACE_PLUGIN }],
442
+ label: RENAME_SPACE_LABEL,
346
443
  icon: 'ph--pencil-simple-line--regular',
347
444
  keyBinding: {
348
445
  macos: 'shift+F6',
@@ -353,44 +450,52 @@ export const constructSpaceActions = ({
353
450
  );
354
451
  }
355
452
 
453
+ spaceActionsCache.set(space.id, { state, hasPendingMigration, migrating: isMigrating, actions });
356
454
  return actions;
357
455
  };
358
456
 
359
- export const createStaticSchemaNode = ({ schema, space }: { schema: Type.Obj.Any; space: Space }) => {
360
- return {
361
- id: `${space.id}/${Type.getTypename(schema)}`,
362
- type: `${SPACE_PLUGIN}/static-schema`,
363
- data: schema,
364
- properties: {
365
- label: ['typename label', { ns: Type.getTypename(schema), default: Type.getTypename(schema) }],
366
- icon: 'ph--database--regular',
367
- role: 'branch',
368
- canDrop: () => false,
369
- space,
370
- },
371
- };
372
- };
373
-
457
+ /**
458
+ * Builds the action list for a static schema node (add view, rename, delete, snapshot).
459
+ *
460
+ * @param schema - ECHO schema entity (e.g. static record type).
461
+ * @param space - Space that owns the schema.
462
+ * @param deletable - Whether the delete/snapshot actions are enabled.
463
+ * @returns Array of graph action descriptors for the schema.
464
+ */
374
465
  export const createStaticSchemaActions = ({
375
466
  schema,
376
467
  space,
377
468
  deletable,
378
469
  }: {
379
- schema: Type.Obj.Any;
470
+ schema: Type.AnyObj;
380
471
  space: Space;
381
472
  deletable: boolean;
382
473
  }) => {
383
474
  const getId = (id: string) => `${space.id}/${Type.getTypename(schema)}/${id}`;
384
475
 
385
- const actions: NodeArg<ActionData>[] = [
476
+ const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [
386
477
  {
387
- id: getId(SpaceAction.RenameObject._tag),
388
- type: ACTION_TYPE,
389
- data: async (params?: InvokeParams) => {
390
- throw new Error('Not implemented');
478
+ id: getId(SpaceOperation.AddObject.meta.key),
479
+ type: Node.ActionType,
480
+ data: () =>
481
+ Operation.invoke(SpaceOperation.OpenCreateObject, {
482
+ target: space.db,
483
+ views: true,
484
+ initialFormValues: { typename: Type.getTypename(schema) },
485
+ }),
486
+ properties: {
487
+ label: ADD_VIEW_TO_SCHEMA_LABEL,
488
+ icon: 'ph--plus--regular',
489
+ disposition: 'list-item-primary',
490
+ testId: 'spacePlugin.addViewToSchema',
391
491
  },
492
+ },
493
+ {
494
+ id: getId(SpaceOperation.RenameObject.meta.key),
495
+ type: Node.ActionType,
496
+ data: () => Effect.fail(new Error('Not implemented')),
392
497
  properties: {
393
- label: ['rename object label', { ns: Type.getTypename(DataType.StoredSchema) }],
498
+ label: getDynamicLabel('rename object label', Type.getTypename(Type.PersistentType)),
394
499
  icon: 'ph--pencil-simple-line--regular',
395
500
  disabled: true,
396
501
  disposition: 'list-item',
@@ -398,119 +503,113 @@ export const createStaticSchemaActions = ({
398
503
  },
399
504
  },
400
505
  {
401
- id: getId(SpaceAction.RemoveObjects._tag),
402
- type: ACTION_TYPE,
403
- data: async () => {
404
- const index = space.properties.staticRecords.findIndex(
405
- (typename: string) => typename === Type.getTypename(schema),
406
- );
407
- if (index > -1) {
408
- space.properties.staticRecords.splice(index, 1);
409
- }
410
- },
506
+ id: getId(SpaceOperation.RemoveObjects.meta.key),
507
+ type: Node.ActionType,
508
+ data: () =>
509
+ Effect.sync(() => {
510
+ const index = space.properties.staticRecords.findIndex(
511
+ (typename: string) => typename === Type.getTypename(schema),
512
+ );
513
+ if (index > -1) {
514
+ Obj.change(space.properties, (p) => {
515
+ p.staticRecords.splice(index, 1);
516
+ });
517
+ }
518
+ }),
411
519
  properties: {
412
- label: ['delete object label', { ns: Type.getTypename(DataType.StoredSchema) }],
520
+ label: getDynamicLabel('delete object label', Type.getTypename(Type.PersistentType)),
413
521
  icon: 'ph--trash--regular',
414
522
  disposition: 'list-item',
415
523
  disabled: !deletable,
416
524
  testId: 'spacePlugin.deleteObject',
417
525
  },
418
526
  },
527
+ {
528
+ id: getId(SpaceOperation.Snapshot.meta.key),
529
+ type: Node.ActionType,
530
+ data: Effect.fnUntraced(function* () {
531
+ const result = yield* Operation.invoke(SpaceOperation.Snapshot, {
532
+ db: space.db,
533
+ query: Query.select(Filter.type(schema)).ast,
534
+ });
535
+ if (result.snapshot) {
536
+ yield* Effect.tryPromise(() =>
537
+ downloadBlob(result.snapshot, createFilename({ parts: [space.id, Type.getTypename(schema)], ext: 'json' })),
538
+ );
539
+ }
540
+ }),
541
+ properties: {
542
+ label: SNAPSHOT_BY_SCHEMA_LABEL,
543
+ icon: 'ph--camera--regular',
544
+ disposition: 'list-item',
545
+ },
546
+ },
419
547
  ];
420
548
 
421
549
  return actions;
422
550
  };
423
551
 
424
- export const createObjectNode = ({
425
- space,
426
- object,
427
- droppable = true,
428
- navigable = false,
429
- resolve,
430
- }: {
431
- space: Space;
432
- object: Obj.Any;
433
- droppable?: boolean;
434
- navigable?: boolean;
435
- resolve: (typename: string) => Record<string, any>;
436
- }) => {
437
- const type = Obj.getTypename(object);
438
- if (!type) {
439
- return undefined;
440
- }
441
-
442
- const metadata = resolve(type);
443
- const partials = Obj.instanceOf(DataType.Collection, object)
444
- ? getCollectionGraphNodePartials({ collection: object, space, resolve })
445
- : Obj.instanceOf(DataType.QueryCollection, object)
446
- ? getQueryCollectionNodePartials({ collection: object, space, resolve })
447
- : Obj.instanceOf(DataType.StoredSchema, object)
448
- ? getSchemaGraphNodePartials()
449
- : Obj.instanceOf(DataType.View, object)
450
- ? getViewGraphNodePartials({ view: object, resolve })
451
- : metadata.graphProps;
452
-
453
- const label = Obj.getLabel(object) ||
454
- // TODO(wittjosiah): Remove metadata labels.
455
- metadata.label?.(object) || ['object name placeholder', { ns: type, default: 'New item' }];
456
-
457
- return {
458
- id: fullyQualifiedId(object),
459
- type,
460
- cacheable: ['label', 'icon', 'role'],
461
- data: object,
462
- properties: {
463
- label,
464
- icon: metadata.icon ?? 'ph--placeholder--regular',
465
- testId: 'spacePlugin.object',
466
- persistenceClass: 'echo',
467
- persistenceKey: space?.id,
468
- canDrop: (source: TreeData) => {
469
- return droppable && isGraphNode(source.item) && Obj.isObject(source.item.data);
470
- },
471
- ...partials,
472
- },
473
- };
474
- };
475
-
552
+ /**
553
+ * Builds the action list for an ECHO object node (create, rename, delete, copy link, etc.).
554
+ *
555
+ * @param object - ECHO object to build actions for.
556
+ * @param graph - Readable app graph (used for action wiring).
557
+ * @param resolve - Metadata resolver for typename.
558
+ * @param capabilities - Capability manager for feature checks.
559
+ * @param shareableLinkOrigin - Origin URL for shareable links.
560
+ * @param deletable - Whether delete action is included. Defaults to true.
561
+ * @param navigable - Whether the object is navigable (affects available actions). Defaults to false.
562
+ * @returns Array of graph action descriptors for the object.
563
+ */
476
564
  export const constructObjectActions = ({
477
565
  object,
478
566
  graph,
479
- dispatch,
480
- objectForms,
567
+ resolve,
568
+ capabilities,
481
569
  deletable = true,
482
570
  navigable = false,
571
+ shareableLinkOrigin,
483
572
  }: {
484
- object: Obj.Any;
485
- graph: ReadableGraph;
486
- dispatch: PromiseIntentDispatcher;
487
- objectForms: ObjectForm<any>[];
573
+ object: Obj.Unknown;
574
+ graph: Graph.ReadableGraph;
575
+ resolve: (typename: string) => Record<string, any>;
576
+ capabilities: CapabilityManager.CapabilityManager;
577
+ shareableLinkOrigin: string;
488
578
  deletable?: boolean;
489
579
  navigable?: boolean;
490
580
  }) => {
491
- const space = getSpace(object);
492
- invariant(space, 'Space not found');
581
+ const db = Obj.getDatabase(object);
582
+ invariant(db, 'Database not found');
493
583
  const typename = Obj.getTypename(object);
494
584
  invariant(typename, 'Object has no typename');
495
585
 
496
- const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;
586
+ const getId = (id: string) => `${id}/${Obj.getDXN(object).toString()}`;
497
587
 
498
- const queryCollection = Obj.instanceOf(DataType.QueryCollection, object) ? object : undefined;
499
- const matchingObjectForm = queryCollection
500
- ? objectForms.find((form) => Type.getTypename(form.objectSchema) === queryCollection.query.typename)
501
- : undefined;
588
+ const metadataKey = Match.value(object).pipe(
589
+ Match.when(Obj.instanceOf(Feed.Feed), (feed: Feed.Feed) => feed.kind ?? Obj.getTypename(feed)!),
590
+ Match.when(Obj.instanceOf(ManagedCollection.ManagedCollection), (managed) => {
591
+ const [, feedKind] = managed.key.split('~') ?? [];
592
+ return feedKind ?? managed.key;
593
+ }),
594
+ Match.orElse((obj) => Obj.getTypename(obj)!),
595
+ );
596
+ const managedCollection = Option.some(object).pipe(
597
+ Option.filter(Obj.instanceOf(ManagedCollection.ManagedCollection)),
598
+ Option.getOrUndefined,
599
+ );
600
+ const metadata = metadataKey ? resolve(metadataKey) : {};
601
+ const createObject = metadata.createObject;
602
+ const inputSchema = metadata.inputSchema;
502
603
 
503
- const actions: NodeArg<ActionData>[] = [
504
- ...(Obj.instanceOf(DataType.Collection, object)
604
+ const actions: Node.NodeArg<Node.ActionData<Operation.Service>>[] = [
605
+ ...(Obj.instanceOf(Collection.Collection, object)
505
606
  ? [
506
607
  {
507
- id: getId(SpaceAction.OpenCreateObject._tag),
508
- type: ACTION_TYPE,
509
- data: async () => {
510
- await dispatch(createIntent(SpaceAction.OpenCreateObject, { target: object }));
511
- },
608
+ id: getId(SpaceOperation.OpenCreateObject.meta.key),
609
+ type: Node.ActionType,
610
+ data: () => Operation.invoke(SpaceOperation.OpenCreateObject, { target: object }),
512
611
  properties: {
513
- label: ['create object in collection label', { ns: SPACE_PLUGIN }],
612
+ label: CREATE_OBJECT_IN_COLLECTION_LABEL,
514
613
  icon: 'ph--plus--regular',
515
614
  disposition: 'list-item-primary',
516
615
  testId: 'spacePlugin.createObject',
@@ -518,31 +617,75 @@ export const constructObjectActions = ({
518
617
  },
519
618
  ]
520
619
  : []),
521
- ...(matchingObjectForm
620
+ ...(Obj.instanceOf(Type.PersistentType, object)
522
621
  ? [
523
622
  {
524
- id: getId(SpaceAction.OpenCreateObject._tag),
525
- type: ACTION_TYPE,
526
- data: async () => {
527
- if (matchingObjectForm.formSchema) {
528
- await dispatch(
529
- createIntent(SpaceAction.OpenCreateObject, {
530
- target: space,
531
- typename: queryCollection?.query.typename,
532
- }),
533
- );
534
- } else {
535
- await dispatch(
536
- pipe(
537
- matchingObjectForm.getIntent({}, { space }),
538
- chain(SpaceAction.AddObject, { target: space, hidden: true }),
539
- chain(LayoutAction.Open, { part: 'main' }),
540
- ),
623
+ id: getId(SpaceOperation.AddObject.meta.key),
624
+ type: Node.ActionType,
625
+ data: () =>
626
+ Operation.invoke(SpaceOperation.OpenCreateObject, {
627
+ target: db,
628
+ views: true,
629
+ initialFormValues: { typename: object.typename },
630
+ }),
631
+ properties: {
632
+ label: ADD_VIEW_TO_SCHEMA_LABEL,
633
+ icon: 'ph--plus--regular',
634
+ disposition: 'list-item-primary',
635
+ testId: 'spacePlugin.addViewToSchema',
636
+ },
637
+ },
638
+ {
639
+ id: getId(SpaceOperation.Snapshot.meta.key),
640
+ type: Node.ActionType,
641
+ data: Effect.fnUntraced(function* () {
642
+ const result = yield* Operation.invoke(SpaceOperation.Snapshot, {
643
+ db,
644
+ query: Query.select(Filter.type(JsonSchema.toEffectSchema(object.jsonSchema))).ast,
645
+ });
646
+ if (result.snapshot) {
647
+ yield* Effect.promise(() =>
648
+ downloadBlob(result.snapshot, createFilename({ parts: [db.spaceId, object.typename], ext: 'json' })),
541
649
  );
542
650
  }
651
+ }),
652
+ properties: {
653
+ label: SNAPSHOT_BY_SCHEMA_LABEL,
654
+ icon: 'ph--camera--regular',
655
+ disposition: 'list-item',
543
656
  },
657
+ },
658
+ ]
659
+ : []),
660
+ ...(createObject && managedCollection
661
+ ? [
662
+ {
663
+ id: getId(SpaceOperation.OpenCreateObject.meta.key),
664
+ type: Node.ActionType,
665
+ data: Effect.fnUntraced(function* () {
666
+ if (inputSchema) {
667
+ yield* Operation.invoke(SpaceOperation.OpenCreateObject, {
668
+ target: db,
669
+ typename: managedCollection ? metadataKey : undefined,
670
+ });
671
+ } else {
672
+ const createdObject = yield* createObject({}, { db, capabilities }) as Effect.Effect<
673
+ Obj.Unknown,
674
+ Error,
675
+ never
676
+ >;
677
+ const addResult = yield* Operation.invoke(SpaceOperation.AddObject, {
678
+ target: db,
679
+ hidden: true,
680
+ object: createdObject,
681
+ });
682
+ if (addResult.id) {
683
+ yield* Operation.invoke(LayoutOperation.Open, { subject: [addResult.id] });
684
+ }
685
+ }
686
+ }),
544
687
  properties: {
545
- label: ['create object in smart collection label', { ns: SPACE_PLUGIN }],
688
+ label: CREATE_OBJECT_IN_SYSTEM_COLLECTION_LABEL,
546
689
  icon: 'ph--plus--regular',
547
690
  disposition: 'list-item-primary',
548
691
  testId: 'spacePlugin.createObject',
@@ -550,56 +693,64 @@ export const constructObjectActions = ({
550
693
  },
551
694
  ]
552
695
  : []),
553
- {
554
- id: getId(SpaceAction.RenameObject._tag),
555
- type: ACTION_TYPE,
556
- data: async (params?: InvokeParams) => {
557
- await dispatch(createIntent(SpaceAction.RenameObject, { object, caller: params?.caller }));
558
- },
559
- properties: {
560
- label: ['rename object label', { ns: typename }],
561
- icon: 'ph--pencil-simple-line--regular',
562
- disposition: 'list-item',
563
- // TODO(wittjosiah): Not working.
564
- // keyBinding: {
565
- // macos: 'shift+F6',
566
- // },
567
- testId: 'spacePlugin.renameObject',
568
- },
569
- },
570
- {
571
- id: getId(SpaceAction.RemoveObjects._tag),
572
- type: ACTION_TYPE,
573
- data: async () => {
574
- const collection = graph
575
- .getConnections(fullyQualifiedId(object), 'inbound')
576
- .find(({ data }) => Obj.instanceOf(DataType.Collection, data))?.data;
577
- await dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [object], target: collection }));
578
- },
579
- properties: {
580
- label: ['delete object label', { ns: typename }],
581
- icon: 'ph--trash--regular',
582
- disposition: 'list-item',
583
- disabled: !deletable,
584
- // TODO(wittjosiah): This is a browser shortcut.
585
- // keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
586
- testId: 'spacePlugin.deleteObject',
587
- },
588
- },
696
+ ...(managedCollection
697
+ ? []
698
+ : [
699
+ {
700
+ id: getId(SpaceOperation.RenameObject.meta.key),
701
+ type: Node.ActionType,
702
+ data: (params?: Node.InvokeProps) =>
703
+ Operation.invoke(SpaceOperation.RenameObject, { object, caller: params?.caller }),
704
+ properties: {
705
+ label: getDynamicLabel('rename object label', metadataKey),
706
+ icon: 'ph--pencil-simple-line--regular',
707
+ disposition: 'list-item',
708
+ // TODO(wittjosiah): Not working.
709
+ // keyBinding: {
710
+ // macos: 'shift+F6',
711
+ // },
712
+ testId: 'spacePlugin.renameObject',
713
+ },
714
+ },
715
+ {
716
+ id: getId(SpaceOperation.RemoveObjects.meta.key),
717
+ type: Node.ActionType,
718
+ data: Effect.fnUntraced(function* () {
719
+ const collection = Graph.getConnections(
720
+ graph,
721
+ Obj.getDXN(object).toString(),
722
+ Node.childRelation('inbound'),
723
+ ).find((node: Node.Node): node is Node.Node<Collection.Collection> =>
724
+ Obj.instanceOf(Collection.Collection, node.data),
725
+ )?.data;
726
+ yield* Operation.invoke(SpaceOperation.RemoveObjects, { objects: [object], target: collection });
727
+ }),
728
+ properties: {
729
+ label: getDynamicLabel('delete object label', metadataKey),
730
+ icon: 'ph--trash--regular',
731
+ disposition: 'list-item',
732
+ disabled: !deletable,
733
+ // TODO(wittjosiah): This is a browser shortcut.
734
+ // keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',
735
+ testId: 'spacePlugin.deleteObject',
736
+ },
737
+ },
738
+ ]),
589
739
  ...(navigable ||
590
- (!Obj.instanceOf(DataType.Collection, object) &&
591
- !Obj.instanceOf(DataType.QueryCollection, object) &&
592
- !Obj.instanceOf(DataType.StoredSchema, object))
740
+ (!Obj.instanceOf(Collection.Collection, object) &&
741
+ !Obj.instanceOf(ManagedCollection.ManagedCollection, object) &&
742
+ !Obj.instanceOf(Type.PersistentType, object))
593
743
  ? [
594
744
  {
595
745
  id: getId('copy-link'),
596
- type: ACTION_TYPE,
597
- data: async () => {
598
- const url = `${window.location.origin}/${space.id}/${fullyQualifiedId(object)}`;
599
- await navigator.clipboard.writeText(url);
600
- },
746
+ type: Node.ActionType,
747
+ data: () =>
748
+ Effect.promise(async () => {
749
+ const url = `${shareableLinkOrigin}/${db.spaceId}/${Obj.getDXN(object).toString()}`;
750
+ await navigator.clipboard.writeText(url);
751
+ }),
601
752
  properties: {
602
- label: ['copy link label', { ns: SPACE_PLUGIN }],
753
+ label: COPY_LINK_LABEL,
603
754
  icon: 'ph--link--regular',
604
755
  disposition: 'list-item',
605
756
  testId: 'spacePlugin.copyLink',
@@ -609,13 +760,11 @@ export const constructObjectActions = ({
609
760
  : []),
610
761
  // TODO(wittjosiah): Factor out and apply to all nodes.
611
762
  {
612
- id: getId(LayoutAction.Expose._tag),
613
- type: ACTION_TYPE,
614
- data: async () => {
615
- await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: fullyQualifiedId(object) }));
616
- },
763
+ id: getId(LayoutOperation.Expose.meta.key),
764
+ type: Node.ActionType,
765
+ data: () => Operation.invoke(LayoutOperation.Expose, { subject: Obj.getDXN(object).toString() }),
617
766
  properties: {
618
- label: ['expose object label', { ns: SPACE_PLUGIN }],
767
+ label: EXPOSE_OBJECT_LABEL,
619
768
  icon: 'ph--eye--regular',
620
769
  disposition: 'heading-list-item',
621
770
  testId: 'spacePlugin.exposeObject',
@@ -626,13 +775,152 @@ export const constructObjectActions = ({
626
775
  return actions;
627
776
  };
628
777
 
778
+ //
779
+ // Helpers
780
+ //
781
+
782
+ const checkPendingMigration = (space: Space) => {
783
+ return (
784
+ space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||
785
+ (space.state.get() === SpaceState.SPACE_READY &&
786
+ !!Migrations.versionProperty &&
787
+ space.properties[Migrations.versionProperty] !== Migrations.targetVersion)
788
+ );
789
+ };
790
+
791
+ /**
792
+ * Returns the display label for a space (name, namesCache entry, or fallback).
793
+ *
794
+ * @param space - Space to label.
795
+ * @param options.personal - If true, use personal-space fallback when unnamed.
796
+ * @param options.namesCache - Optional cache of space id to display name.
797
+ * @returns Label tuple (translation key or string, and namespace).
798
+ */
799
+ // TODO(wittjosiah): Factor out? Exposer via capability?
800
+ export const getSpaceDisplayName = (
801
+ space: Space,
802
+ { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},
803
+ ): Label => {
804
+ return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0
805
+ ? space.properties.name!
806
+ : namesCache[space.id]
807
+ ? namesCache[space.id]
808
+ : personal
809
+ ? PERSONAL_SPACE_LABEL
810
+ : UNNAMED_SPACE_LABEL;
811
+ };
812
+
813
+ // TODO(wittjosiah): Factor out.
814
+ const downloadBlob = async (blob: Blob, filename: string) => {
815
+ const url = URL.createObjectURL(blob);
816
+ const a = document.createElement('a');
817
+ a.href = url;
818
+ a.download = filename;
819
+
820
+ document.body.appendChild(a);
821
+ a.click();
822
+
823
+ document.body.removeChild(a);
824
+ URL.revokeObjectURL(url);
825
+ };
826
+
827
+ const buildCollectionPartials = (
828
+ collection: Collection.Collection,
829
+ db: Database.Database,
830
+ resolve: (typename: string) => Record<string, any>,
831
+ ) => ({
832
+ acceptPersistenceClass: ACCEPT_ECHO_CLASS,
833
+ acceptPersistenceKey: getAcceptPersistenceKey(db.spaceId),
834
+ role: 'branch' as const,
835
+ onTransferStart: (child: Node.Node<Obj.Unknown>, index?: number) => {
836
+ Obj.change(collection, (c) => {
837
+ if (!c.objects.find((object) => object.target === child.data)) {
838
+ if (typeof index !== 'undefined') {
839
+ c.objects.splice(index, 0, Ref.make(child.data));
840
+ } else {
841
+ c.objects.push(Ref.make(child.data));
842
+ }
843
+ }
844
+ });
845
+ },
846
+ onTransferEnd: (child: Node.Node<Obj.Unknown>, _destination: Node.Node) => {
847
+ Obj.change(collection, (c) => {
848
+ const index = c.objects.findIndex((object) => object.target === child.data);
849
+ if (index > -1) {
850
+ c.objects.splice(index, 1);
851
+ }
852
+ });
853
+ },
854
+ onCopy: async (child: Node.Node<Obj.Unknown>, index?: number) => {
855
+ const newObject = await cloneObject(child.data, resolve, db);
856
+ db.add(newObject);
857
+ Obj.change(collection, (c) => {
858
+ if (typeof index !== 'undefined') {
859
+ c.objects.splice(index, 0, Ref.make(newObject));
860
+ } else {
861
+ c.objects.push(Ref.make(newObject));
862
+ }
863
+ });
864
+ },
865
+ });
866
+
867
+ const getCollectionGraphNodePartials = ({
868
+ collection,
869
+ db,
870
+ resolve,
871
+ }: {
872
+ collection: Collection.Collection;
873
+ db: Database.Database;
874
+ resolve: (typename: string) => Record<string, any>;
875
+ }) => {
876
+ const id = Obj.getDXN(collection).toString();
877
+ let cached = collectionPartialsCache.get(id);
878
+ if (!cached) {
879
+ cached = buildCollectionPartials(collection, db, resolve);
880
+ collectionPartialsCache.set(id, cached);
881
+ }
882
+ return cached;
883
+ };
884
+
885
+ const getSystemCollectionNodePartials = ({
886
+ collection,
887
+ db,
888
+ resolve,
889
+ }: {
890
+ collection: ManagedCollection.ManagedCollection;
891
+ db: Database.Database;
892
+ resolve: (typename: string) => Record<string, any>;
893
+ }) => {
894
+ const cacheKey = `${db.spaceId}:${collection.key}`;
895
+ let cached = systemCollectionPartialsCache.get(cacheKey);
896
+ if (!cached) {
897
+ const [, feedKind] = collection.key.split('~');
898
+ const metadataKey = feedKind ?? collection.key;
899
+ const metadata = resolve(metadataKey);
900
+ cached = {
901
+ label: getDynamicLabel('typename label', metadataKey, { count: 2 }),
902
+ icon: metadata.icon,
903
+ iconHue: metadata.iconHue,
904
+ acceptPersistenceClass: ACCEPT_ECHO_CLASS,
905
+ acceptPersistenceKey: getAcceptPersistenceKey(db.spaceId),
906
+ role: 'branch',
907
+ };
908
+ systemCollectionPartialsCache.set(cacheKey, cached);
909
+ }
910
+ return cached;
911
+ };
912
+
913
+ //
914
+ // Deprecated
915
+ //
916
+
629
917
  /**
630
918
  * @deprecated This is a temporary solution.
631
919
  */
632
920
  export const getNestedObjects = async (
633
- object: Obj.Any,
921
+ object: Obj.Unknown,
634
922
  resolve: (typename: string) => Record<string, any>,
635
- ): Promise<Obj.Any[]> => {
923
+ ): Promise<Obj.Unknown[]> => {
636
924
  const type = Obj.getTypename(object);
637
925
  if (!type) {
638
926
  return [];
@@ -644,7 +932,7 @@ export const getNestedObjects = async (
644
932
  return [];
645
933
  }
646
934
 
647
- const objects: Obj.Any[] = await loadReferences(object);
935
+ const objects: Obj.Unknown[] = await loadReferences(object);
648
936
  const nested = await Promise.all(objects.map((object) => getNestedObjects(object, resolve)));
649
937
  return [...objects, ...nested.flat()];
650
938
  };
@@ -654,15 +942,15 @@ export const getNestedObjects = async (
654
942
  */
655
943
  // TODO(burdon): Remove.
656
944
  export const cloneObject = async (
657
- object: Type.Expando,
945
+ object: Obj.Unknown,
658
946
  resolve: (typename: string) => Record<string, any>,
659
- newSpace: Space,
660
- ): Promise<Type.Expando> => {
947
+ newDb: Database.Database,
948
+ ): Promise<Obj.Unknown> => {
661
949
  const schema = Obj.getSchema(object);
662
- const typename = schema ? (Type.getTypename(schema) ?? EXPANDO_TYPENAME) : EXPANDO_TYPENAME;
950
+ const typename = schema ? (Type.getTypename(schema) ?? Expando.Expando.typename) : Expando.Expando.typename;
663
951
  const metadata = resolve(typename);
664
952
  const serializer = metadata.serializer;
665
953
  invariant(serializer, `No serializer for type: ${typename}`);
666
954
  const content = await serializer.serialize({ object });
667
- return serializer.deserialize({ content, space: newSpace, newId: true });
955
+ return serializer.deserialize({ content, db: newDb, newId: true });
668
956
  };