@dxos/plugin-space 0.8.4-main.406dc2a → 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 (293) hide show
  1. package/dist/lib/browser/{CollectionMain-AX7KKXWP.mjs → CollectionArticle-ABGFK4VO.mjs} +8 -8
  2. package/dist/lib/browser/CollectionArticle-ABGFK4VO.mjs.map +7 -0
  3. package/dist/lib/browser/{ObjectDetailsPanel-MQBHG666.mjs → ObjectDetailsPanel-2BRUBHP6.mjs} +16 -20
  4. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
  5. package/dist/lib/browser/{ObjectSettings-KNUZFCGS.mjs → ObjectSettings-5LLWCVEK.mjs} +33 -40
  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-3R5GGT46.mjs → app-graph-builder-FFPJHWFB.mjs} +53 -45
  10. package/dist/lib/browser/app-graph-builder-FFPJHWFB.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-25Z5BG22.mjs → app-graph-serializer-QMWE2YE4.mjs} +10 -10
  12. package/dist/lib/browser/app-graph-serializer-QMWE2YE4.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-OV6D543A.mjs → chunk-I4W2BHA2.mjs} +36 -30
  14. package/dist/lib/browser/chunk-I4W2BHA2.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-RLI2IAHK.mjs → chunk-K5J7ZB5P.mjs} +2 -2
  16. package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-7XOTWRZ3.mjs → chunk-K6TOP4E6.mjs} +19 -18
  18. package/dist/lib/browser/chunk-K6TOP4E6.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-WS2PJDES.mjs → chunk-M2Z6D4ZI.mjs} +12 -11
  20. package/dist/lib/browser/chunk-M2Z6D4ZI.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-522KZGQF.mjs → chunk-MHXNG2X2.mjs} +487 -381
  22. package/dist/lib/browser/chunk-MHXNG2X2.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-PTGRQQ6J.mjs → chunk-OLBBSOVI.mjs} +23 -13
  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-EIXZABXD.mjs → chunk-WJXU4GKV.mjs} +2 -2
  28. package/dist/lib/browser/{identity-created-PW2BA46S.mjs → identity-created-NAXTPQXE.mjs} +3 -3
  29. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  30. package/dist/lib/browser/index.mjs +63 -46
  31. package/dist/lib/browser/index.mjs.map +3 -3
  32. package/dist/lib/browser/{intent-resolver-ICGUSVH6.mjs → intent-resolver-WLFWCHDH.mjs} +53 -58
  33. package/dist/lib/browser/intent-resolver-WLFWCHDH.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-root-H56QN474.mjs → react-root-BPPTUFLV.mjs} +9 -8
  36. package/dist/lib/browser/react-root-BPPTUFLV.mjs.map +7 -0
  37. package/dist/lib/browser/{react-surface-VOE2ILKO.mjs → react-surface-3KTOA5PM.mjs} +37 -40
  38. package/dist/lib/browser/react-surface-3KTOA5PM.mjs.map +7 -0
  39. package/dist/lib/browser/{schema-defs-7R7RKCAE.mjs → schema-defs-XCNOO2WT.mjs} +3 -3
  40. package/dist/lib/browser/{settings-OBFJ67ZG.mjs → settings-WKLGKUHQ.mjs} +3 -3
  41. package/dist/lib/browser/{spaces-ready-MFIVK6I6.mjs → spaces-ready-XVW7I5MQ.mjs} +12 -11
  42. package/dist/lib/browser/spaces-ready-XVW7I5MQ.mjs.map +7 -0
  43. package/dist/lib/browser/{state-LSPRFIRO.mjs → state-Q7YRE5KG.mjs} +3 -3
  44. package/dist/lib/browser/types/index.mjs +2 -2
  45. package/dist/lib/node-esm/{CollectionMain-EU57SRYK.mjs → CollectionArticle-G3V4QXPI.mjs} +8 -8
  46. package/dist/lib/node-esm/CollectionArticle-G3V4QXPI.mjs.map +7 -0
  47. package/dist/lib/node-esm/{ObjectDetailsPanel-NABA2S56.mjs → ObjectDetailsPanel-6PZQIQG3.mjs} +16 -20
  48. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
  49. package/dist/lib/node-esm/{ObjectSettings-GXGTITF5.mjs → ObjectSettings-OQSBOH7K.mjs} +33 -40
  50. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
  51. package/dist/lib/node-esm/RecordArticle-PBMLYY5K.mjs +117 -0
  52. package/dist/lib/node-esm/RecordArticle-PBMLYY5K.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-builder-VGRMD5TP.mjs → app-graph-builder-3BTVV7LE.mjs} +53 -45
  54. package/dist/lib/node-esm/app-graph-builder-3BTVV7LE.mjs.map +7 -0
  55. package/dist/lib/node-esm/{app-graph-serializer-U4GHXWRG.mjs → app-graph-serializer-BU7KO2G5.mjs} +10 -10
  56. package/dist/lib/node-esm/app-graph-serializer-BU7KO2G5.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-4F25JKVT.mjs → chunk-2PN7QNGV.mjs} +12 -11
  58. package/dist/lib/node-esm/chunk-2PN7QNGV.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  60. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-PAAWJ4RE.mjs → chunk-FAWIRIP4.mjs} +19 -18
  62. package/dist/lib/node-esm/chunk-FAWIRIP4.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs → chunk-H4JILUJK.mjs} +2 -2
  64. package/dist/lib/node-esm/{chunk-TNUWML33.mjs → chunk-HQMFTMJE.mjs} +36 -30
  65. package/dist/lib/node-esm/chunk-HQMFTMJE.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-DG5YEEPZ.mjs → chunk-MI4A5XUX.mjs} +487 -381
  67. package/dist/lib/node-esm/chunk-MI4A5XUX.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-HAKW2RFD.mjs → chunk-WC4VBFMA.mjs} +23 -13
  69. package/dist/lib/node-esm/chunk-WC4VBFMA.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-H5UPFRRH.mjs → chunk-Z7BB6HC2.mjs} +2 -2
  71. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
  72. package/dist/lib/node-esm/{identity-created-MWTLGQRU.mjs → identity-created-OXLKCJE3.mjs} +3 -3
  73. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  74. package/dist/lib/node-esm/index.mjs +63 -46
  75. package/dist/lib/node-esm/index.mjs.map +3 -3
  76. package/dist/lib/node-esm/{intent-resolver-KVB2A4YC.mjs → intent-resolver-QHH5SXLC.mjs} +53 -58
  77. package/dist/lib/node-esm/intent-resolver-QHH5SXLC.mjs.map +7 -0
  78. package/dist/lib/node-esm/meta.json +1 -1
  79. package/dist/lib/node-esm/{react-root-56PGW5PH.mjs → react-root-QRONKFKI.mjs} +9 -8
  80. package/dist/lib/node-esm/react-root-QRONKFKI.mjs.map +7 -0
  81. package/dist/lib/node-esm/{react-surface-NYEQ23A4.mjs → react-surface-OZBWNTW2.mjs} +37 -40
  82. package/dist/lib/node-esm/react-surface-OZBWNTW2.mjs.map +7 -0
  83. package/dist/lib/node-esm/{schema-defs-RYG5DSUE.mjs → schema-defs-5TDB7T5J.mjs} +3 -3
  84. package/dist/lib/node-esm/{settings-QGWWNMMZ.mjs → settings-RBB5633M.mjs} +3 -3
  85. package/dist/lib/node-esm/{spaces-ready-TC27M7MP.mjs → spaces-ready-J6RWPI2X.mjs} +12 -11
  86. package/dist/lib/node-esm/spaces-ready-J6RWPI2X.mjs.map +7 -0
  87. package/dist/lib/node-esm/{state-TCGOPLRO.mjs → state-362I5BMK.mjs} +3 -3
  88. package/dist/lib/node-esm/types/index.mjs +2 -2
  89. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  92. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  97. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  98. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  99. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  100. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  101. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  102. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  103. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +91 -1
  104. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +2 -2
  106. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  107. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  108. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  109. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  110. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  111. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  112. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1697 -0
  113. package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
  114. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  115. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  116. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +2 -2
  117. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -1
  118. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -1
  119. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  120. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  121. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  122. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  123. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +1 -1
  124. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  125. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +91 -1
  126. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  128. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  129. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +92 -2
  130. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  131. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  132. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  133. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  134. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  135. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  136. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +91 -1
  137. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  138. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  139. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  140. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  141. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  142. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  143. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  144. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +91 -1
  146. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  148. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +92 -2
  149. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  151. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  152. package/dist/types/src/components/index.d.ts +9 -16
  153. package/dist/types/src/components/index.d.ts.map +1 -1
  154. package/dist/types/src/helpers/index.d.ts +2 -0
  155. package/dist/types/src/helpers/index.d.ts.map +1 -0
  156. package/dist/types/src/helpers/query.d.ts +8 -0
  157. package/dist/types/src/helpers/query.d.ts.map +1 -0
  158. package/dist/types/src/helpers/query.test.d.ts +2 -0
  159. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  160. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  162. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -1
  163. package/dist/types/src/index.d.ts +1 -0
  164. package/dist/types/src/index.d.ts.map +1 -1
  165. package/dist/types/src/meta.d.ts.map +1 -1
  166. package/dist/types/src/translations.d.ts +91 -1
  167. package/dist/types/src/translations.d.ts.map +1 -1
  168. package/dist/types/src/types/types.d.ts +2 -2
  169. package/dist/types/src/types/types.d.ts.map +1 -1
  170. package/dist/types/src/util.d.ts +6 -4
  171. package/dist/types/src/util.d.ts.map +1 -1
  172. package/dist/types/tsconfig.tsbuildinfo +1 -1
  173. package/package.json +53 -51
  174. package/src/SpacePlugin.ts +49 -25
  175. package/src/capabilities/app-graph-builder.ts +86 -60
  176. package/src/capabilities/app-graph-serializer.ts +5 -5
  177. package/src/capabilities/capabilities.ts +2 -2
  178. package/src/capabilities/identity-created.ts +2 -2
  179. package/src/capabilities/intent-resolver.ts +46 -41
  180. package/src/capabilities/react-root.tsx +2 -1
  181. package/src/capabilities/react-surface.tsx +35 -40
  182. package/src/capabilities/spaces-ready.ts +7 -4
  183. package/src/components/AwaitingObject.tsx +11 -13
  184. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +5 -4
  185. package/src/components/CollectionSection.tsx +6 -4
  186. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +6 -6
  187. package/src/components/CreateDialog/CreateObjectDialog.tsx +29 -22
  188. package/src/components/CreateDialog/CreateObjectPanel.tsx +2 -2
  189. package/src/components/CreateDialog/CreateSpaceDialog.tsx +25 -7
  190. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +21 -5
  191. package/src/components/JoinDialog/index.ts +5 -0
  192. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +1 -1
  193. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +11 -9
  194. package/src/components/MembersContainer/index.ts +5 -0
  195. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +2 -3
  196. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +9 -12
  197. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +5 -5
  198. package/src/components/ObjectRenamePopover/index.ts +5 -0
  199. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +6 -6
  200. package/src/components/ObjectSettings/BaseObjectSettings.tsx +34 -40
  201. package/src/components/ObjectSettings/ForeignKeys.tsx +1 -1
  202. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +1 -1
  203. package/src/components/RecordArticle.stories.tsx +115 -0
  204. package/src/components/RecordArticle.tsx +114 -0
  205. package/src/components/SchemaContainer.tsx +21 -24
  206. package/src/components/SpacePluginSettings.tsx +8 -2
  207. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +1 -1
  208. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +14 -9
  209. package/src/components/SpacePresence/index.ts +5 -0
  210. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +6 -5
  211. package/src/components/SpaceRenamePopover/index.ts +5 -0
  212. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +33 -13
  213. package/src/components/SyncStatus/InlineSyncStatus.tsx +1 -1
  214. package/src/components/SyncStatus/SyncStatus.stories.tsx +3 -2
  215. package/src/components/SyncStatus/SyncStatus.tsx +45 -36
  216. package/src/components/ViewEditor.tsx +51 -17
  217. package/src/components/index.ts +6 -7
  218. package/src/helpers/index.ts +5 -0
  219. package/src/helpers/query.test.ts +24 -0
  220. package/src/helpers/query.ts +158 -0
  221. package/src/hooks/useActiveSpace.ts +2 -1
  222. package/src/hooks/useInputSurfaceLookup.tsx +7 -2
  223. package/src/hooks/useTypeOptions.ts +3 -3
  224. package/src/index.ts +1 -0
  225. package/src/meta.ts +5 -0
  226. package/src/translations.ts +22 -10
  227. package/src/types/types.ts +11 -10
  228. package/src/util.tsx +44 -36
  229. package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +0 -7
  230. package/dist/lib/browser/ObjectDetailsPanel-MQBHG666.mjs.map +0 -7
  231. package/dist/lib/browser/ObjectSettings-KNUZFCGS.mjs.map +0 -7
  232. package/dist/lib/browser/RecordMain-H4DVHICS.mjs +0 -116
  233. package/dist/lib/browser/RecordMain-H4DVHICS.mjs.map +0 -7
  234. package/dist/lib/browser/app-graph-builder-3R5GGT46.mjs.map +0 -7
  235. package/dist/lib/browser/app-graph-serializer-25Z5BG22.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-522KZGQF.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-7XOTWRZ3.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-IRKDREHY.mjs +0 -11
  239. package/dist/lib/browser/chunk-IRKDREHY.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-OV6D543A.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-PTGRQQ6J.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-RLI2IAHK.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-WS2PJDES.mjs.map +0 -7
  244. package/dist/lib/browser/identity-created-PW2BA46S.mjs.map +0 -7
  245. package/dist/lib/browser/intent-resolver-ICGUSVH6.mjs.map +0 -7
  246. package/dist/lib/browser/react-root-H56QN474.mjs.map +0 -7
  247. package/dist/lib/browser/react-surface-VOE2ILKO.mjs.map +0 -7
  248. package/dist/lib/browser/spaces-ready-MFIVK6I6.mjs.map +0 -7
  249. package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +0 -7
  250. package/dist/lib/node-esm/ObjectDetailsPanel-NABA2S56.mjs.map +0 -7
  251. package/dist/lib/node-esm/ObjectSettings-GXGTITF5.mjs.map +0 -7
  252. package/dist/lib/node-esm/RecordMain-MYFTAQ2U.mjs +0 -117
  253. package/dist/lib/node-esm/RecordMain-MYFTAQ2U.mjs.map +0 -7
  254. package/dist/lib/node-esm/app-graph-builder-VGRMD5TP.mjs.map +0 -7
  255. package/dist/lib/node-esm/app-graph-serializer-U4GHXWRG.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-4F25JKVT.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-DG5YEEPZ.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-H5UPFRRH.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-HAKW2RFD.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-MWNATOXL.mjs +0 -13
  261. package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-PAAWJ4RE.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-TNUWML33.mjs.map +0 -7
  264. package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs.map +0 -7
  265. package/dist/lib/node-esm/intent-resolver-KVB2A4YC.mjs.map +0 -7
  266. package/dist/lib/node-esm/react-root-56PGW5PH.mjs.map +0 -7
  267. package/dist/lib/node-esm/react-surface-NYEQ23A4.mjs.map +0 -7
  268. package/dist/lib/node-esm/spaces-ready-TC27M7MP.mjs.map +0 -7
  269. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  270. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  271. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  272. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  273. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  274. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  275. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  276. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  277. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  278. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  279. package/dist/types/src/components/RecordMain.d.ts +0 -7
  280. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  281. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  282. package/src/components/PersistenceStatus.tsx +0 -83
  283. package/src/components/RecordMain.tsx +0 -87
  284. /package/dist/lib/browser/{chunk-EIXZABXD.mjs.map → chunk-WJXU4GKV.mjs.map} +0 -0
  285. /package/dist/lib/browser/{schema-defs-7R7RKCAE.mjs.map → schema-defs-XCNOO2WT.mjs.map} +0 -0
  286. /package/dist/lib/browser/{settings-OBFJ67ZG.mjs.map → settings-WKLGKUHQ.mjs.map} +0 -0
  287. /package/dist/lib/browser/{state-LSPRFIRO.mjs.map → state-Q7YRE5KG.mjs.map} +0 -0
  288. /package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs.map → chunk-H4JILUJK.mjs.map} +0 -0
  289. /package/dist/lib/node-esm/{schema-defs-RYG5DSUE.mjs.map → schema-defs-5TDB7T5J.mjs.map} +0 -0
  290. /package/dist/lib/node-esm/{settings-QGWWNMMZ.mjs.map → settings-RBB5633M.mjs.map} +0 -0
  291. /package/dist/lib/node-esm/{state-TCGOPLRO.mjs.map → state-362I5BMK.mjs.map} +0 -0
  292. /package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +0 -0
  293. /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
