@dxos/plugin-space 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446

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 (326) hide show
  1. package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs +315 -0
  2. package/dist/lib/browser/app-graph-builder-GMFCSOLG.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-VRU57AEZ.mjs → app-graph-serializer-DSF2U3A5.mjs} +10 -10
  4. package/dist/lib/browser/app-graph-serializer-DSF2U3A5.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-UBSVH2NQ.mjs → chunk-5BDV575R.mjs} +10 -21
  6. package/dist/lib/browser/chunk-5BDV575R.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-AYW4IDRT.mjs +275 -0
  8. package/dist/lib/browser/chunk-AYW4IDRT.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-43UQWMD3.mjs → chunk-JZXWPMLA.mjs} +740 -390
  10. package/dist/lib/browser/chunk-JZXWPMLA.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-IQFFOAWD.mjs → chunk-LO5UL6RU.mjs} +173 -78
  12. package/dist/lib/browser/chunk-LO5UL6RU.mjs.map +7 -0
  13. package/dist/lib/browser/{identity-created-ANRJHNMQ.mjs → identity-created-JR7BNXFH.mjs} +5 -5
  14. package/dist/lib/browser/identity-created-JR7BNXFH.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +47 -30
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-KRINV5QI.mjs → intent-resolver-RKYILWWQ.mjs} +106 -98
  18. package/dist/lib/browser/intent-resolver-RKYILWWQ.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-root-J3SP2HVW.mjs → react-root-6H7NX2M2.mjs} +4 -5
  21. package/dist/lib/{node-esm/react-root-S2LW4FS7.mjs.map → browser/react-root-6H7NX2M2.mjs.map} +1 -1
  22. package/dist/lib/browser/{react-surface-J7T2IMH4.mjs → react-surface-7AGLOVMK.mjs} +53 -120
  23. package/dist/lib/browser/react-surface-7AGLOVMK.mjs.map +7 -0
  24. package/dist/lib/browser/schema-FHTA26SW.mjs +24 -0
  25. package/dist/lib/browser/schema-FHTA26SW.mjs.map +7 -0
  26. package/dist/lib/browser/{schema-tools-MYC4LTQD.mjs → schema-tools-YAXPRIXP.mjs} +22 -22
  27. package/dist/lib/browser/schema-tools-YAXPRIXP.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-G24447B7.mjs → settings-PJPTJUPE.mjs} +4 -4
  29. package/dist/lib/browser/settings-PJPTJUPE.mjs.map +7 -0
  30. package/dist/lib/browser/{spaces-ready-5I3RKYTT.mjs → spaces-ready-BSSP7HHG.mjs} +17 -18
  31. package/dist/lib/browser/spaces-ready-BSSP7HHG.mjs.map +7 -0
  32. package/dist/lib/browser/{state-SI4B5GHC.mjs → state-X7VLCC6E.mjs} +4 -2
  33. package/dist/lib/browser/state-X7VLCC6E.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +1 -7
  35. package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs +318 -0
  36. package/dist/lib/node/app-graph-builder-DPY7AUZE.cjs.map +7 -0
  37. package/dist/lib/node/{app-graph-serializer-VLBCR3IX.cjs → app-graph-serializer-JELGJUAY.cjs} +22 -22
  38. package/dist/lib/node/app-graph-serializer-JELGJUAY.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-MXBE2VET.cjs → chunk-3GKCNADA.cjs} +751 -412
  40. package/dist/lib/node/chunk-3GKCNADA.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-5YHUQJVB.cjs → chunk-PU2EYH4E.cjs} +14 -25
  42. package/dist/lib/node/chunk-PU2EYH4E.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-SCATWJKX.cjs → chunk-TUZWEPGX.cjs} +198 -100
  44. package/dist/lib/node/chunk-TUZWEPGX.cjs.map +7 -0
  45. package/dist/lib/node/chunk-WDEIFDTX.cjs +300 -0
  46. package/dist/lib/node/chunk-WDEIFDTX.cjs.map +7 -0
  47. package/dist/lib/node/{identity-created-NIPYGVG3.cjs → identity-created-XU4HFV2T.cjs} +7 -7
  48. package/dist/lib/node/identity-created-XU4HFV2T.cjs.map +7 -0
  49. package/dist/lib/node/index.cjs +97 -79
  50. package/dist/lib/node/index.cjs.map +3 -3
  51. package/dist/lib/node/{intent-resolver-MJVRY6YE.cjs → intent-resolver-VJ7YV74L.cjs} +151 -144
  52. package/dist/lib/node/intent-resolver-VJ7YV74L.cjs.map +7 -0
  53. package/dist/lib/node/meta.json +1 -1
  54. package/dist/lib/node/{react-root-M4BZ6VXB.cjs → react-root-TEL5RW3N.cjs} +8 -9
  55. package/dist/lib/node/{react-root-M4BZ6VXB.cjs.map → react-root-TEL5RW3N.cjs.map} +1 -1
  56. package/dist/lib/node/{react-surface-RYKSYYKM.cjs → react-surface-2H3S5TY5.cjs} +75 -142
  57. package/dist/lib/node/react-surface-2H3S5TY5.cjs.map +7 -0
  58. package/dist/lib/node/{schema-defs-2HJLXSNK.cjs → schema-PPJ5BZ3A.cjs} +11 -13
  59. package/dist/lib/node/schema-PPJ5BZ3A.cjs.map +7 -0
  60. package/dist/lib/node/{schema-tools-OE3MFYYH.cjs → schema-tools-BLIMOZYY.cjs} +24 -24
  61. package/dist/lib/node/schema-tools-BLIMOZYY.cjs.map +7 -0
  62. package/dist/lib/node/{settings-AFWO4AWK.cjs → settings-WVFP2UEP.cjs} +7 -7
  63. package/dist/lib/node/settings-WVFP2UEP.cjs.map +7 -0
  64. package/dist/lib/node/{spaces-ready-BMPXSFHF.cjs → spaces-ready-7DNZSUOG.cjs} +24 -25
  65. package/dist/lib/node/spaces-ready-7DNZSUOG.cjs.map +7 -0
  66. package/dist/lib/node/{state-L2ZSDKLS.cjs → state-5KX6WBJH.cjs} +7 -5
  67. package/dist/lib/node/state-5KX6WBJH.cjs.map +7 -0
  68. package/dist/lib/node/types/index.cjs +12 -18
  69. package/dist/lib/node/types/index.cjs.map +2 -2
  70. package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs +316 -0
  71. package/dist/lib/node-esm/app-graph-builder-42IGWRPL.mjs.map +7 -0
  72. package/dist/lib/node-esm/{app-graph-serializer-GEUYYXKD.mjs → app-graph-serializer-FXONFKOE.mjs} +10 -10
  73. package/dist/lib/node-esm/app-graph-serializer-FXONFKOE.mjs.map +7 -0
  74. package/dist/lib/node-esm/{chunk-5NIBYPVF.mjs → chunk-3ZOUV4DF.mjs} +10 -21
  75. package/dist/lib/node-esm/chunk-3ZOUV4DF.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-FI3WV22Y.mjs → chunk-BEWBZ4Q4.mjs} +740 -390
  77. package/dist/lib/node-esm/chunk-BEWBZ4Q4.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-FC4UHDPL.mjs +276 -0
  79. package/dist/lib/node-esm/chunk-FC4UHDPL.mjs.map +7 -0
  80. package/dist/lib/node-esm/{chunk-S2W6HS4A.mjs → chunk-ZGLK25WQ.mjs} +173 -78
  81. package/dist/lib/node-esm/chunk-ZGLK25WQ.mjs.map +7 -0
  82. package/dist/lib/node-esm/{identity-created-O5X2FFWU.mjs → identity-created-WJKAS2PV.mjs} +5 -5
  83. package/dist/lib/node-esm/identity-created-WJKAS2PV.mjs.map +7 -0
  84. package/dist/lib/node-esm/index.mjs +47 -30
  85. package/dist/lib/node-esm/index.mjs.map +3 -3
  86. package/dist/lib/node-esm/{intent-resolver-JT6EB47M.mjs → intent-resolver-ZFNSA4CM.mjs} +106 -98
  87. package/dist/lib/node-esm/intent-resolver-ZFNSA4CM.mjs.map +7 -0
  88. package/dist/lib/node-esm/meta.json +1 -1
  89. package/dist/lib/node-esm/{react-root-S2LW4FS7.mjs → react-root-PRBJMWLQ.mjs} +4 -5
  90. package/dist/lib/node-esm/{react-surface-ZNNMO7QQ.mjs → react-surface-RCZG2PNF.mjs} +53 -120
  91. package/dist/lib/node-esm/react-surface-RCZG2PNF.mjs.map +7 -0
  92. package/dist/lib/node-esm/schema-OUZKVYM5.mjs +25 -0
  93. package/dist/lib/node-esm/schema-OUZKVYM5.mjs.map +7 -0
  94. package/dist/lib/node-esm/{schema-tools-YTJLA3NQ.mjs → schema-tools-IU7EX5A5.mjs} +22 -22
  95. package/dist/lib/node-esm/schema-tools-IU7EX5A5.mjs.map +7 -0
  96. package/dist/lib/node-esm/{settings-MJVSCOI4.mjs → settings-FJZPC2TV.mjs} +4 -4
  97. package/dist/lib/node-esm/settings-FJZPC2TV.mjs.map +7 -0
  98. package/dist/lib/node-esm/{spaces-ready-XKG57SL5.mjs → spaces-ready-7X5PGB2V.mjs} +17 -18
  99. package/dist/lib/node-esm/spaces-ready-7X5PGB2V.mjs.map +7 -0
  100. package/dist/lib/node-esm/{state-QUDYGEU6.mjs → state-Z6E2YTNC.mjs} +4 -2
  101. package/dist/lib/node-esm/state-Z6E2YTNC.mjs.map +7 -0
  102. package/dist/lib/node-esm/types/index.mjs +1 -7
  103. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/app-graph-builder.d.ts +179 -2
  105. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/app-graph-serializer.d.ts +2 -2
  107. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/identity-created.d.ts +2 -2
  109. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/index.d.ts +184 -9
  111. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/intent-resolver.d.ts +3 -4
  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 +2 -2
  116. package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/schema.d.ts +4 -0
  118. package/dist/types/src/capabilities/schema.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/spaces-ready.d.ts +2 -2
  120. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  121. package/dist/types/src/capabilities/state.d.ts +2 -2
  122. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  123. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  124. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  125. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -2
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  129. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  130. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  131. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  132. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/MenuFooter.d.ts +2 -2
  134. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  135. package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.d.ts +2 -2
  136. package/dist/types/src/components/ObjectSettingsContainer/AdvancedObjectSettings.d.ts.map +1 -0
  137. package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/BaseObjectSettings.d.ts +2 -2
  138. package/dist/types/src/components/ObjectSettingsContainer/BaseObjectSettings.d.ts.map +1 -0
  139. package/dist/types/src/components/ObjectSettingsContainer/ForeignKeys.d.ts.map +1 -0
  140. package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/ObjectSettingsContainer.d.ts +2 -2
  141. package/dist/types/src/components/ObjectSettingsContainer/ObjectSettingsContainer.d.ts.map +1 -0
  142. package/dist/types/src/components/ObjectSettingsContainer/index.d.ts.map +1 -0
  143. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  144. package/dist/types/src/components/PopoverAddSpace.d.ts +4 -0
  145. package/dist/types/src/components/PopoverAddSpace.d.ts.map +1 -0
  146. package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
  147. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  148. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  149. package/dist/types/src/components/ShareSpaceButton.d.ts +9 -0
  150. package/dist/types/src/components/ShareSpaceButton.d.ts.map +1 -0
  151. package/dist/types/src/components/ShareSpaceButton.stories.d.ts +10 -0
  152. package/dist/types/src/components/ShareSpaceButton.stories.d.ts.map +1 -0
  153. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  154. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  155. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts +7 -0
  157. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.d.ts.map +1 -0
  158. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts +7 -0
  159. package/dist/types/src/components/SpaceSettings/SpacePropertiesForm.stories.d.ts.map +1 -0
  160. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +2 -0
  161. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  162. package/dist/types/src/components/SpaceSettings/index.d.ts +1 -0
  163. package/dist/types/src/components/SpaceSettings/index.d.ts.map +1 -1
  164. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
  165. package/dist/types/src/components/SyncStatus/Space.d.ts +13 -0
  166. package/dist/types/src/components/SyncStatus/Space.d.ts.map +1 -0
  167. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +8 -1
  168. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  169. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts +9 -0
  170. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/SyncStatus/save-tracker.d.ts.map +1 -1
  172. package/dist/types/src/components/SyncStatus/status.d.ts.map +1 -1
  173. package/dist/types/src/components/SyncStatus/sync-state.d.ts +18 -0
  174. package/dist/types/src/components/SyncStatus/sync-state.d.ts.map +1 -0
  175. package/dist/types/src/components/index.d.ts +3 -2
  176. package/dist/types/src/components/index.d.ts.map +1 -1
  177. package/dist/types/src/hooks/index.d.ts +0 -2
  178. package/dist/types/src/hooks/index.d.ts.map +1 -1
  179. package/dist/types/src/hooks/usePath.d.ts +2 -3
  180. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  181. package/dist/types/src/index.d.ts +0 -1
  182. package/dist/types/src/index.d.ts.map +1 -1
  183. package/dist/types/src/translations.d.ts +242 -17
  184. package/dist/types/src/translations.d.ts.map +1 -1
  185. package/dist/types/src/types/collection.d.ts +8 -9
  186. package/dist/types/src/types/collection.d.ts.map +1 -1
  187. package/dist/types/src/types/thread.d.ts +110 -205
  188. package/dist/types/src/types/thread.d.ts.map +1 -1
  189. package/dist/types/src/types/types.d.ts +146 -157
  190. package/dist/types/src/types/types.d.ts.map +1 -1
  191. package/dist/types/src/util.d.ts +20 -36
  192. package/dist/types/src/util.d.ts.map +1 -1
  193. package/dist/types/tsconfig.tsbuildinfo +1 -1
  194. package/package.json +44 -51
  195. package/src/SpacePlugin.tsx +20 -11
  196. package/src/capabilities/app-graph-builder.ts +230 -377
  197. package/src/capabilities/app-graph-serializer.ts +8 -8
  198. package/src/capabilities/identity-created.ts +5 -5
  199. package/src/capabilities/index.ts +2 -2
  200. package/src/capabilities/intent-resolver.ts +110 -94
  201. package/src/capabilities/react-surface.tsx +50 -111
  202. package/src/capabilities/schema-tool.test.ts +3 -2
  203. package/src/capabilities/schema-tools.ts +25 -25
  204. package/src/capabilities/schema.ts +27 -0
  205. package/src/capabilities/settings.ts +2 -2
  206. package/src/capabilities/spaces-ready.ts +14 -16
  207. package/src/capabilities/state.ts +5 -3
  208. package/src/components/AwaitingObject.tsx +1 -1
  209. package/src/components/CollectionMain.tsx +5 -2
  210. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +4 -4
  211. package/src/components/CreateDialog/CreateObjectDialog.tsx +4 -4
  212. package/src/components/CreateDialog/CreateObjectPanel.tsx +25 -3
  213. package/src/components/CreateDialog/CreateSpaceDialog.tsx +3 -6
  214. package/src/components/MembersContainer.stories.tsx +5 -1
  215. package/src/components/MembersContainer.tsx +54 -80
  216. package/src/components/MenuFooter.tsx +2 -2
  217. package/src/components/{ObjectSettings → ObjectSettingsContainer}/AdvancedObjectSettings.tsx +2 -2
  218. package/src/components/{ObjectSettings → ObjectSettingsContainer}/BaseObjectSettings.tsx +2 -2
  219. package/src/components/{ObjectSettings → ObjectSettingsContainer}/ObjectSettingsContainer.tsx +4 -4
  220. package/src/components/PersistenceStatus.tsx +14 -11
  221. package/src/components/PopoverAddSpace.tsx +46 -0
  222. package/src/components/PopoverRenameObject.tsx +8 -14
  223. package/src/components/PopoverRenameSpace.tsx +0 -8
  224. package/src/components/ShareSpaceButton.stories.tsx +27 -0
  225. package/src/components/ShareSpaceButton.tsx +32 -0
  226. package/src/components/SpacePluginSettings.tsx +2 -27
  227. package/src/components/SpacePresence.stories.tsx +1 -1
  228. package/src/components/SpacePresence.tsx +65 -60
  229. package/src/components/SpaceSettings/{SpaceSettingsContainer.stories.tsx → SpacePropertiesForm.stories.tsx} +6 -6
  230. package/src/components/SpaceSettings/SpacePropertiesForm.tsx +136 -0
  231. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +39 -159
  232. package/src/components/SpaceSettings/index.ts +1 -0
  233. package/src/components/SyncStatus/InlineSyncStatus.tsx +24 -15
  234. package/src/components/SyncStatus/Space.tsx +133 -0
  235. package/src/components/SyncStatus/SyncStatus.tsx +69 -6
  236. package/src/components/SyncStatus/SyncStatusDetail.stories.tsx +89 -0
  237. package/src/components/SyncStatus/sync-state.ts +101 -0
  238. package/src/components/index.ts +3 -2
  239. package/src/hooks/index.ts +0 -2
  240. package/src/hooks/usePath.ts +6 -9
  241. package/src/index.ts +0 -1
  242. package/src/translations.ts +7 -19
  243. package/src/types/collection.ts +4 -6
  244. package/src/types/thread.ts +8 -14
  245. package/src/types/types.ts +101 -115
  246. package/src/util.tsx +172 -75
  247. package/dist/lib/browser/app-graph-builder-7X3SIPCD.mjs +0 -328
  248. package/dist/lib/browser/app-graph-builder-7X3SIPCD.mjs.map +0 -7
  249. package/dist/lib/browser/app-graph-serializer-VRU57AEZ.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-43UQWMD3.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-AR5R2F6B.mjs +0 -88
  252. package/dist/lib/browser/chunk-AR5R2F6B.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-CY35NLWL.mjs +0 -296
  254. package/dist/lib/browser/chunk-CY35NLWL.mjs.map +0 -7
  255. package/dist/lib/browser/chunk-IQFFOAWD.mjs.map +0 -7
  256. package/dist/lib/browser/chunk-UBSVH2NQ.mjs.map +0 -7
  257. package/dist/lib/browser/identity-created-ANRJHNMQ.mjs.map +0 -7
  258. package/dist/lib/browser/intent-resolver-KRINV5QI.mjs.map +0 -7
  259. package/dist/lib/browser/react-surface-J7T2IMH4.mjs.map +0 -7
  260. package/dist/lib/browser/schema-defs-OCBY7APN.mjs +0 -26
  261. package/dist/lib/browser/schema-defs-OCBY7APN.mjs.map +0 -7
  262. package/dist/lib/browser/schema-tools-MYC4LTQD.mjs.map +0 -7
  263. package/dist/lib/browser/settings-G24447B7.mjs.map +0 -7
  264. package/dist/lib/browser/spaces-ready-5I3RKYTT.mjs.map +0 -7
  265. package/dist/lib/browser/state-SI4B5GHC.mjs.map +0 -7
  266. package/dist/lib/node/app-graph-builder-C2ISDMSL.cjs +0 -328
  267. package/dist/lib/node/app-graph-builder-C2ISDMSL.cjs.map +0 -7
  268. package/dist/lib/node/app-graph-serializer-VLBCR3IX.cjs.map +0 -7
  269. package/dist/lib/node/chunk-5YHUQJVB.cjs.map +0 -7
  270. package/dist/lib/node/chunk-DQN4ZQDW.cjs +0 -119
  271. package/dist/lib/node/chunk-DQN4ZQDW.cjs.map +0 -7
  272. package/dist/lib/node/chunk-K6ZO4WDJ.cjs +0 -324
  273. package/dist/lib/node/chunk-K6ZO4WDJ.cjs.map +0 -7
  274. package/dist/lib/node/chunk-MXBE2VET.cjs.map +0 -7
  275. package/dist/lib/node/chunk-SCATWJKX.cjs.map +0 -7
  276. package/dist/lib/node/identity-created-NIPYGVG3.cjs.map +0 -7
  277. package/dist/lib/node/intent-resolver-MJVRY6YE.cjs.map +0 -7
  278. package/dist/lib/node/react-surface-RYKSYYKM.cjs.map +0 -7
  279. package/dist/lib/node/schema-defs-2HJLXSNK.cjs.map +0 -7
  280. package/dist/lib/node/schema-tools-OE3MFYYH.cjs.map +0 -7
  281. package/dist/lib/node/settings-AFWO4AWK.cjs.map +0 -7
  282. package/dist/lib/node/spaces-ready-BMPXSFHF.cjs.map +0 -7
  283. package/dist/lib/node/state-L2ZSDKLS.cjs.map +0 -7
  284. package/dist/lib/node-esm/app-graph-builder-WVCQZ324.mjs +0 -329
  285. package/dist/lib/node-esm/app-graph-builder-WVCQZ324.mjs.map +0 -7
  286. package/dist/lib/node-esm/app-graph-serializer-GEUYYXKD.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-5NIBYPVF.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-CLRCW6PU.mjs +0 -297
  289. package/dist/lib/node-esm/chunk-CLRCW6PU.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-FI3WV22Y.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-HNKAG5CX.mjs +0 -90
  292. package/dist/lib/node-esm/chunk-HNKAG5CX.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-S2W6HS4A.mjs.map +0 -7
  294. package/dist/lib/node-esm/identity-created-O5X2FFWU.mjs.map +0 -7
  295. package/dist/lib/node-esm/intent-resolver-JT6EB47M.mjs.map +0 -7
  296. package/dist/lib/node-esm/react-surface-ZNNMO7QQ.mjs.map +0 -7
  297. package/dist/lib/node-esm/schema-defs-B74N3GQ5.mjs +0 -27
  298. package/dist/lib/node-esm/schema-defs-B74N3GQ5.mjs.map +0 -7
  299. package/dist/lib/node-esm/schema-tools-YTJLA3NQ.mjs.map +0 -7
  300. package/dist/lib/node-esm/settings-MJVSCOI4.mjs.map +0 -7
  301. package/dist/lib/node-esm/spaces-ready-XKG57SL5.mjs.map +0 -7
  302. package/dist/lib/node-esm/state-QUDYGEU6.mjs.map +0 -7
  303. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  304. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  305. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +0 -1
  306. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +0 -1
  307. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +0 -1
  308. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +0 -1
  309. package/dist/types/src/components/ObjectSettings/index.d.ts.map +0 -1
  310. package/dist/types/src/components/SchemaContainer.d.ts +0 -13
  311. package/dist/types/src/components/SchemaContainer.d.ts.map +0 -1
  312. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +0 -7
  313. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +0 -1
  314. package/dist/types/src/hooks/useActiveSpace.d.ts +0 -4
  315. package/dist/types/src/hooks/useActiveSpace.d.ts.map +0 -1
  316. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +0 -14
  317. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +0 -1
  318. package/src/capabilities/schema-defs.ts +0 -30
  319. package/src/components/SchemaContainer.tsx +0 -59
  320. package/src/hooks/useActiveSpace.ts +0 -20
  321. package/src/hooks/useInputSurfaceLookup.tsx +0 -31
  322. /package/dist/lib/{browser/react-root-J3SP2HVW.mjs.map → node-esm/react-root-PRBJMWLQ.mjs.map} +0 -0
  323. /package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/ForeignKeys.d.ts +0 -0
  324. /package/dist/types/src/components/{ObjectSettings → ObjectSettingsContainer}/index.d.ts +0 -0
  325. /package/src/components/{ObjectSettings → ObjectSettingsContainer}/ForeignKeys.tsx +0 -0
  326. /package/src/components/{ObjectSettings → ObjectSettingsContainer}/index.ts +0 -0
