@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.72ec0f3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) 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-V3MP3CDK.mjs → app-graph-builder-VQAB3GCQ.mjs} +138 -90
  10. package/dist/lib/browser/app-graph-builder-VQAB3GCQ.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-KSLKMEPP.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-KSLKMEPP.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-ERQMHU7L.mjs} +124 -63
  14. package/dist/lib/browser/chunk-ERQMHU7L.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-J2BUK5E6.mjs} +587 -513
  16. package/dist/lib/browser/chunk-J2BUK5E6.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
  18. package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-SGTQ52SU.mjs → chunk-M2Z6D4ZI.mjs} +32 -21
  20. package/dist/lib/browser/chunk-M2Z6D4ZI.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-OLBBSOVI.mjs} +30 -17
  22. package/dist/lib/browser/chunk-OLBBSOVI.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-PU5IOFMG.mjs +167 -0
  24. package/dist/lib/browser/chunk-PU5IOFMG.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  26. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  28. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-NAXTPQXE.mjs} +6 -6
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +91 -91
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-Q2XWHAVA.mjs} +87 -85
  34. package/dist/lib/browser/intent-resolver-Q2XWHAVA.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-MM4HADPE.mjs +30 -0
  37. package/dist/lib/browser/react-root-MM4HADPE.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-YWZZQF7H.mjs → react-surface-SGZC3Y4U.mjs} +81 -105
  39. package/dist/lib/browser/react-surface-SGZC3Y4U.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-Z6FC4AHC.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-4IMP5RYT.mjs → settings-WKLGKUHQ.mjs} +5 -5
  43. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-WKLGKUHQ.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-C5QC2UFL.mjs} +21 -18
  45. package/dist/lib/browser/spaces-ready-C5QC2UFL.mjs.map +7 -0
  46. package/dist/lib/browser/{state-QYZAB45H.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-SG4VECBB.mjs → app-graph-builder-24JCLJPX.mjs} +138 -90
  58. package/dist/lib/node-esm/app-graph-builder-24JCLJPX.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-R723K764.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-R723K764.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-JH6F4C3I.mjs → chunk-2PN7QNGV.mjs} +32 -21
  62. package/dist/lib/node-esm/chunk-2PN7QNGV.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  64. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  66. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-ITQFSFQ3.mjs} +587 -513
  68. package/dist/lib/node-esm/chunk-ITQFSFQ3.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-TJPQDQNI.mjs +168 -0
  70. package/dist/lib/node-esm/chunk-TJPQDQNI.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-VH2EBZEV.mjs} +124 -63
  72. package/dist/lib/node-esm/chunk-VH2EBZEV.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-WC4VBFMA.mjs} +30 -17
  74. package/dist/lib/node-esm/chunk-WC4VBFMA.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
  76. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-OXLKCJE3.mjs} +6 -6
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +91 -91
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-YK4ESSET.mjs} +87 -85
  82. package/dist/lib/node-esm/intent-resolver-YK4ESSET.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-5Y7LJRX6.mjs → react-root-5ANDLQMX.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-5ANDLQMX.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-YQFNIKYT.mjs → react-surface-V7J2QB44.mjs} +81 -105
  87. package/dist/lib/node-esm/react-surface-V7J2QB44.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-WHJM7UZE.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-SAOBPND3.mjs → settings-RBB5633M.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-RBB5633M.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-SJCXV6YH.mjs} +21 -18
  93. package/dist/lib/node-esm/spaces-ready-SJCXV6YH.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-ZVEHQ4BJ.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 +7 -6
  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/identity-created.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/index.d.ts +11 -12
  107. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  109. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  111. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  115. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/settings.d.ts +1 -1
  117. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  118. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/state.d.ts +1 -1
  120. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  121. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  122. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  123. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  124. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  125. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1694 -4
  129. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +7 -5
  131. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  132. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  133. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  134. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  135. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  136. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  137. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  138. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  139. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  140. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1697 -0
  141. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  142. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  143. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  147. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  148. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  149. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  150. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  151. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  152. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  153. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  154. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  155. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  156. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1530 -0
  158. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  159. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  160. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  161. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  162. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  163. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  164. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  165. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  166. package/dist/types/src/components/RecordArticle.stories.d.ts +1697 -0
  167. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  169. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  170. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  171. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  172. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  173. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1527 -0
  174. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  175. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  176. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  178. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  179. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  180. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  181. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1527 -4
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1528 -5
  186. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  188. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  189. package/dist/types/src/components/index.d.ts +10 -11
  190. package/dist/types/src/components/index.d.ts.map +1 -1
  191. package/dist/types/src/events.d.ts.map +1 -1
  192. package/dist/types/src/helpers/index.d.ts +2 -0
  193. package/dist/types/src/helpers/index.d.ts.map +1 -0
  194. package/dist/types/src/helpers/query.d.ts +8 -0
  195. package/dist/types/src/helpers/query.d.ts.map +1 -0
  196. package/dist/types/src/helpers/query.test.d.ts +2 -0
  197. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  198. package/dist/types/src/hooks/index.d.ts +1 -0
  199. package/dist/types/src/hooks/index.d.ts.map +1 -1
  200. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  202. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  203. package/dist/types/src/hooks/usePath.d.ts +1 -1
  204. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  206. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  207. package/dist/types/src/index.d.ts +1 -0
  208. package/dist/types/src/index.d.ts.map +1 -1
  209. package/dist/types/src/meta.d.ts +0 -1
  210. package/dist/types/src/meta.d.ts.map +1 -1
  211. package/dist/types/src/translations.d.ts +1326 -26
  212. package/dist/types/src/translations.d.ts.map +1 -1
  213. package/dist/types/src/types/types.d.ts +78 -96
  214. package/dist/types/src/types/types.d.ts.map +1 -1
  215. package/dist/types/src/util.d.ts +16 -11
  216. package/dist/types/src/util.d.ts.map +1 -1
  217. package/dist/types/tsconfig.tsbuildinfo +1 -1
  218. package/package.json +68 -63
  219. package/src/SpacePlugin.ts +230 -220
  220. package/src/capabilities/app-graph-builder.ts +214 -133
  221. package/src/capabilities/app-graph-serializer.ts +12 -12
  222. package/src/capabilities/capabilities.ts +19 -13
  223. package/src/capabilities/identity-created.ts +3 -3
  224. package/src/capabilities/index.ts +0 -1
  225. package/src/capabilities/intent-resolver.ts +81 -65
  226. package/src/capabilities/react-root.tsx +6 -4
  227. package/src/capabilities/react-surface.tsx +78 -145
  228. package/src/capabilities/schema-defs.ts +4 -3
  229. package/src/capabilities/spaces-ready.ts +16 -10
  230. package/src/capabilities/state.ts +5 -4
  231. package/src/components/AwaitingObject.tsx +12 -14
  232. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  233. package/src/components/CollectionSection.tsx +8 -6
  234. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
  235. package/src/components/CreateDialog/CreateObjectDialog.tsx +51 -33
  236. package/src/components/CreateDialog/CreateObjectPanel.tsx +24 -13
  237. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  238. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  239. package/src/components/JoinDialog/index.ts +5 -0
  240. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  241. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +22 -21
  242. package/src/components/MembersContainer/index.ts +5 -0
  243. package/src/components/MenuFooter.tsx +2 -2
  244. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  245. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  246. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  247. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +10 -16
  248. package/src/components/ObjectRenamePopover/index.ts +5 -0
  249. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
  250. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  251. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  252. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  253. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  254. package/src/components/ObjectSettings/index.ts +3 -1
  255. package/src/components/RecordArticle.stories.tsx +115 -0
  256. package/src/components/RecordArticle.tsx +114 -0
  257. package/src/components/SchemaContainer.tsx +25 -28
  258. package/src/components/SpacePluginSettings.tsx +16 -11
  259. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +24 -23
  260. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +22 -17
  261. package/src/components/SpacePresence/index.ts +5 -0
  262. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  263. package/src/components/SpaceRenamePopover/index.ts +5 -0
  264. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  265. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +49 -28
  266. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  267. package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
  268. package/src/components/SyncStatus/SyncStatus.tsx +109 -12
  269. package/src/components/ViewEditor.tsx +51 -23
  270. package/src/components/index.ts +7 -7
  271. package/src/events.ts +7 -7
  272. package/src/helpers/index.ts +5 -0
  273. package/src/helpers/query.test.ts +24 -0
  274. package/src/helpers/query.ts +158 -0
  275. package/src/hooks/index.ts +1 -0
  276. package/src/hooks/useActiveSpace.ts +3 -2
  277. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  278. package/src/hooks/usePath.ts +1 -1
  279. package/src/hooks/useTypeOptions.ts +59 -0
  280. package/src/index.ts +1 -0
  281. package/src/meta.ts +6 -3
  282. package/src/translations.ts +29 -14
  283. package/src/types/types.ts +31 -22
  284. package/src/util.tsx +131 -66
  285. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  286. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
  287. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  288. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
  289. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  290. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  291. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  292. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  293. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-FBJEXW54.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  296. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
  300. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  302. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  303. package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
  304. package/dist/lib/browser/react-root-CMWOGJG5.mjs +0 -29
  305. package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
  306. package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
  307. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  308. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  309. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  310. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  311. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  312. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  313. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
  314. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
  316. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
  318. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  320. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  322. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  324. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
  328. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  329. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  330. package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
  333. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  335. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  336. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  337. package/dist/lib/node-esm/state-ZVEHQ4BJ.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/SpacePresence.d.ts.map +0 -1
  357. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  358. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  359. package/src/capabilities/schema-tool.test.ts +0 -44
  360. package/src/capabilities/schema-tools.ts +0 -125
  361. package/src/components/MembersContainer.stories.tsx +0 -30
  362. package/src/components/ObjectDetailsPanel.tsx +0 -77
  363. package/src/components/PersistenceStatus.tsx +0 -83
