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