@dxos/plugin-space 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

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 (331) hide show
  1. package/dist/lib/browser/{CollectionMain-AX7KKXWP.mjs → CollectionArticle-WTHWY4YS.mjs} +8 -8
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-Y2LBZX2G.mjs → app-graph-builder-HABMCWAI.mjs} +170 -173
  10. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-425OVRTW.mjs → app-graph-serializer-G3VFEGTN.mjs} +10 -10
  12. package/dist/lib/browser/app-graph-serializer-G3VFEGTN.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-6A3NWBB6.mjs +392 -0
  14. package/dist/lib/browser/chunk-6A3NWBB6.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-PUF3B7XO.mjs → chunk-C6DAPIFF.mjs} +4 -4
  16. package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-X6COEDOD.mjs → chunk-GJOZILGC.mjs} +182 -118
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-6KVKMOGQ.mjs → chunk-KCZ527AM.mjs} +607 -456
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-CVZAZRW4.mjs → chunk-P25R3AOK.mjs} +34 -4
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-YZJWWMNB.mjs → chunk-POFUXISV.mjs} +68 -62
  24. package/dist/lib/browser/chunk-POFUXISV.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  26. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-EIXZABXD.mjs → chunk-WJXU4GKV.mjs} +2 -2
  28. package/dist/lib/browser/{identity-created-PW2BA46S.mjs → identity-created-NAXTPQXE.mjs} +3 -3
  29. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  30. package/dist/lib/browser/index.mjs +83 -110
  31. package/dist/lib/browser/index.mjs.map +3 -3
  32. package/dist/lib/browser/{intent-resolver-2TBYHOBA.mjs → intent-resolver-RZEWNJ2K.mjs} +90 -82
  33. package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-root-KMJXJ5VX.mjs → react-root-JCRD74GI.mjs} +9 -8
  36. package/dist/lib/browser/react-root-JCRD74GI.mjs.map +7 -0
  37. package/dist/lib/browser/{react-surface-YAJUAMER.mjs → react-surface-VOETEAG3.mjs} +64 -84
  38. package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
  39. package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
  40. package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
  41. package/dist/lib/browser/{settings-UYYJ225A.mjs → settings-TRLI52I5.mjs} +3 -3
  42. package/dist/lib/browser/{spaces-ready-YNZPWXA3.mjs → spaces-ready-OHGCWZHQ.mjs} +19 -12
  43. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  44. package/dist/lib/browser/{state-BPU73TYO.mjs → state-C7N6EDDZ.mjs} +3 -3
  45. package/dist/lib/browser/types/index.mjs +10 -4
  46. package/dist/lib/node-esm/{CollectionMain-EU57SRYK.mjs → CollectionArticle-KHXYT3SH.mjs} +8 -8
  47. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  48. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs +142 -0
  49. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs.map +7 -0
  50. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs +145 -0
  51. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs.map +7 -0
  52. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +117 -0
  53. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
  54. package/dist/lib/node-esm/{app-graph-builder-DMNLDT7E.mjs → app-graph-builder-T6VJKIOA.mjs} +170 -173
  55. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
  56. package/dist/lib/node-esm/{app-graph-serializer-ZEDSY77N.mjs → app-graph-serializer-2NLWWFUB.mjs} +10 -10
  57. package/dist/lib/node-esm/app-graph-serializer-2NLWWFUB.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-FLRC6XWU.mjs → chunk-7EV4SN47.mjs} +33 -4
  59. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-7UIEPBQJ.mjs → chunk-AX3UGL5D.mjs} +68 -62
  61. package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  63. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs → chunk-H4JILUJK.mjs} +2 -2
  65. package/dist/lib/node-esm/{chunk-ZFCCFELA.mjs → chunk-I6FZP42D.mjs} +182 -118
  66. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-L26ZIGHA.mjs → chunk-JAMGJUFU.mjs} +607 -456
  68. package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-36TAYXV7.mjs → chunk-WWGV5FJM.mjs} +4 -4
  70. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
  72. package/dist/lib/node-esm/chunk-X34VDVMY.mjs.map +7 -0
  73. package/dist/lib/node-esm/{identity-created-MWTLGQRU.mjs → identity-created-OXLKCJE3.mjs} +3 -3
  74. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  75. package/dist/lib/node-esm/index.mjs +83 -110
  76. package/dist/lib/node-esm/index.mjs.map +3 -3
  77. package/dist/lib/node-esm/{intent-resolver-YOG27WOG.mjs → intent-resolver-4PHJWDXW.mjs} +90 -82
  78. package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
  79. package/dist/lib/node-esm/meta.json +1 -1
  80. package/dist/lib/node-esm/{react-root-27QMJZD2.mjs → react-root-O5I5CDJ7.mjs} +9 -8
  81. package/dist/lib/node-esm/react-root-O5I5CDJ7.mjs.map +7 -0
  82. package/dist/lib/node-esm/{react-surface-RC73GAN5.mjs → react-surface-J3XDMU2D.mjs} +64 -84
  83. package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
  84. package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
  85. package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
  86. package/dist/lib/node-esm/{settings-Q736OQRP.mjs → settings-MNQTKHL7.mjs} +3 -3
  87. package/dist/lib/node-esm/{spaces-ready-XZQD7Q65.mjs → spaces-ready-ZPU24DA2.mjs} +19 -12
  88. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  89. package/dist/lib/node-esm/{state-BY75TM32.mjs → state-45TXZQJ6.mjs} +3 -3
  90. package/dist/lib/node-esm/types/index.mjs +10 -4
  91. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/capabilities.d.ts +12 -6
  94. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/index.d.ts +1 -1
  96. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/repair.d.ts +4 -0
  101. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  103. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  104. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  105. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  106. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  107. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  108. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  109. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +218 -214
  110. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +16 -9
  112. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  113. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  114. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  115. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  116. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  117. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  118. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1591 -0
  119. package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
  120. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  121. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  122. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  123. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  124. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  125. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  126. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  127. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  128. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  129. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  130. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  131. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  132. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  134. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  135. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1424 -0
  136. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
  138. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  139. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  140. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  141. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  142. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  143. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +219 -215
  144. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  145. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  146. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  147. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  148. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +6 -5
  149. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  150. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +218 -214
  151. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  152. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  153. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  154. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  155. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  156. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  157. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  158. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  159. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +218 -214
  160. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  162. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +219 -215
  163. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  164. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  165. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  166. package/dist/types/src/components/index.d.ts +10 -17
  167. package/dist/types/src/components/index.d.ts.map +1 -1
  168. package/dist/types/src/helpers/index.d.ts +2 -0
  169. package/dist/types/src/helpers/index.d.ts.map +1 -0
  170. package/dist/types/src/helpers/query.d.ts +8 -0
  171. package/dist/types/src/helpers/query.d.ts.map +1 -0
  172. package/dist/types/src/helpers/query.test.d.ts +2 -0
  173. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  174. package/dist/types/src/hooks/index.d.ts +1 -0
  175. package/dist/types/src/hooks/index.d.ts.map +1 -1
  176. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  177. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  178. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  179. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  180. package/dist/types/src/index.d.ts +1 -0
  181. package/dist/types/src/index.d.ts.map +1 -1
  182. package/dist/types/src/meta.d.ts.map +1 -1
  183. package/dist/types/src/translations.d.ts +218 -214
  184. package/dist/types/src/translations.d.ts.map +1 -1
  185. package/dist/types/src/types/form.d.ts +24 -0
  186. package/dist/types/src/types/form.d.ts.map +1 -0
  187. package/dist/types/src/types/index.d.ts +1 -0
  188. package/dist/types/src/types/index.d.ts.map +1 -1
  189. package/dist/types/src/types/types.d.ts +33 -74
  190. package/dist/types/src/types/types.d.ts.map +1 -1
  191. package/dist/types/src/util.d.ts +19 -33
  192. package/dist/types/src/util.d.ts.map +1 -1
  193. package/dist/types/tsconfig.tsbuildinfo +1 -1
  194. package/package.json +57 -48
  195. package/src/SpacePlugin.ts +64 -89
  196. package/src/capabilities/app-graph-builder.ts +165 -233
  197. package/src/capabilities/app-graph-serializer.ts +5 -5
  198. package/src/capabilities/capabilities.ts +18 -8
  199. package/src/capabilities/identity-created.ts +2 -2
  200. package/src/capabilities/index.ts +1 -1
  201. package/src/capabilities/intent-resolver.ts +66 -66
  202. package/src/capabilities/react-root.tsx +2 -1
  203. package/src/capabilities/react-surface.tsx +69 -119
  204. package/src/capabilities/repair.ts +57 -0
  205. package/src/capabilities/spaces-ready.ts +14 -5
  206. package/src/components/AwaitingObject.tsx +11 -13
  207. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +5 -4
  208. package/src/components/CollectionSection.tsx +6 -4
  209. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +6 -6
  210. package/src/components/CreateDialog/CreateObjectDialog.tsx +57 -40
  211. package/src/components/CreateDialog/CreateObjectPanel.tsx +33 -26
  212. package/src/components/CreateDialog/CreateSpaceDialog.tsx +25 -7
  213. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +21 -5
  214. package/src/components/JoinDialog/index.ts +5 -0
  215. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +1 -1
  216. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +11 -9
  217. package/src/components/MembersContainer/index.ts +5 -0
  218. package/src/components/{ObjectDetailsPanel.tsx → ObjectDetailsPanel/ObjectDetailsPanel.tsx} +8 -36
  219. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  220. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  221. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +5 -5
  222. package/src/components/ObjectRenamePopover/index.ts +5 -0
  223. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -5
  224. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  225. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  226. package/src/components/ObjectSettings/ForeignKeys.tsx +6 -6
  227. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +1 -1
  228. package/src/components/ObjectSettings/index.ts +3 -1
  229. package/src/components/RecordArticle.stories.tsx +115 -0
  230. package/src/components/RecordArticle.tsx +114 -0
  231. package/src/components/SchemaContainer.tsx +21 -24
  232. package/src/components/SpacePluginSettings.tsx +8 -2
  233. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +1 -1
  234. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +14 -9
  235. package/src/components/SpacePresence/index.ts +5 -0
  236. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +6 -5
  237. package/src/components/SpaceRenamePopover/index.ts +5 -0
  238. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +52 -13
  239. package/src/components/SyncStatus/InlineSyncStatus.tsx +5 -5
  240. package/src/components/SyncStatus/SyncStatus.stories.tsx +3 -2
  241. package/src/components/SyncStatus/SyncStatus.tsx +105 -9
  242. package/src/components/ViewEditor.tsx +57 -18
  243. package/src/components/index.ts +7 -8
  244. package/src/helpers/index.ts +5 -0
  245. package/src/helpers/query.test.ts +24 -0
  246. package/src/helpers/query.ts +158 -0
  247. package/src/hooks/index.ts +1 -0
  248. package/src/hooks/useActiveSpace.ts +2 -1
  249. package/src/hooks/useInputSurfaceLookup.tsx +7 -2
  250. package/src/hooks/useTypeOptions.ts +27 -0
  251. package/src/index.ts +1 -0
  252. package/src/meta.ts +5 -0
  253. package/src/translations.ts +67 -58
  254. package/src/types/form.ts +75 -0
  255. package/src/types/index.ts +1 -0
  256. package/src/types/types.ts +39 -44
  257. package/src/util.tsx +187 -121
  258. package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +0 -7
  259. package/dist/lib/browser/ObjectDetailsPanel-SJ4XUXXX.mjs +0 -90
  260. package/dist/lib/browser/ObjectDetailsPanel-SJ4XUXXX.mjs.map +0 -7
  261. package/dist/lib/browser/RecordMain-FHPCS6GM.mjs +0 -68
  262. package/dist/lib/browser/RecordMain-FHPCS6GM.mjs.map +0 -7
  263. package/dist/lib/browser/app-graph-builder-Y2LBZX2G.mjs.map +0 -7
  264. package/dist/lib/browser/app-graph-serializer-425OVRTW.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-6KVKMOGQ.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-CVZAZRW4.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-IRKDREHY.mjs +0 -11
  268. package/dist/lib/browser/chunk-IRKDREHY.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-OYHC63NL.mjs +0 -344
  270. package/dist/lib/browser/chunk-OYHC63NL.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-PUF3B7XO.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-X6COEDOD.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-YZJWWMNB.mjs.map +0 -7
  274. package/dist/lib/browser/identity-created-PW2BA46S.mjs.map +0 -7
  275. package/dist/lib/browser/intent-resolver-2TBYHOBA.mjs.map +0 -7
  276. package/dist/lib/browser/react-root-KMJXJ5VX.mjs.map +0 -7
  277. package/dist/lib/browser/react-surface-YAJUAMER.mjs.map +0 -7
  278. package/dist/lib/browser/schema-defs-2OCPV7JF.mjs +0 -26
  279. package/dist/lib/browser/schema-defs-2OCPV7JF.mjs.map +0 -7
  280. package/dist/lib/browser/spaces-ready-YNZPWXA3.mjs.map +0 -7
  281. package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +0 -7
  282. package/dist/lib/node-esm/ObjectDetailsPanel-P7D727OV.mjs +0 -91
  283. package/dist/lib/node-esm/ObjectDetailsPanel-P7D727OV.mjs.map +0 -7
  284. package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs +0 -70
  285. package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs.map +0 -7
  286. package/dist/lib/node-esm/app-graph-builder-DMNLDT7E.mjs.map +0 -7
  287. package/dist/lib/node-esm/app-graph-serializer-ZEDSY77N.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-36TAYXV7.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-7UIEPBQJ.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-ADEZJQE3.mjs +0 -345
  291. package/dist/lib/node-esm/chunk-ADEZJQE3.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-FLRC6XWU.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-L26ZIGHA.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-MWNATOXL.mjs +0 -13
  295. package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +0 -7
  296. package/dist/lib/node-esm/chunk-ZFCCFELA.mjs.map +0 -7
  297. package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs.map +0 -7
  298. package/dist/lib/node-esm/intent-resolver-YOG27WOG.mjs.map +0 -7
  299. package/dist/lib/node-esm/react-root-27QMJZD2.mjs.map +0 -7
  300. package/dist/lib/node-esm/react-surface-RC73GAN5.mjs.map +0 -7
  301. package/dist/lib/node-esm/schema-defs-X2Z7F2EV.mjs +0 -27
  302. package/dist/lib/node-esm/schema-defs-X2Z7F2EV.mjs.map +0 -7
  303. package/dist/lib/node-esm/spaces-ready-XZQD7Q65.mjs.map +0 -7
  304. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  305. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  306. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  307. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  308. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  309. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  310. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  311. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  312. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  313. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  314. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  315. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  316. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  317. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  318. package/dist/types/src/components/RecordMain.d.ts +0 -7
  319. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  320. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  321. package/src/capabilities/schema-defs.ts +0 -31
  322. package/src/components/PersistenceStatus.tsx +0 -83
  323. package/src/components/RecordMain.tsx +0 -43
  324. /package/dist/lib/browser/{chunk-EIXZABXD.mjs.map → chunk-WJXU4GKV.mjs.map} +0 -0
  325. /package/dist/lib/browser/{settings-UYYJ225A.mjs.map → settings-TRLI52I5.mjs.map} +0 -0
  326. /package/dist/lib/browser/{state-BPU73TYO.mjs.map → state-C7N6EDDZ.mjs.map} +0 -0
  327. /package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs.map → chunk-H4JILUJK.mjs.map} +0 -0
  328. /package/dist/lib/node-esm/{settings-Q736OQRP.mjs.map → settings-MNQTKHL7.mjs.map} +0 -0
  329. /package/dist/lib/node-esm/{state-BY75TM32.mjs.map → state-45TXZQJ6.mjs.map} +0 -0
  330. /package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +0 -0
  331. /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