@@ -2,19 +2,19 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, contributes, createIntent, type PluginsContext } from '@dxos/app-framework';
6
6
  import { isSpace } from '@dxos/client/echo';
7
- import { live } from '@dxos/live-object';
7
+ import { create } from '@dxos/live-object';
8
8
 
9
9
  import { SPACE_PLUGIN } from '../meta';
10
10
  import translations from '../translations';
11
- import { CollectionType, SpaceAction, SPACE_TYPE } from '../types';
12
- import { SPACES } from '../util';
11
+ import { CollectionType, SpaceAction } from '../types';
12
+ import { SPACES, SPACE_TYPE } from '../util';
13
13
 
14
14
  // https://stackoverflow.com/a/19016910
15
15
  const DIRECTORY_TYPE = 'text/directory';
16
16
 
17
- export default (context: PluginContext) =>
17
+ export default (context: PluginsContext) =>
18
18
  contributes(Capabilities.AppGraphSerializer, [
19
19
  {
20
20
  inputType: SPACES,
@@ -37,7 +37,7 @@ export default (context: PluginContext) =>
37
37
  type: DIRECTORY_TYPE,
38
38
  }),
39
39
  deserialize: async (data) => {
40
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
40
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
41
41
  const result = await dispatch(createIntent(SpaceAction.Create, { name: data.name, edgeReplication: true }));
42
42
  return result.data?.space;
43
43
  },
@@ -59,11 +59,11 @@ export default (context: PluginContext) =>
59
59
  return;
60
60
  }
