@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.70d3990

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 (376) hide show
  1. package/dist/lib/browser/{CollectionMain-D2B75XBS.mjs → CollectionArticle-WTHWY4YS.mjs} +10 -10
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs +517 -0
  10. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-G3VFEGTN.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-G3VFEGTN.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-6A3NWBB6.mjs +392 -0
  14. package/dist/lib/browser/chunk-6A3NWBB6.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-C6DAPIFF.mjs +20 -0
  16. package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-GJOZILGC.mjs} +262 -143
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-KCZ527AM.mjs} +667 -525
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-P25R3AOK.mjs} +36 -6
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-POFUXISV.mjs} +69 -62
  24. package/dist/lib/browser/chunk-POFUXISV.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  26. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  28. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-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 +88 -135
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-RZEWNJ2K.mjs} +114 -101
  34. package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-JCRD74GI.mjs +30 -0
  37. package/dist/lib/browser/react-root-JCRD74GI.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-YWZZQF7H.mjs → react-surface-VOETEAG3.mjs} +101 -111
  39. package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
  40. package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
  41. package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-4IMP5RYT.mjs → settings-TRLI52I5.mjs} +5 -5
  43. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-TRLI52I5.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-OHGCWZHQ.mjs} +28 -19
  45. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  46. package/dist/lib/browser/{state-QYZAB45H.mjs → state-C7N6EDDZ.mjs} +7 -7
  47. package/dist/lib/browser/state-C7N6EDDZ.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +10 -4
  49. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionArticle-KHXYT3SH.mjs} +10 -10
  50. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
  57. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs +518 -0
  58. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-2NLWWFUB.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-2NLWWFUB.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-7EV4SN47.mjs} +35 -6
  62. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-AX3UGL5D.mjs} +69 -62
  64. package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  66. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  68. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-I6FZP42D.mjs} +262 -143
  70. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-JAMGJUFU.mjs} +667 -525
  72. package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs +21 -0
  74. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
  76. package/dist/lib/node-esm/chunk-X34VDVMY.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-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 +88 -135
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-4PHJWDXW.mjs} +114 -101
  82. package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-5Y7LJRX6.mjs → react-root-O5I5CDJ7.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-O5I5CDJ7.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-YQFNIKYT.mjs → react-surface-J3XDMU2D.mjs} +101 -111
  87. package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
  88. package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
  89. package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-SAOBPND3.mjs → settings-MNQTKHL7.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-MNQTKHL7.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-ZPU24DA2.mjs} +28 -19
  93. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-ZVEHQ4BJ.mjs → state-45TXZQJ6.mjs} +7 -7
  95. package/dist/lib/node-esm/state-45TXZQJ6.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +10 -4
  97. package/dist/types/src/SpacePlugin.d.ts +1 -1
  98. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts +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 +14 -8
  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/repair.d.ts +4 -0
  115. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  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 +1588 -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 +18 -9
  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 +1591 -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 +1424 -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 +3 -3
  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 +1591 -0
  167. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  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} +6 -5
  172. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  173. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1421 -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 +1421 -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 +1422 -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 +1261 -67
  212. package/dist/types/src/translations.d.ts.map +1 -1
  213. package/dist/types/src/types/form.d.ts +24 -0
  214. package/dist/types/src/types/form.d.ts.map +1 -0
  215. package/dist/types/src/types/index.d.ts +1 -0
  216. package/dist/types/src/types/index.d.ts.map +1 -1
  217. package/dist/types/src/types/types.d.ts +94 -155
  218. package/dist/types/src/types/types.d.ts.map +1 -1
  219. package/dist/types/src/util.d.ts +25 -36
  220. package/dist/types/src/util.d.ts.map +1 -1
  221. package/dist/types/tsconfig.tsbuildinfo +1 -1
  222. package/package.json +72 -63
  223. package/src/SpacePlugin.ts +182 -222
  224. package/src/capabilities/app-graph-builder.ts +221 -237
  225. package/src/capabilities/app-graph-serializer.ts +12 -12
  226. package/src/capabilities/capabilities.ts +28 -17
  227. package/src/capabilities/identity-created.ts +3 -3
  228. package/src/capabilities/index.ts +1 -2
  229. package/src/capabilities/intent-resolver.ts +91 -79
  230. package/src/capabilities/react-root.tsx +6 -4
  231. package/src/capabilities/react-surface.tsx +108 -149
  232. package/src/capabilities/repair.ts +57 -0
  233. package/src/capabilities/spaces-ready.ts +23 -11
  234. package/src/capabilities/state.ts +5 -4
  235. package/src/components/AwaitingObject.tsx +12 -14
  236. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  237. package/src/components/CollectionSection.tsx +8 -6
  238. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
  239. package/src/components/CreateDialog/CreateObjectDialog.tsx +74 -46
  240. package/src/components/CreateDialog/CreateObjectPanel.tsx +51 -33
  241. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  242. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  243. package/src/components/JoinDialog/index.ts +5 -0
  244. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  245. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +22 -21
  246. package/src/components/MembersContainer/index.ts +5 -0
  247. package/src/components/MenuFooter.tsx +2 -2
  248. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  249. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  250. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  251. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +10 -16
  252. package/src/components/ObjectRenamePopover/index.ts +5 -0
  253. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +7 -7
  254. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  255. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  256. package/src/components/ObjectSettings/ForeignKeys.tsx +8 -8
  257. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  258. package/src/components/ObjectSettings/index.ts +3 -1
  259. package/src/components/RecordArticle.stories.tsx +115 -0
  260. package/src/components/RecordArticle.tsx +114 -0
  261. package/src/components/SchemaContainer.tsx +26 -29
  262. package/src/components/SpacePluginSettings.tsx +16 -11
  263. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +24 -23
  264. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +22 -17
  265. package/src/components/SpacePresence/index.ts +5 -0
  266. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  267. package/src/components/SpaceRenamePopover/index.ts +5 -0
  268. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  269. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +68 -28
  270. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  271. package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
  272. package/src/components/SyncStatus/SyncStatus.tsx +109 -12
  273. package/src/components/ViewEditor.tsx +57 -23
  274. package/src/components/index.ts +7 -7
  275. package/src/events.ts +7 -7
  276. package/src/helpers/index.ts +5 -0
  277. package/src/helpers/query.test.ts +24 -0
  278. package/src/helpers/query.ts +158 -0
  279. package/src/hooks/index.ts +1 -0
  280. package/src/hooks/useActiveSpace.ts +3 -2
  281. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  282. package/src/hooks/usePath.ts +1 -1
  283. package/src/hooks/useTypeOptions.ts +27 -0
  284. package/src/index.ts +1 -0
  285. package/src/meta.ts +6 -3
  286. package/src/translations.ts +68 -58
  287. package/src/types/form.ts +75 -0
  288. package/src/types/index.ts +1 -0
  289. package/src/types/types.ts +49 -50
  290. package/src/util.tsx +268 -145
  291. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  292. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
  293. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  294. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs +0 -480
  295. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
  296. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  298. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  300. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-FBJEXW54.mjs.map +0 -7
  302. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  303. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  305. package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
  306. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  307. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  308. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  309. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  310. package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
  311. package/dist/lib/browser/react-root-CMWOGJG5.mjs +0 -29
  312. package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
  313. package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
  314. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs +0 -26
  315. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  316. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  317. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  318. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  319. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  320. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  321. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
  322. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  323. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs +0 -481
  324. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
  325. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  329. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  331. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  333. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs +0 -339
  335. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  337. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  338. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  339. package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
  340. package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
  341. package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
  342. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs +0 -27
  343. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  344. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  345. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  346. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  347. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
  348. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  349. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  350. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  351. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  352. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  353. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  354. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  355. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  356. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  357. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  358. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  359. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  360. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  361. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  362. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  363. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  364. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  365. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  366. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  367. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  368. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  369. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  370. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  371. package/src/capabilities/schema-defs.ts +0 -30
  372. package/src/capabilities/schema-tool.test.ts +0 -44
  373. package/src/capabilities/schema-tools.ts +0 -125
  374. package/src/components/MembersContainer.stories.tsx +0 -30
  375. package/src/components/ObjectDetailsPanel.tsx +0 -77
  376. 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 Space, SpaceState, getSpace, isSpace } from '@dxos/client/echo';