@@ -2,38 +2,42 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
6
- import { Array, Option, pipe, Schema } from 'effect';
7
-
8
- import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
9
- import { getSpace, SpaceState, type Space, isSpace, type QueryResult } from '@dxos/client/echo';
10
- import { Filter, Obj, Query, Type } from '@dxos/echo';
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';
10
+
11
+ import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
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
- import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
14
- import { createExtension, rxFromObservable, ROOT_ID, rxFromSignal } from '@dxos/plugin-graph';
15
- import { DataType } from '@dxos/schema';
16
+ import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
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
- import { SpaceCapabilities } from './capabilities';
19
21
  import { getActiveSpace } from '../hooks';
20
- import { SPACE_PLUGIN } from '../meta';
22
+ import { meta } from '../meta';
21
23
  import { SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';
22
24
  import {
25
+ SHARED,
26
+ SPACES,
27
+ atomFromQuery,
23
28
  constructObjectActions,
24
29
  constructSpaceActions,
25
30
  constructSpaceNode,
26
31
  createObjectNode,
27
32
  createStaticSchemaActions,
28
33
  createStaticSchemaNode,
29
- rxFromQuery,
30
- SHARED,
31
- SPACES,
32
34
  } from '../util';
33
35
 
36
+ import { SpaceCapabilities } from './capabilities';
37
+
34
38
  export default (context: PluginContext) => {
35
- // TODO(wittjosiah): Make reactive.
36
- 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) =>
37
41
  context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
38
42
 
39
43
  const spacesNode = {
@@ -41,7 +45,7 @@ export default (context: PluginContext) => {
41
45
  type: SPACES,
42
46
  cacheable: ['label', 'role'],
43
47
  properties: {
44
- label: ['spaces label', { ns: SPACE_PLUGIN }],
48
+ label: ['spaces label', { ns: meta.id }],
45
49
  icon: 'ph--planet--regular',
46
50
  testId: 'spacePlugin.spaces',
47
51
  role: 'branch',
@@ -76,11 +80,11 @@ export default (context: PluginContext) => {
76
80
  return contributes(Capabilities.AppGraphBuilder, [
77
81
  // Primary actions.
78
82
  createExtension({
79
- id: `${SPACE_PLUGIN}/primary-actions`,
83
+ id: `${meta.id}/primary-actions`,
80
84
  position: 'hoist',
81
85
  actions: (node) =>
82
- Rx.make((get) =>
83
- pipe(
86
+ Atom.make((get) =>
87
+ Function.pipe(
84
88
  get(node),
85
89
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
86
90
  Option.map(() => [
@@ -91,7 +95,7 @@ export default (context: PluginContext) => {
91
95
  await dispatch(createIntent(SpaceAction.OpenCreateSpace));
92
96
  },
93
97
  properties: {
94
- label: ['create space label', { ns: SPACE_PLUGIN }],
98
+ label: ['create space label', { ns: meta.id }],
95
99
  icon: 'ph--plus--regular',
96
100
  testId: 'spacePlugin.createSpace',
97
101
  disposition: 'menu',
@@ -104,7 +108,7 @@ export default (context: PluginContext) => {
104
108
  await dispatch(createIntent(SpaceAction.Join));
105
109
  },
106
110
  properties: {
107
- label: ['join space label', { ns: SPACE_PLUGIN }],
111
+ label: ['join space label', { ns: meta.id }],
108
112
  icon: 'ph--sign-in--regular',
109
113
  testId: 'spacePlugin.joinSpace',
110
114
  disposition: 'menu',
@@ -119,7 +123,7 @@ export default (context: PluginContext) => {
119
123
  await dispatch(createIntent(SpaceAction.OpenMembers, { space }));
120
124
  },
121
125
  properties: {
122
- label: ['share space label', { ns: SPACE_PLUGIN }],
126
+ label: ['share space label', { ns: meta.id }],
123
127
  icon: 'ph--users--regular',
124
128
  testId: 'spacePlugin.shareSpace',
125
129
  keyBinding: {
@@ -137,7 +141,7 @@ export default (context: PluginContext) => {
137
141
  await dispatch(createIntent(SpaceAction.OpenSettings, { space }));
138
142
  },
139
143
  properties: {
140
- label: ['open current space settings label', { ns: SPACE_PLUGIN }],
144
+ label: ['open current space settings label', { ns: meta.id }],
141
145
  icon: 'ph--faders--regular',
142
146
  keyBinding: {
143
147
  macos: 'meta+shift+,',
@@ -153,11 +157,11 @@ export default (context: PluginContext) => {
153
157
 
154
158
  // Create spaces group node.
155
159
  createExtension({
156
- id: `${SPACE_PLUGIN}/root`,
160
+ id: `${meta.id}/root`,
157
161
  position: 'hoist',
158
162
  connector: (node) =>
159
- Rx.make((get) =>
160
- pipe(
163
+ Atom.make((get) =>
164
+ Function.pipe(
161
165
  get(node),
162
166
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
163
167
  Option.map(() => [spacesNode]),
@@ -172,25 +176,25 @@ export default (context: PluginContext) => {
172
176
  id: SPACES,
173
177
  connector: (node) => {
174
178
  let query: QueryResult<Type.Expando> | undefined;
175
- return Rx.make((get) =>
176
- pipe(
179
+ return Atom.make((get) =>
180
+ Function.pipe(
177
181
  get(node),
178
182
  Option.flatMap((node) => (node.id === SPACES ? Option.some(node) : Option.none())),
179
183
  Option.map(() => {
180
184
  const state = context.getCapability(SpaceCapabilities.State);
181
185
  const client = context.getCapability(ClientCapabilities.Client);
182
- const spacesRx = rxFromObservable(client.spaces);
183
- const isReadyRx = rxFromObservable(client.spaces.isReady);
186
+ const spacesAtom = atomFromObservable(client.spaces);
187
+ const isReadyAtom = atomFromObservable(client.spaces.isReady);
184
188
 
185
- const spaces = get(spacesRx);
186
- const isReady = get(isReadyRx);
189
+ const spaces = get(spacesAtom);
190
+ const isReady = get(isReadyAtom);
187
191
 
188
192
  if (!spaces || !isReady) {
189
193
  return [];
190
194
  }
191
195
 
192
196
  const settings = get(context.capabilities(Capabilities.SettingsStore))[0]?.getStore<SpaceSettingsProps>(
193
- SPACE_PLUGIN,
197
+ meta.id,
194
198
  )?.value;
195
199
 
196
200
  // TODO(wittjosiah): During client reset, accessing default space throws.
@@ -198,9 +202,9 @@ export default (context: PluginContext) => {
198
202
  if (!query) {
199
203
  query = client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED }));
200
204
  }
201
- const [spacesOrder] = get(rxFromQuery(query));
205
+ const [spacesOrder] = get(atomFromQuery(query));
202
206
  return get(
203
- rxFromSignal(() => {
207
+ atomFromSignal(() => {
204
208
  const order: string[] = spacesOrder?.order ?? [];
205
209
  const orderMap = new Map(order.map((id, index) => [id, index]));
206
210
  return [
@@ -218,7 +222,7 @@ export default (context: PluginContext) => {
218
222
  navigable: state.navigableCollections,
219
223
  personal: space === client.spaces.default,
220
224
  namesCache: state.spaceNames,
221
- resolve,
225
+ resolve: resolve(get),
222
226
  }),
223
227
  );
224
228
  }),
@@ -275,10 +279,10 @@ export default (context: PluginContext) => {
275
279
 
276
280
  // Create space actions.
277
281
  createExtension({
278
- id: `${SPACE_PLUGIN}/actions`,
282
+ id: `${meta.id}/actions`,
279
283
  actions: (node) =>
280
- Rx.make((get) =>
281
- pipe(
284
+ Atom.make((get) =>
285
+ Function.pipe(
282
286
  get(node),
283
287
  Option.flatMap((node) =>
284
288
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
@@ -307,24 +311,24 @@ export default (context: PluginContext) => {
307
311
 
308
312
  // Create nodes for objects in the root collection of a space.
309
313
  createExtension({
310
- id: `${SPACE_PLUGIN}/root-collection`,
314
+ id: `${meta.id}/root-collection`,
311
315
  connector: (node) =>
312
- Rx.make((get) =>
313
- pipe(
316
+ Atom.make((get) =>
317
+ Function.pipe(
314
318
  get(node),
315
319
  Option.flatMap((node) =>
316
320
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
317
321
  ),
318
322
  Option.map((space) => {
319
323
  const state = context.getCapability(SpaceCapabilities.State);
320
- const spaceState = get(rxFromObservable(space.state));
324
+ const spaceState = get(atomFromObservable(space.state));
321
325
  if (spaceState !== SpaceState.SPACE_READY) {
322
326
  return [];
323
327
  }
324
328
 
325
329
  const collection = get(
326
- rxFromSignal(
327
- () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,
330
+ atomFromSignal(
331
+ () => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
328
332
  ),
329
333
  );
330
334
  if (!collection) {
@@ -332,8 +336,8 @@ export default (context: PluginContext) => {
332
336
  }
333
337
 
334
338
  return get(
335
- rxFromSignal(() =>
336
- pipe(
339
+ atomFromSignal(() =>
340
+ Function.pipe(
337
341
  collection.objects,
338
342
  Array.map((object) => object.target),
339
343
  Array.filter(isNonNullable),
@@ -341,7 +345,7 @@ export default (context: PluginContext) => {
341
345
  createObjectNode({
342
346
  space,
343
347
  object,
344
- resolve,
348
+ resolve: resolve(get),
345
349
  navigable: state.navigableCollections,
346
350
  }),
347
351
  ),
@@ -357,27 +361,33 @@ export default (context: PluginContext) => {
357
361
 
358
362
  // Create nodes for objects in a collection or by its fully qualified id.
359
363
  createExtension({
360
- id: `${SPACE_PLUGIN}/objects`,
364
+ id: `${meta.id}/objects`,
361
365
  connector: (node) =>
362
- Rx.make((get) =>
363
- pipe(
366
+ Atom.make((get) =>
367
+ Function.pipe(
364
368
  get(node),
365
369
  Option.flatMap((node) =>
366
- 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(),
367
371
  ),
368
372
  Option.map((collection) => {
369
373
  const state = context.getCapability(SpaceCapabilities.State);
370
374
  const space = getSpace(collection);
371
375
 
372
376
  return get(
373
- rxFromSignal(() =>
374
- pipe(
377
+ atomFromSignal(() =>
378
+ Function.pipe(
375
379
  collection.objects,
376
380
  Array.map((object) => object.target),
377
381
  Array.filter(isNonNullable),
378
382
  Array.map(
379
383
  (object) =>
380
- 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
+ }),
381
391
  ),
382
392
  Array.filter(isNonNullable),
383
393
  ),
@@ -428,20 +438,19 @@ export default (context: PluginContext) => {
428
438
 
429
439
  // Create nodes for objects in a query collection.
430
440
  createExtension({
431
- id: `${SPACE_PLUGIN}/query-collection-objects`,
441
+ id: `${meta.id}/query-collection-objects`,
432
442
  connector: (node) => {
433
443
  let query: QueryResult<Type.Expando> | undefined;
434
- return Rx.make((get) =>
435
- pipe(
444
+ return Atom.make((get) =>
445
+ Function.pipe(
436
446
  get(node),
437
447
  Option.flatMap((node) =>
438
- 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(),
439
449
  ),
440
450
  Option.flatMap((collection) => {
441
451
  const space = getSpace(collection);
442
- return collection.query.typename && space
443
- ? Option.some({ typename: collection.query.typename, space })
444
- : Option.none();
452
+ const typename = getTypenameFromQuery(collection.query);
453
+ return typename && space ? Option.some({ typename, space }) : Option.none();
445
454
  }),
446
455
  Option.map(({ typename, space }) => {
447
456
  const state = context.getCapability(SpaceCapabilities.State);
@@ -453,26 +462,30 @@ 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
- return get(rxFromQuery(query))
462
- .map((object) =>
463
- get(
464
- rxFromSignal(() =>
465
- createObjectNode({
466
- object,
467
- space,
468
- resolve,
469
- droppable: false, // Cannot rearrange query collections.
470
- navigable: state.navigableCollections,
471
- }),
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
+ ),
472
485
  ),
473
- ),
474
- )
475
- .filter(isNonNullable);
486
+ )
487
+ .filter(isNonNullable)
488
+ );
476
489
  }),
477
490
  Option.getOrElse(() => []),
478
491
  ),
@@ -482,15 +495,15 @@ export default (context: PluginContext) => {
482
495
 
483
496
  // Static schema records.
484
497
  createExtension({
485
- id: `${SPACE_PLUGIN}/static-schemas`,
498
+ id: `${meta.id}/static-schemas`,
486
499
  connector: (node) => {
487
500
  const client = context.getCapability(ClientCapabilities.Client);
488
- return Rx.make((get) =>
489
- pipe(
501
+ return Atom.make((get) =>
502
+ Function.pipe(
490
503
  get(node),
491
504
  Option.flatMap((node) =>
492
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
493
- node.data.query.typename === DataType.StoredSchema.typename
505
+ Obj.instanceOf(Collection.QueryCollection, node.data) &&
506
+ getTypenameFromQuery(node.data.query) === StoredSchema.typename
494
507
  ? Option.some(node.data)
495
508
  : Option.none(),
496
509
  ),
@@ -499,7 +512,7 @@ export default (context: PluginContext) => {
499
512
  return space?.properties.staticRecords ? Option.some(space) : Option.none();
500
513
  }),
501
514
  Option.map((space) => {
502
- return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
515
+ return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
503
516
  .map((typename) =>
504
517
  client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
505
518
  )
@@ -514,11 +527,11 @@ export default (context: PluginContext) => {
514
527
 
515
528
  // Create static schema actions.
516
529
  createExtension({
517
- id: `${SPACE_PLUGIN}/static-schema-actions`,
530
+ id: `${meta.id}/static-schema-actions`,
518
531
  actions: (node) => {
519
- let query: QueryResult<DataType.View> | undefined;
520
- return Rx.make((get) =>
521
- pipe(
532
+ let query: QueryResult<View.View> | undefined;
533
+ return Atom.make((get) =>
534
+ Function.pipe(
522
535
  get(node),
523
536
  Option.flatMap((node) => {
524
537
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
@@ -527,20 +540,32 @@ export default (context: PluginContext) => {
527
540
  Option.map(({ space, schema }) => {
528
541
  if (!query) {
529
542
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
530
- query = space.db.query(Filter.type(DataType.View));
543
+ query = space.db.query(Filter.type(View.View));
531
544
  }
532
545
 
533
- const views = get(rxFromQuery(query));
546
+ const views = get(atomFromQuery(query));
534
547
  const filteredViews = get(
535
- rxFromSignal(() =>
548
+ atomFromSignal(() =>
536
549
  // TODO(wittjosiah): Remove cast.
537
- 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
+ ),
538
553
  ),
539
554
  );
540
555
  const deletable = filteredViews.length === 0;
541
556
 
557
+ const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
558
+ if (!dispatcher) {
559
+ return [];
560
+ }
561
+
542
562
  // TODO(wittjosiah): Remove cast.
543
- 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
+ });
544
569
  }),
545
570
  Option.getOrElse(() => []),
546
571
  ),
@@ -550,41 +575,57 @@ export default (context: PluginContext) => {
550
575
 
551
576
  // Create nodes for schema views.
552
577
  createExtension({
553
- id: `${SPACE_PLUGIN}/schema-views`,
578
+ id: `${meta.id}/schema-views`,
554
579
  connector: (node) => {
555
- let query: QueryResult<DataType.View> | undefined;
556
- return Rx.make((get) =>
557
- pipe(
580
+ let query: QueryResult<View.View> | undefined;
581
+ return Atom.make((get) =>
582
+ Function.pipe(
558
583
  get(node),
559
584
  Option.flatMap((node) => {
560
585
  const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
561
- return space && (Obj.instanceOf(DataType.StoredSchema, node.data) || Schema.isSchema(node.data))
586
+ return space && (Obj.instanceOf(StoredSchema, node.data) || Schema.isSchema(node.data))
562
587
  ? Option.some({ space, schema: node.data })
563
588
  : Option.none();
564
589
  }),
565
590
  Option.map(({ space, schema }) => {
566
591
  if (!query) {
567
592
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
568
- query = space.db.query(Filter.type(DataType.View));
593
+ query = space.db.query(Filter.type(View.View));
569
594
  }
570
595
 
571
596
  // TODO(wittjosiah): Remove cast.
572
597
  const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
573
- return get(rxFromQuery(query))
574
- .filter((view) => view.query.typename === typename)
575
- .map((view) =>
576
- get(
577
- rxFromSignal(() =>
578
- createObjectNode({
579
- object: view,
580
- space,
581
- resolve,
582
- 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
+ }
583
612
  }),
584
613
  ),
585
- ),
586
- )
587
- .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
+ );
588
629
  }),
589
630
  Option.getOrElse(() => []),
590
631
  ),
@@ -592,36 +633,76 @@ export default (context: PluginContext) => {
592
633
  },
593
634
  }),
594
635
 
636
+ // Create record nodes.
637
+ createExtension({
638
+ id: `${meta.id}/records`,
639
+ resolver: (id) => {
640
+ let query: QueryResult<Type.Expando> | undefined;
641
+ return Atom.make((get) => {
642
+ const client = context.getCapability(ClientCapabilities.Client);
643
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
644
+ if (!dxn || !dxn.spaceId) {
645
+ return null;
646
+ }
647
+
648
+ const space = client.spaces.get(dxn.spaceId);
649
+ if (!space) {
650
+ return null;
651
+ }
652
+
653
+ if (!query) {
654
+ query = space.db.query(Filter.ids(dxn.echoId));
655
+ }
656
+
657
+ const object = get(atomFromQuery(query)).at(0);
658
+ if (!object) {
659
+ return null;
660
+ }
661
+
662
+ return createObjectNode({
663
+ object,
664
+ space,
665
+ resolve: resolve(get),
666
+ disposition: 'hidden',
667
+ });
668
+ });
669
+ },
670
+ }),
671
+
595
672
  // Create collection actions and action groups.
596
673
  createExtension({
597
- id: `${SPACE_PLUGIN}/object-actions`,
674
+ id: `${meta.id}/object-actions`,
598
675
  actions: (node) => {
599
- let query: QueryResult<DataType.View> | undefined;
600
- return Rx.make((get) =>
601
- pipe(
676
+ let query: QueryResult<View.View> | undefined;
677
+ return Atom.make((get) =>
678
+ Function.pipe(
602
679
  get(node),
603
680
  Option.flatMap((node) => {
604
681
  const space = getSpace(node.data);
605
- 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();
606
685
  }),
607
686
  Option.flatMap(({ space, object }) => {
608
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
687
+ const isSchema = Obj.instanceOf(StoredSchema, object);
609
688
  if (!query && isSchema) {
610
689
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
611
- query = space.db.query(Filter.type(DataType.View));
690
+ query = space.db.query(Filter.type(View.View));
612
691
  }
613
692
 
614
693
  let deletable =
615
694
  !isSchema &&
616
695
  // Don't allow the Records smart collection to be deleted.
617
696
  !(
618
- Obj.instanceOf(DataType.QueryCollection, object) &&
619
- object.query.typename === DataType.StoredSchema.typename
697
+ Obj.instanceOf(Collection.QueryCollection, object) &&
698
+ getTypenameFromQuery(object.query) === StoredSchema.typename
620
699
  );
621
700
  if (isSchema && query) {
622
- const views = get(rxFromQuery(query));
701
+ const views = get(atomFromQuery(query));
623
702
  const filteredViews = get(
624
- rxFromSignal(() => views.filter((view) => view.query.typename === object.typename)),
703
+ atomFromSignal(() =>
704
+ views.filter((view) => getTypenameFromQuery(view.query.ast) === object.typename),
705
+ ),
625
706
  );
626
707
  deletable = filteredViews.length === 0;
627
708
  }
@@ -640,7 +721,7 @@ export default (context: PluginContext) => {
640
721
  dispatch: dispatcher.dispatchPromise,
641
722
  objectForms,
642
723
  deletable,
643
- navigable: get(rxFromSignal(() => state.navigableCollections)),
724
+ navigable: get(atomFromSignal(() => state.navigableCollections)),
644
725
  });
645
726
  }
646
727
  }),
@@ -653,19 +734,19 @@ export default (context: PluginContext) => {
653
734
 
654
735
  // View selected objects.
655
736
  createExtension({
656
- id: `${SPACE_PLUGIN}/selected-objects`,
737
+ id: `${meta.id}/selected-objects`,
657
738
  connector: (node) =>
658
- Rx.make((get) =>
659
- pipe(
739
+ Atom.make((get) =>
740
+ Function.pipe(
660
741
  get(node),
661
- 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())),
662
743
  Option.map((node) => [
663
744
  {
664
745
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
665
746
  type: PLANK_COMPANION_TYPE,
666
747
  data: 'selected-objects',
667
748
  properties: {
668
- label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
749
+ label: ['companion selected objects label', { ns: meta.id }],
669
750
  icon: 'ph--tree-view--regular',
670
751
  disposition: 'hidden',
671
752
  },
@@ -678,10 +759,10 @@ export default (context: PluginContext) => {
678
759
 
679
760
  // Object settings plank companion.
680
761
  createExtension({
681
- id: `${SPACE_PLUGIN}/settings`,
762
+ id: `${meta.id}/settings`,
682
763
  connector: (node) =>
683
- Rx.make((get) =>
684
- pipe(
764
+ Atom.make((get) =>
765
+ Function.pipe(
685
766
  get(node),
686
767
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
687
768
  Option.map((node) => [
@@ -690,7 +771,7 @@ export default (context: PluginContext) => {
690
771
  type: PLANK_COMPANION_TYPE,
691
772
  data: 'settings',
692
773
  properties: {
693
- label: ['object settings label', { ns: SPACE_PLUGIN }],
774
+ label: ['object settings label', { ns: meta.id }],
694
775
  icon: 'ph--sliders--regular',
695
776
  disposition: 'hidden',
696
777
  position: 'fallback',