@dxos/plugin-space 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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 (389) 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/ObjectCardStack-TE7AWPMH.mjs +144 -0
  4. package/dist/lib/browser/ObjectCardStack-TE7AWPMH.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectDetails-666IBRHE.mjs +144 -0
  6. package/dist/lib/browser/ObjectDetails-666IBRHE.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-USKWFIDK.mjs +551 -0
  10. package/dist/lib/browser/app-graph-builder-USKWFIDK.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-SXIQ425K.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-SXIQ425K.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-5CSSKOWR.mjs} +42 -16
  14. package/dist/lib/browser/chunk-5CSSKOWR.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-E4BEMEZ3.mjs +399 -0
  18. package/dist/lib/browser/chunk-E4BEMEZ3.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-IJCMB5B5.mjs} +269 -145
  20. package/dist/lib/browser/chunk-IJCMB5B5.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-POFUXISV.mjs} +69 -62
  22. package/dist/lib/browser/chunk-POFUXISV.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  24. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  26. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-V7MJSSBQ.mjs → chunk-XKQCDLXX.mjs} +734 -615
  28. package/dist/lib/browser/chunk-XKQCDLXX.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 +92 -139
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-TIXVDYN7.mjs → intent-resolver-QEIM7NQT.mjs} +118 -109
  34. package/dist/lib/browser/intent-resolver-QEIM7NQT.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-T6ZETLD2.mjs +30 -0
  37. package/dist/lib/browser/react-root-T6ZETLD2.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-TPNLWJJH.mjs → react-surface-MLN5BZ2G.mjs} +120 -120
  39. package/dist/lib/browser/react-surface-MLN5BZ2G.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-EGTCHS7U.mjs} +5 -5
  43. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-EGTCHS7U.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-YS4BBZXW.mjs} +29 -20
  45. package/dist/lib/browser/spaces-ready-YS4BBZXW.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/ObjectCardStack-AAKMAQ6T.mjs +145 -0
  52. package/dist/lib/node-esm/ObjectCardStack-AAKMAQ6T.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectDetails-TZ5YKXGN.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-QRQ5EQLB.mjs +552 -0
  58. package/dist/lib/node-esm/app-graph-builder-QRQ5EQLB.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-P2X4W7LI.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-P2X4W7LI.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-3D4NGZPW.mjs} +269 -145
  62. package/dist/lib/node-esm/chunk-3D4NGZPW.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-QQQE2ZCX.mjs +400 -0
  70. package/dist/lib/node-esm/chunk-QQQE2ZCX.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-UMZ7G6G4.mjs} +41 -16
  72. package/dist/lib/node-esm/chunk-UMZ7G6G4.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-6X5DLJM5.mjs → chunk-XD532BVR.mjs} +734 -615
  76. package/dist/lib/node-esm/chunk-XD532BVR.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 +92 -139
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-MHGHRGDT.mjs → intent-resolver-ZWCBVABN.mjs} +118 -109
  82. package/dist/lib/node-esm/intent-resolver-ZWCBVABN.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-KW3TGJGY.mjs → react-root-SKB4UJ4K.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-SKB4UJ4K.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-UUIUUD6P.mjs → react-surface-BVZGNSBB.mjs} +120 -120
  87. package/dist/lib/node-esm/react-surface-BVZGNSBB.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-N3F6JCIR.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-N3F6JCIR.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-U2K5P4LB.mjs} +29 -20
  93. package/dist/lib/node-esm/spaces-ready-U2K5P4LB.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/ObjectCardStack/ObjectCardStack.d.ts +8 -0
  145. package/dist/types/src/components/ObjectCardStack/ObjectCardStack.d.ts.map +1 -0
  146. package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts +9 -0
  147. package/dist/types/src/components/ObjectCardStack/ObjectForm.d.ts.map +1 -0
  148. package/dist/types/src/components/ObjectCardStack/index.d.ts +3 -0
  149. package/dist/types/src/components/ObjectCardStack/index.d.ts.map +1 -0
  150. package/dist/types/src/components/{ObjectSettings → ObjectDetails}/BaseObjectSettings.d.ts +2 -2
  151. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.d.ts.map +1 -0
  152. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts +1424 -0
  153. package/dist/types/src/components/ObjectDetails/BaseObjectSettings.stories.d.ts.map +1 -0
  154. package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts +8 -0
  155. package/dist/types/src/components/ObjectDetails/ForeignKeys.d.ts.map +1 -0
  156. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts +8 -0
  157. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts.map +1 -0
  158. package/dist/types/src/components/ObjectDetails/index.d.ts +3 -0
  159. package/dist/types/src/components/ObjectDetails/index.d.ts.map +1 -0
  160. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  161. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  162. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  163. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  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 +1 -1
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1421 -4
  184. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  186. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1422 -5
  187. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  189. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  190. package/dist/types/src/components/index.d.ts +10 -12
  191. package/dist/types/src/components/index.d.ts.map +1 -1
  192. package/dist/types/src/events.d.ts.map +1 -1
  193. package/dist/types/src/helpers/index.d.ts +2 -0
  194. package/dist/types/src/helpers/index.d.ts.map +1 -0
  195. package/dist/types/src/helpers/query.d.ts +7 -0
  196. package/dist/types/src/helpers/query.d.ts.map +1 -0
  197. package/dist/types/src/helpers/query.test.d.ts +2 -0
  198. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  199. package/dist/types/src/hooks/index.d.ts +1 -0
  200. package/dist/types/src/hooks/index.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  202. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +2 -8
  203. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  204. package/dist/types/src/hooks/usePath.d.ts +1 -1
  205. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  206. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  207. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  208. package/dist/types/src/index.d.ts +1 -0
  209. package/dist/types/src/index.d.ts.map +1 -1
  210. package/dist/types/src/meta.d.ts +0 -1
  211. package/dist/types/src/meta.d.ts.map +1 -1
  212. package/dist/types/src/translations.d.ts +1261 -67
  213. package/dist/types/src/translations.d.ts.map +1 -1
  214. package/dist/types/src/types/form.d.ts +22 -0
  215. package/dist/types/src/types/form.d.ts.map +1 -0
  216. package/dist/types/src/types/index.d.ts +1 -0
  217. package/dist/types/src/types/index.d.ts.map +1 -1
  218. package/dist/types/src/types/types.d.ts +96 -157
  219. package/dist/types/src/types/types.d.ts.map +1 -1
  220. package/dist/types/src/util.d.ts +25 -36
  221. package/dist/types/src/util.d.ts.map +1 -1
  222. package/dist/types/tsconfig.tsbuildinfo +1 -1
  223. package/package.json +70 -59
  224. package/src/SpacePlugin.ts +182 -222
  225. package/src/capabilities/app-graph-builder.ts +271 -246
  226. package/src/capabilities/app-graph-serializer.ts +12 -12
  227. package/src/capabilities/capabilities.ts +28 -17
  228. package/src/capabilities/identity-created.ts +3 -3
  229. package/src/capabilities/index.ts +1 -2
  230. package/src/capabilities/intent-resolver.ts +92 -81
  231. package/src/capabilities/react-root.tsx +6 -4
  232. package/src/capabilities/react-surface.tsx +127 -155
  233. package/src/capabilities/repair.ts +57 -0
  234. package/src/capabilities/spaces-ready.ts +38 -17
  235. package/src/capabilities/state.ts +5 -4
  236. package/src/components/AwaitingObject.tsx +12 -14
  237. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  238. package/src/components/CollectionSection.tsx +8 -6
  239. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
  240. package/src/components/CreateDialog/CreateObjectDialog.tsx +74 -46
  241. package/src/components/CreateDialog/CreateObjectPanel.tsx +65 -43
  242. package/src/components/CreateDialog/CreateSpaceDialog.tsx +45 -22
  243. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  244. package/src/components/JoinDialog/index.ts +5 -0
  245. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  246. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +22 -21
  247. package/src/components/MembersContainer/index.ts +5 -0
  248. package/src/components/MenuFooter.tsx +2 -2
  249. package/src/components/ObjectCardStack/ObjectCardStack.tsx +64 -0
  250. package/src/components/ObjectCardStack/ObjectForm.tsx +90 -0
  251. package/src/components/ObjectCardStack/index.ts +7 -0
  252. package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +63 -0
  253. package/src/components/ObjectDetails/BaseObjectSettings.tsx +118 -0
  254. package/src/components/{ObjectSettings → ObjectDetails}/ForeignKeys.tsx +8 -8
  255. package/src/components/ObjectDetails/ObjectDetails.tsx +35 -0
  256. package/src/components/ObjectDetails/index.ts +7 -0
  257. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +10 -16
  258. package/src/components/ObjectRenamePopover/index.ts +5 -0
  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 +190 -155
  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 +56 -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 +152 -0
  279. package/src/hooks/index.ts +1 -0
  280. package/src/hooks/useActiveSpace.ts +3 -2
  281. package/src/hooks/useInputSurfaceLookup.tsx +9 -13
  282. package/src/hooks/usePath.ts +1 -1
  283. package/src/hooks/useTypeOptions.ts +25 -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 +69 -0
  288. package/src/types/index.ts +1 -0
  289. package/src/types/types.ts +51 -52
  290. package/src/util.tsx +269 -147
  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-7CZZJS3S.mjs +0 -479
  295. package/dist/lib/browser/app-graph-builder-7CZZJS3S.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-JS3MMC42.mjs +0 -19
  302. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  303. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
  305. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  306. package/dist/lib/browser/chunk-V7MJSSBQ.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-TIXVDYN7.mjs.map +0 -7
  311. package/dist/lib/browser/react-root-N2J7TDRX.mjs +0 -29
  312. package/dist/lib/browser/react-root-N2J7TDRX.mjs.map +0 -7
  313. package/dist/lib/browser/react-surface-TPNLWJJH.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-KGIGWC72.mjs +0 -480
  324. package/dist/lib/node-esm/app-graph-builder-KGIGWC72.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-4AOMYKDE.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  328. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  330. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  331. package/dist/lib/node-esm/chunk-6X5DLJM5.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-MHGHRGDT.mjs.map +0 -7
  340. package/dist/lib/node-esm/react-root-KW3TGJGY.mjs.map +0 -7
  341. package/dist/lib/node-esm/react-surface-UUIUUD6P.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/ObjectSettings/AdvancedObjectSettings.d.ts +0 -7
  363. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
  364. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +0 -1
  365. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +0 -8
  366. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +0 -1
  367. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +0 -8
  368. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +0 -1
  369. package/dist/types/src/components/ObjectSettings/index.d.ts +0 -2
  370. package/dist/types/src/components/ObjectSettings/index.d.ts.map +0 -1
  371. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  372. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  373. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  374. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  375. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  376. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  377. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  378. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  379. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  380. package/src/capabilities/schema-defs.ts +0 -30
  381. package/src/capabilities/schema-tool.test.ts +0 -44
  382. package/src/capabilities/schema-tools.ts +0 -125
  383. package/src/components/MembersContainer.stories.tsx +0 -30
  384. package/src/components/ObjectDetailsPanel.tsx +0 -77
  385. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +0 -80
  386. package/src/components/ObjectSettings/BaseObjectSettings.tsx +0 -47
  387. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +0 -36
  388. package/src/components/ObjectSettings/index.ts +0 -5
  389. 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 Entity, Filter, Obj, type QueryResult, 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, 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',