@@ -2,20 +2,20 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
5
+ import { Atom } from '@effect-atom/atom-react';
6
6
  import * as Array from 'effect/Array';
7
7
  import * as Function from 'effect/Function';
8
8
  import * as Option from 'effect/Option';
9
9
  import * as Schema from 'effect/Schema';
10
10
 
11
11
  import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
12
- import { type QueryResult, type Space, SpaceState, getSpace, isSpace, parseId } from '@dxos/client/echo';
13
- import { Filter, Obj, Query, Type } from '@dxos/echo';
12
+ import { type Space, SpaceState, getSpace, isSpace } from '@dxos/client/echo';
13
+ import { DXN, type Database, type Entity, Filter, Obj, Type } from '@dxos/echo';
14
14
  import { log } from '@dxos/log';
15
15
  import { ClientCapabilities } from '@dxos/plugin-client';
16
16
  import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
17
- import { ROOT_ID, createExtension, rxFromObservable, rxFromSignal } from '@dxos/plugin-graph';
18
- import { DataType, getTypenameFromQuery } from '@dxos/schema';
17
+ import { ROOT_ID, atomFromObservable, atomFromSignal, createExtension } from '@dxos/plugin-graph';
18
+ import { Collection, View, ViewAnnotation, getTypenameFromQuery } from '@dxos/schema';
19
19
  import { isNonNullable } from '@dxos/util';