13
+ import { DXN, type Database, type Entity, Filter, Obj, Type } from '@dxos/echo';
11
14
  import { log } from '@dxos/log';
12
15
  import { ClientCapabilities } from '@dxos/plugin-client';
13
- 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, View, ViewAnnotation, 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,44 +157,44 @@ 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]),
164
168
  Option.getOrElse(() => []),
165
169
  ),
166
170
  ),
167
- // resolver: ({ id }) => (id === SPACES ? spacesNode : undefined),
168
171
  }),
169
172
 
170
173
  // Create space nodes.
171
174
  createExtension({
172
175
  id: SPACES,
173
176
  connector: (node) => {
174
- let query: QueryResult<Type.Expando> | undefined;
175
- return Rx.make((get) =>
176
- pipe(
177
+ // TODO(wittjosiah): Find a simpler way to define this type.
178
+ let query: Database.QueryResult<Schema.Schema.Type<typeof Type.Expando>> | undefined;
179
+ return Atom.make((get) =>
180
+ Function.pipe(
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
  }),
@@ -231,54 +235,14 @@ export default (context: PluginContext) => {
231
235
  ),
232
236
  );
233
237
  },
234
- // resolver: ({ id }) => {
235
- // if (id.length !== SPACE_ID_LENGTH) {
236
- // return;
237
- // }
238
-
239
- // const client = context.requestCapability(ClientCapabilities.Client);
240
- // const spaces = toSignal(
241
- // (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,
242
- // () => client.spaces.get(),
243
- // );
244
-
245
- // const isReady = toSignal(
246
- // (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,
247
- // () => client.spaces.isReady.get(),
248
- // );
249
-
250
- // if (!spaces || !isReady) {
251
- // return;
252
- // }
253
-
254
- // const space = spaces.find((space) => space.id === id);
255
- // if (!space) {
256
- // return;
257
- // }
258
-
259
- // if (space.state.get() === SpaceState.SPACE_INACTIVE) {
260
- // return false;
261
- // } else if (space.state.get() !== SpaceState.SPACE_READY) {
262
- // return undefined;
263
- // } else {
264
- // const state = context.requestCapability(SpaceCapabilities.State);
265
- // return constructSpaceNode({
266
- // space,
267
- // navigable: state.navigableCollections,
268
- // personal: space === client.spaces.default,
269
- // namesCache: state.spaceNames,
270
- // resolve,
271
- // });
272
- // }
273
- // },
274
238
  }),
275
239
 
276
240
  // Create space actions.
277
241
  createExtension({
278
- id: `${SPACE_PLUGIN}/actions`,
242
+ id: `${meta.id}/actions`,
279
243
  actions: (node) =>
280
- Rx.make((get) =>
281
- pipe(
244
+ Atom.make((get) =>
245
+ Function.pipe(
282
246
  get(node),
283
247
  Option.flatMap((node) =>
284
248
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
@@ -307,24 +271,24 @@ export default (context: PluginContext) => {
307
271
 
308
272
  // Create nodes for objects in the root collection of a space.
309
273
  createExtension({
310
- id: `${SPACE_PLUGIN}/root-collection`,
274
+ id: `${meta.id}/root-collection`,
311
275
  connector: (node) =>
312
- Rx.make((get) =>
313
- pipe(
276
+ Atom.make((get) =>
277
+ Function.pipe(
314
278
  get(node),
315
279
  Option.flatMap((node) =>
316
280
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
317
281
  ),
318
282
  Option.map((space) => {
319
283
  const state = context.getCapability(SpaceCapabilities.State);
320
- const spaceState = get(rxFromObservable(space.state));
284
+ const spaceState = get(atomFromObservable(space.state));
321
285
  if (spaceState !== SpaceState.SPACE_READY) {
322
286
  return [];
323
287
  }
324
288
 
325
289
  const collection = get(
326
- rxFromSignal(
327
- () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,
290
+ atomFromSignal(
291
+ () => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
328
292
  ),
329
293
  );
330
294
  if (!collection) {
@@ -332,8 +296,8 @@ export default (context: PluginContext) => {
332
296
  }
333
297
 
334
298
  return get(
335
- rxFromSignal(() =>
336
- pipe(
299
+ atomFromSignal(() =>
300
+ Function.pipe(
337
301
  collection.objects,
338
302
  Array.map((object) => object.target),
339
303
  Array.filter(isNonNullable),
@@ -341,7 +305,7 @@ export default (context: PluginContext) => {
341
305
  createObjectNode({
342
306
  space,
343
307
  object,
344
- resolve,
308
+ resolve: resolve(get),
345
309
  navigable: state.navigableCollections,
346
310
  }),
347
311
  ),
@@ -355,29 +319,35 @@ export default (context: PluginContext) => {
355
319
  ),
356
320
  }),
357
321
 
358
- // Create nodes for objects in a collection or by its fully qualified id.
322
+ // Create nodes for objects in a collection or by its DXN.
359
323
  createExtension({
360
- id: `${SPACE_PLUGIN}/objects`,
324
+ id: `${meta.id}/objects`,
361
325
  connector: (node) =>
362
- Rx.make((get) =>
363
- pipe(
326
+ Atom.make((get) =>
327
+ Function.pipe(
364
328
  get(node),
365
329
  Option.flatMap((node) =>
366
- Obj.instanceOf(DataType.Collection, node.data) ? Option.some(node.data) : Option.none(),
330
+ Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none(),
367
331
  ),
368
332
  Option.map((collection) => {
369
333
  const state = context.getCapability(SpaceCapabilities.State);
370
334
  const space = getSpace(collection);
371
335
 
372
336
  return get(
373
- rxFromSignal(() =>
374
- pipe(
337
+ atomFromSignal(() =>
338
+ Function.pipe(
375
339
  collection.objects,
376
340
  Array.map((object) => object.target),
377
341
  Array.filter(isNonNullable),
378
342
  Array.map(
379
343
  (object) =>
380
- space && createObjectNode({ object, space, resolve, navigable: state.navigableCollections }),
344
+ space &&
345
+ createObjectNode({
346
+ object,
347
+ space,
348
+ resolve: resolve(get),
349
+ navigable: state.navigableCollections,
350
+ }),
381
351
  ),
382
352
  Array.filter(isNonNullable),
383
353
  ),
@@ -387,90 +357,66 @@ export default (context: PluginContext) => {
387
357
  Option.getOrElse(() => []),
388
358
  ),
389
359
  ),
390
- // resolver: ({ id }) => {
391
- // if (id.length !== FQ_ID_LENGTH) {
392
- // return;
393
- // }
394
-
395
- // const [spaceId, objectId] = id.split(':');
396
- // if (spaceId.length !== SPACE_ID_LENGTH && objectId.length !== OBJECT_ID_LENGTH) {
397
- // return;
398
- // }
399
-
400
- // const client = context.requestCapability(ClientCapabilities.Client);
401
- // const space = client.spaces.get().find((space) => space.id === spaceId);
402
- // if (!space) {
403
- // return;
404
- // }
405
-
406
- // const spaceState = toSignal(
407
- // (onChange) => space.state.subscribe(() => onChange()).unsubscribe,
408
- // () => space.state.get(),
409
- // space.id,
410
- // );
411
- // if (spaceState !== SpaceState.SPACE_READY) {
412
- // return;
413
- // }
414
-
415
- // const [object] = memoizeQuery(space, Query.select(Filter.ids(objectId)));
416
- // if (!object) {
417
- // return;
418
- // }
419
-
420
- // if (isDeleted(object)) {
421
- // return false;
422
- // } else {
423
- // const state = context.requestCapability(SpaceCapabilities.State);
424
- // return createObjectNode({ object, space, resolve, navigable: state.navigableCollections });
425
- // }
426
- // },
360
+ resolver: (id) => {
361
+ let query: Database.QueryResult<Entity.Unknown> | undefined;
362
+ return Atom.make((get) => {
363
+ const client = context.getCapability(ClientCapabilities.Client);
364
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
365
+ if (!dxn || !dxn.spaceId) {
366
+ return null;
367
+ }
368
+
369
+ const space = client.spaces.get(dxn.spaceId);
370
+ if (!space) {
371
+ return null;
372
+ }
373
+
374
+ if (!query) {
375
+ query = space.db.query(Filter.ids(dxn.echoId));
376
+ }
377
+
378
+ const object = get(atomFromQuery(query)).at(0);
379
+ if (!Obj.isObject(object)) {
380
+ return null;
381
+ }
382
+
383
+ return createObjectNode({ object, space, resolve: resolve(get), disposition: 'hidden' });
384
+ });
385
+ },
427
386
  }),
428
387
 
429
- // Create nodes for objects in a query collection.
388
+ // Create object nodes for schema-based system collections.
430
389
  createExtension({
431
- id: `${SPACE_PLUGIN}/query-collection-objects`,
390
+ id: `${meta.id}/system-collections`,
432
391
  connector: (node) => {
433
- let query: QueryResult<Type.Expando> | undefined;
434
- return Rx.make((get) =>
435
- pipe(
392
+ const client = context.getCapability(ClientCapabilities.Client);
393
+ // TODO(wittjosiah): Find a simpler way to define this type.
394
+ let query: Database.QueryResult<Schema.Schema.Type<typeof Type.Expando>> | undefined;
395
+ return Atom.make((get) =>
396
+ Function.pipe(
436
397
  get(node),
437
398
  Option.flatMap((node) =>
438
- Obj.instanceOf(DataType.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
399
+ Obj.instanceOf(Collection.Managed, node.data) ? Option.some(node.data) : Option.none(),
439
400
  ),
440
401
  Option.flatMap((collection) => {
441
402
  const space = getSpace(collection);
442
- return collection.query.typename && space
443
- ? Option.some({ typename: collection.query.typename, space })
444
- : Option.none();
403
+ const schema = client.graph.schemaRegistry.schemas.find(
404
+ (schema) => Type.getTypename(schema) === collection.key,
405
+ );
406
+ return space && schema ? Option.some({ space, schema }) : Option.none();
445
407
  }),
446
- Option.map(({ typename, space }) => {
447
- const state = context.getCapability(SpaceCapabilities.State);
408
+ Option.map(({ space, schema }) => {
448
409
  if (!query) {
449
- query = space.db.query(
450
- Query.without(
451
- Query.select(Filter.typename(typename)),
452
- // TODO(wittjosiah): This query is broader than it should be.
453
- // It will return all objects in the collection, not just the ones of the given type.
454
- // However this works fine for now because this query is only used for exclusions.
455
- Query.select(Filter.typename(typename))
456
- .referencedBy(DataType.Collection, 'objects')
457
- .reference('objects'),
458
- ),
459
- );
410
+ query = space.db.query(Filter.type(schema));
460
411
  }
461
- return get(rxFromQuery(query))
412
+ return get(atomFromQuery(query))
462
413
  .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
- }),
472
- ),
473
- ),
414
+ createObjectNode({
415
+ object,
416
+ space,
417
+ managedCollectionChild: true,
418
+ resolve: resolve(get),
419
+ }),
474
420
  )
475
421
  .filter(isNonNullable);
476
422
  }),
@@ -480,17 +426,16 @@ export default (context: PluginContext) => {
480
426
  },
481
427
  }),
482
428
 
483
- // Static schema records.
429
+ // Create branch nodes for static schema record types.
484
430
  createExtension({
485
- id: `${SPACE_PLUGIN}/static-schemas`,
431
+ id: `${meta.id}/static-schemas`,
486
432
  connector: (node) => {
487
433
  const client = context.getCapability(ClientCapabilities.Client);
488
- return Rx.make((get) =>
489
- pipe(
434
+ return Atom.make((get) =>
435
+ Function.pipe(
490
436
  get(node),
491
437
  Option.flatMap((node) =>
492
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
493
- node.data.query.typename === DataType.StoredSchema.typename
438
+ Obj.instanceOf(Collection.Managed, node.data) && node.data.key === Type.getTypename(Type.PersistentType)
494
439
  ? Option.some(node.data)
495
440
  : Option.none(),
496
441
  ),
@@ -499,7 +444,7 @@ export default (context: PluginContext) => {
499
444
  return space?.properties.staticRecords ? Option.some(space) : Option.none();
500
445
  }),
501
446
  Option.map((space) => {
502
- return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
447
+ return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
503
448
  .map((typename) =>
504
449
  client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
505
450
  )
@@ -512,13 +457,19 @@ export default (context: PluginContext) => {
512
457
  },
513
458
  }),
514
459
 
515
- // Create static schema actions.
460
+ // Create actions for static schema record types.
516
461
  createExtension({
517
- id: `${SPACE_PLUGIN}/static-schema-actions`,
462
+ id: `${meta.id}/static-schema-actions`,
518
463
  actions: (node) => {
519
- let query: QueryResult<DataType.View> | undefined;
520
- return Rx.make((get) =>
521
- pipe(
464
+ let query: Database.QueryResult<Obj.Any> | undefined;
465
+ return Atom.make((get) => {
466
+ // TODO(wittjosiah): Use schemaRegistry query once it support atom reactivity.
467
+ const schemas = get(context.capabilities(ClientCapabilities.Schema))
468
+ .flat()
469
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
470
+ const filter = Filter.or(...schemas.map((schema) => Filter.type(schema)));
471
+
472
+ return Function.pipe(
522
473
  get(node),
523
474
  Option.flatMap((node) => {
524
475
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
@@ -526,59 +477,82 @@ export default (context: PluginContext) => {
526
477
  }),
527
478
  Option.map(({ space, schema }) => {
528
479
  if (!query) {
529
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
530
- query = space.db.query(Filter.type(DataType.View));
480
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
481
+ // TODO(wittjosiah): Remove cast.
482
+ query = space.db.query(filter) as unknown as Database.QueryResult<Obj.Any>;
531
483
  }
532
484
 
533
- const views = get(rxFromQuery(query));
485
+ const objects = get(atomFromQuery(query));
534
486
  const filteredViews = get(
535
- rxFromSignal(() =>
536
- // TODO(wittjosiah): Remove cast.
537
- views.filter((view) => view.query.typename === Type.getTypename(schema as Type.Obj.Any)),
487
+ atomFromSignal(() =>
488
+ objects.filter(
489
+ (viewObject) =>
490
+ getTypenameFromQuery((viewObject as any).view.target?.query.ast) ===
491
+ Type.getTypename(schema as Type.Obj.Any),
492
+ ),
538
493
  ),
539
494
  );
540
495
  const deletable = filteredViews.length === 0;
541
496
 
497
+ const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
498
+ if (!dispatcher) {
499
+ return [];
500
+ }
501
+
542
502
  // TODO(wittjosiah): Remove cast.
543
- return createStaticSchemaActions({ schema: schema as Type.Obj.Any, space, deletable });
503
+ return createStaticSchemaActions({
504
+ schema: schema as Type.Obj.Any,
505
+ space,
506
+ dispatch: dispatcher.dispatchPromise,
507
+ deletable,
508
+ });
544
509
  }),
545
510
  Option.getOrElse(() => []),
546
- ),
547
- );
511
+ );
512
+ });
548
513
  },
549
514
  }),
550
515
 
551
- // Create nodes for schema views.
516
+ // Create nodes for views of record types.
552
517
  createExtension({
553
- id: `${SPACE_PLUGIN}/schema-views`,
518
+ id: `${meta.id}/schema-views`,
554
519
  connector: (node) => {
555
- let query: QueryResult<DataType.View> | undefined;
556
- return Rx.make((get) =>
557
- pipe(
520
+ let query: Database.QueryResult<Obj.Any> | undefined;
521
+ return Atom.make((get) => {
522
+ // TODO(wittjosiah): Use schemaRegistry query once it support atom reactivity.
523
+ const schemas = get(context.capabilities(ClientCapabilities.Schema))
524
+ .flat()
525
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
526
+ const filter = Filter.or(...schemas.map((schema) => Filter.type(schema)));
527
+
528
+ return Function.pipe(
558
529
  get(node),
559
530
  Option.flatMap((node) => {
560
531
  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))
532
+ return space && (Obj.instanceOf(Type.PersistentType, node.data) || Schema.isSchema(node.data))
562
533
  ? Option.some({ space, schema: node.data })
563
534
  : Option.none();
564
535
  }),
565
536
  Option.map(({ space, schema }) => {
566
537
  if (!query) {
567
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
568
- query = space.db.query(Filter.type(DataType.View));
538
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
539
+ // TODO(wittjosiah): Remove cast.
540
+ query = space.db.query(filter) as unknown as Database.QueryResult<Obj.Any>;
569
541
  }
570
542
 
571
- // TODO(wittjosiah): Remove cast.
543
+ // TODO(wittjosiah): Remove casts.
572
544
  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) =>
545
+ return get(atomFromQuery(query))
546
+ .filter((object) =>
547
+ get(atomFromSignal(() => getTypenameFromQuery((object as any).view.target?.query.ast) === typename)),
548
+ )
549
+ .map((object) =>
576
550
  get(
577
- rxFromSignal(() =>
551
+ atomFromSignal(() =>
578
552
  createObjectNode({
579
- object: view,
553
+ object,
580
554
  space,
581
- resolve,
555
+ resolve: resolve(get),
582
556
  droppable: false,
583
557
  }),
584
558
  ),
@@ -587,41 +561,52 @@ export default (context: PluginContext) => {
587
561
  .filter(isNonNullable);
588
562
  }),
589
563
  Option.getOrElse(() => []),
590
- ),
591
- );
564
+ );
565
+ });
592
566
  },
593
567
  }),
594
568
 
595
569
  // Create collection actions and action groups.
596
570
  createExtension({
597
- id: `${SPACE_PLUGIN}/object-actions`,
571
+ id: `${meta.id}/object-actions`,
598
572
  actions: (node) => {
599
- let query: QueryResult<DataType.View> | undefined;
600
- return Rx.make((get) =>
601
- pipe(
573
+ let query: Database.QueryResult<Obj.Any> | undefined;
574
+ return Atom.make((get) => {
575
+ // TODO(wittjosiah): Use schemaRegistry query once it support atom reactivity.
576
+ const schemas = get(context.capabilities(ClientCapabilities.Schema))
577
+ .flat()
578
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
579
+ const filter = Filter.or(...schemas.map((schema) => Filter.type(schema)));
580
+
581
+ return Function.pipe(
602
582
  get(node),
603
583
  Option.flatMap((node) => {
604
584
  const space = getSpace(node.data);
605
- return space && Obj.isObject(node.data) ? Option.some({ space, object: node.data }) : Option.none();
585
+ return space && Obj.isObject(node.data) && Obj.getTypename(node.data) === node.type
586
+ ? Option.some({ space, object: node.data })
587
+ : Option.none();
606
588
  }),
607
589
  Option.flatMap(({ space, object }) => {
608
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
590
+ const isSchema = Obj.instanceOf(Type.PersistentType, object);
609
591
  if (!query && isSchema) {
610
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
611
- query = space.db.query(Filter.type(DataType.View));
592
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
593
+ // TODO(wittjosiah): Remove cast.
594
+ query = space.db.query(filter) as unknown as Database.QueryResult<Obj.Any>;
612
595
  }
613
596
 
614
597
  let deletable =
615
598
  !isSchema &&
616
- // Don't allow the Records smart collection to be deleted.
617
- !(
618
- Obj.instanceOf(DataType.QueryCollection, object) &&
619
- object.query.typename === DataType.StoredSchema.typename
620
- );
599
+ // Don't allow system collections to be deleted.
600
+ !Obj.instanceOf(Collection.Managed, object);
621
601
  if (isSchema && query) {
622
- const views = get(rxFromQuery(query));
602
+ const objects = get(atomFromQuery(query));
623
603
  const filteredViews = get(
624
- rxFromSignal(() => views.filter((view) => view.query.typename === object.typename)),
604
+ atomFromSignal(() =>
605
+ objects.filter(
606
+ (viewObject) =>
607
+ getTypenameFromQuery((viewObject as any).view.target?.query.ast) === object.typename,
608
+ ),
609
+ ),
625
610
  );
626
611
  deletable = filteredViews.length === 0;
627
612
  }
@@ -629,7 +614,6 @@ export default (context: PluginContext) => {
629
614
  const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
630
615
  const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
631
616
  const [state] = get(context.capabilities(SpaceCapabilities.State));
632
- const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));
633
617
 
634
618
  if (!dispatcher || !appGraph || !state) {
635
619
  return Option.none();
@@ -638,34 +622,34 @@ export default (context: PluginContext) => {
638
622
  object,
639
623
  graph: appGraph.graph,
640
624
  dispatch: dispatcher.dispatchPromise,
641
- objectForms,
625
+ resolve: resolve(get),
642
626
  deletable,
643
- navigable: get(rxFromSignal(() => state.navigableCollections)),
627
+ navigable: get(atomFromSignal(() => state.navigableCollections)),
644
628
  });
645
629
  }
646
630
  }),
647
631
  Option.map((params) => constructObjectActions(params)),
648
632
  Option.getOrElse(() => []),
649
- ),
650
- );
633
+ );
634
+ });
651
635
  },
652
636
  }),
653
637
 
654
638
  // View selected objects.
655
639
  createExtension({
656
- id: `${SPACE_PLUGIN}/selected-objects`,
640
+ id: `${meta.id}/selected-objects`,
657
641
  connector: (node) =>
658
- Rx.make((get) =>
659
- pipe(
642
+ Atom.make((get) =>
643
+ Function.pipe(
660
644
  get(node),
661
- Option.flatMap((node) => (Obj.instanceOf(DataType.View, node.data) ? Option.some(node) : Option.none())),
645
+ Option.flatMap((node) => (Obj.instanceOf(View.View, node.data) ? Option.some(node) : Option.none())),
662
646
  Option.map((node) => [
663
647
  {
664
648
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
665
649
  type: PLANK_COMPANION_TYPE,
666
650
  data: 'selected-objects',
667
651
  properties: {
668
- label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
652
+ label: ['companion selected objects label', { ns: meta.id }],
669
653
  icon: 'ph--tree-view--regular',
670
654
  disposition: 'hidden',
671
655
  },
@@ -678,10 +662,10 @@ export default (context: PluginContext) => {
678
662
 
679
663
  // Object settings plank companion.
680
664
  createExtension({
681
- id: `${SPACE_PLUGIN}/settings`,
665
+ id: `${meta.id}/settings`,
682
666
  connector: (node) =>
683
- Rx.make((get) =>
684
- pipe(
667
+ Atom.make((get) =>
668
+ Function.pipe(
685
669
  get(node),
686
670
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
687
671
  Option.map((node) => [
@@ -690,7 +674,7 @@ export default (context: PluginContext) => {
690
674
  type: PLANK_COMPANION_TYPE,
691
675
  data: 'settings',
692
676
  properties: {
693
- label: ['object settings label', { ns: SPACE_PLUGIN }],
677
+ label: ['object settings label', { ns: meta.id }],
694
678
  icon: 'ph--sliders--regular',
695
679
  disposition: 'hidden',
696
680
  position: 'fallback',