@dxos/plugin-space 0.8.4-main.fd6878d → 0.8.4-main.fffef41

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 (366) 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-VZW75QPJ.mjs → app-graph-builder-DTM7BJ6D.mjs} +114 -97
  10. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-YPHYVZAP.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-PSIBVBTA.mjs → chunk-CKACGS7T.mjs} +576 -500
  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-SMB4DGYO.mjs → chunk-KFUMADZF.mjs} +184 -60
  20. package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-WAXS2ZVX.mjs → chunk-VGKOXAPE.mjs} +27 -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-3UFG6LQQ.mjs → chunk-ZQMSGD5J.mjs} +44 -22
  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 +89 -91
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-TS6CCKST.mjs → intent-resolver-3FNTO3VW.mjs} +103 -85
  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-V3ARS2BP.mjs → react-surface-TTHS332A.mjs} +75 -109
  39. package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-5LBA43X5.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-FLLBP5KI.mjs → settings-45PGPO2V.mjs} +5 -5
  43. package/dist/lib/browser/{settings-FLLBP5KI.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-FXEP6XEW.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-K3UBPKYP.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-XNVQOJLE.mjs → app-graph-builder-FBJFWI4H.mjs} +114 -97
  58. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-PKVLWV6V.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-S7MKRQHY.mjs → chunk-6VEONPNZ.mjs} +44 -22
  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-CTQMR7E3.mjs → chunk-OK2L7N2F.mjs} +184 -60
  70. package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-HYIZVPOA.mjs → chunk-QBRPYAEL.mjs} +27 -13
  72. package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-KYUHPPRN.mjs → chunk-XGAMJC5C.mjs} +576 -500
  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 +89 -91
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-W6P27SCF.mjs → intent-resolver-6O5FSB7Z.mjs} +103 -85
  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-N27KETKT.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-TNPAUQCM.mjs → react-surface-Y7FTEIDF.mjs} +75 -109
  87. package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-TPWZPDCR.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-WKUWY3P6.mjs → settings-6FO65BA6.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-WKUWY3P6.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-PQLLIO5W.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-4M5A6OSB.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 +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  102. package/dist/types/src/capabilities/capabilities.d.ts +6 -5
  103. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/identity-created.d.ts +1 -1
  105. package/dist/types/src/capabilities/index.d.ts +11 -12
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  110. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  114. package/dist/types/src/capabilities/settings.d.ts +1 -1
  115. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  116. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/state.d.ts +1 -1
  118. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  119. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  120. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  121. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  122. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  123. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  124. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  125. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -4
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +6 -4
  128. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  129. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  131. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  132. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  133. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  134. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  135. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  136. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -0
  138. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  139. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  140. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  141. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  142. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  143. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  148. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  149. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  150. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  151. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  152. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  153. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1540 -0
  154. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  155. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  156. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  159. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  160. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  161. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  162. package/dist/types/src/components/RecordArticle.stories.d.ts +1707 -0
  163. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  164. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  165. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  166. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  167. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  168. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  169. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1537 -0
  170. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  172. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  173. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  174. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  175. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  176. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  178. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1537 -4
  179. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  180. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  181. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
  182. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  184. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  185. package/dist/types/src/components/index.d.ts +10 -14
  186. package/dist/types/src/components/index.d.ts.map +1 -1
  187. package/dist/types/src/events.d.ts.map +1 -1
  188. package/dist/types/src/helpers/index.d.ts +2 -0
  189. package/dist/types/src/helpers/index.d.ts.map +1 -0
  190. package/dist/types/src/helpers/query.d.ts +8 -0
  191. package/dist/types/src/helpers/query.d.ts.map +1 -0
  192. package/dist/types/src/helpers/query.test.d.ts +2 -0
  193. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  194. package/dist/types/src/hooks/index.d.ts +1 -0
  195. package/dist/types/src/hooks/index.d.ts.map +1 -1
  196. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  198. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  199. package/dist/types/src/hooks/usePath.d.ts +1 -1
  200. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  202. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  203. package/dist/types/src/index.d.ts +1 -0
  204. package/dist/types/src/index.d.ts.map +1 -1
  205. package/dist/types/src/meta.d.ts +0 -1
  206. package/dist/types/src/meta.d.ts.map +1 -1
  207. package/dist/types/src/translations.d.ts +1332 -22
  208. package/dist/types/src/translations.d.ts.map +1 -1
  209. package/dist/types/src/types/types.d.ts +92 -97
  210. package/dist/types/src/types/types.d.ts.map +1 -1
  211. package/dist/types/src/util.d.ts +12 -8
  212. package/dist/types/src/util.d.ts.map +1 -1
  213. package/dist/types/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +65 -59
  215. package/src/SpacePlugin.ts +228 -218
  216. package/src/capabilities/app-graph-builder.ts +184 -135
  217. package/src/capabilities/app-graph-serializer.ts +12 -12
  218. package/src/capabilities/capabilities.ts +17 -11
  219. package/src/capabilities/identity-created.ts +2 -2
  220. package/src/capabilities/index.ts +0 -1
  221. package/src/capabilities/intent-resolver.ts +89 -62
  222. package/src/capabilities/react-root.tsx +4 -3
  223. package/src/capabilities/react-surface.tsx +69 -145
  224. package/src/capabilities/schema-defs.ts +1 -1
  225. package/src/capabilities/spaces-ready.ts +8 -5
  226. package/src/capabilities/state.ts +2 -2
  227. package/src/components/AwaitingObject.tsx +12 -14
  228. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  229. package/src/components/CollectionSection.tsx +8 -6
  230. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +15 -15
  231. package/src/components/CreateDialog/CreateObjectDialog.tsx +48 -31
  232. package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
  233. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  234. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  235. package/src/components/JoinDialog/index.ts +5 -0
  236. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  237. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +21 -20
  238. package/src/components/MembersContainer/index.ts +5 -0
  239. package/src/components/MenuFooter.tsx +2 -2
  240. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  241. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  242. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  243. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  244. package/src/components/ObjectRenamePopover/index.ts +5 -0
  245. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
  246. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  247. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  248. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  249. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  250. package/src/components/ObjectSettings/index.ts +3 -1
  251. package/src/components/RecordArticle.stories.tsx +115 -0
  252. package/src/components/RecordArticle.tsx +114 -0
  253. package/src/components/SchemaContainer.tsx +23 -26
  254. package/src/components/SpacePluginSettings.tsx +15 -10
  255. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +22 -22
  256. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  257. package/src/components/SpacePresence/index.ts +5 -0
  258. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  259. package/src/components/SpaceRenamePopover/index.ts +5 -0
  260. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +15 -8
  261. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +45 -24
  262. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  263. package/src/components/SyncStatus/SyncStatus.stories.tsx +7 -8
  264. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  265. package/src/components/ViewEditor.tsx +51 -23
  266. package/src/components/index.ts +7 -8
  267. package/src/events.ts +6 -6
  268. package/src/helpers/index.ts +5 -0
  269. package/src/helpers/query.test.ts +24 -0
  270. package/src/helpers/query.ts +158 -0
  271. package/src/hooks/index.ts +1 -0
  272. package/src/hooks/useActiveSpace.ts +3 -2
  273. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  274. package/src/hooks/usePath.ts +1 -1
  275. package/src/hooks/useTypeOptions.ts +59 -0
  276. package/src/index.ts +1 -0
  277. package/src/meta.ts +6 -3
  278. package/src/translations.ts +26 -10
  279. package/src/types/types.ts +42 -23
  280. package/src/util.tsx +183 -62
  281. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  282. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  283. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  284. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  285. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  286. package/dist/lib/browser/app-graph-builder-VZW75QPJ.mjs.map +0 -7
  287. package/dist/lib/browser/app-graph-serializer-YPHYVZAP.mjs.map +0 -7
  288. package/dist/lib/browser/chunk-3UFG6LQQ.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  290. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-DYKFFVN6.mjs +0 -94
  292. package/dist/lib/browser/chunk-DYKFFVN6.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  294. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-PSIBVBTA.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-Q5EEPP3S.mjs +0 -20
  297. package/dist/lib/browser/chunk-Q5EEPP3S.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-SMB4DGYO.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  300. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  301. package/dist/lib/browser/intent-resolver-TS6CCKST.mjs.map +0 -7
  302. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs +0 -29
  303. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs.map +0 -7
  304. package/dist/lib/browser/react-surface-V3ARS2BP.mjs.map +0 -7
  305. package/dist/lib/browser/schema-defs-5LBA43X5.mjs.map +0 -7
  306. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs +0 -124
  307. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs.map +0 -7
  308. package/dist/lib/browser/spaces-ready-FXEP6XEW.mjs.map +0 -7
  309. package/dist/lib/browser/state-K3UBPKYP.mjs.map +0 -7
  310. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  311. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  312. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  313. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  314. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-XNVQOJLE.mjs.map +0 -7
  316. package/dist/lib/node-esm/app-graph-serializer-PKVLWV6V.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs +0 -21
  318. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-CTQMR7E3.mjs.map +0 -7
  320. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  321. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  322. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  323. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs +0 -96
  326. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-KYUHPPRN.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-S7MKRQHY.mjs.map +0 -7
  329. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  330. package/dist/lib/node-esm/intent-resolver-W6P27SCF.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-root-N27KETKT.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-surface-TNPAUQCM.mjs.map +0 -7
  333. package/dist/lib/node-esm/schema-defs-TPWZPDCR.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs +0 -126
  335. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs.map +0 -7
  336. package/dist/lib/node-esm/spaces-ready-PQLLIO5W.mjs.map +0 -7
  337. package/dist/lib/node-esm/state-4M5A6OSB.mjs.map +0 -7
  338. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  339. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  340. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  341. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  342. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  343. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  344. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  345. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  346. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  347. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  349. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  350. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  351. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  352. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  353. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  354. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  355. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  356. package/dist/types/src/components/RecordMain.d.ts +0 -7
  357. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  358. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  359. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  360. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  361. package/src/capabilities/schema-tool.test.ts +0 -44
  362. package/src/capabilities/schema-tools.ts +0 -125
  363. package/src/components/MembersContainer.stories.tsx +0 -31
  364. package/src/components/ObjectDetailsPanel.tsx +0 -77
  365. package/src/components/PersistenceStatus.tsx +0 -83
  366. package/src/components/RecordMain.tsx +0 -43
