@dxos/plugin-space 0.8.4-main.3f58842 → 0.8.4-main.548089c

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