@@ -61,9 +65,7 @@ export default (context: PluginContext) => {
61
65
  nextOrder.map(({ id }) => id),
62
66
  );
63
67
 
64
- const {
65
- objects: [spacesOrder],
66
- } = await client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
68
+ const [spacesOrder] = await client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
67
69
  if (spacesOrder) {
68
70
  spacesOrder.order = nextOrder.map(({ id }) => id);
69
71
  } else {
@@ -76,11 +78,11 @@ export default (context: PluginContext) => {
76
78
  return contributes(Capabilities.AppGraphBuilder, [
77
79
  // Primary actions.
78
80
  createExtension({
79
- id: `${SPACE_PLUGIN}/primary-actions`,
81
+ id: `${meta.id}/primary-actions`,
80
82
  position: 'hoist',
81
83
  actions: (node) =>
82
- Rx.make((get) =>
83
- pipe(
84
+ Atom.make((get) =>
85
+ Function.pipe(
84
86
  get(node),
85
87
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
86
88
  Option.map(() => [
@@ -91,7 +93,7 @@ export default (context: PluginContext) => {
91
93
  await dispatch(createIntent(SpaceAction.OpenCreateSpace));
92
94
  },
93
95
  properties: {
94
- label: ['create space label', { ns: SPACE_PLUGIN }],
96
+ label: ['create space label', { ns: meta.id }],
95
97
  icon: 'ph--plus--regular',
96
98
  testId: 'spacePlugin.createSpace',
97
99
  disposition: 'menu',
@@ -104,7 +106,7 @@ export default (context: PluginContext) => {
104
106
  await dispatch(createIntent(SpaceAction.Join));
105
107
  },
106
108
  properties: {
107
- label: ['join space label', { ns: SPACE_PLUGIN }],
109
+ label: ['join space label', { ns: meta.id }],
108
110
  icon: 'ph--sign-in--regular',
109
111
  testId: 'spacePlugin.joinSpace',
110
112
  disposition: 'menu',
@@ -119,7 +121,7 @@ export default (context: PluginContext) => {
119
121
  await dispatch(createIntent(SpaceAction.OpenMembers, { space }));
120
122
  },
121
123
  properties: {
122
- label: ['share space label', { ns: SPACE_PLUGIN }],
124
+ label: ['share space label', { ns: meta.id }],
123
125
  icon: 'ph--users--regular',
124
126
  testId: 'spacePlugin.shareSpace',
125
127
  keyBinding: {
@@ -137,7 +139,7 @@ export default (context: PluginContext) => {
137
139
  await dispatch(createIntent(SpaceAction.OpenSettings, { space }));
138
140
  },
139
141
  properties: {
140
- label: ['open current space settings label', { ns: SPACE_PLUGIN }],
142
+ label: ['open current space settings label', { ns: meta.id }],
141
143
  icon: 'ph--faders--regular',
142
144
  keyBinding: {
143
145
  macos: 'meta+shift+,',
@@ -153,44 +155,44 @@ export default (context: PluginContext) => {
153
155
 
154
156
  // Create spaces group node.
155
157
  createExtension({
156
- id: `${SPACE_PLUGIN}/root`,
158
+ id: `${meta.id}/root`,
157
159
  position: 'hoist',
158
160
  connector: (node) =>
159
- Rx.make((get) =>
160
- pipe(
161
+ Atom.make((get) =>
162
+ Function.pipe(
161
163
  get(node),
162
164
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
163
165
  Option.map(() => [spacesNode]),
164
166
  Option.getOrElse(() => []),
165
167
  ),
166
168
  ),
167
- // resolver: ({ id }) => (id === SPACES ? spacesNode : undefined),
168
169
  }),
169
170
 
170
171
  // Create space nodes.
171
172
  createExtension({
172
173
  id: SPACES,
173
174
  connector: (node) => {
174
- let query: QueryResult<Type.Expando> | undefined;
175
- return Rx.make((get) =>
176
- pipe(
175
+ // TODO(wittjosiah): Find a simpler way to define this type.
176
+ let query: QueryResult.QueryResult<Schema.Schema.Type<typeof Type.Expando>> | undefined;
177
+ return Atom.make((get) =>
178
+ Function.pipe(
177
179
  get(node),
178
180
  Option.flatMap((node) => (node.id === SPACES ? Option.some(node) : Option.none())),
179
181
  Option.map(() => {
180
182
  const state = context.getCapability(SpaceCapabilities.State);
181
183
  const client = context.getCapability(ClientCapabilities.Client);
182
- const spacesRx = rxFromObservable(client.spaces);
183
- const isReadyRx = rxFromObservable(client.spaces.isReady);
184
+ const spacesAtom = atomFromObservable(client.spaces);
185
+ const isReadyAtom = atomFromObservable(client.spaces.isReady);
184
186
 
185
- const spaces = get(spacesRx);
186
- const isReady = get(isReadyRx);
187
+ const spaces = get(spacesAtom);
188
+ const isReady = get(isReadyAtom);
187
189
 
188
190
  if (!spaces || !isReady) {
189
191
  return [];
190
192
  }
191
193
 
192
194
  const settings = get(context.capabilities(Capabilities.SettingsStore))[0]?.getStore<SpaceSettingsProps>(
193
- SPACE_PLUGIN,
195
+ meta.id,
194
196
  )?.value;
195
197
 
196
198
  // TODO(wittjosiah): During client reset, accessing default space throws.
@@ -198,9 +200,9 @@ export default (context: PluginContext) => {
198
200
  if (!query) {
199
201
  query = client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED }));
200
202
  }
201
- const [spacesOrder] = get(rxFromQuery(query));
203
+ const [spacesOrder] = get(atomFromQuery(query));
202
204
  return get(
203
- rxFromSignal(() => {
205
+ atomFromSignal(() => {
204
206
  const order: string[] = spacesOrder?.order ?? [];
205
207
  const orderMap = new Map(order.map((id, index) => [id, index]));
206
208
  return [
@@ -218,7 +220,7 @@ export default (context: PluginContext) => {
218
220
  navigable: state.navigableCollections,
219
221
  personal: space === client.spaces.default,
220
222
  namesCache: state.spaceNames,
221
- resolve,
223
+ resolve: resolve(get),
222
224
  }),
223
225
  );
224
226
  }),
@@ -231,54 +233,14 @@ export default (context: PluginContext) => {
231
233
  ),
232
234
  );
233
235
  },
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
236
  }),
275
237
 
276
238
  // Create space actions.
277
239
  createExtension({
278
- id: `${SPACE_PLUGIN}/actions`,
240
+ id: `${meta.id}/actions`,
279
241
  actions: (node) =>
280
- Rx.make((get) =>
281
- pipe(
242
+ Atom.make((get) =>
243
+ Function.pipe(
282
244
  get(node),
283
245
  Option.flatMap((node) =>
284
246
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
@@ -307,24 +269,24 @@ export default (context: PluginContext) => {
307
269
 
308
270
  // Create nodes for objects in the root collection of a space.
309
271
  createExtension({
310
- id: `${SPACE_PLUGIN}/root-collection`,
272
+ id: `${meta.id}/root-collection`,
311
273
  connector: (node) =>
312
- Rx.make((get) =>
313
- pipe(
274
+ Atom.make((get) =>
275
+ Function.pipe(
314
276
  get(node),
315
277
  Option.flatMap((node) =>
316
278
  node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),
317
279
  ),
318
280
  Option.map((space) => {
319
281
  const state = context.getCapability(SpaceCapabilities.State);
320
- const spaceState = get(rxFromObservable(space.state));
282
+ const spaceState = get(atomFromObservable(space.state));
321
283
  if (spaceState !== SpaceState.SPACE_READY) {
322
284
  return [];
323
285
  }
324
286
 
325
287
  const collection = get(
326
- rxFromSignal(
327
- () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,
288
+ atomFromSignal(
289
+ () => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
328
290
  ),
329
291
  );
330
292
  if (!collection) {
@@ -332,8 +294,8 @@ export default (context: PluginContext) => {
332
294
  }
333
295
 
334
296
  return get(
335
- rxFromSignal(() =>
336
- pipe(
297
+ atomFromSignal(() =>
298
+ Function.pipe(
337
299
  collection.objects,
338
300
  Array.map((object) => object.target),
339
301
  Array.filter(isNonNullable),
@@ -341,7 +303,7 @@ export default (context: PluginContext) => {
341
303
  createObjectNode({
342
304
  space,
343
305
  object,
344
- resolve,
306
+ resolve: resolve(get),
345
307
  navigable: state.navigableCollections,
346
308
  }),
347
309
  ),
@@ -355,29 +317,35 @@ export default (context: PluginContext) => {
355
317
  ),
356
318
  }),
357
319
 
358
- // Create nodes for objects in a collection or by its fully qualified id.
320
+ // Create nodes for objects in a collection or by its DXN.
359
321
  createExtension({
360
- id: `${SPACE_PLUGIN}/objects`,
322
+ id: `${meta.id}/objects`,
361
323
  connector: (node) =>
362
- Rx.make((get) =>
363
- pipe(
324
+ Atom.make((get) =>
325
+ Function.pipe(
364
326
  get(node),
365
327
  Option.flatMap((node) =>
366
- Obj.instanceOf(DataType.Collection, node.data) ? Option.some(node.data) : Option.none(),
328
+ Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none(),
367
329
  ),
368
330
  Option.map((collection) => {
369
331
  const state = context.getCapability(SpaceCapabilities.State);
370
332
  const space = getSpace(collection);
371
333
 
372
334
  return get(
373
- rxFromSignal(() =>
374
- pipe(
335
+ atomFromSignal(() =>
336
+ Function.pipe(
375
337
  collection.objects,
376
338
  Array.map((object) => object.target),
377
339
  Array.filter(isNonNullable),
378
340
  Array.map(
379
341
  (object) =>
380
- space && createObjectNode({ object, space, resolve, navigable: state.navigableCollections }),
342
+ space &&
343
+ createObjectNode({
344
+ object,
345
+ space,
346
+ resolve: resolve(get),
347
+ navigable: state.navigableCollections,
348
+ }),
381
349
  ),
382
350
  Array.filter(isNonNullable),
383
351
  ),
@@ -387,110 +355,91 @@ export default (context: PluginContext) => {
387
355
  Option.getOrElse(() => []),
388
356
  ),
389
357
  ),
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
- // },
358
+ resolver: (id) => {
359
+ let query: QueryResult.QueryResult<Entity.Unknown> | undefined;
360
+ return Atom.make((get) => {
361
+ const client = context.getCapability(ClientCapabilities.Client);
362
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
363
+ if (!dxn || !dxn.spaceId) {
364
+ return null;
365
+ }
366
+
367
+ const space = client.spaces.get(dxn.spaceId);
368
+ if (!space) {
369
+ return null;
370
+ }
371
+
372
+ if (!query) {
373
+ query = space.db.query(Filter.id(dxn.echoId));
374
+ }
375
+
376
+ const object = get(atomFromQuery(query)).at(0);
377
+ if (!Obj.isObject(object)) {
378
+ return null;
379
+ }
380
+
381
+ return createObjectNode({
382
+ object,
383
+ space,
384
+ resolve: resolve(get),
385
+ disposition: 'hidden',
386
+ });
387
+ });
388
+ },
427
389
  }),
428
390
 
429
- // Create nodes for objects in a query collection.
391
+ // Create object nodes for schema-based system collections.
430
392
  createExtension({
431
- id: `${SPACE_PLUGIN}/query-collection-objects`,
393
+ id: `${meta.id}/system-collections`,
432
394
  connector: (node) => {
433
- let query: QueryResult<Type.Expando> | undefined;
434
- return Rx.make((get) =>
435
- pipe(
395
+ // TODO(wittjosiah): Find a simpler way to define this type.
396
+ let query: QueryResult.QueryResult<Schema.Schema.Type<typeof Type.Expando>> | undefined;
397
+ return Atom.make((get) => {
398
+ const client = get(context.capabilities(ClientCapabilities.Client)).at(0);
399
+ return Function.pipe(
436
400
  get(node),
437
401
  Option.flatMap((node) =>
438
- Obj.instanceOf(DataType.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
402
+ Obj.instanceOf(Collection.Managed, node.data) ? Option.some(node.data) : Option.none(),
439
403
  ),
440
404
  Option.flatMap((collection) => {
441
405
  const space = getSpace(collection);
442
- return collection.query.typename && space
443
- ? Option.some({ typename: collection.query.typename, space })
444
- : Option.none();
406
+ // TODO(wittjosiah): Support reactive schema registry queries.
407
+ const schema = client?.graph.schemaRegistry
408
+ .query({ typename: collection.key, location: ['runtime'] })
409
+ .runSync()[0];
410
+ return space && schema ? Option.some({ space, schema }) : Option.none();
445
411
  }),
446
- Option.map(({ typename, space }) => {
447
- const state = context.getCapability(SpaceCapabilities.State);
412
+ Option.map(({ space, schema }) => {
448
413
  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
- );
414
+ query = space.db.query(Filter.type(schema));
460
415
  }
461
- return get(rxFromQuery(query))
416
+ return get(atomFromQuery(query))
462
417
  .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
- ),
418
+ createObjectNode({
419
+ object,
420
+ space,
421
+ managedCollectionChild: true,
422
+ resolve: resolve(get),
423
+ }),
474
424
  )
475
425
  .filter(isNonNullable);
476
426
  }),
477
427
  Option.getOrElse(() => []),
478
- ),
479
- );
428
+ );
429
+ });
480
430
  },
481
431
  }),
482
432
 
483
- // Static schema records.
433
+ // Create branch nodes for static schema record types.
484
434
  createExtension({
485
- id: `${SPACE_PLUGIN}/static-schemas`,
486
- connector: (node) => {
487
- const client = context.getCapability(ClientCapabilities.Client);
488
- return Rx.make((get) =>
489
- pipe(
435
+ id: `${meta.id}/static-schemas`,
436
+ connector: (node) =>
437
+ Atom.make((get) => {
438
+ const client = get(context.capabilities(ClientCapabilities.Client)).at(0);
439
+ return Function.pipe(
490
440
  get(node),
491
441
  Option.flatMap((node) =>
492
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
493
- node.data.query.typename === DataType.StoredSchema.typename
442
+ Obj.instanceOf(Collection.Managed, node.data) && node.data.key === Type.getTypename(Type.PersistentType)
494
443
  ? Option.some(node.data)
495
444
  : Option.none(),
496
445
  ),
@@ -499,26 +448,36 @@ export default (context: PluginContext) => {
499
448
  return space?.properties.staticRecords ? Option.some(space) : Option.none();
500
449
  }),
501
450
  Option.map((space) => {
502
- return get(rxFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
503
- .map((typename) =>
504
- client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename),
505
- )
451
+ // TODO(wittjosiah): Support reactive schema registry queries.
452
+ return get(atomFromSignal(() => (space.properties.staticRecords ?? []) as string[]))
453
+ .map((typename) => client?.graph.schemaRegistry.query({ typename, location: ['runtime'] }).runSync()[0])
506
454
  .filter(isNonNullable)
507
455
  .map((schema) => createStaticSchemaNode({ schema, space }));
508
456
  }),
509
457
  Option.getOrElse(() => []),
510
- ),
511
- );
512
- },
458
+ );
459
+ }),
513
460
  }),
514
461
 
515
- // Create static schema actions.
462
+ // Create actions for static schema record types.
516
463
  createExtension({
517
- id: `${SPACE_PLUGIN}/static-schema-actions`,
464
+ id: `${meta.id}/static-schema-actions`,
518
465
  actions: (node) => {
519
- let query: QueryResult<DataType.View> | undefined;
520
- return Rx.make((get) =>
521
- pipe(
466
+ let query: QueryResult.QueryResult<Obj.Any> | undefined;
467
+ return Atom.make((get) => {
468
+ // TODO(wittjosiah): Support reactive schema registry queries.
469
+ const schemas =
470
+ get(context.capabilities(ClientCapabilities.Client))
471
+ .at(0)
472
+ ?.graph.schemaRegistry.query({ location: ['runtime'] })
473
+ .runSync() ?? [];
474
+ const filter = Filter.or(
475
+ ...schemas
476
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
477
+ .map((schema) => Filter.type(schema)),
478
+ );
479
+
480
+ return Function.pipe(
522
481
  get(node),
523
482
  Option.flatMap((node) => {
524
483
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
@@ -526,59 +485,88 @@ export default (context: PluginContext) => {
526
485
  }),
527
486
  Option.map(({ space, schema }) => {
528
487
  if (!query) {
529
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
530
- query = space.db.query(Filter.type(DataType.View));
488
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
489
+ // TODO(wittjosiah): Remove cast.
490
+ query = space.db.query(filter) as unknown as QueryResult.QueryResult<Obj.Any>;
531
491
  }
532
492
 
533
- const views = get(rxFromQuery(query));
493
+ const objects = get(atomFromQuery(query));
534
494
  const filteredViews = get(
535
- rxFromSignal(() =>
536
- // TODO(wittjosiah): Remove cast.
537
- views.filter((view) => view.query.typename === Type.getTypename(schema as Type.Obj.Any)),
495
+ atomFromSignal(() =>
496
+ objects.filter(
497
+ (viewObject) =>
498
+ getTypenameFromQuery((viewObject as any).view.target?.query.ast) ===
499
+ Type.getTypename(schema as Type.Obj.Any),
500
+ ),
538
501
  ),
539
502
  );
540
503
  const deletable = filteredViews.length === 0;
541
504
 
505
+ const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
506
+ if (!dispatcher) {
507
+ return [];
508
+ }
509
+
542
510
  // TODO(wittjosiah): Remove cast.
543
- return createStaticSchemaActions({ schema: schema as Type.Obj.Any, space, deletable });
511
+ return createStaticSchemaActions({
512
+ schema: schema as Type.Obj.Any,
513
+ space,
514
+ dispatch: dispatcher.dispatchPromise,
515
+ deletable,
516
+ });
544
517
  }),
545
518
  Option.getOrElse(() => []),
546
- ),
547
- );
519
+ );
520
+ });
548
521
  },
549
522
  }),
550
523
 
551
- // Create nodes for schema views.
524
+ // Create nodes for views of record types.
552
525
  createExtension({
553
- id: `${SPACE_PLUGIN}/schema-views`,
526
+ id: `${meta.id}/schema-views`,
554
527
  connector: (node) => {
555
- let query: QueryResult<DataType.View> | undefined;
556
- return Rx.make((get) =>
557
- pipe(
528
+ let query: QueryResult.QueryResult<Obj.Any> | undefined;
529
+ return Atom.make((get) => {
530
+ // TODO(wittjosiah): Support reactive schema registry queries.
531
+ const schemas =
532
+ get(context.capabilities(ClientCapabilities.Client))
533
+ .at(0)
534
+ ?.graph.schemaRegistry.query({ location: ['runtime'] })
535
+ .runSync() ?? [];
536
+ const filter = Filter.or(
537
+ ...schemas
538
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
539
+ .map((schema) => Filter.type(schema)),
540
+ );
541
+
542
+ return Function.pipe(
558
543
  get(node),
559
544
  Option.flatMap((node) => {
560
545
  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))
546
+ return space && (Obj.instanceOf(Type.PersistentType, node.data) || Schema.isSchema(node.data))
562
547
  ? Option.some({ space, schema: node.data })
563
548
  : Option.none();
564
549
  }),
565
550
  Option.map(({ space, schema }) => {
566
551
  if (!query) {
567
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
568
- query = space.db.query(Filter.type(DataType.View));
552
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
553
+ // TODO(wittjosiah): Remove cast.
554
+ query = space.db.query(filter) as unknown as QueryResult.QueryResult<Obj.Any>;
569
555
  }
570
556
 
571
- // TODO(wittjosiah): Remove cast.
557
+ // TODO(wittjosiah): Remove casts.
572
558
  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) =>
559
+ return get(atomFromQuery(query))
560
+ .filter((object) =>
561
+ get(atomFromSignal(() => getTypenameFromQuery((object as any).view.target?.query.ast) === typename)),
562
+ )
563
+ .map((object) =>
576
564
  get(
577
- rxFromSignal(() =>
565
+ atomFromSignal(() =>
578
566
  createObjectNode({
579
- object: view,
567
+ object,
580
568
  space,
581
- resolve,
569
+ resolve: resolve(get),
582
570
  droppable: false,
583
571
  }),
584
572
  ),
@@ -587,35 +575,58 @@ export default (context: PluginContext) => {
587
575
  .filter(isNonNullable);
588
576
  }),
589
577
  Option.getOrElse(() => []),
590
- ),
591
- );
578
+ );
579
+ });
592
580
  },
593
581
  }),
594
582
 
595
583
  // Create collection actions and action groups.
596
584
  createExtension({
597
- id: `${SPACE_PLUGIN}/object-actions`,
585
+ id: `${meta.id}/object-actions`,
598
586
  actions: (node) => {
599
- let query: QueryResult<DataType.View> | undefined;
600
- return Rx.make((get) =>
601
- pipe(
587
+ let query: QueryResult.QueryResult<Obj.Any> | undefined;
588
+ return Atom.make((get) => {
589
+ // TODO(wittjosiah): Support reactive schema registry queries.
590
+ const schemas =
591
+ get(context.capabilities(ClientCapabilities.Client))
592
+ .at(0)
593
+ ?.graph.schemaRegistry.query({ location: ['runtime'] })
594
+ .runSync() ?? [];
595
+ const filter = Filter.or(
596
+ ...schemas
597
+ .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))
598
+ .map((schema) => Filter.type(schema)),
599
+ );
600
+
601
+ return Function.pipe(
602
602
  get(node),
603
603
  Option.flatMap((node) => {
604
604
  const space = getSpace(node.data);
605
- return space && Obj.isObject(node.data) ? Option.some({ space, object: node.data }) : Option.none();
605
+ return space && Obj.isObject(node.data) && Obj.getTypename(node.data) === node.type
606
+ ? Option.some({ space, object: node.data })
607
+ : Option.none();
606
608
  }),
607
609
  Option.flatMap(({ space, object }) => {
608
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
610
+ const isSchema = Obj.instanceOf(Type.PersistentType, object);
609
611
  if (!query && isSchema) {
610
- // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
611
- query = space.db.query(Filter.type(DataType.View));
612
+ // TODO(wittjosiah): Ideally this query would traverse the view reference & filter by the query ast.
613
+ // TODO(wittjosiah): Remove cast.
614
+ query = space.db.query(filter) as unknown as QueryResult.QueryResult<Obj.Any>;
612
615
  }
613
616
 
614
- let deletable = !isSchema;
617
+ let deletable =
618
+ !isSchema &&
619
+ // Don't allow system collections to be deleted.
620
+ !Obj.instanceOf(Collection.Managed, object);
615
621
  if (isSchema && query) {
616
- const views = get(rxFromQuery(query));
622
+ const objects = get(atomFromQuery(query));
617
623
  const filteredViews = get(
618
- rxFromSignal(() => views.filter((view) => view.query.typename === object.typename)),
624
+ atomFromSignal(() =>
625
+ objects.filter(
626
+ (viewObject) =>
627
+ getTypenameFromQuery((viewObject as any).view.target?.query.ast) === object.typename,
628
+ ),
629
+ ),
619
630
  );
620
631
  deletable = filteredViews.length === 0;
621
632
  }
@@ -623,7 +634,6 @@ export default (context: PluginContext) => {
623
634
  const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
624
635
  const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
625
636
  const [state] = get(context.capabilities(SpaceCapabilities.State));
626
- const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));
627
637
 
628
638
  if (!dispatcher || !appGraph || !state) {
629
639
  return Option.none();
@@ -632,34 +642,49 @@ export default (context: PluginContext) => {
632
642
  object,
633
643
  graph: appGraph.graph,
634
644
  dispatch: dispatcher.dispatchPromise,
635
- objectForms,
645
+ resolve: resolve(get),
636
646
  deletable,
637
- navigable: get(rxFromSignal(() => state.navigableCollections)),
647
+ navigable: get(atomFromSignal(() => state.navigableCollections)),
638
648
  });
639
649
  }
640
650
  }),
641
651
  Option.map((params) => constructObjectActions(params)),
642
652
  Option.getOrElse(() => []),
643
- ),
644
- );
653
+ );
654
+ });
645
655
  },
646
656
  }),
647
657
 
648
658
  // View selected objects.
649
659
  createExtension({
650
- id: `${SPACE_PLUGIN}/selected-objects`,
660
+ id: `${meta.id}/selected-objects`,
651
661
  connector: (node) =>
652
- Rx.make((get) =>
653
- pipe(
662
+ Atom.make((get) =>
663
+ Function.pipe(
654
664
  get(node),
655
- Option.flatMap((node) => (Obj.instanceOf(DataType.View, node.data) ? Option.some(node) : Option.none())),
665
+ Option.flatMap((node) => {
666
+ if (!Obj.isObject(node.data)) {
667
+ return Option.none();
668
+ }
669
+
670
+ const schema = Obj.getSchema(node.data);
671
+ const isView = Option.fromNullable(schema).pipe(
672
+ Option.flatMap((schema) => ViewAnnotation.get(schema)),
673
+ Option.getOrElse(() => false),
674
+ );
675
+ if (!isView) {
676
+ return Option.none();
677
+ }
678
+
679
+ return Option.some(node);
680
+ }),
656
681
  Option.map((node) => [
657
682
  {
658
683
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
659
684
  type: PLANK_COMPANION_TYPE,
660
685
  data: 'selected-objects',
661
686
  properties: {
662
- label: ['companion selected objects label', { ns: SPACE_PLUGIN }],
687
+ label: ['companion selected objects label', { ns: meta.id }],
663
688
  icon: 'ph--tree-view--regular',
664
689
  disposition: 'hidden',
665
690
  },
@@ -672,10 +697,10 @@ export default (context: PluginContext) => {
672
697
 
673
698
  // Object settings plank companion.
674
699
  createExtension({
675
- id: `${SPACE_PLUGIN}/settings`,
700
+ id: `${meta.id}/settings`,
676
701
  connector: (node) =>
677
- Rx.make((get) =>
678
- pipe(
702
+ Atom.make((get) =>
703
+ Function.pipe(
679
704
  get(node),
680
705
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
681
706
  Option.map((node) => [
@@ -684,7 +709,7 @@ export default (context: PluginContext) => {
684
709
  type: PLANK_COMPANION_TYPE,
685
710
  data: 'settings',
686
711
  properties: {
687
- label: ['object settings label', { ns: SPACE_PLUGIN }],
712
+ label: ['object settings label', { ns: meta.id }],
688
713
  icon: 'ph--sliders--regular',
689
714
  disposition: 'hidden',
690
715
  position: 'fallback',