@@ -2,20 +2,20 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
5
+ import { Atom } from '@effect-atom/atom-react';
6
6
  import * as Array from 'effect/Array';
7
7
  import * as Function from 'effect/Function';
8
8
  import * as Option from 'effect/Option';
9
9
  import * as Schema from 'effect/Schema';
10
10
 
11
11
  import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
12
- import { type QueryResult, type Space, SpaceState, getSpace, isSpace, parseId } from '@dxos/client/echo';
13
- import { Filter, Obj, Query, Type } from '@dxos/echo';
12
+ import { type QueryResult, type Space, SpaceState, getSpace, isSpace } from '@dxos/client/echo';
13
+ import { DXN, Filter, Obj, Query, Type } from '@dxos/echo';
14
14
  import { log } from '@dxos/log';
15
15
  import { ClientCapabilities } from '@dxos/plugin-client';
16
16
  import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
17
17
  import { ROOT_ID, createExtension, rxFromObservable, rxFromSignal } from '@dxos/plugin-graph';
18
- import { DataType, getTypenameFromQuery } from '@dxos/schema';
18
+ import { Collection, StoredSchema, View, getTypenameFromQuery } from '@dxos/schema';
19
19
  import { isNonNullable } from '@dxos/util';
20
20
 
21
21
  import { getActiveSpace } from '../hooks';
