@dxos/plugin-space 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3

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 (338) 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-2BRUBHP6.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-FLF7XMQO.mjs → app-graph-builder-VQAB3GCQ.mjs} +109 -97
  10. package/dist/lib/browser/app-graph-builder-VQAB3GCQ.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-3A6KBYWT.mjs → app-graph-serializer-KSLKMEPP.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-KSLKMEPP.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-DCY3W36E.mjs → chunk-ERQMHU7L.mjs} +71 -61
  14. package/dist/lib/browser/chunk-ERQMHU7L.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-J6YZG77T.mjs → chunk-J2BUK5E6.mjs} +554 -481
  16. package/dist/lib/browser/chunk-J2BUK5E6.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
  18. package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-RQVV4XVF.mjs → chunk-M2Z6D4ZI.mjs} +27 -21
  20. package/dist/lib/browser/chunk-M2Z6D4ZI.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-WAXS2ZVX.mjs → chunk-OLBBSOVI.mjs} +26 -13
  22. package/dist/lib/browser/chunk-OLBBSOVI.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-PU5IOFMG.mjs +167 -0
  24. package/dist/lib/browser/chunk-PU5IOFMG.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 +89 -85
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-7E3IZIJS.mjs → intent-resolver-Q2XWHAVA.mjs} +78 -84
  34. package/dist/lib/browser/intent-resolver-Q2XWHAVA.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-MM4HADPE.mjs +30 -0
  37. package/dist/lib/browser/react-root-MM4HADPE.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-GL4CE2F4.mjs → react-surface-SGZC3Y4U.mjs} +71 -105
  39. package/dist/lib/browser/react-surface-SGZC3Y4U.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-YDPFZELA.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
  41. package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-B6MMHLPS.mjs → settings-WKLGKUHQ.mjs} +5 -5
  43. package/dist/lib/browser/{settings-B6MMHLPS.mjs.map → settings-WKLGKUHQ.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-QVABOCO3.mjs → spaces-ready-C5QC2UFL.mjs} +15 -14
  45. package/dist/lib/browser/spaces-ready-C5QC2UFL.mjs.map +7 -0
  46. package/dist/lib/browser/{state-2RGW7FQG.mjs → state-Q7YRE5KG.mjs} +7 -7
  47. package/dist/lib/browser/state-Q7YRE5KG.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +2 -2
  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-6PZQIQG3.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +7 -0
  57. package/dist/lib/node-esm/{app-graph-builder-D5YPOJS5.mjs → app-graph-builder-24JCLJPX.mjs} +109 -97
  58. package/dist/lib/node-esm/app-graph-builder-24JCLJPX.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-M45TH5LR.mjs → app-graph-serializer-R723K764.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-R723K764.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-WKQTO37U.mjs → chunk-2PN7QNGV.mjs} +27 -21
  62. package/dist/lib/node-esm/chunk-2PN7QNGV.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  64. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  66. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-ZCEH2VYE.mjs → chunk-ITQFSFQ3.mjs} +554 -481
  68. package/dist/lib/node-esm/chunk-ITQFSFQ3.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-TJPQDQNI.mjs +168 -0
  70. package/dist/lib/node-esm/chunk-TJPQDQNI.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-AUQ3SKL2.mjs → chunk-VH2EBZEV.mjs} +71 -61
  72. package/dist/lib/node-esm/chunk-VH2EBZEV.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-HYIZVPOA.mjs → chunk-WC4VBFMA.mjs} +26 -13
  74. package/dist/lib/node-esm/chunk-WC4VBFMA.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
  76. package/dist/lib/node-esm/chunk-Z7BB6HC2.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 +89 -85
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-UVO4MKWX.mjs → intent-resolver-YK4ESSET.mjs} +78 -84
  82. package/dist/lib/node-esm/intent-resolver-YK4ESSET.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-5ANDLQMX.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-5ANDLQMX.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-IOC6YSVQ.mjs → react-surface-V7J2QB44.mjs} +71 -105
  87. package/dist/lib/node-esm/react-surface-V7J2QB44.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-OYBCWKAS.mjs → schema-defs-ZS2D47XW.mjs} +6 -6
  89. package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-IOFU6EAS.mjs → settings-RBB5633M.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-IOFU6EAS.mjs.map → settings-RBB5633M.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-MS6GHPFR.mjs → spaces-ready-SJCXV6YH.mjs} +15 -14
  93. package/dist/lib/node-esm/spaces-ready-SJCXV6YH.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-7VBVBGNS.mjs → state-362I5BMK.mjs} +7 -7
  95. package/dist/lib/node-esm/state-362I5BMK.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +2 -2
  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 +6 -5
  101. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  106. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  107. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  108. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  109. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  110. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  111. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +1 -1
  112. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  113. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +110 -1
  114. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  115. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +3 -3
  116. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  118. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  119. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  120. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  121. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  122. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  123. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  124. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1697 -0
  125. package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
  126. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  127. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  128. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  129. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  130. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  131. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  132. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  133. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  134. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  135. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  136. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  137. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  138. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  139. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  140. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1530 -0
  141. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  142. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  143. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  144. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  146. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  147. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  148. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  149. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +111 -2
  150. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  151. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  152. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  153. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  154. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  155. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  156. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +112 -3
  157. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  158. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  159. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  160. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  161. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  162. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  163. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  164. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  165. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +110 -1
  166. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  167. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  168. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +111 -2
  169. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  171. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  172. package/dist/types/src/components/index.d.ts +10 -17
  173. package/dist/types/src/components/index.d.ts.map +1 -1
  174. package/dist/types/src/events.d.ts.map +1 -1
  175. package/dist/types/src/helpers/index.d.ts +2 -0
  176. package/dist/types/src/helpers/index.d.ts.map +1 -0
  177. package/dist/types/src/helpers/query.d.ts +8 -0
  178. package/dist/types/src/helpers/query.d.ts.map +1 -0
  179. package/dist/types/src/helpers/query.test.d.ts +2 -0
  180. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  181. package/dist/types/src/hooks/index.d.ts +1 -0
  182. package/dist/types/src/hooks/index.d.ts.map +1 -1
  183. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  184. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  185. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  186. package/dist/types/src/hooks/usePath.d.ts +1 -1
  187. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  188. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  189. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  190. package/dist/types/src/index.d.ts +1 -0
  191. package/dist/types/src/index.d.ts.map +1 -1
  192. package/dist/types/src/meta.d.ts +0 -1
  193. package/dist/types/src/meta.d.ts.map +1 -1
  194. package/dist/types/src/translations.d.ts +1322 -22
  195. package/dist/types/src/translations.d.ts.map +1 -1
  196. package/dist/types/src/types/types.d.ts +59 -76
  197. package/dist/types/src/types/types.d.ts.map +1 -1
  198. package/dist/types/src/util.d.ts +10 -7
  199. package/dist/types/src/util.d.ts.map +1 -1
  200. package/dist/types/tsconfig.tsbuildinfo +1 -1
  201. package/package.json +64 -59
  202. package/src/SpacePlugin.ts +228 -212
  203. package/src/capabilities/app-graph-builder.ts +158 -123
  204. package/src/capabilities/app-graph-serializer.ts +12 -12
  205. package/src/capabilities/capabilities.ts +16 -11
  206. package/src/capabilities/identity-created.ts +2 -2
  207. package/src/capabilities/intent-resolver.ts +68 -61
  208. package/src/capabilities/react-root.tsx +4 -3
  209. package/src/capabilities/react-surface.tsx +65 -141
  210. package/src/capabilities/schema-defs.ts +1 -1
  211. package/src/capabilities/spaces-ready.ts +8 -5
  212. package/src/capabilities/state.ts +2 -2
  213. package/src/components/AwaitingObject.tsx +12 -14
  214. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  215. package/src/components/CollectionSection.tsx +8 -6
  216. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -11
  217. package/src/components/CreateDialog/CreateObjectDialog.tsx +38 -28
  218. package/src/components/CreateDialog/CreateObjectPanel.tsx +8 -8
  219. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  220. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  221. package/src/components/JoinDialog/index.ts +5 -0
  222. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +7 -6
  223. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +16 -14
  224. package/src/components/MembersContainer/index.ts +5 -0
  225. package/src/components/MenuFooter.tsx +2 -2
  226. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  227. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  228. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  229. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  230. package/src/components/ObjectRenamePopover/index.ts +5 -0
  231. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
  232. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  233. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  234. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  235. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  236. package/src/components/ObjectSettings/index.ts +3 -1
  237. package/src/components/RecordArticle.stories.tsx +115 -0
  238. package/src/components/RecordArticle.tsx +114 -0
  239. package/src/components/SchemaContainer.tsx +23 -26
  240. package/src/components/SpacePluginSettings.tsx +10 -4
  241. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +23 -25
  242. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  243. package/src/components/SpacePresence/index.ts +5 -0
  244. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  245. package/src/components/SpaceRenamePopover/index.ts +5 -0
  246. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -4
  247. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +44 -23
  248. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  249. package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
  250. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  251. package/src/components/ViewEditor.tsx +51 -23
  252. package/src/components/index.ts +7 -8
  253. package/src/events.ts +6 -6
  254. package/src/helpers/index.ts +5 -0
  255. package/src/helpers/query.test.ts +24 -0
  256. package/src/helpers/query.ts +158 -0
  257. package/src/hooks/index.ts +1 -0
  258. package/src/hooks/useActiveSpace.ts +2 -1
  259. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  260. package/src/hooks/usePath.ts +1 -1
  261. package/src/hooks/useTypeOptions.ts +59 -0
  262. package/src/index.ts +1 -0
  263. package/src/meta.ts +6 -3
  264. package/src/translations.ts +25 -10
  265. package/src/types/types.ts +26 -22
  266. package/src/util.tsx +79 -64
  267. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  268. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  269. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  270. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  271. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  272. package/dist/lib/browser/app-graph-builder-FLF7XMQO.mjs.map +0 -7
  273. package/dist/lib/browser/app-graph-serializer-3A6KBYWT.mjs.map +0 -7
  274. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  275. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-DCY3W36E.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-ELJDGQTO.mjs +0 -94
  278. package/dist/lib/browser/chunk-ELJDGQTO.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  280. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-J6YZG77T.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-RQVV4XVF.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
  284. package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  286. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  287. package/dist/lib/browser/intent-resolver-7E3IZIJS.mjs.map +0 -7
  288. package/dist/lib/browser/react-root-RWMT2RCK.mjs +0 -29
  289. package/dist/lib/browser/react-root-RWMT2RCK.mjs.map +0 -7
  290. package/dist/lib/browser/react-surface-GL4CE2F4.mjs.map +0 -7
  291. package/dist/lib/browser/schema-defs-YDPFZELA.mjs.map +0 -7
  292. package/dist/lib/browser/spaces-ready-QVABOCO3.mjs.map +0 -7
  293. package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
  294. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  295. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  296. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  297. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  298. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  299. package/dist/lib/node-esm/app-graph-builder-D5YPOJS5.mjs.map +0 -7
  300. package/dist/lib/node-esm/app-graph-serializer-M45TH5LR.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-AUQ3SKL2.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  303. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
  305. package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  307. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  309. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs +0 -96
  310. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
  311. package/dist/lib/node-esm/chunk-WKQTO37U.mjs.map +0 -7
  312. package/dist/lib/node-esm/chunk-ZCEH2VYE.mjs.map +0 -7
  313. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  314. package/dist/lib/node-esm/intent-resolver-UVO4MKWX.mjs.map +0 -7
  315. package/dist/lib/node-esm/react-root-5EKYI66P.mjs.map +0 -7
  316. package/dist/lib/node-esm/react-surface-IOC6YSVQ.mjs.map +0 -7
  317. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs.map +0 -7
  318. package/dist/lib/node-esm/spaces-ready-MS6GHPFR.mjs.map +0 -7
  319. package/dist/lib/node-esm/state-7VBVBGNS.mjs.map +0 -7
  320. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  321. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  322. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  323. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  324. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  325. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  326. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  327. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  328. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  329. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  330. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  331. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  332. package/dist/types/src/components/RecordMain.d.ts +0 -7
  333. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  334. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  335. package/src/components/ObjectDetailsPanel.tsx +0 -77
  336. package/src/components/PersistenceStatus.tsx +0 -83
  337. package/src/components/RecordMain.tsx +0 -43
  338. /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 QueryResult, type Space, SpaceState, getSpace, isSpace } from '@dxos/client/echo';