61
61
 
62
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
62
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
63
63
  const result = await dispatch(
64
64
  createIntent(SpaceAction.AddObject, {
65
65
  target: collection,
66
- object: live(CollectionType, { name: data.name, objects: [], views: {} }),
66
+ object: create(CollectionType, { name: data.name, objects: [], views: {} }),
67
67
  }),
68
68
  );
69
69
 
@@ -2,22 +2,22 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginContext, Capabilities } from '@dxos/app-framework';
6
- import { live, makeRef } from '@dxos/live-object';
5
+ import { contributes, type PluginsContext, Capabilities } from '@dxos/app-framework';
6
+ import { create, makeRef } from '@dxos/live-object';
7
7
  import { Migrations } from '@dxos/migrations';
8
8
  import { ClientCapabilities } from '@dxos/plugin-client';
9
9
 
10
10
  import { CollectionType } from '../types';
11
11
 
12
- export default async (context: PluginContext) => {
13
- const client = context.getCapability(ClientCapabilities.Client);
12
+ export default async (context: PluginsContext) => {
13
+ const client = context.requestCapability(ClientCapabilities.Client);
14
14
  await client.spaces.waitUntilReady();
15
15
 
16
16
  const defaultSpace = client.spaces.default;
17
17
  await defaultSpace.waitUntilReady();
18
18
 
19
19
  // Create root collection structure.
20
- defaultSpace.properties[CollectionType.typename] = makeRef(live(CollectionType, { objects: [], views: {} }));
20
+ defaultSpace.properties[CollectionType.typename] = makeRef(create(CollectionType, { objects: [], views: {} }));
21
21
  if (Migrations.versionProperty) {
22
22
  defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;
23
23
  }
@@ -10,8 +10,8 @@ export const IdentityCreated = lazy(() => import('./identity-created'));
10
10
  export const IntentResolver = lazy(() => import('./intent-resolver'));
11
11
  export const ReactRoot = lazy(() => import('./react-root'));
12
12
  export const ReactSurface = lazy(() => import('./react-surface'));
13
- export const SchemaDefs = lazy(() => import('./schema-defs'));
14
- export const SchemaTools = lazy(() => import('./schema-tools'));
13
+ export const Schema = lazy(() => import('./schema'));
14
+ export const Tools = lazy(() => import('./schema-tools'));
15
15
  export const SpaceSettings = lazy(() => import('./settings'));
16
16
  export const SpaceState = lazy(() => import('./state'));
17
17
  export const SpacesReady = lazy(() => import('./spaces-ready'));
@@ -2,26 +2,26 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Effect } from 'effect';
5
+ import { pipe } from 'effect';
6
6
 
7
7
  import {
8
8
  Capabilities,
9
+ chain,
9
10
  contributes,
10
11
  createIntent,
11
12
  createResolver,
12
13
  LayoutAction,
13
- type PluginContext,
14
+ type PluginsContext,
14
15
  } from '@dxos/app-framework';
15
16
  import { type Expando, getTypename, type HasId } from '@dxos/echo-schema';
16
17
  import { invariant } from '@dxos/invariant';
17
- import { live, makeRef, type Live } from '@dxos/live-object';
18
+ import { create, makeRef, type ReactiveObject } from '@dxos/live-object';
18
19
  import { Migrations } from '@dxos/migrations';
19
20
  import { ClientCapabilities } from '@dxos/plugin-client';
21
+ import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
20
22
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
21
23
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
22
- import { isSpace, getSpace, SpaceState, fullyQualifiedId, isEchoObject } from '@dxos/react-client/echo';
23
- import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
24
- import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
24
+ import { isSpace, getSpace, SpaceState, type Space, fullyQualifiedId, isEchoObject } from '@dxos/react-client/echo';
25
25
 
26
26
  import { SpaceCapabilities } from './capabilities';
27
27
  import {
@@ -32,6 +32,7 @@ import {
32
32
  CREATE_OBJECT_DIALOG,
33
33
  type CreateObjectDialogProps,
34
34
  POPOVER_RENAME_OBJECT,
35
+ POPOVER_ADD_SPACE,
35
36
  } from '../components';
36
37
  import { SPACE_PLUGIN } from '../meta';
37
38
  import { CollectionAction, CollectionType, SpaceAction } from '../types';
@@ -41,14 +42,13 @@ import { cloneObject, COMPOSER_SPACE_LOCK, getNestedObjects } from '../util';
41
42
  const SPACE_MAX_OBJECTS = 500;
42
43
 
43
44
  type IntentResolverOptions = {
44
- context: PluginContext;
45
- createInvitationUrl: (invitationCode: string) => string;
45
+ context: PluginsContext;
46
46
  observability?: boolean;
47
47
  };
48
48
 
49
- export default ({ context, observability, createInvitationUrl }: IntentResolverOptions) => {
49
+ export default ({ context, observability }: IntentResolverOptions) => {
50
50
  const resolve = (typename: string) =>
51
- context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
51
+ context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
52
52
 
53
53
  return contributes(Capabilities.IntentResolver, [
54
54
  createResolver({
@@ -67,14 +67,14 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
67
67
  }),
68
68
  createResolver({
69
69
  intent: SpaceAction.Create,
70
- resolve: async ({ name, hue, icon, edgeReplication }) => {
71
- const client = context.getCapability(ClientCapabilities.Client);
72
- const space = await client.spaces.create({ name, hue, icon });
70
+ resolve: async ({ name, edgeReplication }) => {
71
+ const client = context.requestCapability(ClientCapabilities.Client);
72
+ const space = await client.spaces.create({ name });
73
73
  if (edgeReplication) {
74
74
  await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);
75
75
  }
76
76
  await space.waitUntilReady();
77
- const collection = live(CollectionType, { objects: [], views: {} });
77
+ const collection = create(CollectionType, { objects: [], views: {} });
78
78
  space.properties[CollectionType.typename] = makeRef(collection);
79
79
 
80
80
  if (Migrations.versionProperty) {
@@ -120,74 +120,52 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
120
120
  ],
121
121
  }),
122
122
  }),
123
- createResolver({
124
- intent: SpaceAction.OpenMembers,
125
- resolve: ({ space }) => ({
126
- intents: [
127
- createIntent(LayoutAction.Open, {
128
- part: 'main',
129
- subject: [`members-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`],
130
- options: {
131
- workspace: space.id,
132
- },
133
- }),
134
- ],
135
- }),
136
- }),
137
123
  createResolver({
138
124
  intent: SpaceAction.Share,
139
- resolve: ({ space, type, authMethod, multiUse, target }) => {
140
- const invitation = space.share({ type, authMethod, multiUse, target });
125
+ filter: (data): data is { space: Space } => !data.space.properties[COMPOSER_SPACE_LOCK],
126
+ resolve: ({ space }) => {
127
+ const layout = context.requestCapability(Capabilities.Layout);
128
+ const id = `${space.id}${ATTENDABLE_PATH_SEPARATOR}members`;
129
+ if (layout.active.includes(id)) {
130
+ return {
131
+ intents: [
132
+ createIntent(LayoutAction.ScrollIntoView, {
133
+ part: 'current',
134
+ subject: id,
135
+ }),
136
+ ],
137
+ };
138
+ }
139
+
141
140
  return {
142
- data: invitation,
143
- intents: observability
144
- ? [
145
- createIntent(ObservabilityAction.SendEvent, {
146
- name: 'space.share',
147
- properties: {
148
- spaceId: space.id,
149
- },
150
- }),
151
- ]
152
- : [],
141
+ intents: [
142
+ pipe(
143
+ createIntent(LayoutAction.SwitchWorkspace, {
144
+ part: 'workspace',
145
+ subject: space.id,
146
+ }),
147
+ chain(LayoutAction.Open, {
148
+ part: 'main',
149
+ subject: [space.id],
150
+ options: {
151
+ variant: 'members',
152
+ },
153
+ }),
154
+ ),
155
+ ...(observability
156
+ ? [
157
+ createIntent(ObservabilityAction.SendEvent, {
158
+ name: 'space.share',
159
+ properties: {
160
+ spaceId: space.id,
161
+ },
162
+ }),
163
+ ]
164
+ : []),
165
+ ],
153
166
  };
154
167
  },
155
168
  }),
156
- createResolver({
157
- intent: SpaceAction.GetShareLink,
158
- resolve: ({ space, target, copyToClipboard }) =>
159
- Effect.gen(function* () {
160
- const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
161
- const invitation = yield* dispatch(
162
- createIntent(SpaceAction.Share, {
163
- space,
164
- type: Invitation.Type.DELEGATED,
165
- authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
166
- multiUse: true,
167
- target,
168
- }),
169
- );
170
-
171
- // TODO(wittjosiah): Better api to for this.
172
- // NOTE: Delegated invitations are invalid until the connecting state when keys are filled in.
173
- const invitationCode = yield* Effect.tryPromise(
174
- () =>
175
- new Promise<string>((resolve) => {
176
- invitation.subscribe((invitation) => {
177
- if (invitation.state === Invitation.State.CONNECTING) {
178
- resolve(InvitationEncoder.encode(invitation));
179
- }
180
- });
181
- }),
182
- );
183
- const url = createInvitationUrl(invitationCode);
184
- if (copyToClipboard) {
185
- yield* Effect.tryPromise(() => navigator.clipboard.writeText(url));
186
- }
187
-
188
- return { data: url };
189
- }),
190
- }),
191
169
  createResolver({
192
170
  intent: SpaceAction.Lock,
193
171
  resolve: ({ space }) => {
@@ -245,19 +223,57 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
245
223
  };
246
224
  },
247
225
  }),
226
+ createResolver({
227
+ intent: SpaceAction.AddSpace,
228
+ resolve: () => {
229
+ return {
230
+ intents: [
231
+ createIntent(LayoutAction.UpdatePopover, {
232
+ part: 'popover',
233
+ subject: POPOVER_ADD_SPACE,
234
+ options: {
235
+ anchorId: SpaceAction.AddSpace._tag,
236
+ side: 'right',
237
+ },
238
+ }),
239
+ ],
240
+ };
241
+ },
242
+ }),
248
243
  createResolver({
249
244
  intent: SpaceAction.OpenSettings,
250
- resolve: ({ space }) => ({
251
- intents: [
252
- createIntent(LayoutAction.Open, {
253
- part: 'main',
254
- subject: [`properties-settings${ATTENDABLE_PATH_SEPARATOR}${space.id}`],
255
- options: {
256
- workspace: space.id,
257
- },
258
- }),
259
- ],
260
- }),
245
+ resolve: ({ space }) => {
246
+ const layout = context.requestCapability(Capabilities.Layout);
247
+ const id = `${space.id}${ATTENDABLE_PATH_SEPARATOR}settings`;
248
+ if (layout.active.includes(id)) {
249
+ return {
250
+ intents: [
251
+ createIntent(LayoutAction.ScrollIntoView, {
252
+ part: 'current',
253
+ subject: id,
254
+ }),
255
+ ],
256
+ };
257
+ }
258
+
259
+ return {
260
+ intents: [
261
+ pipe(
262
+ createIntent(LayoutAction.SwitchWorkspace, {
263
+ part: 'workspace',
264
+ subject: space.id,
265
+ }),
266
+ chain(LayoutAction.Open, {
267
+ part: 'main',
268
+ subject: [space.id],
269
+ options: {
270
+ variant: 'settings',
271
+ },
272
+ }),
273
+ ),
274
+ ],
275
+ };
276
+ },
261
277
  }),
262
278
  createResolver({
263
279
  intent: SpaceAction.Open,
@@ -274,7 +290,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
274
290
  createResolver({
275
291
  intent: SpaceAction.Migrate,
276
292
  resolve: async ({ space, version: targetVersion }) => {
277
- const state = context.getCapability(SpaceCapabilities.MutableState);
293
+ const state = context.requestCapability(SpaceCapabilities.MutableState);
278
294
 
279
295
  if (space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {
280
296
  state.sdkMigrationRunning[space.id] = true;
@@ -305,7 +321,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
305
321
  createResolver({
306
322
  intent: SpaceAction.OpenCreateObject,
307
323
  resolve: ({ target, navigable = true }) => {
308
- const state = context.getCapability(SpaceCapabilities.State);
324
+ const state = context.requestCapability(SpaceCapabilities.State);
309
325
 
310
326
  return {
311
327
  intents: [
@@ -317,7 +333,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
317
333
  props: {
318
334
  target,
319
335
  shouldNavigate: navigable
320
- ? (object: Live<any>) => !(object instanceof CollectionType) || state.navigableCollections
336
+ ? (object: ReactiveObject<any>) => !(object instanceof CollectionType) || state.navigableCollections
321
337
  : () => false,
322
338
  } satisfies Partial<CreateObjectDialogProps>,
323
339
  },
@@ -374,7 +390,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
374
390
  collection.objects.push(makeRef(object as HasId));
375
391
  } else {
376
392
  // TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.
377
- const collection = live(CollectionType, { objects: [makeRef(object as HasId)], views: {} });
393
+ const collection = create(CollectionType, { objects: [makeRef(object as HasId)], views: {} });
378
394
  space.properties[CollectionType.typename] = makeRef(collection);
379
395
  }
380
396
  }
@@ -405,7 +421,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
405
421
  createResolver({
406
422
  intent: SpaceAction.RemoveObjects,
407
423
  resolve: async ({ objects, target, deletionData }, undo) => {
408
- const layout = context.getCapability(Capabilities.Layout);
424
+ const layout = context.requestCapability(Capabilities.Layout);
409
425
 
410
426
  // All objects must be a member of the same space.
411
427
  const space = getSpace(objects[0]);
@@ -534,14 +550,14 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
534
550
  createResolver({
535
551
  intent: SpaceAction.WaitForObject,
536
552
  resolve: async ({ id }) => {
537
- const state = context.getCapability(SpaceCapabilities.MutableState);
553
+ const state = context.requestCapability(SpaceCapabilities.MutableState);
538
554
  state.awaiting = id;
539
555
  },
540
556
  }),
541
557
  createResolver({
542
558
  intent: CollectionAction.Create,
543
559
  resolve: async ({ name }) => ({
544
- data: { object: live(CollectionType, { name, objects: [], views: {} }) },
560
+ data: { object: create(CollectionType, { name, objects: [], views: {} }) },
545
561
  }),
546
562
  }),
547
563
  ]);
@@ -2,27 +2,20 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Schema } from 'effect';
6
- import React, { useCallback } from 'react';
5
+ import React from 'react';
7
6
 
8
- import { Capabilities, contributes, createSurface, Surface, useCapability, useLayout } from '@dxos/app-framework';
7
+ import { Capabilities, contributes, createSurface, Surface, useCapability } from '@dxos/app-framework';
9
8
  import { isInstanceOf } from '@dxos/echo-schema';
10
- import { findAnnotation } from '@dxos/effect';
11
9
  import { SettingsStore } from '@dxos/local-storage';
12
10
  import {
13
11
  getSpace,
14
12
  isEchoObject,
15
- isLiveObject,
13
+ isReactiveObject,
16
14
  isSpace,
17
- parseId,
18
15
  SpaceState,
19
- useSpace,
20
- type AnyLiveObject,
16
+ type ReactiveEchoObject,
21
17
  type Space,
22
18
  } from '@dxos/react-client/echo';
23
- import { Input } from '@dxos/react-ui';
24
- import { type InputProps } from '@dxos/react-ui-form';
25
- import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
26
19
  import { type JoinPanelProps } from '@dxos/shell/react';
27
20
 
28
21
  import { SpaceCapabilities } from './capabilities';
@@ -36,23 +29,25 @@ import {
36
29
  InlineSyncStatus,
37
30
  JOIN_DIALOG,
38
31
  JoinDialog,
39
- MembersContainer,
40
32
  MenuFooter,
41
- ObjectSettingsContainer,
42
33
  POPOVER_RENAME_OBJECT,
43
34
  POPOVER_RENAME_SPACE,
44
35
  PopoverRenameObject,
45
36
  PopoverRenameSpace,
46
- SchemaContainer,
47
37
  SmallPresenceLive,
48
38
  SpacePluginSettings,
49
39
  SpacePresence,
50
- SpaceSettingsContainer,
51
40
  SyncStatus,
52
41
  type CreateObjectDialogProps,
42
+ POPOVER_ADD_SPACE,
43
+ PopoverAddSpace,
44
+ SpaceSettingsContainer,
45
+ SpacePropertiesForm,
46
+ MembersContainer,
47
+ ObjectSettingsContainer,
53
48
  } from '../components';
54
49
  import { SPACE_PLUGIN } from '../meta';
55
- import { CollectionType, HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
50
+ import { CollectionType, type SpaceSettingsProps } from '../types';
56
51
 
57
52
  type ReactSurfaceOptions = {
58
53
  createInvitationUrl: (invitationCode: string) => string;
@@ -82,64 +77,33 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
82
77
  component: ({ data }) => <CollectionMain collection={data.subject} />,
83
78
  }),
84
79
  createSurface({
85
- id: `${SPACE_PLUGIN}/plugin-settings`,
80
+ id: `${SPACE_PLUGIN}/members`,
86
81
  role: 'article',
87
- filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
88
- data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
89
- component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
82
+ position: 'hoist',
83
+ filter: (data): data is { subject: Space; variant: 'members' } =>
84
+ isSpace(data.subject) && data.variant === 'members',
85
+ component: ({ data }) => <MembersContainer space={data.subject} createInvitationUrl={createInvitationUrl} />,
90
86
  }),
91
87
  createSurface({
92
- id: `${SPACE_PLUGIN}/companion/object-settings`,
88
+ id: `${SPACE_PLUGIN}/settings`,
93
89
  role: 'article',
94
- filter: (data): data is { companionTo: AnyLiveObject<any> } =>
95
- isEchoObject(data.companionTo) && data.subject === 'settings',
96
- component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
90
+ position: 'hoist',
91
+ filter: (data): data is { subject: Space; variant: 'settings' } =>
92
+ isSpace(data.subject) && data.variant === 'settings',
93
+ component: ({ data }) => <SpaceSettingsContainer space={data.subject} />,
97
94
  }),
98
95
  createSurface({
99
- id: `${SPACE_PLUGIN}/space-settings-properties`,
96
+ id: `${SPACE_PLUGIN}/companion/object-settings`,
100
97
  role: 'article',
101
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,
102
- component: () => {
103
- const layout = useLayout();
104
- const { spaceId } = parseId(layout.workspace);
105
- const space = useSpace(spaceId);
106
- if (!space || !spaceId) {
107
- return null;
108
- }
109
-
110
- return <SpaceSettingsContainer space={space} />;
111
- },
98
+ filter: (data): data is { companionTo: ReactiveEchoObject<any> } =>
99
+ isEchoObject(data.companionTo) && data.subject === 'settings',
100
+ component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
112
101
  }),
113
102
  createSurface({
114
- id: `${SPACE_PLUGIN}/space-settings-members`,
115
- role: 'article',
116
- position: 'hoist',
117
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,
118
- component: () => {
119
- const layout = useLayout();
120
- const { spaceId } = parseId(layout.workspace);
121
- const space = useSpace(spaceId);
122
- if (!space || !spaceId) {
123
- return null;
124
- }
125
-
126
- return <MembersContainer space={space} createInvitationUrl={createInvitationUrl} />;
127
- },
128
- }),
129
- createSurface({
130
- id: `${SPACE_PLUGIN}/space-settings-schema`,
131
- role: 'article',
132
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,
133
- component: () => {
134
- const layout = useLayout();
135
- const { spaceId } = parseId(layout.workspace);
136
- const space = useSpace(spaceId);
137
- if (!space || !spaceId) {
138
- return null;
139
- }
140
-
141
- return <SchemaContainer space={space} />;
142
- },
103
+ id: `${SPACE_PLUGIN}/space-settings--properties`,
104
+ role: 'space-settings--properties',
105
+ filter: (data): data is { subject: Space } => isSpace(data.subject),
106
+ component: ({ data }) => <SpacePropertiesForm space={data.subject} />,
143
107
  }),
144
108
  createSurface({
145
109
  id: JOIN_DIALOG,
@@ -159,44 +123,6 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
159
123
  filter: (data): data is { props: CreateObjectDialogProps } => data.component === CREATE_OBJECT_DIALOG,
160
124
  component: ({ data }) => <CreateObjectDialog {...data.props} />,
161
125
  }),
162
- createSurface({
163
- id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,
164
- role: 'form-input',
165
- filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
166
- const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
167
- return !!annotation;
168
- },
169
- component: ({ data: _, ...inputProps }) => {
170
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
171
- const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
172
- const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
173
- return (
174
- <Input.Root>
175
- <Input.Label>{label}</Input.Label>
176
- <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
177
- </Input.Root>
178
- );
179
- },
180
- }),
181
- createSurface({
182
- id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,
183
- role: 'form-input',
184
- filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
185
- const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
186
- return !!annotation;
187
- },
188
- component: ({ data: _, ...inputProps }) => {
189
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
190
- const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
191
- const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
192
- return (
193
- <Input.Root>
194
- <Input.Label>{label}</Input.Label>
195
- <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
196
- </Input.Root>
197
- );
198
- },
199
- }),
200
126
  createSurface({
201
127
  id: POPOVER_RENAME_SPACE,
202
128
  role: 'popover',
@@ -206,20 +132,20 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
206
132
  createSurface({
207
133
  id: POPOVER_RENAME_OBJECT,
208
134
  role: 'popover',
209
- filter: (data): data is { props: AnyLiveObject<any> } =>
210
- data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
135
+ filter: (data): data is { props: ReactiveEchoObject<any> } =>
136
+ data.component === POPOVER_RENAME_OBJECT && isReactiveObject(data.props),
211
137
  component: ({ data }) => <PopoverRenameObject object={data.props} />,
212
138
  }),
213
139
  createSurface({
214
- id: `${SPACE_PLUGIN}/menu-footer`,
215
- role: 'menu-footer',
216
- filter: (data): data is { subject: AnyLiveObject<any> } => isEchoObject(data.subject),
217
- component: ({ data }) => <MenuFooter object={data.subject} />,
140
+ id: POPOVER_ADD_SPACE,
141
+ role: 'popover',
142
+ filter: (data): data is any => data.component === POPOVER_ADD_SPACE,
143
+ component: () => <PopoverAddSpace />,
218
144
  }),
219
145
  createSurface({
220
146
  id: `${SPACE_PLUGIN}/navtree-presence`,
221
147
  role: 'navtree-item-end',
222
- filter: (data): data is { id: string; subject: AnyLiveObject<any>; open?: boolean } =>
148
+ filter: (data): data is { id: string; subject: ReactiveEchoObject<any>; open?: boolean } =>
223
149
  typeof data.id === 'string' && isEchoObject(data.subject),
224
150
  component: ({ data }) => {
225
151
  // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.
@@ -246,7 +172,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
246
172
  id: `${SPACE_PLUGIN}/navbar-presence`,
247
173
  role: 'navbar-end',
248
174
  position: 'hoist',
249
- filter: (data): data is { subject: Space | AnyLiveObject<any> } =>
175
+ filter: (data): data is { subject: Space | ReactiveEchoObject<any> } =>
250
176
  isSpace(data.subject) || isEchoObject(data.subject),
251
177
  component: ({ data }) => {
252
178
  const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);
@@ -265,6 +191,19 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
265
191
  filter: (data): data is { subject: CollectionType } => isInstanceOf(CollectionType, data.subject),
266
192
  component: ({ data }) => <CollectionSection collection={data.subject} />,
267
193
  }),
194
+ createSurface({
195
+ id: `${SPACE_PLUGIN}/plugin-settings`,
196
+ role: 'article',
197
+ filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
198
+ data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
199
+ component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
200
+ }),
201
+ createSurface({
202
+ id: `${SPACE_PLUGIN}/menu-footer`,
203
+ role: 'menu-footer',
204
+ filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),
205
+ component: ({ data }) => <MenuFooter object={data.subject} />,
206
+ }),
268
207
  createSurface({
269
208
  id: `${SPACE_PLUGIN}/status`,
270
209
  role: 'status',