@@ -36,9 +36,8 @@ import {
36
36
  import { SpaceCapabilities } from './capabilities';
37
37
 
38
38
  export default (context: PluginContext) => {
39
- // TODO(wittjosiah): Make reactive.
40
- const resolve = (typename: string) =>
41
- 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 ?? {};
42
41
 
43
42
  const spacesNode = {
44
43
  id: SPACES,
@@ -83,7 +82,7 @@ export default (context: PluginContext) => {
83
82
  id: `${meta.id}/primary-actions`,
84
83
  position: 'hoist',
85
84
  actions: (node) =>
86
- Rx.make((get) =>
85
+ Atom.make((get) =>
87
86
  Function.pipe(
88
87
  get(node),
89
88
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
@@ -160,7 +159,7 @@ export default (context: PluginContext) => {
160
159
  id: `${meta.id}/root`,
161
160
  position: 'hoist',
162
161
  connector: (node) =>
163
- Rx.make((get) =>
162
+ Atom.make((get) =>
164
163
  Function.pipe(
165
164
  get(node),
166
165
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
@@ -176,7 +175,7 @@ export default (context: PluginContext) => {
176
175
  id: SPACES,
177
176
  connector: (node) => {
178
177
  let query: QueryResult<Type.Expando> | undefined;
179
- return Rx.make((get) =>
178
+ return Atom.make((get) =>
180
179
  Function.pipe(
181
180
  get(node),
182
181
  Option.flatMap((node) => (node.id === SPACES ? Option.some(node) : Option.none())),
@@ -222,7 +221,7 @@ export default (context: PluginContext) => {
222
221
  navigable: state.navigableCollections,
223
222
  personal: space === client.spaces.default,
224
223
  namesCache: state.spaceNames,
225
- resolve,
224
+ resolve: resolve(get),
226
225
  }),
227
226
  );
228
227
  }),
@@ -281,7 +280,7 @@ export default (context: PluginContext) => {
281
280
  createExtension({
282
281
  id: `${meta.id}/actions`,
283
282
  actions: (node) =>
284
- Rx.make((get) =>
283
+ Atom.make((get) =>
285
284
  Function.pipe(
286
285
  get(node),
287
286
  Option.flatMap((node) =>
@@ -313,7 +312,7 @@ export default (context: PluginContext) => {
313
312
  createExtension({
314
313
  id: `${meta.id}/root-collection`,
315
314
  connector: (node) =>
316
- Rx.make((get) =>
315
+ Atom.make((get) =>
317
316
  Function.pipe(
318
317
  get(node),
319
318
  Option.flatMap((node) =>
@@ -328,7 +327,7 @@ export default (context: PluginContext) => {
328
327
 
329
328
  const collection = get(
330
329
  rxFromSignal(
331
- () => space.properties[DataType.Collection.typename]?.target as DataType.Collection | undefined,
330
+ () => space.properties[Collection.Collection.typename]?.target as Collection.Collection | undefined,
332
331
  ),
333
332
  );
334
333
  if (!collection) {
@@ -345,7 +344,7 @@ export default (context: PluginContext) => {
345
344
  createObjectNode({
346
345
  space,
347
346
  object,
348
- resolve,
347
+ resolve: resolve(get),
349
348
  navigable: state.navigableCollections,
350
349
  }),
351
350
  ),
@@ -363,11 +362,11 @@ export default (context: PluginContext) => {
363
362
  createExtension({
364
363
  id: `${meta.id}/objects`,
365
364
  connector: (node) =>
366
- Rx.make((get) =>
365
+ Atom.make((get) =>
367
366
  Function.pipe(
368
367
  get(node),
369
368
  Option.flatMap((node) =>
370
- 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(),
371
370
  ),
372
371
  Option.map((collection) => {
373
372
  const state = context.getCapability(SpaceCapabilities.State);
@@ -381,7 +380,13 @@ export default (context: PluginContext) => {
381
380
  Array.filter(isNonNullable),
382
381
  Array.map(
383
382
  (object) =>
384
- 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
+ }),
385
390
  ),
386
391
  Array.filter(isNonNullable),
387
392
  ),
@@ -435,11 +440,11 @@ export default (context: PluginContext) => {
435
440
  id: `${meta.id}/query-collection-objects`,
436
441
  connector: (node) => {
437
442
  let query: QueryResult<Type.Expando> | undefined;
438
- return Rx.make((get) =>
443
+ return Atom.make((get) =>
439
444
  Function.pipe(
440
445
  get(node),
441
446
  Option.flatMap((node) =>
442
- 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(),
443
448
  ),
444
449
  Option.flatMap((collection) => {
445
450
  const space = getSpace(collection);
@@ -456,7 +461,7 @@ export default (context: PluginContext) => {
456
461
  // It will return all objects in the collection, not just the ones of the given type.
457
462
  // However this works fine for now because this query is only used for exclusions.
458
463
  Query.select(Filter.typename(typename))
459
- .referencedBy(DataType.Collection, 'objects')
464
+ .referencedBy(Collection.Collection, 'objects')
460
465
  .reference('objects'),
461
466
  ),
462
467
  );
@@ -471,7 +476,7 @@ export default (context: PluginContext) => {
471
476
  createObjectNode({
472
477
  object,
473
478
  space,
474
- resolve,
479
+ resolve: resolve(get),
475
480
  droppable: false, // Cannot rearrange query collections.
476
481
  navigable: state.navigableCollections,
477
482
  }),
@@ -492,12 +497,12 @@ export default (context: PluginContext) => {
492
497
  id: `${meta.id}/static-schemas`,
493
498
  connector: (node) => {
494
499
  const client = context.getCapability(ClientCapabilities.Client);
495
- return Rx.make((get) =>
500
+ return Atom.make((get) =>
496
501
  Function.pipe(
497
502
  get(node),
498
503
  Option.flatMap((node) =>
499
- Obj.instanceOf(DataType.QueryCollection, node.data) &&
500
- getTypenameFromQuery(node.data.query) === DataType.StoredSchema.typename
504
+ Obj.instanceOf(Collection.QueryCollection, node.data) &&
505
+ getTypenameFromQuery(node.data.query) === StoredSchema.typename
501
506
  ? Option.some(node.data)
502
507
  : Option.none(),
503
508
  ),
@@ -523,8 +528,8 @@ export default (context: PluginContext) => {
523
528
  createExtension({
524
529
  id: `${meta.id}/static-schema-actions`,
525
530
  actions: (node) => {
526
- let query: QueryResult<DataType.View> | undefined;
527
- return Rx.make((get) =>
531
+ let query: QueryResult<View.View> | undefined;
532
+ return Atom.make((get) =>
528
533
  Function.pipe(
529
534
  get(node),
530
535
  Option.flatMap((node) => {
@@ -534,7 +539,7 @@ export default (context: PluginContext) => {
534
539
  Option.map(({ space, schema }) => {
535
540
  if (!query) {
536
541
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
537
- query = space.db.query(Filter.type(DataType.View));
542
+ query = space.db.query(Filter.type(View.View));
538
543
  }
539
544
 
540
545
  const views = get(rxFromQuery(query));
@@ -571,39 +576,55 @@ export default (context: PluginContext) => {
571
576
  createExtension({
572
577
  id: `${meta.id}/schema-views`,
573
578
  connector: (node) => {
574
- let query: QueryResult<DataType.View> | undefined;
575
- return Rx.make((get) =>
579
+ let query: QueryResult<View.View> | undefined;
580
+ return Atom.make((get) =>
576
581
  Function.pipe(
577
582
  get(node),
578
583
  Option.flatMap((node) => {
579
584
  const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);
580
- return space && (Obj.instanceOf(DataType.StoredSchema, node.data) || Schema.isSchema(node.data))
585
+ return space && (Obj.instanceOf(StoredSchema, node.data) || Schema.isSchema(node.data))
581
586
  ? Option.some({ space, schema: node.data })
582
587
  : Option.none();
583
588
  }),
584
589
  Option.map(({ space, schema }) => {
585
590
  if (!query) {
586
591
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
587
- query = space.db.query(Filter.type(DataType.View));
592
+ query = space.db.query(Filter.type(View.View));
588
593
  }
589
594
 
590
595
  // TODO(wittjosiah): Remove cast.
591
596
  const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;
592
- return get(rxFromQuery(query))
593
- .filter((view) => getTypenameFromQuery(view.query.ast) === typename)
594
- .map((view) =>
595
- get(
596
- rxFromSignal(() =>
597
- createObjectNode({
598
- object: view,
599
- space,
600
- resolve,
601
- 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
+ }
602
611
  }),
603
612
  ),
604
- ),
605
- )
606
- .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
+ );
607
628
  }),
608
629
  Option.getOrElse(() => []),
609
630
  ),
@@ -616,20 +637,20 @@ export default (context: PluginContext) => {
616
637
  id: `${meta.id}/records`,
617
638
  resolver: (id) => {
618
639
  let query: QueryResult<Type.Expando> | undefined;
619
- return Rx.make((get) => {
640
+ return Atom.make((get) => {
620
641
  const client = context.getCapability(ClientCapabilities.Client);
621
- const { spaceId, objectId } = parseId(id);
622
- if (!spaceId || !objectId) {
642
+ const dxn = DXN.tryParse(id)?.asEchoDXN();
643
+ if (!dxn || !dxn.spaceId) {
623
644
  return null;
624
645
  }
625
646
 
626
- const space = client.spaces.get(spaceId);
647
+ const space = client.spaces.get(dxn.spaceId);
627
648
  if (!space) {
628
649
  return null;
629
650
  }
630
651
 
631
652
  if (!query) {
632
- query = space.db.query(Filter.ids(objectId));
653
+ query = space.db.query(Filter.ids(dxn.echoId));
633
654
  }
634
655
 
635
656
  const object = get(rxFromQuery(query)).at(0);
@@ -637,7 +658,12 @@ export default (context: PluginContext) => {
637
658
  return null;
638
659
  }
639
660
 
640
- return createObjectNode({ object, space, resolve, disposition: 'hidden' });
661
+ return createObjectNode({
662
+ object,
663
+ space,
664
+ resolve: resolve(get),
665
+ disposition: 'hidden',
666
+ });
641
667
  });
642
668
  },
643
669
  }),
@@ -646,8 +672,8 @@ export default (context: PluginContext) => {
646
672
  createExtension({
647
673
  id: `${meta.id}/object-actions`,
648
674
  actions: (node) => {
649
- let query: QueryResult<DataType.View> | undefined;
650
- return Rx.make((get) =>
675
+ let query: QueryResult<View.View> | undefined;
676
+ return Atom.make((get) =>
651
677
  Function.pipe(
652
678
  get(node),
653
679
  Option.flatMap((node) => {
@@ -657,18 +683,18 @@ export default (context: PluginContext) => {
657
683
  : Option.none();
658
684
  }),
659
685
  Option.flatMap(({ space, object }) => {
660
- const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
686
+ const isSchema = Obj.instanceOf(StoredSchema, object);
661
687
  if (!query && isSchema) {
662
688
  // TODO(wittjosiah): Support filtering by nested properties (e.g. `query.typename`).
663
- query = space.db.query(Filter.type(DataType.View));
689
+ query = space.db.query(Filter.type(View.View));
664
690
  }
665
691
 
666
692
  let deletable =
667
693
  !isSchema &&
668
694
  // Don't allow the Records smart collection to be deleted.
669
695
  !(
670
- Obj.instanceOf(DataType.QueryCollection, object) &&
671
- getTypenameFromQuery(object.query) === DataType.StoredSchema.typename
696
+ Obj.instanceOf(Collection.QueryCollection, object) &&
697
+ getTypenameFromQuery(object.query) === StoredSchema.typename
672
698
  );
673
699
  if (isSchema && query) {
674
700
  const views = get(rxFromQuery(query));
@@ -707,10 +733,10 @@ export default (context: PluginContext) => {
707
733
  createExtension({
708
734
  id: `${meta.id}/selected-objects`,
709
735
  connector: (node) =>
710
- Rx.make((get) =>
736
+ Atom.make((get) =>
711
737
  Function.pipe(
712
738
  get(node),
713
- 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())),
714
740
  Option.map((node) => [
715
741
  {
716
742
  id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),
@@ -732,7 +758,7 @@ export default (context: PluginContext) => {
732
758
  createExtension({
733
759
  id: `${meta.id}/settings`,
734
760
  connector: (node) =>
735
- Rx.make((get) =>
761
+ Atom.make((get) =>
736
762
  Function.pipe(
737
763
  get(node),
738
764
  Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
@@ -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
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';
@@ -56,7 +56,7 @@ export default (context: PluginContext) =>
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
 
@@ -6,7 +6,7 @@ import type * as Schema from 'effect/Schema';
6
6
 
7
7
  import { type AnyIntentChain, type Label, defineCapability } from '@dxos/app-framework';
8
8
  import { type Space } from '@dxos/react-client/echo';
9
- import { type DataType } from '@dxos/schema';
9
+ import { type Collection } from '@dxos/schema';
10
10
  import { type DeepReadonly, type Position } from '@dxos/util';
11
11
 
12
12
  import { meta } from '../meta';
@@ -19,7 +19,7 @@ export namespace SpaceCapabilities {
19
19
  export type SettingsSection = { id: string; label: Label; position?: Position };
20
20
  export const SettingsSection = defineCapability<SettingsSection>(`${meta.id}/capability/settings-section`);
21
21
 
22
- export type onCreateSpace = (params: { space: Space; rootCollection: DataType.Collection }) => AnyIntentChain;
22
+ export type onCreateSpace = (params: { space: Space; rootCollection: Collection.Collection }) => AnyIntentChain;
23
23
  export const onCreateSpace = defineCapability<onCreateSpace>(`${meta.id}/capability/on-space-created`);
24
24
 
25
25
  export type OnSchemaAdded = (params: {
@@ -6,7 +6,7 @@ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framewo
6
6
  import { Obj, Ref } from '@dxos/echo';
7
7
  import { Migrations } from '@dxos/migrations';
8
8
  import { ClientCapabilities } from '@dxos/plugin-client';
9
- import { DataType } from '@dxos/schema';
9
+ import { Collection } from '@dxos/schema';
10
10
 
11
11
  export default async (context: PluginContext) => {
12
12
  const client = context.getCapability(ClientCapabilities.Client);
@@ -16,7 +16,7 @@ export default async (context: PluginContext) => {
16
16
  await defaultSpace.waitUntilReady();
17
17
 
18
18
  // Create root collection structure.
19
- defaultSpace.properties[DataType.Collection.typename] = Ref.make(Obj.make(DataType.Collection, { objects: [] }));
19
+ defaultSpace.properties[Collection.Collection.typename] = Ref.make(Obj.make(Collection.Collection, { objects: [] }));
20
20
  if (Migrations.versionProperty) {
21
21
  defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;
22
22
  }
@@ -13,15 +13,18 @@ import {
13
13
  createResolver,
14
14
  } from '@dxos/app-framework';
15
15
  import { Filter, Obj, Query, Ref, Relation, Type } from '@dxos/echo';
16
+ import { DatabaseService } from '@dxos/functions';
16
17
  import { invariant } from '@dxos/invariant';
17
18
  import { Migrations } from '@dxos/migrations';
18
19
  import { ClientCapabilities } from '@dxos/plugin-client';
19
20
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
20
21
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
21
- import { SpaceState, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';
22
+ import { SpaceState, getSpace, isSpace } from '@dxos/react-client/echo';
22
23
  import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
23
24
  import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
24
- import { DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';
25
+ import { iconValues } from '@dxos/react-ui-pickers';
26
+ import { hues } from '@dxos/react-ui-theme';
27
+ import { Collection, ProjectionModel, StoredSchema, getTypenameFromQuery } from '@dxos/schema';
25
28
 
26
29
  import {
27
30
  CREATE_OBJECT_DIALOG,
@@ -29,8 +32,8 @@ import {
29
32
  type CreateObjectDialogProps,
30
33
  JOIN_DIALOG,
31
34
  type JoinDialogProps,
32
- POPOVER_RENAME_OBJECT,
33
- POPOVER_RENAME_SPACE,
35
+ OBJECT_RENAME_POPOVER,
36
+ SPACE_RENAME_POPOVER,
34
37
  } from '../components';
35
38
  import { SpaceEvents } from '../events';
36
39
  import { meta } from '../meta';
@@ -69,8 +72,10 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
69
72
  }),
70
73
  createResolver({
71
74
  intent: SpaceAction.Create,
72
- resolve: async ({ name, hue, icon, edgeReplication }) => {
75
+ resolve: async ({ name, hue: hue_, icon: icon_, edgeReplication }) => {
73
76
  const client = context.getCapability(ClientCapabilities.Client);
77
+ const hue = hue_ ?? hues[Math.floor(Math.random() * hues.length)];
78
+ const icon = icon_ ?? iconValues[Math.floor(Math.random() * iconValues.length)];
74
79
  const space = await client.spaces.create({ name, hue, icon });
75
80
  if (edgeReplication) {
76
81
  await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);
@@ -78,8 +83,8 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
78
83
  await space.waitUntilReady();
79
84
 
80
85
  // Create root collection.
81
- const collection = Obj.make(DataType.Collection, { objects: [] });
82
- space.properties[DataType.Collection.typename] = Ref.make(collection);
86
+ const collection = Obj.make(Collection.Collection, { objects: [] });
87
+ space.properties[Collection.Collection.typename] = Ref.make(collection);
83
88
 
84
89
  // Set current migration version.
85
90
  if (Migrations.versionProperty) {
@@ -87,10 +92,14 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
87
92
  }
88
93
 
89
94
  // Create records smart collection.
90
- const records = Obj.make(DataType.QueryCollection, {
91
- query: Query.select(Filter.type(DataType.StoredSchema)).ast,
92
- });
93
- collection.objects.push(Ref.make(records));
95
+ collection.objects.push(
96
+ Ref.make(
97
+ Obj.make(Collection.QueryCollection, {
98
+ // NOTE: This is specifically Filter.typename due to current limitations in query collection parsing.
99
+ query: Query.select(Filter.typename(StoredSchema.typename)).ast,
100
+ }),
101
+ ),
102
+ );
94
103
 
95
104
  // Allow other plugins to add default content.
96
105
  await context.activatePromise(SpaceEvents.SpaceCreated);
@@ -254,7 +263,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
254
263
  intents: [
255
264
  createIntent(LayoutAction.UpdatePopover, {
256
265
  part: 'popover',
257
- subject: POPOVER_RENAME_SPACE,
266
+ subject: SPACE_RENAME_POPOVER,
258
267
  options: {
259
268
  anchorId: `dxos.org/ui/${caller}/${space.id}`,
260
269
  props: space,
@@ -445,8 +454,8 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
445
454
  onCreateObject,
446
455
  shouldNavigate: navigable
447
456
  ? (object: Obj.Any) => {
448
- const isCollection = Obj.instanceOf(DataType.Collection, object);
449
- const isQueryCollection = Obj.instanceOf(DataType.QueryCollection, object);
457
+ const isCollection = Obj.instanceOf(Collection.Collection, object);
458
+ const isQueryCollection = Obj.instanceOf(Collection.QueryCollection, object);
450
459
  return (!isCollection && !isQueryCollection) || state.navigableCollections;
451
460
  }
452
461
  : () => false,
@@ -495,25 +504,18 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
495
504
  };
496
505
  }
497
506
 
498
- if (Obj.instanceOf(DataType.Collection, target)) {
499
- target.objects.push(Ref.make(object));
500
- } else if (isSpace(target) && hidden) {
501
- space.db.add(object);
502
- } else if (isSpace(target)) {
503
- const collection = space.properties[DataType.Collection.typename]?.target;
504
- if (Obj.instanceOf(DataType.Collection, collection)) {
505
- collection.objects.push(Ref.make(object));
506
- } else {
507
- // TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.
508
- const collection = Obj.make(DataType.Collection, { objects: [Ref.make(object)] });
509
- space.properties[DataType.Collection.typename] = Ref.make(collection);
510
- }
511
- }
507
+ await Effect.gen(function* () {
508
+ yield* Collection.add({
509
+ object,
510
+ target: isSpace(target) ? undefined : target,
511
+ hidden,
512
+ });
513
+ }).pipe(Effect.provide(DatabaseService.layer(space.db)), Effect.runPromise);
512
514
 
513
515
  return {
514
516
  data: {
515
- id: fullyQualifiedId(object),
516
- subject: [fullyQualifiedId(object)],
517
+ id: Obj.getDXN(object).toString(),
518
+ subject: [Obj.getDXN(object).toString()],
517
519
  object,
518
520
  },
519
521
  intents: [
@@ -562,26 +564,26 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
562
564
  const openObjectIds = new Set<string>(layout.active);
563
565
 
564
566
  if (!undo) {
565
- const parentCollection: DataType.Collection =
566
- target ?? space.properties[DataType.Collection.typename]?.target;
567
+ const parentCollection: Collection.Collection =
568
+ target ?? space.properties[Collection.Collection.typename]?.target;
567
569
  const nestedObjectsList = await Promise.all(objects.map((obj) => getNestedObjects(obj, resolve)));
568
570
 
569
571
  const deletionData = {
570
572
  objects,
571
573
  parentCollection,
572
574
  indices: objects.map((obj) =>
573
- Obj.instanceOf(DataType.Collection, parentCollection)
575
+ Obj.instanceOf(Collection.Collection, parentCollection)
574
576
  ? parentCollection.objects.findIndex((object) => object.target === obj)
575
577
  : -1,
576
578
  ),
577
579
  nestedObjectsList,
578
580
  wasActive: objects
579
581
  .flatMap((obj, i) => [obj, ...nestedObjectsList[i]])
580
- .map((obj) => fullyQualifiedId(obj))
582
+ .map((obj) => Obj.getDXN(obj).toString())
581
583
  .filter((id) => openObjectIds.has(id)),
582
584
  } satisfies SpaceAction.DeletionData;
583
585
 
584
- if (Obj.instanceOf(DataType.Collection, deletionData.parentCollection)) {
586
+ if (Obj.instanceOf(Collection.Collection, deletionData.parentCollection)) {
585
587
  [...deletionData.indices]
586
588
  .sort((a, b) => b - a)
587
589
  .forEach((index: number) => {
@@ -596,7 +598,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
596
598
  });
597
599
  objects.forEach((obj) => space.db.remove(obj));
598
600
 
599
- const undoMessageKey = objects.some((obj) => Obj.instanceOf(DataType.Collection, obj))
601
+ const undoMessageKey = objects.some((obj) => Obj.instanceOf(Collection.Collection, obj))
600
602
  ? 'collection deleted label'
601
603
  : objects.length > 1
602
604
  ? 'objects deleted label'
@@ -623,7 +625,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
623
625
  if (
624
626
  deletionData?.objects?.length &&
625
627
  deletionData.objects.every(Obj.isObject) &&
626
- Obj.instanceOf(DataType.Collection, deletionData.parentCollection)
628
+ Obj.instanceOf(Collection.Collection, deletionData.parentCollection)
627
629
  ) {
628
630
  // Restore the object to the space.
629
631
  const restoredObjects = deletionData.objects.map((obj: Type.Expando) => space.db.add(obj));
@@ -660,9 +662,9 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
660
662
  intents: [
661
663
  createIntent(LayoutAction.UpdatePopover, {
662
664
  part: 'popover',
663
- subject: POPOVER_RENAME_OBJECT,
665
+ subject: OBJECT_RENAME_POPOVER,
664
666
  options: {
665
- anchorId: `dxos.org/ui/${caller}/${fullyQualifiedId(object)}`,
667
+ anchorId: `dxos.org/ui/${caller}/${Obj.getDXN(object).toString()}`,
666
668
  props: object,
667
669
  },
668
670
  }),
@@ -691,14 +693,17 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
691
693
  createResolver({
692
694
  intent: CollectionAction.Create,
693
695
  resolve: async ({ name }) => ({
694
- data: { object: Obj.make(DataType.Collection, { name, objects: [] }) },
696
+ data: { object: Obj.make(Collection.Collection, { name, objects: [] }) },
695
697
  }),
696
698
  }),
697
699
  createResolver({
698
700
  intent: CollectionAction.CreateQueryCollection,
699
701
  resolve: async ({ name, typename }) => ({
700
702
  data: {
701
- object: Obj.make(DataType.QueryCollection, { name, query: Query.select(Filter.typename(typename)).ast }),
703
+ object: Obj.make(Collection.QueryCollection, {
704
+ name,
705
+ query: Query.select(Filter.typename(typename)).ast,
706
+ }),
702
707
  },
703
708
  }),
704
709
  }),
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Capabilities, contributes, useCapability } from '@dxos/app-framework';
7
+ import { Capabilities, contributes } from '@dxos/app-framework';
8
+ import { useCapability } from '@dxos/app-framework/react';
8
9
 
9
10
  import { AwaitingObject } from '../components';
10
11
  import { meta } from '../meta';