20
20
 
21
21
  import { getActiveSpace } from '../hooks';
@@ -24,20 +24,20 @@ import { SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';
24
24
  import {
25
25
  SHARED,
26
26
  SPACES,
27
+ atomFromQuery,
27
28
  constructObjectActions,
28
29
  constructSpaceActions,
29
30
  constructSpaceNode,
30
31
  createObjectNode,
31
32
  createStaticSchemaActions,
32
33
  createStaticSchemaNode,
33
- rxFromQuery,
34
34
  } from '../util';
35
35
 
36
36
  import { SpaceCapabilities } from './capabilities';
37
37
 
38
38
  export default (context: PluginContext) => {
39
- // TODO(wittjosiah): Make reactive.
40
- const resolve = (typename: string) =>
39
+ // TODO(wittjosiah): Using `get` and being reactive seems to cause a bug with Atom where disposed atoms are accessed.
40
+ const resolve = (get: Atom.Context) => (typename: string) =>
41
41
  context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
42
42
 
43
43
  const spacesNode = {
@@ -83,7 +83,7 @@ export default (context: PluginContext) => {
83
83
  id: `${meta.id}/primary-actions`,
84
84
  position: 'hoist',
85
85
  actions: (node) =>
86
- Rx.make((get) =>
86
+ Atom.make((get) =>
87
87
  Function.pipe(
88
88
  get(node),
89
89
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
@@ -160,7 +160,7 @@ export default (context: PluginContext) => {
160
160
  id: `${meta.id}/root`,
161
161
  position: 'hoist',
162
162
  connector: (node) =>
163
- Rx.make((get) =>
163
+ Atom.make((get) =>
164
164
  Function.pipe(
165
165
  get(node),
166
166
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
@@ -168,26 +168,26 @@ export default (context: PluginContext) => {
168
168
  Option.getOrElse(() => []),
169
169
  ),
170
170
  ),
171
- // resolver: ({ id }) => (id === SPACES ? spacesNode : undefined),
172
171
  }),
173
172
 
174
173
  // Create space nodes.
175
174
  createExtension({
176
175
  id: SPACES,
177
176
  connector: (node) => {
178
- let query: QueryResult<Type.Expando> | undefined;
179
- return Rx.make((get) =>
177
+ // TODO(wittjosiah): Find a simpler way to define this type.
178
+ let query: Database.QueryResult<Schema.Schema.Type<typeof Type.Expando>> | undefined;
179
+ return Atom.make((get) =>
180
180
  Function.pipe(
181
181
  get(node),
182
182
  Option.flatMap((node) => (node.id === SPACES ? Option.some(node) : Option.none())),
183
183
  Option.map(() => {
184
184
  const state = context.getCapability(SpaceCapabilities.State);
185
185
  const client = context.getCapability(ClientCapabilities.Client);
186
- const spacesRx = rxFromObservable(client.spaces);
187
- const isReadyRx = rxFromObservable(client.spaces.isReady);
186
+ const spacesAtom = atomFromObservable(client.spaces);
187
+ const isReadyAtom = atomFromObservable(client.spaces.isReady);
188
188
 
189
- const spaces = get(spacesRx);
190
- const isReady = get(isReadyRx);
189
+ const spaces = get(spacesAtom);
190
+ const isReady = get(isReadyAtom);
191
191
 
192
192
  if (!spaces || !isReady) {
193
193
  return [];
@@ -202,9 +202,9 @@ export default (context: PluginContext) => {
202
202
  if (!query) {
203
203
  query = client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED }));
204
204
  }
205
- const [spacesOrder] = get(rxFromQuery(query));
205
+ const [spacesOrder] = get(atomFromQuery(query));
206
206
  return get(
207
- rxFromSignal(() => {
207
+ atomFromSignal(() => {
208
208
  const order: string[] = spacesOrder?.order ?? [];
209
209
  const orderMap = new Map(order.map((id, index) => [id, index]));
210
210
  return [
@@ -222,7 +222,7 @@ export default (context: PluginContext) => {
222
222
  navigable: state.navigableCollections,
223
223
  personal: space === client.spaces.default,
224
224
  namesCache: state.spaceNames,
225
- resolve,
225
+ resolve: resolve(get),
226
226
  }),
227
227
  );
228
228
  }),
@@ -235,53 +235,13 @@ export default (context: PluginContext) => {
235
235
  ),
236
236
  );
237
237
  },
238
- // resolver: ({ id }) => {
239
- // if (id.length !== SPACE_ID_LENGTH) {
240
- // return;
241
- // }
242
-
243
- // const client = context.requestCapability(ClientCapabilities.Client);
244
- // const spaces = toSignal(
245
- // (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,
246
- // () => client.spaces.get(),
247
- // );
248
-
249
- // const isReady = toSignal(
250
- // (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,
251
- // () => client.spaces.isReady.get(),
252
- // );
253
-
254
- // if (!spaces || !isReady) {
255
- // return;
256
- // }
257
-
258
- // const space = spaces.find((space) => space.id === id);
259
- // if (!space) {
260
- // return;
261
- // }
262
-
263
- // if (space.state.get() === SpaceState.SPACE_INACTIVE) {
264
- // return false;
265
- // } else if (space.state.get() !== SpaceState.SPACE_READY) {
266
- // return undefined;
267
- // } else {
268
- // const state = context.requestCapability(SpaceCapabilities.State);
269
- // return constructSpaceNode({
270
- // space,
271
- // navigable: state.navigableCollections,
272
- // personal: space === client.spaces.default,
273
- // namesCache: state.spaceNames,
274
- // resolve,
275
- // });
276
- // }
277
- // },
278
238
  }),
279
239
 
280
240
  // Create space actions.
281
241
  createExtension({
282
242
  id: `${meta.id}/actions`,
283
243
  actions: (node) =>
284
- Rx.make((get) =>
244
+ Atom.make((get) =>
285
245
  Function.pipe(
286
246
  get(node),
287
247
  Option.flatMap((node) =>
@@ -313,7 +273,7 @@ export default (context: PluginContext) => {
313
273
  createExtension({
314
274
  id: `${meta.id}/root-collection`,
315
275
  connector: (node) =>
316
- Rx.make((get) =>
276
+ Atom.make((get) =>
317
277
  Function.pipe(
318
278
  get(node),
319
279
  Option.flatMap((node) =>
@@ -321,14 +281,14 @@ export default (context: PluginContext) => {
321
281
  ),
322
282
  Option.map((space) => {
323
283
  const state = context.getCapability(SpaceCapabilities.State);
324
- const spaceState = get(rxFromObservable(space.state));
284
+ const spaceState = get(atomFromObservable(space.state));
325
285
  if (spaceState !== SpaceState.SPACE_READY) {
326
286
  return [];
327
287
  }
328
288
 
329
289
  const collection = get(
330
- rxFromSignal(
331
- () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,
290
+ atomFromSignal(
291
+ () => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
332
292
  ),
333
293
  );
334
294
  if (!collection) {
@@ -336,7 +296,7 @@ export default (context: PluginContext) => {
336
296
  }
337
297
 
338
298
  return get(
339
- rxFromSignal(() =>
299
+ atomFromSignal(() =>
340
300
  Function.pipe(
341
301
  collection.objects,
342
302
  Array.map((object) => object.target),
@@ -345,7 +305,7 @@ export default (context: PluginContext) => {
345
305
  createObjectNode({
346
306
  space,
347
307
  object,
348
- resolve,
308
+ resolve: resolve(get),
349
309
  navigable: state.navigableCollections,
350
310
  }),
351
311
  ),
@@ -359,29 +319,35 @@ export default (context: PluginContext) => {
359
319
  ),
360
320
  }),
361
321
 
362
- // Create nodes for objects in a collection or by its fully qualified id.
322
+ // Create nodes for objects in a collection or by its DXN.
363
323
  createExtension({
364
324
  id: `${meta.id}/objects`,
365
325
  connector: (node) =>
366
- Rx.make((get) =>
326
+ Atom.make((get) =>
367
327
  Function.pipe(
368
328
  get(node),
369
329
  Option.flatMap((node) =>
370
- Obj.instanceOf(DataType.Collection, node.data) ? Option.some(node.data) : Option.none(),
330
+ Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none(),
371
331
  ),
372
332
  Option.map((collection) => {
373
333
  const state = context.getCapability(SpaceCapabilities.State);
374
334
  const space = getSpace(collection);
375
335
 
376
336
  return get(
377
- rxFromSignal(() =>
337
+ atomFromSignal(() =>
378
338
  Function.pipe(
379
339
  collection.objects,
380
340
  Array.map((object) => object.target),
381
341
  Array.filter(isNonNullable),
382
342
  Array.map(
383
343
  (object) =>
384
- space && createObjectNode({ object, space, resolve, navigable: state.navigableCollections }),
344
+ space &&
345
+ createObjectNode({
346
+ object,
347
+ space,
348
+ resolve: resolve(get),
349
+ navigable: state.navigableCollections,
350
+ }),
385
351
  ),
386
352
  Array.filter(isNonNullable),
387
353
  ),
@@ -391,95 +357,68 @@ export default (context: PluginContext) => {
391
357
  Option.getOrElse(() => []),
392
358
  ),
393
359
  ),
394
- // resolver: ({ id }) => {
395
- // if (id.length !== FQ_ID_LENGTH) {
396
- // return;
397
- // }
398
-
399
- // const [spaceId, objectId] = id.split(':');
400
- // if (spaceId.length !== SPACE_ID_LENGTH && objectId.length !== OBJECT_ID_LENGTH) {
401
- // return;
402
- // }
403
-
404
- // const client = context.requestCapability(ClientCapabilities.Client);
405
- // const space = client.spaces.get().find((space) => space.id === spaceId);
406
- // if (!space) {
407
- // return;
408
- // }
409
-
410
- // const spaceState = toSignal(
411
- // (onChange) => space.state.subscribe(() => onChange()).unsubscribe,
412
- // () => space.state.get(),
413
- // space.id,
414
- // );
415
- // if (spaceState !== SpaceState.SPACE_READY) {
416
- // return;
417
- // }
418
-
419
- // const [object] = memoizeQuery(space, Query.select(Filter.ids(objectId)));
420
- // if (!object) {
421
- // return;
422
- // }
423
-
424
- // if (isDeleted(object)) {
425
- // return false;
426
- // } else {
427
- // const state = context.requestCapability(SpaceCapabilities.State);
428
- // return createObjectNode({ object, space, resolve, navigable: state.navigableCollections });
429
- // }
430
- // },
360
+ resolver: (id) => {
361
+ let query: Database.QueryResult<Entity.Unknown> | undefined;
362
+ return Atom.make((get) => {
363
+ const client = context.getCapability(ClientCapabilities.Client);
364
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
365
+ if (!dxn || !dxn.spaceId) {
366
+ return null;
367
+ }
368
+
369
+ const space = client.spaces.get(dxn.spaceId);
370
+ if (!space) {
371
+ return null;
372
+ }
373
+
374
+ if (!query) {
375
+ query = space.db.query(Filter.ids(dxn.echoId));
376
+ }
377
+
378
+ const object = get(atomFromQuery(query)).at(0);
379
+ if (!Obj.isObject(object)) {
380
+ return null;
381
+ }
382
+
383
+ return createObjectNode({ object, space, resolve: resolve(get), disposition: 'hidden' });
384
+ });
385
+ },
431
386
  }),
432
387
 
433
- // Create nodes for objects in a query collection.
388
+ // Create object nodes for schema-based system collections.
434
389
  createExtension({
435
- id: `${meta.id}/query-collection-objects`,
390
+ id: `${meta.id}/system-collections`,
436
391
  connector: (node) => {
437
- let query: QueryResult<Type.Expando> | undefined;
438
- return Rx.make((get) =>
392
+ const client = context.getCapability(ClientCapabilities.Client);
393
+ // TODO(wittjosiah): Find a simpler way to define this type.
394
+ let query: Database.QueryResult<Schema.Schema.Type<typeof Type.Expando>> | undefined;
395
+ return Atom.make((get) =>
439
396
  Function.pipe(
440
397
  get(node),
441
398
  Option.flatMap((node) =>
442
- Obj.instanceOf(DataType.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
399
+ Obj.instanceOf(Collection.Managed, node.data) ? Option.some(node.data) : Option.none(),
443
400
  ),
444
401
  Option.flatMap((collection) => {
445
402
  const space = getSpace(collection);
446
- const typename = getTypenameFromQuery(collection.query);
447
- return typename && space ? Option.some({ typename, space }) : Option.none();
403
+ const schema = client.graph.schemaRegistry.schemas.find(
404
+ (schema) => Type.getTypename(schema) === collection.key,
405
+ );
406
+ return space && schema ? Option.some({ space, schema }) : Option.none();
448
407
  }),
449
- Option.map(({ typename, space }) => {
450
- const state = context.getCapability(SpaceCapabilities.State);
408
+ Option.map(({ space, schema }) => {
451
409
  if (!query) {
452
- query = space.db.query(
453
- Query.without(
454
- Query.select(Filter.typename(typename)),
455
- // TODO(wittjosiah): This query is broader than it should be.
456
- // It will return all objects in the collection, not just the ones of the given type.
457
- // However this works fine for now because this query is only used for exclusions.
458
- Query.select(Filter.typename(typename))
459
- .referencedBy(DataType.Collection, 'objects')
460
- .reference('objects'),
461
- ),
462
- );
410
+ query = space.db.query(Filter.type(schema));
463
411
  }
464
- return (
465
- get(rxFromQuery(query))
466
- // TODO(wittjosiah): This should be the default sort order.
467
- .toSorted((a, b) => a.id.localeCompare(b.id))
468
- .map((object) =>
469
- get(
470
- rxFromSignal(() =>
471
- createObjectNode({
472
- object,
473
- space,
474
- resolve,
475
- droppable: false, // Cannot rearrange query collections.
476
- navigable: state.navigableCollections,
477
- }),
478
- ),
479
- ),
480
- )
481
- .filter(isNonNullable)
482
- );
412
+ return get(atomFromQuery(query))
413
+ .map((object) =>
414
+ createObjectNode({
415
+ object,
416
+ space,
417
+ managedCollectionChild: true,
418
+ resolve: resolve(get),
419
+ }),
420
+ )
421
+ .filter(isNonNullable);
483
422
  }),
484
423
  Option.getOrElse(() => []),
485
424
  ),
@@ -487,17 +426,16 @@ export default (context: PluginContext) => {
487
426
  },
488
427
  }),
489
428
 
490
- // Static schema records.
429
+ // Create branch nodes for static schema record types.
491
430
  createExtension({
492
431
  id: `${meta.id}/static-schemas`,
493
432
  connector: (node) => {
494
433
  const client = context.getCapability(ClientCapabilities.Client);
495
- return Rx.make((get) =>
434
+ return Atom.make((get) =>
496
435
  Function.pipe(
497
436
  get(node),
498
437
  Option.flatMap((node) =>
499
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
500
- getTypenameFromQuery(node.data.query) === DataType.StoredSchema.typename
438
+ Obj.instanceOf(Collection.Managed, node.data) && node.data.key === Type.getTypename(Type.PersistentType)
501
439
  ? Option.some(node.data)
502
440
  : Option.none(),
503
441
  ),
@@ -506,7 +444,7 @@ export default (context: PluginContext) => {
506
444
  return space?.properties.staticRecords ? Option.some(space) : Option.none();
507
445
  }),
508
446
  Option.map((space) => {
509
- return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
447
+ return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
510
448
  .map((typename) =>
511
449
  client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
512
450
  )
@@ -519,13 +457,19 @@ export default (context: PluginContext) => {
519
457
  },
520
458
  }),
521
459
 
522
- // Create static schema actions.
460
+ // Create actions for static schema record types.
523
461
  createExtension({
524
462
  id: `${meta.id}/static-schema-actions`,
525
463
  actions: (node) => {
526
- let query: QueryResult<DataType.View> | undefined;
527
- return Rx.make((get) =>
528
- Function.pipe(
464
+ let query: Database.QueryResult<Obj.Any> | undefined;
465
+ return Atom.make((get) => {
466
+ // TODO(wittjosiah): Use schemaRegistry query once it support atom reactivity.
467
+ const schemas = get(context.capabilities(ClientCapabilities.Schema))
468
+ .flat()
469
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
470
+ const filter = Filter.or(...schemas.map((schema) => Filter.type(schema)));
471
+
472
+ return Function.pipe(
529
473
  get(node),
530
474
  Option.flatMap((node) => {
531
475
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
@@ -533,16 +477,18 @@ export default (context: PluginContext) => {
533
477
  }),
534
478
  Option.map(({ space, schema }) => {
535
479
  if (!query) {
536
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
537
- query = space.db.query(Filter.type(DataType.View));
480
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
481
+ // TODO(wittjosiah): Remove cast.
482
+ query = space.db.query(filter) as unknown as Database.QueryResult<Obj.Any>;
538
483
  }
539
484
 
540
- const views = get(rxFromQuery(query));
485
+ const objects = get(atomFromQuery(query));
541
486
  const filteredViews = get(
542
- rxFromSignal(() =>
543
- // TODO(wittjosiah): Remove cast.
544
- views.filter(
545
- (view) => getTypenameFromQuery(view.query.ast) === Type.getTypename(schema as Type.Obj.Any),
487
+ atomFromSignal(() =>
488
+ objects.filter(
489
+ (viewObject) =>
490
+ getTypenameFromQuery((viewObject as any).view.target?.query.ast) ===
491
+ Type.getTypename(schema as Type.Obj.Any),
546
492
  ),
547
493
  ),
548
494
  );
@@ -562,42 +508,51 @@ export default (context: PluginContext) => {
562
508
  });
563
509
  }),
564
510
  Option.getOrElse(() => []),
565
- ),
566
- );
511
+ );
512
+ });
567
513
  },
568
514
  }),
569
515
 
570
- // Create nodes for schema views.
516
+ // Create nodes for views of record types.
571
517
  createExtension({
572
518
  id: `${meta.id}/schema-views`,
573
519
  connector: (node) => {
574
- let query: QueryResult<DataType.View> | undefined;
575
- return Rx.make((get) =>
576
- Function.pipe(
520
+ let query: Database.QueryResult<Obj.Any> | undefined;
521
+ return Atom.make((get) => {
522
+ // TODO(wittjosiah): Use schemaRegistry query once it support atom reactivity.
523
+ const schemas = get(context.capabilities(ClientCapabilities.Schema))
524
+ .flat()
525
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
526
+ const filter = Filter.or(...schemas.map((schema) => Filter.type(schema)));
527
+
528
+ return Function.pipe(
577
529
  get(node),
578
530
  Option.flatMap((node) => {
579
531
  const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
580
- return space && (Obj.instanceOf(DataType.StoredSchema, node.data) || Schema.isSchema(node.data))
532
+ return space && (Obj.instanceOf(Type.PersistentType, node.data) || Schema.isSchema(node.data))
581
533
  ? Option.some({ space, schema: node.data })
582
534
  : Option.none();
583
535
  }),
584
536
  Option.map(({ space, schema }) => {
585
537
  if (!query) {
586
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
587
- query = space.db.query(Filter.type(DataType.View));
538
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
539
+ // TODO(wittjosiah): Remove cast.
540
+ query = space.db.query(filter) as unknown as Database.QueryResult<Obj.Any>;
588
541
  }
589
542
 
590
- // TODO(wittjosiah): Remove cast.
543
+ // TODO(wittjosiah): Remove casts.
591
544
  const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
592
- return get(rxFromQuery(query))
593
- .filter((view) => getTypenameFromQuery(view.query.ast) === typename)
594
- .map((view) =>
545
+ return get(atomFromQuery(query))
546
+ .filter((object) =>
547
+ get(atomFromSignal(() => getTypenameFromQuery((object as any).view.target?.query.ast) === typename)),
548
+ )
549
+ .map((object) =>
595
550
  get(
596
- rxFromSignal(() =>
551
+ atomFromSignal(() =>
597
552
  createObjectNode({
598
- object: view,
553
+ object,
599
554
  space,
600
- resolve,
555
+ resolve: resolve(get),
601
556
  droppable: false,
602
557
  }),
603
558
  ),
@@ -606,38 +561,7 @@ export default (context: PluginContext) => {
606
561
  .filter(isNonNullable);
607
562
  }),
608
563
  Option.getOrElse(() => []),
609
- ),
610
- );
611
- },
612
- }),
613
-
614
- // Create record nodes.
615
- createExtension({
616
- id: `${meta.id}/records`,
617
- resolver: (id) => {
618
- let query: QueryResult<Type.Expando> | undefined;
619
- return Rx.make((get) => {
620
- const client = context.getCapability(ClientCapabilities.Client);
621
- const { spaceId, objectId } = parseId(id);
622
- if (!spaceId || !objectId) {
623
- return null;
624
- }
625
-
626
- const space = client.spaces.get(spaceId);
627
- if (!space) {
628
- return null;
629
- }
630
-
631
- if (!query) {
632
- query = space.db.query(Filter.ids(objectId));
633
- }
634
-
635
- const object = get(rxFromQuery(query)).at(0);
636
- if (!object) {
637
- return null;
638
- }
639
-
640
- return createObjectNode({ object, space, resolve, disposition: 'hidden' });
564
+ );
641
565
  });
642
566
  },
643
567
  }),
@@ -646,9 +570,15 @@ export default (context: PluginContext) => {
646
570
  createExtension({
647
571
  id: `${meta.id}/object-actions`,
648
572
  actions: (node) => {
649
- let query: QueryResult<DataType.View> | undefined;
650
- return Rx.make((get) =>
651
- Function.pipe(
573
+ let query: Database.QueryResult<Obj.Any> | undefined;
574
+ return Atom.make((get) => {
575
+ // TODO(wittjosiah): Use schemaRegistry query once it support atom reactivity.
576
+ const schemas = get(context.capabilities(ClientCapabilities.Schema))
577
+ .flat()
578
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
579
+ const filter = Filter.or(...schemas.map((schema) => Filter.type(schema)));
580
+
581
+ return Function.pipe(
652
582
  get(node),
653
583
  Option.flatMap((node) => {
654
584
  const space = getSpace(node.data);
@@ -657,23 +587,26 @@ export default (context: PluginContext) => {
657
587
  : Option.none();
658
588
  }),
659
589
  Option.flatMap(({ space, object }) => {
660
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
590
+ const isSchema = Obj.instanceOf(Type.PersistentType, object);
661
591
  if (!query && isSchema) {
662
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
663
- query = space.db.query(Filter.type(DataType.View));
592
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
593
+ // TODO(wittjosiah): Remove cast.
594
+ query = space.db.query(filter) as unknown as Database.QueryResult<Obj.Any>;
664
595
  }
665
596
 
666
597
  let deletable =
667
598
  !isSchema &&
668
- // Don't allow the Records smart collection to be deleted.
669
- !(
670
- Obj.instanceOf(DataType.QueryCollection, object) &&
671
- getTypenameFromQuery(object.query) === DataType.StoredSchema.typename
672
- );
599
+ // Don't allow system collections to be deleted.
600
+ !Obj.instanceOf(Collection.Managed, object);
673
601
  if (isSchema && query) {
674
- const views = get(rxFromQuery(query));
602
+ const objects = get(atomFromQuery(query));
675
603
  const filteredViews = get(
676
- rxFromSignal(() => views.filter((view) => getTypenameFromQuery(view.query.ast) === object.typename)),
604
+ atomFromSignal(() =>
605
+ objects.filter(
606
+ (viewObject) =>
607
+ getTypenameFromQuery((viewObject as any).view.target?.query.ast) === object.typename,
608
+ ),
609
+ ),
677
610
  );
678
611
  deletable = filteredViews.length === 0;
679
612
  }
@@ -681,7 +614,6 @@ export default (context: PluginContext) => {
681
614
  const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
682
615
  const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
683
616
  const [state] = get(context.capabilities(SpaceCapabilities.State));
684
- const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));
685
617
 
686
618
  if (!dispatcher || !appGraph || !state) {
687
619
  return Option.none();
@@ -690,16 +622,16 @@ export default (context: PluginContext) => {
690
622
  object,
691
623
  graph: appGraph.graph,
692
624
  dispatch: dispatcher.dispatchPromise,
693
- objectForms,
625
+ resolve: resolve(get),
694
626
  deletable,
695
- navigable: get(rxFromSignal(() => state.navigableCollections)),
627
+ navigable: get(atomFromSignal(() => state.navigableCollections)),
696
628
  });
697
629
  }
698
630
  }),
699
631
  Option.map((params) => constructObjectActions(params)),
700
632
  Option.getOrElse(() => []),
701
- ),
702
- );
633
+ );
634
+ });
703
635
  },
704
636
  }),
705
637
 
@@ -707,10 +639,10 @@ export default (context: PluginContext) => {
707
639
  createExtension({
708
640
  id: `${meta.id}/selected-objects`,
709
641
  connector: (node) =>
710
- Rx.make((get) =>
642
+ Atom.make((get) =>
711
643
  Function.pipe(
712
644
  get(node),
713
- Option.flatMap((node) => (Obj.instanceOf(DataType.View, node.data) ? Option.some(node) : Option.none())),
645
+ Option.flatMap((node) => (Obj.instanceOf(View.View, node.data) ? Option.some(node) : Option.none())),
714
646
  Option.map((node) => [
715
647
  {
716
648
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
@@ -732,7 +664,7 @@ export default (context: PluginContext) => {
732
664
  createExtension({
733
665
  id: `${meta.id}/settings`,
734
666
  connector: (node) =>
735
- Rx.make((get) =>
667
+ Atom.make((get) =>
736
668
  Function.pipe(
737
669
  get(node),
738
670
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),