@dxos/plugin-space 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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 (337) 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-AFC6PNAB.mjs → app-graph-builder-DTM7BJ6D.mjs} +107 -96
  10. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-Q7QG4EKW.mjs → app-graph-serializer-TIKXF43P.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-TIKXF43P.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-AFUOMLX6.mjs +167 -0
  14. package/dist/lib/browser/chunk-AFUOMLX6.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-6GRF7NEF.mjs → chunk-CKACGS7T.mjs} +553 -475
  16. package/dist/lib/browser/chunk-CKACGS7T.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-S33AYKSS.mjs → chunk-KFUMADZF.mjs} +135 -62
  20. package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-WZYRDFW7.mjs → chunk-VGKOXAPE.mjs} +26 -13
  22. package/dist/lib/browser/chunk-VGKOXAPE.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  24. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  26. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-URST7EEN.mjs → chunk-ZQMSGD5J.mjs} +35 -19
  28. package/dist/lib/browser/chunk-ZQMSGD5J.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 -70
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-CO262Q44.mjs → intent-resolver-3FNTO3VW.mjs} +89 -76
  34. package/dist/lib/browser/intent-resolver-3FNTO3VW.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-Q7VBWBES.mjs +30 -0
  37. package/dist/lib/browser/react-root-Q7VBWBES.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-TPUOK2LC.mjs → react-surface-TTHS332A.mjs} +71 -105
  39. package/dist/lib/browser/react-surface-TTHS332A.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-ZYH2JWNI.mjs → settings-45PGPO2V.mjs} +5 -5
  43. package/dist/lib/browser/{settings-ZYH2JWNI.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-3I5LISH4.mjs → spaces-ready-QCND4DVY.mjs} +15 -14
  45. package/dist/lib/browser/spaces-ready-QCND4DVY.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-OW2EBYRI.mjs → app-graph-builder-FBJFWI4H.mjs} +107 -96
  58. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-6PGC5WR5.mjs → app-graph-serializer-BESQZAYU.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-BESQZAYU.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-RXDT5LA5.mjs → chunk-6VEONPNZ.mjs} +35 -19
  62. package/dist/lib/node-esm/chunk-6VEONPNZ.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs +168 -0
  64. package/dist/lib/node-esm/chunk-6ZQGZBEP.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-TEUN2E4F.mjs → chunk-OK2L7N2F.mjs} +135 -62
  70. package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-LGNPMOXU.mjs → chunk-QBRPYAEL.mjs} +26 -13
  72. package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-NMCD2PSG.mjs → chunk-XGAMJC5C.mjs} +553 -475
  74. package/dist/lib/node-esm/chunk-XGAMJC5C.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 +88 -70
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-EXPK4B76.mjs → intent-resolver-6O5FSB7Z.mjs} +89 -76
  82. package/dist/lib/node-esm/intent-resolver-6O5FSB7Z.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-4OQ7MPGW.mjs → react-root-K66W3FMA.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-K66W3FMA.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-WXEXIDB7.mjs → react-surface-Y7FTEIDF.mjs} +71 -105
  87. package/dist/lib/node-esm/react-surface-Y7FTEIDF.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-2RYFMMTP.mjs → settings-6FO65BA6.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-2RYFMMTP.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-JAP22P57.mjs → spaces-ready-P7CKVXBE.mjs} +15 -14
  93. package/dist/lib/node-esm/spaces-ready-P7CKVXBE.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 +120 -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 +1707 -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 +1540 -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/index.d.ts +2 -1
  145. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  146. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  147. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  148. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +121 -2
  149. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  151. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  152. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  153. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  154. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  155. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +122 -3
  156. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  157. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  158. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  159. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  160. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  161. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  162. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  163. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  164. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +120 -1
  165. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  167. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +121 -2
  168. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  170. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  171. package/dist/types/src/components/index.d.ts +10 -17
  172. package/dist/types/src/components/index.d.ts.map +1 -1
  173. package/dist/types/src/events.d.ts.map +1 -1
  174. package/dist/types/src/helpers/index.d.ts +2 -0
  175. package/dist/types/src/helpers/index.d.ts.map +1 -0
  176. package/dist/types/src/helpers/query.d.ts +8 -0
  177. package/dist/types/src/helpers/query.d.ts.map +1 -0
  178. package/dist/types/src/helpers/query.test.d.ts +2 -0
  179. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  180. package/dist/types/src/hooks/index.d.ts +1 -0
  181. package/dist/types/src/hooks/index.d.ts.map +1 -1
  182. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  183. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  184. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  185. package/dist/types/src/hooks/usePath.d.ts +1 -1
  186. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  187. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  188. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  189. package/dist/types/src/index.d.ts +1 -0
  190. package/dist/types/src/index.d.ts.map +1 -1
  191. package/dist/types/src/meta.d.ts +0 -1
  192. package/dist/types/src/meta.d.ts.map +1 -1
  193. package/dist/types/src/translations.d.ts +120 -0
  194. package/dist/types/src/translations.d.ts.map +1 -1
  195. package/dist/types/src/types/types.d.ts +70 -55
  196. package/dist/types/src/types/types.d.ts.map +1 -1
  197. package/dist/types/src/util.d.ts +10 -7
  198. package/dist/types/src/util.d.ts.map +1 -1
  199. package/dist/types/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +65 -60
  201. package/src/SpacePlugin.ts +228 -200
  202. package/src/capabilities/app-graph-builder.ts +157 -121
  203. package/src/capabilities/app-graph-serializer.ts +12 -12
  204. package/src/capabilities/capabilities.ts +16 -11
  205. package/src/capabilities/identity-created.ts +2 -2
  206. package/src/capabilities/intent-resolver.ts +75 -59
  207. package/src/capabilities/react-root.tsx +4 -3
  208. package/src/capabilities/react-surface.tsx +65 -141
  209. package/src/capabilities/schema-defs.ts +1 -1
  210. package/src/capabilities/spaces-ready.ts +8 -5
  211. package/src/capabilities/state.ts +2 -2
  212. package/src/components/AwaitingObject.tsx +12 -14
  213. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  214. package/src/components/CollectionSection.tsx +8 -6
  215. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -11
  216. package/src/components/CreateDialog/CreateObjectDialog.tsx +36 -28
  217. package/src/components/CreateDialog/CreateObjectPanel.tsx +8 -8
  218. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  219. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  220. package/src/components/JoinDialog/index.ts +5 -0
  221. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +7 -6
  222. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +16 -14
  223. package/src/components/MembersContainer/index.ts +5 -0
  224. package/src/components/MenuFooter.tsx +2 -2
  225. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  226. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  227. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  228. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  229. package/src/components/ObjectRenamePopover/index.ts +5 -0
  230. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
  231. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  232. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  233. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  234. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +1 -1
  235. package/src/components/ObjectSettings/index.ts +3 -1
  236. package/src/components/RecordArticle.stories.tsx +115 -0
  237. package/src/components/RecordArticle.tsx +114 -0
  238. package/src/components/SchemaContainer.tsx +23 -26
  239. package/src/components/SpacePluginSettings.tsx +10 -4
  240. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +23 -25
  241. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  242. package/src/components/SpacePresence/index.ts +5 -0
  243. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  244. package/src/components/SpaceRenamePopover/index.ts +5 -0
  245. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -4
  246. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +44 -23
  247. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  248. package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
  249. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  250. package/src/components/ViewEditor.tsx +51 -18
  251. package/src/components/index.ts +7 -8
  252. package/src/events.ts +6 -6
  253. package/src/helpers/index.ts +5 -0
  254. package/src/helpers/query.test.ts +24 -0
  255. package/src/helpers/query.ts +158 -0
  256. package/src/hooks/index.ts +1 -0
  257. package/src/hooks/useActiveSpace.ts +2 -1
  258. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  259. package/src/hooks/usePath.ts +1 -1
  260. package/src/hooks/useTypeOptions.ts +59 -0
  261. package/src/index.ts +1 -0
  262. package/src/meta.ts +6 -3
  263. package/src/translations.ts +25 -10
  264. package/src/types/types.ts +33 -18
  265. package/src/util.tsx +141 -63
  266. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  267. package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs +0 -90
  268. package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs.map +0 -7
  269. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  270. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  271. package/dist/lib/browser/app-graph-builder-AFC6PNAB.mjs.map +0 -7
  272. package/dist/lib/browser/app-graph-serializer-Q7QG4EKW.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-6GRF7NEF.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-ELJDGQTO.mjs +0 -94
  277. package/dist/lib/browser/chunk-ELJDGQTO.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  279. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-S33AYKSS.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
  282. package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-URST7EEN.mjs.map +0 -7
  284. package/dist/lib/browser/chunk-WZYRDFW7.mjs.map +0 -7
  285. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  286. package/dist/lib/browser/intent-resolver-CO262Q44.mjs.map +0 -7
  287. package/dist/lib/browser/react-root-K4IVLFYZ.mjs +0 -29
  288. package/dist/lib/browser/react-root-K4IVLFYZ.mjs.map +0 -7
  289. package/dist/lib/browser/react-surface-TPUOK2LC.mjs.map +0 -7
  290. package/dist/lib/browser/schema-defs-YDPFZELA.mjs.map +0 -7
  291. package/dist/lib/browser/spaces-ready-3I5LISH4.mjs.map +0 -7
  292. package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
  293. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  294. package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs +0 -91
  295. package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs.map +0 -7
  296. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  297. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  298. package/dist/lib/node-esm/app-graph-builder-OW2EBYRI.mjs.map +0 -7
  299. package/dist/lib/node-esm/app-graph-serializer-6PGC5WR5.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  301. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
  303. package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  305. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-LGNPMOXU.mjs.map +0 -7
  307. package/dist/lib/node-esm/chunk-NMCD2PSG.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs +0 -96
  309. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
  310. package/dist/lib/node-esm/chunk-RXDT5LA5.mjs.map +0 -7
  311. package/dist/lib/node-esm/chunk-TEUN2E4F.mjs.map +0 -7
  312. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  313. package/dist/lib/node-esm/intent-resolver-EXPK4B76.mjs.map +0 -7
  314. package/dist/lib/node-esm/react-root-4OQ7MPGW.mjs.map +0 -7
  315. package/dist/lib/node-esm/react-surface-WXEXIDB7.mjs.map +0 -7
  316. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs.map +0 -7
  317. package/dist/lib/node-esm/spaces-ready-JAP22P57.mjs.map +0 -7
  318. package/dist/lib/node-esm/state-7VBVBGNS.mjs.map +0 -7
  319. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  320. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  321. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  322. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  323. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  324. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  325. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  326. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  327. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  328. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  329. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  330. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  331. package/dist/types/src/components/RecordMain.d.ts +0 -7
  332. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  333. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  334. package/src/components/ObjectDetailsPanel.tsx +0 -79
  335. package/src/components/PersistenceStatus.tsx +0 -83
  336. package/src/components/RecordMain.tsx +0 -43
  337. /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, typenameFromQuery } 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,18 +438,18 @@ 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