13
+ import { DXN, Filter, Obj, Query, 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, StoredSchema, View, 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,11 +157,11 @@ 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]),
@@ -173,25 +176,25 @@ export default (context: PluginContext) => {
173
176
  id: SPACES,
174
177
  connector: (node) => {
175
178
  let query: QueryResult<Type.Expando> | undefined;
176
- return Rx.make((get) =>
177
- pipe(
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
  }),
@@ -276,10 +279,10 @@ export default (context: PluginContext) => {
276
279
 
277
280
  // Create space actions.
278
281
  createExtension({
279
- id: `${SPACE_PLUGIN}/actions`,
282
+ id: `${meta.id}/actions`,
280
283
  actions: (node) =>
281
- Rx.make((get) =>
282
- pipe(
284
+ Atom.make((get) =>
285
+ Function.pipe(
283
286
  get(node),
284
287
  Option.flatMap((node) =>
285
288
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
@@ -308,24 +311,24 @@ export default (context: PluginContext) => {
308
311
 
309
312
  // Create nodes for objects in the root collection of a space.
310
313
  createExtension({
311
- id: `${SPACE_PLUGIN}/root-collection`,
314
+ id: `${meta.id}/root-collection`,
312
315
  connector: (node) =>
313
- Rx.make((get) =>
314
- pipe(
316
+ Atom.make((get) =>
317
+ Function.pipe(
315
318
  get(node),
316
319
  Option.flatMap((node) =>
317
320
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
318
321
  ),
319
322
  Option.map((space) => {
320
323
  const state = context.getCapability(SpaceCapabilities.State);
321
- const spaceState = get(rxFromObservable(space.state));
324
+ const spaceState = get(atomFromObservable(space.state));
322
325
  if (spaceState !== SpaceState.SPACE_READY) {
323
326
  return [];
324
327
  }
325
328
 
326
329
  const collection = get(
327
- rxFromSignal(
328
- () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,
330
+ atomFromSignal(
331
+ () => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
329
332
  ),
330
333
  );
331
334
  if (!collection) {
@@ -333,8 +336,8 @@ export default (context: PluginContext) => {
333
336
  }
334
337
 
335
338
  return get(
336
- rxFromSignal(() =>
337
- pipe(
339
+ atomFromSignal(() =>
340
+ Function.pipe(
338
341
  collection.objects,
339
342
  Array.map((object) => object.target),
340
343
  Array.filter(isNonNullable),
@@ -342,7 +345,7 @@ export default (context: PluginContext) => {
342
345
  createObjectNode({
343
346
  space,
344
347
  object,
345
- resolve,
348
+ resolve: resolve(get),
346
349
  navigable: state.navigableCollections,
347
350
  }),
348
351
  ),
@@ -358,27 +361,33 @@ export default (context: PluginContext) => {
358
361
 
359
362
  // Create nodes for objects in a collection or by its fully qualified id.
360
363
  createExtension({
361
- id: `${SPACE_PLUGIN}/objects`,
364
+ id: `${meta.id}/objects`,
362
365
  connector: (node) =>
363
- Rx.make((get) =>
364
- pipe(
366
+ Atom.make((get) =>
367
+ Function.pipe(
365
368
  get(node),
366
369
  Option.flatMap((node) =>
367
- Obj.instanceOf(DataType.Collection, node.data) ? Option.some(node.data) : Option.none(),
370
+ Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none(),
368
371
  ),
369
372
  Option.map((collection) => {
370
373
  const state = context.getCapability(SpaceCapabilities.State);
371
374
  const space = getSpace(collection);
372
375
 
373
376
  return get(
374
- rxFromSignal(() =>
375
- pipe(
377
+ atomFromSignal(() =>
378
+ Function.pipe(
376
379
  collection.objects,
377
380
  Array.map((object) => object.target),
378
381
  Array.filter(isNonNullable),
379
382
  Array.map(
380
383
  (object) =>
381
- space && createObjectNode({ object, space, resolve, navigable: state.navigableCollections }),
384
+ space &&
385
+ createObjectNode({
386
+ object,
387
+ space,
388
+ resolve: resolve(get),
389
+ navigable: state.navigableCollections,
390
+ }),
382
391
  ),
383
392
  Array.filter(isNonNullable),
384
393
  ),
@@ -429,20 +438,19 @@ export default (context: PluginContext) => {
429
438
 
430
439
  // Create nodes for objects in a query collection.
431
440
  createExtension({
432
- id: `${SPACE_PLUGIN}/query-collection-objects`,
441
+ id: `${meta.id}/query-collection-objects`,
433
442
  connector: (node) => {
434
443
  let query: QueryResult<Type.Expando> | undefined;
435
- return Rx.make((get) =>
436
- pipe(
444
+ return Atom.make((get) =>
445
+ Function.pipe(
437
446
  get(node),
438
447
  Option.flatMap((node) =>
439
- Obj.instanceOf(DataType.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
448
+ Obj.instanceOf(Collection.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
440
449
  ),
441
450
  Option.flatMap((collection) => {
442
451
  const space = getSpace(collection);
443
- return collection.query.typename && space
444
- ? Option.some({ typename: collection.query.typename, space })
445
- : Option.none();
452
+ const typename = getTypenameFromQuery(collection.query);
453
+ return typename && space ? Option.some({ typename, space }) : Option.none();
446
454
  }),
447
455
  Option.map(({ typename, space }) => {
448
456
  const state = context.getCapability(SpaceCapabilities.State);
@@ -454,22 +462,22 @@ export default (context: PluginContext) => {
454
462
  // It will return all objects in the collection, not just the ones of the given type.
455
463
  // However this works fine for now because this query is only used for exclusions.
456
464
  Query.select(Filter.typename(typename))
457
- .referencedBy(DataType.Collection, 'objects')
465
+ .referencedBy(Collection.Collection, 'objects')
458
466
  .reference('objects'),
459
467
  ),
460
468
  );
461
469
  }
462
470
  return (
463
- get(rxFromQuery(query))
471
+ get(atomFromQuery(query))
464
472
  // TODO(wittjosiah): This should be the default sort order.
465
473
  .toSorted((a, b) => a.id.localeCompare(b.id))
466
474
  .map((object) =>
467
475
  get(
468
- rxFromSignal(() =>
476
+ atomFromSignal(() =>
469
477
  createObjectNode({
470
478
  object,
471
479
  space,
472
- resolve,
480
+ resolve: resolve(get),
473
481
  droppable: false, // Cannot rearrange query collections.
474
482
  navigable: state.navigableCollections,
475
483
  }),
@@ -487,15 +495,15 @@ export default (context: PluginContext) => {
487
495
 
488
496
  // Static schema records.
489
497
  createExtension({
490
- id: `${SPACE_PLUGIN}/static-schemas`,
498
+ id: `${meta.id}/static-schemas`,
491
499
  connector: (node) => {
492
500
  const client = context.getCapability(ClientCapabilities.Client);
493
- return Rx.make((get) =>
494
- pipe(
501
+ return Atom.make((get) =>
502
+ Function.pipe(
495
503
  get(node),
496
504
  Option.flatMap((node) =>
497
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
498
- node.data.query.typename === DataType.StoredSchema.typename
505
+ Obj.instanceOf(Collection.QueryCollection, node.data) &&
506
+ getTypenameFromQuery(node.data.query) === StoredSchema.typename
499
507
  ? Option.some(node.data)
500
508
  : Option.none(),
501
509
  ),
@@ -504,7 +512,7 @@ export default (context: PluginContext) => {
504
512
  return space?.properties.staticRecords ? Option.some(space) : Option.none();
505
513
  }),
506
514
  Option.map((space) => {
507
- return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
515
+ return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
508
516
  .map((typename) =>
509
517
  client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
510
518
  )
@@ -519,11 +527,11 @@ export default (context: PluginContext) => {
519
527
 
520
528
  // Create static schema actions.
521
529
  createExtension({
522
- id: `${SPACE_PLUGIN}/static-schema-actions`,
530
+ id: `${meta.id}/static-schema-actions`,
523
531
  actions: (node) => {
524
- let query: QueryResult<DataType.View> | undefined;
525
- return Rx.make((get) =>
526
- pipe(
532
+ let query: QueryResult<View.View> | undefined;
533
+ return Atom.make((get) =>
534
+ Function.pipe(
527
535
  get(node),
528
536
  Option.flatMap((node) => {
529
537
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
@@ -532,14 +540,16 @@ export default (context: PluginContext) => {
532
540
  Option.map(({ space, schema }) => {
533
541
  if (!query) {
534
542
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
535
- query = space.db.query(Filter.type(DataType.View));
543
+ query = space.db.query(Filter.type(View.View));
536
544
  }
537
545
 
538
- const views = get(rxFromQuery(query));
546
+ const views = get(atomFromQuery(query));
539
547
  const filteredViews = get(
540
- rxFromSignal(() =>
548
+ atomFromSignal(() =>
541
549
  // TODO(wittjosiah): Remove cast.
542
- views.filter((view) => view.query.typename === Type.getTypename(schema as Type.Obj.Any)),
550
+ views.filter(
551
+ (view) => getTypenameFromQuery(view.query.ast) === Type.getTypename(schema as Type.Obj.Any),
552
+ ),
543
553
  ),
544
554
  );
545
555
  const deletable = filteredViews.length === 0;
@@ -565,41 +575,57 @@ export default (context: PluginContext) => {
565
575
 
566
576
  // Create nodes for schema views.
567
577
  createExtension({
568
- id: `${SPACE_PLUGIN}/schema-views`,
578
+ id: `${meta.id}/schema-views`,
569
579
  connector: (node) => {
570
- let query: QueryResult<DataType.View> | undefined;
571
- return Rx.make((get) =>
572
- pipe(
580
+ let query: QueryResult<View.View> | undefined;
581
+ return Atom.make((get) =>
582
+ Function.pipe(
573
583
  get(node),
574
584
  Option.flatMap((node) => {
575
585
  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))
586
+ return space && (Obj.instanceOf(StoredSchema, node.data) || Schema.isSchema(node.data))
577
587
  ? Option.some({ space, schema: node.data })
578
588
  : Option.none();
579
589
  }),
580
590
  Option.map(({ space, schema }) => {
581
591
  if (!query) {
582
592
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
583
- query = space.db.query(Filter.type(DataType.View));
593
+ query = space.db.query(Filter.type(View.View));
584
594
  }
585
595
 
586
596
  // TODO(wittjosiah): Remove cast.
587
597
  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) =>
591
- get(
592
- rxFromSignal(() =>
593
- createObjectNode({
594
- object: view,
595
- space,
596
- resolve,
597
- droppable: false,
598
+ return (
599
+ get(atomFromQuery(query))
600
+ .filter((view) => getTypenameFromQuery(view.query.ast) === typename)
601
+ // Filter out Collection views from Projects.
602
+ .filter((view) =>
603
+ get(
604
+ atomFromSignal(() => {
605
+ const presentation = view.presentation.target;
606
+ if (presentation) {
607
+ const typename = Obj.getTypename(presentation);
608
+ return typename !== Collection.Collection.typename;
609
+ } else {
610
+ return false;
611
+ }
598
612
  }),
599
613
  ),
600
- ),
601
- )
602
- .filter(isNonNullable);
614
+ )
615
+ .map((view) =>
616
+ get(
617
+ atomFromSignal(() =>
618
+ createObjectNode({
619
+ object: view,
620
+ space,
621
+ resolve: resolve(get),
622
+ droppable: false,
623
+ }),
624
+ ),
625
+ ),
626
+ )
627
+ .filter(isNonNullable)
628
+ );
603
629
  }),
604
630
  Option.getOrElse(() => []),
605
631
  ),
@@ -609,65 +635,74 @@ export default (context: PluginContext) => {
609
635
 
610
636
  // Create record nodes.
611
637
  createExtension({
612
- id: `${SPACE_PLUGIN}/records`,
638
+ id: `${meta.id}/records`,
613
639
  resolver: (id) => {
614
640
  let query: QueryResult<Type.Expando> | undefined;
615
- return Rx.make((get) => {
641
+ return Atom.make((get) => {
616
642
  const client = context.getCapability(ClientCapabilities.Client);
617
- const { spaceId, objectId } = parseId(id);
618
- if (!spaceId || !objectId) {
643
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
644
+ if (!dxn || !dxn.spaceId) {
619
645
  return null;
620
646
  }
621
647
 
622
- const space = client.spaces.get(spaceId);
648
+ const space = client.spaces.get(dxn.spaceId);
623
649
  if (!space) {
624
650
  return null;
625
651
  }
626
652
 
627
653
  if (!query) {
628
- query = space.db.query(Filter.ids(objectId));
654
+ query = space.db.query(Filter.ids(dxn.echoId));
629
655
  }
630
656
 
631
- const object = get(rxFromQuery(query)).at(0);
657
+ const object = get(atomFromQuery(query)).at(0);
632
658
  if (!object) {
633
659
  return null;
634
660
  }
635
661
 
636
- return createObjectNode({ object, space, resolve, disposition: 'hidden' });
662
+ return createObjectNode({
663
+ object,
664
+ space,
665
+ resolve: resolve(get),
666
+ disposition: 'hidden',
667
+ });
637
668
  });
638
669
  },
639
670
  }),
640
671
 
641
672
  // Create collection actions and action groups.
642
673
  createExtension({
643
- id: `${SPACE_PLUGIN}/object-actions`,
674
+ id: `${meta.id}/object-actions`,
644
675
  actions: (node) => {
645
- let query: QueryResult<DataType.View> | undefined;
646
- return Rx.make((get) =>
647
- pipe(
676
+ let query: QueryResult<View.View> | undefined;
677
+ return Atom.make((get) =>
678
+ Function.pipe(
648
679
  get(node),
649
680
  Option.flatMap((node) => {
650
681
  const space = getSpace(node.data);
651
- return space && Obj.isObject(node.data) ? Option.some({ space, object: node.data }) : Option.none();
682
+ return space && Obj.isObject(node.data) && Obj.getTypename(node.data) === node.type
683
+ ? Option.some({ space, object: node.data })
684
+ : Option.none();
652
685
  }),
653
686
  Option.flatMap(({ space, object }) => {
654
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
687
+ const isSchema = Obj.instanceOf(StoredSchema, object);
655
688
  if (!query && isSchema) {
656
689
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
657
- query = space.db.query(Filter.type(DataType.View));
690
+ query = space.db.query(Filter.type(View.View));
658
691
  }
659
692
 
660
693
  let deletable =
661
694
  !isSchema &&
662
695
  // Don't allow the Records smart collection to be deleted.
663
696
  !(
664
- Obj.instanceOf(DataType.QueryCollection, object) &&
665
- object.query.typename === DataType.StoredSchema.typename
697
+ Obj.instanceOf(Collection.QueryCollection, object) &&
698
+ getTypenameFromQuery(object.query) === StoredSchema.typename
666
699
  );
667
700
  if (isSchema && query) {
668
- const views = get(rxFromQuery(query));
701
+ const views = get(atomFromQuery(query));
669
702
  const filteredViews = get(
670
- rxFromSignal(() => views.filter((view) => view.query.typename === object.typename)),
703
+ atomFromSignal(() =>
704
+ views.filter((view) => getTypenameFromQuery(view.query.ast) === object.typename),
705
+ ),
671
706
  );
672
707
  deletable = filteredViews.length === 0;
673
708
  }
@@ -686,7 +721,7 @@ export default (context: PluginContext) => {
686
721
  dispatch: dispatcher.dispatchPromise,
687
722
  objectForms,
688
723
  deletable,
689
- navigable: get(rxFromSignal(() => state.navigableCollections)),
724
+ navigable: get(atomFromSignal(() => state.navigableCollections)),
690
725
  });
691
726
  }
692
727
  }),
@@ -699,19 +734,19 @@ export default (context: PluginContext) => {
699
734
 
700
735
  // View selected objects.
701
736
  createExtension({
702
- id: `${SPACE_PLUGIN}/selected-objects`,
737
+ id: `${meta.id}/selected-objects`,
703
738
  connector: (node) =>
704
- Rx.make((get) =>
705
- pipe(
739
+ Atom.make((get) =>
740
+ Function.pipe(
706
741
  get(node),
707
- Option.flatMap((node) => (Obj.instanceOf(DataType.View, node.data) ? Option.some(node) : Option.none())),
742
+ Option.flatMap((node) => (Obj.instanceOf(View.View, node.data) ? Option.some(node) : Option.none())),
708
743
  Option.map((node) => [
709
744
  {
710
745
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
711
746
  type: PLANK_COMPANION_TYPE,
712
747
  data: 'selected-objects',
713
748
  properties: {
714
- label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
749
+ label: ['companion selected objects label', { ns: meta.id }],
715
750
  icon: 'ph--tree-view--regular',
716
751
  disposition: 'hidden',
717
752
  },
@@ -724,10 +759,10 @@ export default (context: PluginContext) => {
724
759
 
725
760
  // Object settings plank companion.
726
761
  createExtension({
727
- id: `${SPACE_PLUGIN}/settings`,
762
+ id: `${meta.id}/settings`,
728
763
  connector: (node) =>
729
- Rx.make((get) =>
730
- pipe(
764
+ Atom.make((get) =>
765
+ Function.pipe(
731
766
  get(node),
732
767
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
733
768
  Option.map((node) => [
@@ -736,7 +771,7 @@ export default (context: PluginContext) => {
736
771
  type: PLANK_COMPANION_TYPE,
737
772
  data: 'settings',
738
773
  properties: {
739
- label: ['object settings label', { ns: SPACE_PLUGIN }],
774
+ label: ['object settings label', { ns: meta.id }],
740
775
  icon: 'ph--sliders--regular',
741
776
  disposition: 'hidden',
742
777
  position: 'fallback',