@@ -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,26 +462,30 @@ 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
- return get(rxFromQuery(query))
463
- .map((object) =>
464
- get(
465
- rxFromSignal(() =>
466
- createObjectNode({
467
- object,
468
- space,
469
- resolve,
470
- droppable: false, // Cannot rearrange query collections.
471
- navigable: state.navigableCollections,
472
- }),
470
+ return (
471
+ get(atomFromQuery(query))
472
+ // TODO(wittjosiah): This should be the default sort order.
473
+ .toSorted((a, b) => a.id.localeCompare(b.id))
474
+ .map((object) =>
475
+ get(
476
+ atomFromSignal(() =>
477
+ createObjectNode({
478
+ object,
479
+ space,
480
+ resolve: resolve(get),
481
+ droppable: false, // Cannot rearrange query collections.
482
+ navigable: state.navigableCollections,
483
+ }),
484
+ ),
473
485
  ),
474
- ),
475
- )
476
- .filter(isNonNullable);
486
+ )
487
+ .filter(isNonNullable)
488
+ );
477
489
  }),
478
490
  Option.getOrElse(() => []),
479
491
  ),
@@ -483,15 +495,15 @@ export default (context: PluginContext) => {
483
495
 
484
496
  // Static schema records.
485
497
  createExtension({
486
- id: `${SPACE_PLUGIN}/static-schemas`,
498
+ id: `${meta.id}/static-schemas`,
487
499
  connector: (node) => {
488
500
  const client = context.getCapability(ClientCapabilities.Client);
489
- return Rx.make((get) =>
490
- pipe(
501
+ return Atom.make((get) =>
502
+ Function.pipe(
491
503
  get(node),
492
504
  Option.flatMap((node) =>
493
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
494
- node.data.query.typename === DataType.StoredSchema.typename
505
+ Obj.instanceOf(Collection.QueryCollection, node.data) &&
506
+ getTypenameFromQuery(node.data.query) === StoredSchema.typename
495
507
  ? Option.some(node.data)
496
508
  : Option.none(),
497
509
  ),
@@ -500,7 +512,7 @@ export default (context: PluginContext) => {
500
512
  return space?.properties.staticRecords ? Option.some(space) : Option.none();
501
513
  }),
502
514
  Option.map((space) => {
503
- return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
515
+ return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
504
516
  .map((typename) =>
505
517
  client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
506
518
  )
@@ -515,11 +527,11 @@ export default (context: PluginContext) => {
515
527
 
516
528
  // Create static schema actions.
517
529
  createExtension({
518
- id: `${SPACE_PLUGIN}/static-schema-actions`,
530
+ id: `${meta.id}/static-schema-actions`,
519
531
  actions: (node) => {
520
- let query: QueryResult<DataType.View> | undefined;
521
- return Rx.make((get) =>
522
- pipe(
532
+ let query: QueryResult<View.View> | undefined;
533
+ return Atom.make((get) =>
534
+ Function.pipe(
523
535
  get(node),
524
536
  Option.flatMap((node) => {
525
537
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
@@ -528,20 +540,32 @@ export default (context: PluginContext) => {
528
540
  Option.map(({ space, schema }) => {
529
541
  if (!query) {
530
542
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
531
- query = space.db.query(Filter.type(DataType.View));
543
+ query = space.db.query(Filter.type(View.View));
532
544
  }
533
545
 
534
- const views = get(rxFromQuery(query));
546
+ const views = get(atomFromQuery(query));
535
547
  const filteredViews = get(
536
- rxFromSignal(() =>
548
+ atomFromSignal(() =>
537
549
  // TODO(wittjosiah): Remove cast.
538
- 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
+ ),
539
553
  ),
540
554
  );
541
555
  const deletable = filteredViews.length === 0;
542
556
 
557
+ const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
558
+ if (!dispatcher) {
559
+ return [];
560
+ }
561
+
543
562
  // TODO(wittjosiah): Remove cast.
544
- return createStaticSchemaActions({ schema: schema as Type.Obj.Any, space, deletable });
563
+ return createStaticSchemaActions({
564
+ schema: schema as Type.Obj.Any,
565
+ space,
566
+ dispatch: dispatcher.dispatchPromise,
567
+ deletable,
568
+ });
545
569
  }),
546
570
  Option.getOrElse(() => []),
547
571
  ),
@@ -551,41 +575,57 @@ export default (context: PluginContext) => {
551
575
 
552
576
  // Create nodes for schema views.
553
577
  createExtension({
554
- id: `${SPACE_PLUGIN}/schema-views`,
578
+ id: `${meta.id}/schema-views`,
555
579
  connector: (node) => {
556
- let query: QueryResult<DataType.View> | undefined;
557
- return Rx.make((get) =>
558
- pipe(
580
+ let query: QueryResult<View.View> | undefined;
581
+ return Atom.make((get) =>
582
+ Function.pipe(
559
583
  get(node),
560
584
  Option.flatMap((node) => {
561
585
  const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
562
- return space && (Obj.instanceOf(DataType.StoredSchema, node.data) || Schema.isSchema(node.data))
586
+ return space && (Obj.instanceOf(StoredSchema, node.data) || Schema.isSchema(node.data))
563
587
  ? Option.some({ space, schema: node.data })
564
588
  : Option.none();
565
589
  }),
566
590
  Option.map(({ space, schema }) => {
567
591
  if (!query) {
568
592
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
569
- query = space.db.query(Filter.type(DataType.View));
593
+ query = space.db.query(Filter.type(View.View));
570
594
  }
571
595
 
572
596
  // TODO(wittjosiah): Remove cast.
573
597
  const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
574
- return get(rxFromQuery(query))
575
- .filter((view) => view.query.typename === typename)
576
- .map((view) =>
577
- get(
578
- rxFromSignal(() =>
579
- createObjectNode({
580
- object: view,
581
- space,
582
- resolve,
583
- 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
+ }
584
612
  }),
585
613
  ),
586
- ),
587
- )
588
- .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
+ );
589
629
  }),
590
630
  Option.getOrElse(() => []),
591
631
  ),
@@ -595,65 +635,74 @@ export default (context: PluginContext) => {
595
635
 
596
636
  // Create record nodes.
597
637
  createExtension({
598
- id: `${SPACE_PLUGIN}/records`,
638
+ id: `${meta.id}/records`,
599
639
  resolver: (id) => {
600
640
  let query: QueryResult<Type.Expando> | undefined;
601
- return Rx.make((get) => {
641
+ return Atom.make((get) => {
602
642
  const client = context.getCapability(ClientCapabilities.Client);
603
- const { spaceId, objectId } = parseId(id);
604
- if (!spaceId || !objectId) {
643
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
644
+ if (!dxn || !dxn.spaceId) {
605
645
  return null;
606
646
  }
607
647
 
608
- const space = client.spaces.get(spaceId);
648
+ const space = client.spaces.get(dxn.spaceId);
609
649
  if (!space) {
610
650
  return null;
611
651
  }
612
652
 
613
653
  if (!query) {
614
- query = space.db.query(Filter.ids(objectId));
654
+ query = space.db.query(Filter.ids(dxn.echoId));
615
655
  }
616
656
 
617
- const object = get(rxFromQuery(query)).at(0);
657
+ const object = get(atomFromQuery(query)).at(0);
618
658
  if (!object) {
619
659
  return null;
620
660
  }
621
661
 
622
- return createObjectNode({ object, space, resolve, disposition: 'hidden' });
662
+ return createObjectNode({
663
+ object,
664
+ space,
665
+ resolve: resolve(get),
666
+ disposition: 'hidden',
667
+ });
623
668
  });
624
669
  },
625
670
  }),
626
671
 
627
672
  // Create collection actions and action groups.
628
673
  createExtension({
629
- id: `${SPACE_PLUGIN}/object-actions`,
674
+ id: `${meta.id}/object-actions`,
630
675
  actions: (node) => {
631
- let query: QueryResult<DataType.View> | undefined;
632
- return Rx.make((get) =>
633
- pipe(
676
+ let query: QueryResult<View.View> | undefined;
677
+ return Atom.make((get) =>
678
+ Function.pipe(
634
679
  get(node),
635
680
  Option.flatMap((node) => {
636
681
  const space = getSpace(node.data);
637
- 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();
638
685
  }),
639
686
  Option.flatMap(({ space, object }) => {
640
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
687
+ const isSchema = Obj.instanceOf(StoredSchema, object);
641
688
  if (!query && isSchema) {
642
689
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
643
- query = space.db.query(Filter.type(DataType.View));
690
+ query = space.db.query(Filter.type(View.View));
644
691
  }
645
692
 
646
693
  let deletable =
647
694
  !isSchema &&
648
695
  // Don't allow the Records smart collection to be deleted.
649
696
  !(
650
- Obj.instanceOf(DataType.QueryCollection, object) &&
651
- object.query.typename === DataType.StoredSchema.typename
697
+ Obj.instanceOf(Collection.QueryCollection, object) &&
698
+ getTypenameFromQuery(object.query) === StoredSchema.typename
652
699
  );
653
700
  if (isSchema && query) {
654
- const views = get(rxFromQuery(query));
701
+ const views = get(atomFromQuery(query));
655
702
  const filteredViews = get(
656
- rxFromSignal(() => views.filter((view) => view.query.typename === object.typename)),
703
+ atomFromSignal(() =>
704
+ views.filter((view) => getTypenameFromQuery(view.query.ast) === object.typename),
705
+ ),
657
706
  );
658
707
  deletable = filteredViews.length === 0;
659
708
  }
@@ -672,7 +721,7 @@ export default (context: PluginContext) => {
672
721
  dispatch: dispatcher.dispatchPromise,
673
722
  objectForms,
674
723
  deletable,
675
- navigable: get(rxFromSignal(() => state.navigableCollections)),
724
+ navigable: get(atomFromSignal(() => state.navigableCollections)),
676
725
  });
677
726
  }
678
727
  }),
@@ -685,19 +734,19 @@ export default (context: PluginContext) => {
685
734
 
686
735
  // View selected objects.
687
736
  createExtension({
688
- id: `${SPACE_PLUGIN}/selected-objects`,
737
+ id: `${meta.id}/selected-objects`,
689
738
  connector: (node) =>
690
- Rx.make((get) =>
691
- pipe(
739
+ Atom.make((get) =>
740
+ Function.pipe(
692
741
  get(node),
693
- 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())),
694
743
  Option.map((node) => [
695
744
  {
696
745
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
697
746
  type: PLANK_COMPANION_TYPE,
698
747
  data: 'selected-objects',
699
748
  properties: {
700
- label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
749
+ label: ['companion selected objects label', { ns: meta.id }],
701
750
  icon: 'ph--tree-view--regular',
702
751
  disposition: 'hidden',
703
752
  },
@@ -710,10 +759,10 @@ export default (context: PluginContext) => {
710
759
 
711
760
  // Object settings plank companion.
712
761
  createExtension({
713
- id: `${SPACE_PLUGIN}/settings`,
762
+ id: `${meta.id}/settings`,
714
763
  connector: (node) =>
715
- Rx.make((get) =>
716
- pipe(
764
+ Atom.make((get) =>
765
+ Function.pipe(
717
766
  get(node),
718
767
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
719
768
  Option.map((node) => [
@@ -722,7 +771,7 @@ export default (context: PluginContext) => {
722
771
  type: PLANK_COMPANION_TYPE,
723
772
  data: 'settings',
724
773
  properties: {
725
- label: ['object settings label', { ns: SPACE_PLUGIN }],
774
+ label: ['object settings label', { ns: meta.id }],
726
775
  icon: 'ph--sliders--regular',
727
776
  disposition: 'hidden',
728
777
  position: 'fallback',