- const typename = typenameFromQuery(collection.query);
452
+ const typename = getTypenameFromQuery(collection.query);
444
453
  return typename && space ? Option.some({ typename, space }) : Option.none();
445
454
  }),
446
455
  Option.map(({ typename, space }) => {
@@ -453,22 +462,22 @@ export default (context: PluginContext) => {
453
462
  // It will return all objects in the collection, not just the ones of the given type.
454
463
  // However this works fine for now because this query is only used for exclusions.
455
464
  Query.select(Filter.typename(typename))
456
- .referencedBy(DataType.Collection, 'objects')
465
+ .referencedBy(Collection.Collection, 'objects')
457
466
  .reference('objects'),
458
467
  ),
459
468
  );
460
469
  }
461
470
  return (
462
- get(rxFromQuery(query))
471
+ get(atomFromQuery(query))
463
472
  // TODO(wittjosiah): This should be the default sort order.
464
473
  .toSorted((a, b) => a.id.localeCompare(b.id))
465
474
  .map((object) =>
466
475
  get(
467
- rxFromSignal(() =>
476
+ atomFromSignal(() =>
468
477
  createObjectNode({
469
478
  object,
470
479
  space,
471
- resolve,
480
+ resolve: resolve(get),
472
481
  droppable: false, // Cannot rearrange query collections.
473
482
  navigable: state.navigableCollections,
474
483
  }),
@@ -486,15 +495,15 @@ export default (context: PluginContext) => {
486
495
 
487
496
  // Static schema records.
488
497
  createExtension({
489
- id: `${SPACE_PLUGIN}/static-schemas`,
498
+ id: `${meta.id}/static-schemas`,
490
499
  connector: (node) => {
491
500
  const client = context.getCapability(ClientCapabilities.Client);
492
- return Rx.make((get) =>
493
- pipe(
501
+ return Atom.make((get) =>
502
+ Function.pipe(
494
503
  get(node),
495
504
  Option.flatMap((node) =>
496
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
497
- typenameFromQuery(node.data.query) === DataType.StoredSchema.typename
505
+ Obj.instanceOf(Collection.QueryCollection, node.data) &&
506
+ getTypenameFromQuery(node.data.query) === StoredSchema.typename
498
507
  ? Option.some(node.data)
499
508
  : Option.none(),
500
509
  ),
@@ -503,7 +512,7 @@ export default (context: PluginContext) => {
503
512
  return space?.properties.staticRecords ? Option.some(space) : Option.none();
504
513
  }),
505
514
  Option.map((space) => {
506
- return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
515
+ return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
507
516
  .map((typename) =>
508
517
  client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
509
518
  )
@@ -518,11 +527,11 @@ export default (context: PluginContext) => {
518
527
 
519
528
  // Create static schema actions.
520
529
  createExtension({
521
- id: `${SPACE_PLUGIN}/static-schema-actions`,
530
+ id: `${meta.id}/static-schema-actions`,
522
531
  actions: (node) => {
523
- let query: QueryResult<DataType.View> | undefined;
524
- return Rx.make((get) =>
525
- pipe(
532
+ let query: QueryResult<View.View> | undefined;
533
+ return Atom.make((get) =>
534
+ Function.pipe(
526
535
  get(node),
527
536
  Option.flatMap((node) => {
528
537
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
@@ -531,14 +540,16 @@ export default (context: PluginContext) => {
531
540
  Option.map(({ space, schema }) => {
532
541
  if (!query) {
533
542
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
534
- query = space.db.query(Filter.type(DataType.View));
543
+ query = space.db.query(Filter.type(View.View));
535
544
  }
536
545
 
537
- const views = get(rxFromQuery(query));
546
+ const views = get(atomFromQuery(query));
538
547
  const filteredViews = get(
539
- rxFromSignal(() =>
548
+ atomFromSignal(() =>
540
549
  // TODO(wittjosiah): Remove cast.
541
- views.filter((view) => typenameFromQuery(view.query) === Type.getTypename(schema as Type.Obj.Any)),
550
+ views.filter(
551
+ (view) => getTypenameFromQuery(view.query.ast) === Type.getTypename(schema as Type.Obj.Any),
552
+ ),
542
553
  ),
543
554
  );
544
555
  const deletable = filteredViews.length === 0;
@@ -564,41 +575,57 @@ export default (context: PluginContext) => {
564
575
 
565
576
  // Create nodes for schema views.
566
577
  createExtension({
567
- id: `${SPACE_PLUGIN}/schema-views`,
578
+ id: `${meta.id}/schema-views`,
568
579
  connector: (node) => {
569
- let query: QueryResult<DataType.View> | undefined;
570
- return Rx.make((get) =>
571
- pipe(
580
+ let query: QueryResult<View.View> | undefined;
581
+ return Atom.make((get) =>
582
+ Function.pipe(
572
583
  get(node),
573
584
  Option.flatMap((node) => {
574
585
  const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
575
- return space && (Obj.instanceOf(DataType.StoredSchema, node.data) || Schema.isSchema(node.data))
586
+ return space && (Obj.instanceOf(StoredSchema, node.data) || Schema.isSchema(node.data))
576
587
  ? Option.some({ space, schema: node.data })
577
588
  : Option.none();
578
589
  }),
579
590
  Option.map(({ space, schema }) => {
580
591
  if (!query) {
581
592
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
582
- query = space.db.query(Filter.type(DataType.View));
593
+ query = space.db.query(Filter.type(View.View));
583
594
  }
584
595
 
585
596
  // TODO(wittjosiah): Remove cast.
586
597
  const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
587
- return get(rxFromQuery(query))
588
- .filter((view) => typenameFromQuery(view.query) === typename)
589
- .map((view) =>
590
- get(
591
- rxFromSignal(() =>
592
- createObjectNode({
593
- object: view,
594
- space,
595
- resolve,
596
- 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
+ }
597
612
  }),
598
613
  ),
599
- ),
600
- )
601
- .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
+ );
602
629
  }),
603
630
  Option.getOrElse(() => []),
604
631
  ),
@@ -608,65 +635,74 @@ export default (context: PluginContext) => {
608
635
 
609
636
  // Create record nodes.
610
637
  createExtension({
611
- id: `${SPACE_PLUGIN}/records`,
638
+ id: `${meta.id}/records`,
612
639
  resolver: (id) => {
613
640
  let query: QueryResult<Type.Expando> | undefined;
614
- return Rx.make((get) => {
641
+ return Atom.make((get) => {
615
642
  const client = context.getCapability(ClientCapabilities.Client);
616
- const { spaceId, objectId } = parseId(id);
617
- if (!spaceId || !objectId) {
643
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
644
+ if (!dxn || !dxn.spaceId) {
618
645
  return null;
619
646
  }
620
647
 
621
- const space = client.spaces.get(spaceId);
648
+ const space = client.spaces.get(dxn.spaceId);
622
649
  if (!space) {
623
650
  return null;
624
651
  }
625
652
 
626
653
  if (!query) {
627
- query = space.db.query(Filter.ids(objectId));
654
+ query = space.db.query(Filter.ids(dxn.echoId));
628
655
  }
629
656
 
630
- const object = get(rxFromQuery(query)).at(0);
657
+ const object = get(atomFromQuery(query)).at(0);
631
658
  if (!object) {
632
659
  return null;
633
660
  }
634
661
 
635
- return createObjectNode({ object, space, resolve, disposition: 'hidden' });
662
+ return createObjectNode({
663
+ object,
664
+ space,
665
+ resolve: resolve(get),
666
+ disposition: 'hidden',
667
+ });
636
668
  });
637
669
  },
638
670
  }),
639
671
 
640
672
  // Create collection actions and action groups.
641
673
  createExtension({
642
- id: `${SPACE_PLUGIN}/object-actions`,
674
+ id: `${meta.id}/object-actions`,
643
675
  actions: (node) => {
644
- let query: QueryResult<DataType.View> | undefined;
645
- return Rx.make((get) =>
646
- pipe(
676
+ let query: QueryResult<View.View> | undefined;
677
+ return Atom.make((get) =>
678
+ Function.pipe(
647
679
  get(node),
648
680
  Option.flatMap((node) => {
649
681
  const space = getSpace(node.data);
650
- 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();
651
685
  }),
652
686
  Option.flatMap(({ space, object }) => {
653
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
687
+ const isSchema = Obj.instanceOf(StoredSchema, object);
654
688
  if (!query && isSchema) {
655
689
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
656
- query = space.db.query(Filter.type(DataType.View));
690
+ query = space.db.query(Filter.type(View.View));
657
691
  }
658
692
 
659
693
  let deletable =
660
694
  !isSchema &&
661
695
  // Don't allow the Records smart collection to be deleted.
662
696
  !(
663
- Obj.instanceOf(DataType.QueryCollection, object) &&
664
- typenameFromQuery(object.query) === DataType.StoredSchema.typename
697
+ Obj.instanceOf(Collection.QueryCollection, object) &&
698
+ getTypenameFromQuery(object.query) === StoredSchema.typename
665
699
  );
666
700
  if (isSchema && query) {
667
- const views = get(rxFromQuery(query));
701
+ const views = get(atomFromQuery(query));
668
702
  const filteredViews = get(
669
- rxFromSignal(() => views.filter((view) => typenameFromQuery(view.query) === object.typename)),
703
+ atomFromSignal(() =>
704
+ views.filter((view) => getTypenameFromQuery(view.query.ast) === object.typename),
705
+ ),
670
706
  );
671
707
  deletable = filteredViews.length === 0;
672
708
  }
@@ -685,7 +721,7 @@ export default (context: PluginContext) => {
685
721
  dispatch: dispatcher.dispatchPromise,
686
722
  objectForms,
687
723
  deletable,
688
- navigable: get(rxFromSignal(() => state.navigableCollections)),
724
+ navigable: get(atomFromSignal(() => state.navigableCollections)),
689
725
  });
690
726
  }
691
727
  }),
@@ -698,19 +734,19 @@ export default (context: PluginContext) => {
698
734
 
699
735
  // View selected objects.
700
736
  createExtension({
701
- id: `${SPACE_PLUGIN}/selected-objects`,
737
+ id: `${meta.id}/selected-objects`,
702
738
  connector: (node) =>
703
- Rx.make((get) =>
704
- pipe(
739
+ Atom.make((get) =>
740
+ Function.pipe(
705
741
  get(node),
706
- 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())),
707
743
  Option.map((node) => [
708
744
  {
709
745
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
710
746
  type: PLANK_COMPANION_TYPE,
711
747
  data: 'selected-objects',
712
748
  properties: {
713
- label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
749
+ label: ['companion selected objects label', { ns: meta.id }],
714
750
  icon: 'ph--tree-view--regular',
715
751
  disposition: 'hidden',
716
752
  },
@@ -723,10 +759,10 @@ export default (context: PluginContext) => {
723
759
 
724
760
  // Object settings plank companion.
725
761
  createExtension({
726
- id: `${SPACE_PLUGIN}/settings`,
762
+ id: `${meta.id}/settings`,
727
763
  connector: (node) =>
728
- Rx.make((get) =>
729
- pipe(
764
+ Atom.make((get) =>
765
+ Function.pipe(
730
766
  get(node),
731
767
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
732
768
  Option.map((node) => [
@@ -735,7 +771,7 @@ export default (context: PluginContext) => {
735
771
  type: PLANK_COMPANION_TYPE,
736
772
  data: 'settings',
737
773
  properties: {
738
- label: ['object settings label', { ns: SPACE_PLUGIN }],
774
+ label: ['object settings label', { ns: meta.id }],
739
775
  icon: 'ph--sliders--regular',
740
776
  disposition: 'hidden',
741
777
  position: 'fallback',