@dxos/plugin-space 0.8.3-main.672df60 → 0.8.3-staging.0fa589b

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 (237) hide show
  1. package/dist/lib/browser/{app-graph-builder-DCWUULKX.mjs → app-graph-builder-M2RH72VL.mjs} +49 -14
  2. package/dist/lib/browser/app-graph-builder-M2RH72VL.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-MLU7XI2P.mjs → app-graph-serializer-F7ISRRBV.mjs} +13 -13
  4. package/dist/lib/browser/app-graph-serializer-F7ISRRBV.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-VEBKN45O.mjs → chunk-4ZKSFDXM.mjs} +29 -17
  6. package/dist/lib/browser/chunk-4ZKSFDXM.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-3LN4LJN6.mjs → chunk-BXNL6SDI.mjs} +2 -1
  8. package/dist/lib/browser/chunk-BXNL6SDI.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-ZQEIXWBK.mjs → chunk-NFUKCRGE.mjs} +157 -141
  10. package/dist/lib/browser/chunk-NFUKCRGE.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-TW7O2EPP.mjs +284 -0
  12. package/dist/lib/browser/chunk-TW7O2EPP.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-N5QMRLKI.mjs → chunk-V24VASAJ.mjs} +112 -43
  14. package/dist/lib/browser/chunk-V24VASAJ.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-YMCZR6EZ.mjs +18 -0
  16. package/dist/lib/browser/chunk-YMCZR6EZ.mjs.map +7 -0
  17. package/dist/lib/browser/{identity-created-O63SIYOF.mjs → identity-created-PI7TKANR.mjs} +5 -10
  18. package/dist/lib/browser/identity-created-PI7TKANR.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +61 -51
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/{intent-resolver-PG473BRV.mjs → intent-resolver-RWU6ZE4H.mjs} +66 -45
  22. package/dist/lib/browser/intent-resolver-RWU6ZE4H.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/{react-root-FRDC4UXB.mjs → react-root-QIKHSNT2.mjs} +5 -5
  25. package/dist/lib/browser/{react-surface-QOP7T66K.mjs → react-surface-W56UD53I.mjs} +79 -19
  26. package/dist/lib/browser/react-surface-W56UD53I.mjs.map +7 -0
  27. package/dist/lib/browser/{schema-defs-JMN74RNK.mjs → schema-defs-WREJNMIC.mjs} +2 -2
  28. package/dist/lib/browser/{schema-tools-JIEMHUXV.mjs → schema-tools-ILTVSSS3.mjs} +7 -6
  29. package/dist/lib/browser/schema-tools-ILTVSSS3.mjs.map +7 -0
  30. package/dist/lib/browser/{settings-2IN2WLUK.mjs → settings-K54STC5A.mjs} +4 -4
  31. package/dist/lib/browser/settings-K54STC5A.mjs.map +7 -0
  32. package/dist/lib/browser/{spaces-ready-L4QAGTDE.mjs → spaces-ready-3PDRDHPC.mjs} +12 -13
  33. package/dist/lib/browser/spaces-ready-3PDRDHPC.mjs.map +7 -0
  34. package/dist/lib/browser/{state-6HOSHLIN.mjs → state-HRZ4VRXU.mjs} +2 -2
  35. package/dist/lib/browser/types/index.mjs +1 -3
  36. package/dist/lib/node/{app-graph-builder-WC445X77.cjs → app-graph-builder-6LK5HLLE.cjs} +79 -43
  37. package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs.map +7 -0
  38. package/dist/lib/node/{app-graph-serializer-UPQOQVMJ.cjs → app-graph-serializer-HKHBNHA3.cjs} +24 -23
  39. package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs.map +7 -0
  40. package/dist/lib/node/chunk-3X4EA4XL.cjs +37 -0
  41. package/dist/lib/node/chunk-3X4EA4XL.cjs.map +7 -0
  42. package/dist/lib/node/{chunk-DXL5TDFP.cjs → chunk-DOC5XEZ4.cjs} +32 -18
  43. package/dist/lib/node/chunk-DOC5XEZ4.cjs.map +7 -0
  44. package/dist/lib/node/{chunk-USFHJG7C.cjs → chunk-NCHF433F.cjs} +207 -190
  45. package/dist/lib/node/chunk-NCHF433F.cjs.map +7 -0
  46. package/dist/lib/node/{chunk-7GQGM4ZF.cjs → chunk-NL5Y4EDX.cjs} +5 -4
  47. package/dist/lib/node/chunk-NL5Y4EDX.cjs.map +7 -0
  48. package/dist/lib/node/chunk-ULJZPATP.cjs +312 -0
  49. package/dist/lib/node/chunk-ULJZPATP.cjs.map +7 -0
  50. package/dist/lib/node/{chunk-COQYISES.cjs → chunk-XHWVT7LW.cjs} +137 -67
  51. package/dist/lib/node/chunk-XHWVT7LW.cjs.map +7 -0
  52. package/dist/lib/node/{identity-created-UXEAUGC7.cjs → identity-created-FF4WZ2WY.cjs} +8 -10
  53. package/dist/lib/node/identity-created-FF4WZ2WY.cjs.map +7 -0
  54. package/dist/lib/node/index.cjs +130 -119
  55. package/dist/lib/node/index.cjs.map +4 -4
  56. package/dist/lib/node/{intent-resolver-VPVZSSIL.cjs → intent-resolver-AV4CMM3Z.cjs} +99 -79
  57. package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs.map +7 -0
  58. package/dist/lib/node/meta.json +1 -1
  59. package/dist/lib/node/{react-root-JXLRINF3.cjs → react-root-RQUU3A45.cjs} +10 -10
  60. package/dist/lib/node/{react-surface-ZIYDBL3C.cjs → react-surface-AZFJLE72.cjs} +119 -58
  61. package/dist/lib/node/react-surface-AZFJLE72.cjs.map +7 -0
  62. package/dist/lib/node/{schema-defs-XLFBG3XK.cjs → schema-defs-OB2X2HBH.cjs} +6 -6
  63. package/dist/lib/node/{schema-tools-ZG6Z2QRC.cjs → schema-tools-IYREN4IH.cjs} +9 -8
  64. package/dist/lib/node/schema-tools-IYREN4IH.cjs.map +7 -0
  65. package/dist/lib/node/{settings-FOH7EB5C.cjs → settings-P2EQ7VKQ.cjs} +7 -7
  66. package/dist/lib/node/settings-P2EQ7VKQ.cjs.map +7 -0
  67. package/dist/lib/node/{spaces-ready-VXQYCBII.cjs → spaces-ready-DXPOHYV7.cjs} +26 -27
  68. package/dist/lib/node/spaces-ready-DXPOHYV7.cjs.map +7 -0
  69. package/dist/lib/node/{state-ZT3MTZXB.cjs → state-M35DK75Z.cjs} +6 -6
  70. package/dist/lib/node/types/index.cjs +11 -13
  71. package/dist/lib/node/types/index.cjs.map +2 -2
  72. package/dist/lib/node-esm/{app-graph-builder-E7CCGPQJ.mjs → app-graph-builder-BCHVZ4OM.mjs} +49 -14
  73. package/dist/lib/node-esm/app-graph-builder-BCHVZ4OM.mjs.map +7 -0
  74. package/dist/lib/node-esm/{app-graph-serializer-UCMSLPIA.mjs → app-graph-serializer-TXRGGNP2.mjs} +13 -13
  75. package/dist/lib/node-esm/app-graph-serializer-TXRGGNP2.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-3CP67AYY.mjs +19 -0
  77. package/dist/lib/node-esm/chunk-3CP67AYY.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-4X4Y63ND.mjs → chunk-BSLREHIX.mjs} +2 -1
  79. package/dist/lib/node-esm/chunk-BSLREHIX.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-D4QMPPS7.mjs +285 -0
  81. package/dist/lib/node-esm/chunk-D4QMPPS7.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-XAZNQ3QN.mjs → chunk-HO7AIKQS.mjs} +112 -43
  83. package/dist/lib/node-esm/chunk-HO7AIKQS.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-OSPEGYX3.mjs → chunk-JBQKU4K5.mjs} +29 -17
  85. package/dist/lib/node-esm/chunk-JBQKU4K5.mjs.map +7 -0
  86. package/dist/lib/node-esm/{chunk-BE2BLE7K.mjs → chunk-LA6AVVH6.mjs} +157 -141
  87. package/dist/lib/node-esm/chunk-LA6AVVH6.mjs.map +7 -0
  88. package/dist/lib/node-esm/{identity-created-ZECO4NH3.mjs → identity-created-35CTAQWI.mjs} +5 -9
  89. package/dist/lib/node-esm/identity-created-35CTAQWI.mjs.map +7 -0
  90. package/dist/lib/node-esm/index.mjs +61 -51
  91. package/dist/lib/node-esm/index.mjs.map +4 -4
  92. package/dist/lib/node-esm/{intent-resolver-SK5LP5ZK.mjs → intent-resolver-JO6L2VXC.mjs} +66 -45
  93. package/dist/lib/node-esm/intent-resolver-JO6L2VXC.mjs.map +7 -0
  94. package/dist/lib/node-esm/meta.json +1 -1
  95. package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs → react-root-YFGL3B4J.mjs} +5 -5
  96. package/dist/lib/node-esm/{react-surface-XNUWZCSH.mjs → react-surface-CVAPDLEZ.mjs} +79 -19
  97. package/dist/lib/node-esm/react-surface-CVAPDLEZ.mjs.map +7 -0
  98. package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs → schema-defs-4MEJETVX.mjs} +2 -2
  99. package/dist/lib/node-esm/{schema-tools-2Y4D42PD.mjs → schema-tools-SRLCRZ3B.mjs} +7 -6
  100. package/dist/lib/node-esm/schema-tools-SRLCRZ3B.mjs.map +7 -0
  101. package/dist/lib/node-esm/{settings-Q4XDFSYD.mjs → settings-TD76LTQS.mjs} +4 -4
  102. package/dist/lib/node-esm/settings-TD76LTQS.mjs.map +7 -0
  103. package/dist/lib/node-esm/{spaces-ready-JHKPD4PH.mjs → spaces-ready-FJMGPAVV.mjs} +12 -13
  104. package/dist/lib/node-esm/spaces-ready-FJMGPAVV.mjs.map +7 -0
  105. package/dist/lib/node-esm/{state-4ATRHSKA.mjs → state-XQNDCN37.mjs} +2 -2
  106. package/dist/lib/node-esm/types/index.mjs +1 -3
  107. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/capabilities.d.ts +8 -1
  111. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  118. package/dist/types/src/components/CollectionMain.d.ts +2 -2
  119. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  120. package/dist/types/src/components/CollectionSection.d.ts +2 -2
  121. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  122. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  123. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  124. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +8 -7
  126. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  127. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  129. package/dist/types/src/components/MenuFooter.d.ts +2 -2
  130. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  131. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts +2 -2
  132. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  134. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  135. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +2 -2
  136. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  137. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  138. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  139. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  140. package/dist/types/src/components/SpacePresence.d.ts +2 -2
  141. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  142. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  143. package/dist/types/src/events.d.ts +1 -3
  144. package/dist/types/src/events.d.ts.map +1 -1
  145. package/dist/types/src/translations.d.ts +275 -2
  146. package/dist/types/src/translations.d.ts.map +1 -1
  147. package/dist/types/src/types/index.d.ts +0 -1
  148. package/dist/types/src/types/index.d.ts.map +1 -1
  149. package/dist/types/src/types/types.d.ts +81 -12
  150. package/dist/types/src/types/types.d.ts.map +1 -1
  151. package/dist/types/src/util.d.ts +16 -11
  152. package/dist/types/src/util.d.ts.map +1 -1
  153. package/package.json +45 -45
  154. package/src/{SpacePlugin.tsx → SpacePlugin.ts} +30 -10
  155. package/src/capabilities/app-graph-builder.ts +74 -20
  156. package/src/capabilities/app-graph-serializer.ts +11 -8
  157. package/src/capabilities/capabilities.ts +6 -1
  158. package/src/capabilities/identity-created.ts +5 -4
  159. package/src/capabilities/intent-resolver.ts +60 -36
  160. package/src/capabilities/react-surface.tsx +105 -29
  161. package/src/capabilities/schema-tools.ts +3 -2
  162. package/src/capabilities/settings.ts +6 -2
  163. package/src/capabilities/spaces-ready.ts +7 -8
  164. package/src/components/CollectionMain.tsx +3 -3
  165. package/src/components/CollectionSection.tsx +2 -2
  166. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +7 -6
  167. package/src/components/CreateDialog/CreateObjectDialog.tsx +31 -25
  168. package/src/components/CreateDialog/CreateObjectPanel.tsx +45 -52
  169. package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -5
  170. package/src/components/MembersContainer.tsx +4 -2
  171. package/src/components/MenuFooter.tsx +3 -2
  172. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +12 -4
  173. package/src/components/ObjectSettings/BaseObjectSettings.tsx +7 -7
  174. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -4
  175. package/src/components/SchemaContainer.tsx +3 -3
  176. package/src/components/SpacePluginSettings.tsx +24 -19
  177. package/src/components/SpacePresence.tsx +22 -15
  178. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +2 -1
  179. package/src/events.ts +1 -5
  180. package/src/translations.ts +30 -14
  181. package/src/types/index.ts +0 -1
  182. package/src/types/types.ts +32 -11
  183. package/src/util.tsx +136 -57
  184. package/dist/lib/browser/app-graph-builder-DCWUULKX.mjs.map +0 -7
  185. package/dist/lib/browser/app-graph-serializer-MLU7XI2P.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-3LN4LJN6.mjs.map +0 -7
  187. package/dist/lib/browser/chunk-N5QMRLKI.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-VEBKN45O.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-W46VVHFM.mjs +0 -288
  190. package/dist/lib/browser/chunk-W46VVHFM.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-ZQEIXWBK.mjs.map +0 -7
  192. package/dist/lib/browser/identity-created-O63SIYOF.mjs.map +0 -7
  193. package/dist/lib/browser/intent-resolver-PG473BRV.mjs.map +0 -7
  194. package/dist/lib/browser/react-surface-QOP7T66K.mjs.map +0 -7
  195. package/dist/lib/browser/schema-tools-JIEMHUXV.mjs.map +0 -7
  196. package/dist/lib/browser/settings-2IN2WLUK.mjs.map +0 -7
  197. package/dist/lib/browser/spaces-ready-L4QAGTDE.mjs.map +0 -7
  198. package/dist/lib/node/app-graph-builder-WC445X77.cjs.map +0 -7
  199. package/dist/lib/node/app-graph-serializer-UPQOQVMJ.cjs.map +0 -7
  200. package/dist/lib/node/chunk-7GQGM4ZF.cjs.map +0 -7
  201. package/dist/lib/node/chunk-COQYISES.cjs.map +0 -7
  202. package/dist/lib/node/chunk-DXL5TDFP.cjs.map +0 -7
  203. package/dist/lib/node/chunk-FXHI7JNY.cjs +0 -315
  204. package/dist/lib/node/chunk-FXHI7JNY.cjs.map +0 -7
  205. package/dist/lib/node/chunk-USFHJG7C.cjs.map +0 -7
  206. package/dist/lib/node/identity-created-UXEAUGC7.cjs.map +0 -7
  207. package/dist/lib/node/intent-resolver-VPVZSSIL.cjs.map +0 -7
  208. package/dist/lib/node/react-surface-ZIYDBL3C.cjs.map +0 -7
  209. package/dist/lib/node/schema-tools-ZG6Z2QRC.cjs.map +0 -7
  210. package/dist/lib/node/settings-FOH7EB5C.cjs.map +0 -7
  211. package/dist/lib/node/spaces-ready-VXQYCBII.cjs.map +0 -7
  212. package/dist/lib/node-esm/app-graph-builder-E7CCGPQJ.mjs.map +0 -7
  213. package/dist/lib/node-esm/app-graph-serializer-UCMSLPIA.mjs.map +0 -7
  214. package/dist/lib/node-esm/chunk-4X4Y63ND.mjs.map +0 -7
  215. package/dist/lib/node-esm/chunk-BE2BLE7K.mjs.map +0 -7
  216. package/dist/lib/node-esm/chunk-FTELJGEG.mjs +0 -289
  217. package/dist/lib/node-esm/chunk-FTELJGEG.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-OSPEGYX3.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-XAZNQ3QN.mjs.map +0 -7
  220. package/dist/lib/node-esm/identity-created-ZECO4NH3.mjs.map +0 -7
  221. package/dist/lib/node-esm/intent-resolver-SK5LP5ZK.mjs.map +0 -7
  222. package/dist/lib/node-esm/react-surface-XNUWZCSH.mjs.map +0 -7
  223. package/dist/lib/node-esm/schema-tools-2Y4D42PD.mjs.map +0 -7
  224. package/dist/lib/node-esm/settings-Q4XDFSYD.mjs.map +0 -7
  225. package/dist/lib/node-esm/spaces-ready-JHKPD4PH.mjs.map +0 -7
  226. package/dist/types/src/types/collection.d.ts +0 -15
  227. package/dist/types/src/types/collection.d.ts.map +0 -1
  228. package/src/types/collection.ts +0 -18
  229. /package/dist/lib/browser/{react-root-FRDC4UXB.mjs.map → react-root-QIKHSNT2.mjs.map} +0 -0
  230. /package/dist/lib/browser/{schema-defs-JMN74RNK.mjs.map → schema-defs-WREJNMIC.mjs.map} +0 -0
  231. /package/dist/lib/browser/{state-6HOSHLIN.mjs.map → state-HRZ4VRXU.mjs.map} +0 -0
  232. /package/dist/lib/node/{react-root-JXLRINF3.cjs.map → react-root-RQUU3A45.cjs.map} +0 -0
  233. /package/dist/lib/node/{schema-defs-XLFBG3XK.cjs.map → schema-defs-OB2X2HBH.cjs.map} +0 -0
  234. /package/dist/lib/node/{state-ZT3MTZXB.cjs.map → state-M35DK75Z.cjs.map} +0 -0
  235. /package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs.map → react-root-YFGL3B4J.mjs.map} +0 -0
  236. /package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs.map → schema-defs-4MEJETVX.mjs.map} +0 -0
  237. /package/dist/lib/node-esm/{state-4ATRHSKA.mjs.map → state-XQNDCN37.mjs.map} +0 -0
@@ -6,26 +6,19 @@ import { Rx } from '@effect-rx/rx-react';
6
6
  import { Array, Option, pipe } from 'effect';
7
7
 
8
8
  import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
9
- import {
10
- Expando,
11
- Filter,
12
- getSpace,
13
- isEchoObject,
14
- SpaceState,
15
- type Space,
16
- isSpace,
17
- type QueryResult,
18
- } from '@dxos/client/echo';
9
+ import { getSpace, SpaceState, type Space, isSpace, type QueryResult } from '@dxos/client/echo';
10
+ import { Filter, Obj, Query, Type } from '@dxos/echo';
19
11
  import { log } from '@dxos/log';
20
12
  import { ClientCapabilities } from '@dxos/plugin-client';
21
13
  import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
22
14
  import { createExtension, rxFromObservable, ROOT_ID, rxFromSignal } from '@dxos/plugin-graph';
15
+ import { DataType } from '@dxos/schema';
23
16
  import { isNonNullable } from '@dxos/util';
24
17
 
25
18
  import { SpaceCapabilities } from './capabilities';
26
19
  import { getActiveSpace } from '../hooks';
27
20
  import { SPACE_PLUGIN } from '../meta';
28
- import { CollectionType, SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';
21
+ import { SPACE_TYPE, SpaceAction, type SpaceSettingsProps } from '../types';
29
22
  import {
30
23
  constructObjectActions,
31
24
  constructSpaceActions,
@@ -37,6 +30,7 @@ import {
37
30
  } from '../util';
38
31
 
39
32
  export default (context: PluginContext) => {
33
+ // TODO(wittjosiah): Make reactive.
40
34
  const resolve = (typename: string) =>
41
35
  context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
42
36
 
@@ -67,7 +61,7 @@ export default (context: PluginContext) => {
67
61
 
68
62
  const {
69
63
  objects: [spacesOrder],
70
- } = await client.spaces.default.db.query(Filter.type(Expando, { key: SHARED })).run();
64
+ } = await client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
71
65
  if (spacesOrder) {
72
66
  spacesOrder.order = nextOrder.map(({ id }) => id);
73
67
  } else {
@@ -175,7 +169,7 @@ export default (context: PluginContext) => {
175
169
  createExtension({
176
170
  id: SPACES,
177
171
  connector: (node) => {
178
- let query: QueryResult<Expando> | undefined;
172
+ let query: QueryResult<Type.Expando> | undefined;
179
173
  return Rx.make((get) =>
180
174
  pipe(
181
175
  get(node),
@@ -200,7 +194,7 @@ export default (context: PluginContext) => {
200
194
  // TODO(wittjosiah): During client reset, accessing default space throws.
201
195
  try {
202
196
  if (!query) {
203
- query = client.spaces.default.db.query(Filter.type(Expando, { key: SHARED }));
197
+ query = client.spaces.default.db.query(Filter.type(Type.Expando, { key: SHARED }));
204
198
  }
205
199
  const [spacesOrder] = get(rxFromQuery(query));
206
200
  return get(
@@ -321,14 +315,16 @@ export default (context: PluginContext) => {
321
315
  ),
322
316
  Option.map((space) => {
323
317
  const state = context.getCapability(SpaceCapabilities.State);
324
-
325
318
  const spaceState = get(rxFromObservable(space.state));
326
319
  if (spaceState !== SpaceState.SPACE_READY) {
327
320
  return [];
328
321
  }
329
322
 
330
323
  const collection = get(
331
- rxFromSignal(() => space.properties[CollectionType.typename]?.target as CollectionType | undefined),
324
+ rxFromSignal(
325
+ () =>
326
+ space.properties[Type.getTypename(DataType.Collection)]?.target as DataType.Collection | undefined,
327
+ ),
332
328
  );
333
329
  if (!collection) {
334
330
  return [];
@@ -342,8 +338,8 @@ export default (context: PluginContext) => {
342
338
  Array.filter(isNonNullable),
343
339
  Array.map((object) =>
344
340
  createObjectNode({
345
- object,
346
341
  space,
342
+ object,
347
343
  resolve,
348
344
  navigable: state.navigableCollections,
349
345
  }),
@@ -365,7 +361,9 @@ export default (context: PluginContext) => {
365
361
  Rx.make((get) =>
366
362
  pipe(
367
363
  get(node),
368
- Option.flatMap((node) => (node.data instanceof CollectionType ? Option.some(node.data) : Option.none())),
364
+ Option.flatMap((node) =>
365
+ Obj.instanceOf(DataType.Collection, node.data) ? Option.some(node.data) : Option.none(),
366
+ ),
369
367
  Option.map((collection) => {
370
368
  const state = context.getCapability(SpaceCapabilities.State);
371
369
  const space = getSpace(collection);
@@ -427,6 +425,60 @@ export default (context: PluginContext) => {
427
425
  // },
428
426
  }),
429
427
 
428
+ // Create nodes for objects in a query collection.
429
+ createExtension({
430
+ id: `${SPACE_PLUGIN}/query-collection-objects`,
431
+ connector: (node) => {
432
+ let query: QueryResult<Type.Expando> | undefined;
433
+ return Rx.make((get) =>
434
+ pipe(
435
+ get(node),
436
+ Option.flatMap((node) =>
437
+ Obj.instanceOf(DataType.QueryCollection, node.data) ? Option.some(node.data) : Option.none(),
438
+ ),
439
+ Option.flatMap((collection) => {
440
+ const space = getSpace(collection);
441
+ return collection.query.typename && space
442
+ ? Option.some({ typename: collection.query.typename, space })
443
+ : Option.none();
444
+ }),
445
+ Option.map(({ typename, space }) => {
446
+ const state = context.getCapability(SpaceCapabilities.State);
447
+ if (!query) {
448
+ query = space.db.query(
449
+ Query.without(
450
+ Query.select(Filter.typename(typename)),
451
+ // TODO(wittjosiah): This query is broader than it should be.
452
+ // It will return all objects in the collection, not just the ones of the given type.
453
+ // However this works fine for now because this query is only used for exclusions.
454
+ Query.select(Filter.typename(typename))
455
+ .referencedBy(DataType.Collection, 'objects')
456
+ .reference('objects'),
457
+ ),
458
+ );
459
+ }
460
+ return get(rxFromQuery(query))
461
+ .map((object) =>
462
+ get(
463
+ rxFromSignal(() =>
464
+ createObjectNode({
465
+ object,
466
+ space,
467
+ resolve,
468
+ droppable: false, // Cannot rearrange query collections.
469
+ navigable: state.navigableCollections,
470
+ }),
471
+ ),
472
+ ),
473
+ )
474
+ .filter(isNonNullable);
475
+ }),
476
+ Option.getOrElse(() => []),
477
+ ),
478
+ );
479
+ },
480
+ }),
481
+
430
482
  // Create collection actions and action groups.
431
483
  createExtension({
432
484
  id: `${SPACE_PLUGIN}/object-actions`,
@@ -434,11 +486,12 @@ export default (context: PluginContext) => {
434
486
  Rx.make((get) =>
435
487
  pipe(
436
488
  get(node),
437
- Option.flatMap((node) => (isEchoObject(node.data) ? Option.some(node.data) : Option.none())),
489
+ Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),
438
490
  Option.flatMap((object) => {
439
491
  const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
440
492
  const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
441
493
  const [state] = get(context.capabilities(SpaceCapabilities.State));
494
+ const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));
442
495
 
443
496
  if (!dispatcher || !appGraph || !state) {
444
497
  return Option.none();
@@ -447,6 +500,7 @@ export default (context: PluginContext) => {
447
500
  object,
448
501
  graph: appGraph.graph,
449
502
  dispatch: dispatcher.dispatchPromise,
503
+ objectForms,
450
504
  navigable: get(rxFromSignal(() => state.navigableCollections)),
451
505
  });
452
506
  }
@@ -464,7 +518,7 @@ export default (context: PluginContext) => {
464
518
  Rx.make((get) =>
465
519
  pipe(
466
520
  get(node),
467
- Option.flatMap((node) => (isEchoObject(node.data) ? Option.some(node) : Option.none())),
521
+ Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node) : Option.none())),
468
522
  Option.map((node) => [
469
523
  {
470
524
  id: [node.id, 'settings'].join(ATTENDABLE_PATH_SEPARATOR),
@@ -4,13 +4,16 @@
4
4
 
5
5
  import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
6
6
  import { isSpace } from '@dxos/client/echo';
7
- import { live } from '@dxos/live-object';
7
+ import { Obj, Type } from '@dxos/echo';
8
+ import { DataType } from '@dxos/schema';
8
9
 
9
10
  import { SPACE_PLUGIN } from '../meta';
10
11
  import translations from '../translations';
11
- import { CollectionType, SpaceAction, SPACE_TYPE } from '../types';
12
+ import { SPACE_TYPE, SpaceAction } from '../types';
12
13
  import { SPACES } from '../util';
13
14
 
15
+ const COLLECTION_TYPE = Type.getTypename(DataType.Collection);
16
+
14
17
  // https://stackoverflow.com/a/19016910
15
18
  const DIRECTORY_TYPE = 'text/directory';
16
19
 
@@ -43,18 +46,18 @@ export default (context: PluginContext) =>
43
46
  },
44
47
  },
45
48
  {
46
- inputType: CollectionType.typename,
49
+ inputType: COLLECTION_TYPE,
47
50
  outputType: DIRECTORY_TYPE,
48
51
  serialize: (node) => ({
49
- name: node.data.name ?? translations[0]['en-US'][CollectionType.typename]['object name placeholder'],
50
- data: node.data.name ?? translations[0]['en-US'][CollectionType.typename]['object name placeholder'],
52
+ name: node.data.name ?? translations[0]['en-US'][COLLECTION_TYPE]['object name placeholder'],
53
+ data: node.data.name ?? translations[0]['en-US'][COLLECTION_TYPE]['object name placeholder'],
51
54
  type: DIRECTORY_TYPE,
52
55
  }),
53
56
  deserialize: async (data, ancestors) => {
54
57
  const space = ancestors.find(isSpace);
55
58
  const collection =
56
- ancestors.findLast((ancestor) => ancestor instanceof CollectionType) ??
57
- space?.properties[CollectionType.typename]?.target;
59
+ ancestors.findLast((ancestor) => Obj.instanceOf(DataType.Collection, ancestor)) ??
60
+ space?.properties[COLLECTION_TYPE]?.target;
58
61
  if (!space || !collection) {
59
62
  return;
60
63
  }
@@ -63,7 +66,7 @@ export default (context: PluginContext) =>
63
66
  const result = await dispatch(
64
67
  createIntent(SpaceAction.AddObject, {
65
68
  target: collection,
66
- object: live(CollectionType, { name: data.name, objects: [], views: {} }),
69
+ object: Obj.make(DataType.Collection, { name: data.name, objects: [] }),
67
70
  }),
68
71
  );
69
72
 
@@ -3,7 +3,9 @@
3
3
  //
4
4
 
5
5
  import { defineCapability, type Label } from '@dxos/app-framework';
6
- import { type Position, type DeepReadonly } from '@dxos/util';
6
+ import { type Space } from '@dxos/react-client/echo';
7
+ import { type DataType } from '@dxos/schema';
8
+ import { type Position, type DeepReadonly, type MaybePromise } from '@dxos/util';
7
9
 
8
10
  import { SPACE_PLUGIN } from '../meta';
9
11
  import { type ObjectForm, type PluginState } from '../types';
@@ -15,5 +17,8 @@ export namespace SpaceCapabilities {
15
17
  export type SettingsSection = { id: string; label: Label; position?: Position };
16
18
  export const SettingsSection = defineCapability<SettingsSection>(`${SPACE_PLUGIN}/capability/settings-section`);
17
19
 
20
+ export type OnSpaceCreated = (params: { space: Space; rootCollection: DataType.Collection }) => MaybePromise<void>;
21
+ export const OnSpaceCreated = defineCapability<OnSpaceCreated>(`${SPACE_PLUGIN}/capability/on-space-created`);
22
+
18
23
  export const ObjectForm = defineCapability<ObjectForm<any>>(`${SPACE_PLUGIN}/capability/object-form`);
19
24
  }
@@ -3,11 +3,10 @@
3
3
  //
4
4
 
5
5
  import { contributes, type PluginContext, Capabilities } from '@dxos/app-framework';
6
- import { live, makeRef } from '@dxos/live-object';
6
+ import { Obj, Ref, Type } from '@dxos/echo';
7
7
  import { Migrations } from '@dxos/migrations';
8
8
  import { ClientCapabilities } from '@dxos/plugin-client';
9
-
10
- import { CollectionType } from '../types';
9
+ import { DataType } from '@dxos/schema';
11
10
 
12
11
  export default async (context: PluginContext) => {
13
12
  const client = context.getCapability(ClientCapabilities.Client);
@@ -17,7 +16,9 @@ export default async (context: PluginContext) => {
17
16
  await defaultSpace.waitUntilReady();
18
17
 
19
18
  // Create root collection structure.
20
- defaultSpace.properties[CollectionType.typename] = makeRef(live(CollectionType, { objects: [], views: {} }));
19
+ defaultSpace.properties[Type.getTypename(DataType.Collection)] = Ref.make(
20
+ Obj.make(DataType.Collection, { objects: [] }),
21
+ );
21
22
  if (Migrations.versionProperty) {
22
23
  defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;
23
24
  }
@@ -6,36 +6,36 @@ import { Effect } from 'effect';
6
6
 
7
7
  import {
8
8
  Capabilities,
9
+ LayoutAction,
10
+ type PluginContext,
9
11
  contributes,
10
12
  createIntent,
11
13
  createResolver,
12
- LayoutAction,
13
- type PluginContext,
14
14
  } from '@dxos/app-framework';
15
- import { Relation } from '@dxos/echo';
16
- import { type Expando, getTypename, type HasId } from '@dxos/echo-schema';
15
+ import { Obj, Ref, Relation, Type } from '@dxos/echo';
17
16
  import { invariant } from '@dxos/invariant';
18
- import { live, makeRef, type Live } from '@dxos/live-object';
19
17
  import { Migrations } from '@dxos/migrations';
20
18
  import { ClientCapabilities } from '@dxos/plugin-client';
21
19
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
22
20
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
23
- import { isSpace, getSpace, SpaceState, fullyQualifiedId, isEchoObject } from '@dxos/react-client/echo';
21
+ import { isSpace, getSpace, SpaceState, fullyQualifiedId } from '@dxos/react-client/echo';
24
22
  import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
25
23
  import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
24
+ import { DataType } from '@dxos/schema';
26
25
 
27
26
  import { SpaceCapabilities } from './capabilities';
28
27
  import {
28
+ CREATE_OBJECT_DIALOG,
29
29
  CREATE_SPACE_DIALOG,
30
30
  JOIN_DIALOG,
31
- type JoinDialogProps,
31
+ POPOVER_RENAME_OBJECT,
32
32
  POPOVER_RENAME_SPACE,
33
- CREATE_OBJECT_DIALOG,
34
33
  type CreateObjectDialogProps,
35
- POPOVER_RENAME_OBJECT,
34
+ type JoinDialogProps,
36
35
  } from '../components';
36
+ import { SpaceEvents } from '../events';
37
37
  import { SPACE_PLUGIN } from '../meta';
38
- import { CollectionAction, CollectionType, SpaceAction } from '../types';
38
+ import { CollectionAction, SpaceAction } from '../types';
39
39
  import { cloneObject, COMPOSER_SPACE_LOCK, getNestedObjects } from '../util';
40
40
 
41
41
  // TODO(wittjosiah): Remove.
@@ -75,13 +75,19 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
75
75
  await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);
76
76
  }
77
77
  await space.waitUntilReady();
78
- const collection = live(CollectionType, { objects: [], views: {} });
79
- space.properties[CollectionType.typename] = makeRef(collection);
78
+ const collection = Obj.make(DataType.Collection, { objects: [] });
79
+ space.properties[Type.getTypename(DataType.Collection)] = Ref.make(collection);
80
80
 
81
81
  if (Migrations.versionProperty) {
82
82
  space.properties[Migrations.versionProperty] = Migrations.targetVersion;
83
83
  }
84
84
 
85
+ await context.activatePromise(SpaceEvents.SpaceCreated);
86
+ const onSpaceCreatedCallbacks = context.getCapabilities(SpaceCapabilities.OnSpaceCreated);
87
+ await Promise.all(
88
+ onSpaceCreatedCallbacks.map((onSpaceCreated) => onSpaceCreated({ space, rootCollection: collection })),
89
+ );
90
+
85
91
  return {
86
92
  data: {
87
93
  id: space.id,
@@ -305,7 +311,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
305
311
  }),
306
312
  createResolver({
307
313
  intent: SpaceAction.OpenCreateObject,
308
- resolve: ({ target, navigable = true }) => {
314
+ resolve: ({ target, typename, navigable = true }) => {
309
315
  const state = context.getCapability(SpaceCapabilities.State);
310
316
 
311
317
  return {
@@ -317,8 +323,13 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
317
323
  blockAlign: 'start',
318
324
  props: {
319
325
  target,
326
+ typename,
320
327
  shouldNavigate: navigable
321
- ? (object: Live<any>) => !(object instanceof CollectionType) || state.navigableCollections
328
+ ? (object: Obj.Any) => {
329
+ const isCollection = Obj.instanceOf(DataType.Collection, object);
330
+ const isQueryCollection = Obj.instanceOf(DataType.QueryCollection, object);
331
+ return (!isCollection && !isQueryCollection) || state.navigableCollections;
332
+ }
322
333
  : () => false,
323
334
  } satisfies Partial<CreateObjectDialogProps>,
324
335
  },
@@ -365,18 +376,18 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
365
376
  };
366
377
  }
367
378
 
368
- if (target instanceof CollectionType) {
369
- target.objects.push(makeRef(object as HasId));
379
+ if (Obj.instanceOf(DataType.Collection, target)) {
380
+ target.objects.push(Ref.make(object));
370
381
  } else if (isSpace(target) && hidden) {
371
382
  space.db.add(object);
372
383
  } else if (isSpace(target)) {
373
- const collection = space.properties[CollectionType.typename]?.target;
374
- if (collection instanceof CollectionType) {
375
- collection.objects.push(makeRef(object as HasId));
384
+ const collection = space.properties[Type.getTypename(DataType.Collection)]?.target;
385
+ if (Obj.instanceOf(DataType.Collection, collection)) {
386
+ collection.objects.push(Ref.make(object));
376
387
  } else {
377
388
  // TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.
378
- const collection = live(CollectionType, { objects: [makeRef(object as HasId)], views: {} });
379
- space.properties[CollectionType.typename] = makeRef(collection);
389
+ const collection = Obj.make(DataType.Collection, { objects: [Ref.make(object)] });
390
+ space.properties[Type.getTypename(DataType.Collection)] = Ref.make(collection);
380
391
  }
381
392
  }
382
393
 
@@ -384,7 +395,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
384
395
  data: {
385
396
  id: fullyQualifiedId(object),
386
397
  subject: [fullyQualifiedId(object)],
387
- object: object as HasId,
398
+ object,
388
399
  },
389
400
  intents: [
390
401
  ...(observability
@@ -394,7 +405,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
394
405
  properties: {
395
406
  spaceId: space.id,
396
407
  objectId: object.id,
397
- typename: getTypename(object),
408
+ typename: Obj.getTypename(object),
398
409
  },
399
410
  }),
400
411
  ]
@@ -406,8 +417,14 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
406
417
  createResolver({
407
418
  intent: SpaceAction.AddRelation,
408
419
  resolve: ({ space, schema, source, target, fields }) => {
409
- const relation = live(schema, { [Relation.Source]: source, [Relation.Target]: target, ...fields });
410
- space.db.add(relation);
420
+ const relation = space.db.add(
421
+ Relation.make(schema, {
422
+ [Relation.Source]: source,
423
+ [Relation.Target]: target,
424
+ ...fields,
425
+ }),
426
+ );
427
+
411
428
  return {
412
429
  data: {
413
430
  relation,
@@ -422,18 +439,19 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
422
439
 
423
440
  // All objects must be a member of the same space.
424
441
  const space = getSpace(objects[0]);
425
- invariant(space && objects.every((obj) => isEchoObject(obj) && getSpace(obj) === space));
442
+ invariant(space && objects.every((obj) => Obj.isObject(obj) && getSpace(obj) === space));
426
443
  const openObjectIds = new Set<string>(layout.active);
427
444
 
428
445
  if (!undo) {
429
- const parentCollection: CollectionType = target ?? space.properties[CollectionType.typename]?.target;
446
+ const parentCollection: DataType.Collection =
447
+ target ?? space.properties[Type.getTypename(DataType.Collection)]?.target;
430
448
  const nestedObjectsList = await Promise.all(objects.map((obj) => getNestedObjects(obj, resolve)));
431
449
 
432
450
  const deletionData = {
433
451
  objects,
434
452
  parentCollection,
435
453
  indices: objects.map((obj) =>
436
- parentCollection instanceof CollectionType
454
+ Obj.instanceOf(DataType.Collection, parentCollection)
437
455
  ? parentCollection.objects.findIndex((object) => object.target === obj)
438
456
  : -1,
439
457
  ),
@@ -444,7 +462,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
444
462
  .filter((id) => openObjectIds.has(id)),
445
463
  } satisfies SpaceAction.DeletionData;
446
464
 
447
- if (deletionData.parentCollection instanceof CollectionType) {
465
+ if (Obj.instanceOf(DataType.Collection, deletionData.parentCollection)) {
448
466
  [...deletionData.indices]
449
467
  .sort((a, b) => b - a)
450
468
  .forEach((index: number) => {
@@ -459,7 +477,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
459
477
  });
460
478
  objects.forEach((obj) => space.db.remove(obj));
461
479
 
462
- const undoMessageKey = objects.some((obj) => obj instanceof CollectionType)
480
+ const undoMessageKey = objects.some((obj) => Obj.instanceOf(DataType.Collection, obj))
463
481
  ? 'collection deleted label'
464
482
  : objects.length > 1
465
483
  ? 'objects deleted label'
@@ -485,20 +503,20 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
485
503
  } else {
486
504
  if (
487
505
  deletionData?.objects?.length &&
488
- deletionData.objects.every(isEchoObject) &&
489
- deletionData.parentCollection instanceof CollectionType
506
+ deletionData.objects.every(Obj.isObject) &&
507
+ Obj.instanceOf(DataType.Collection, deletionData.parentCollection)
490
508
  ) {
491
509
  // Restore the object to the space.
492
- const restoredObjects = deletionData.objects.map((obj: Expando) => space.db.add(obj));
510
+ const restoredObjects = deletionData.objects.map((obj: Type.Expando) => space.db.add(obj));
493
511
 
494
512
  // Restore nested objects to the space.
495
- deletionData.nestedObjectsList.flat().forEach((obj: Expando) => {
513
+ deletionData.nestedObjectsList.flat().forEach((obj: Type.Expando) => {
496
514
  space.db.add(obj);
497
515
  });
498
516
 
499
517
  deletionData.indices.forEach((index: number, i: number) => {
500
518
  if (index !== -1) {
501
- deletionData.parentCollection.objects.splice(index, 0, makeRef(restoredObjects[i] as Expando));
519
+ deletionData.parentCollection.objects.splice(index, 0, Ref.make(restoredObjects[i] as Type.Expando));
502
520
  }
503
521
  });
504
522
 
@@ -554,7 +572,13 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
554
572
  createResolver({
555
573
  intent: CollectionAction.Create,
556
574
  resolve: async ({ name }) => ({
557
- data: { object: live(CollectionType, { name, objects: [], views: {} }) },
575
+ data: { object: Obj.make(DataType.Collection, { name, objects: [] }) },
576
+ }),
577
+ }),
578
+ createResolver({
579
+ intent: CollectionAction.CreateQueryCollection,
580
+ resolve: async ({ name, typename }) => ({
581
+ data: { object: Obj.make(DataType.QueryCollection, { name, query: { typename } }) },
558
582
  }),
559
583
  }),
560
584
  ]);