@dxos/plugin-space 0.8.4-main.c1de068 → 0.8.4-main.c4373fc

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 (272) hide show
  1. package/dist/lib/browser/{CollectionMain-D2B75XBS.mjs → CollectionMain-AX7KKXWP.mjs} +4 -4
  2. package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +7 -0
  3. package/dist/lib/browser/{ObjectDetailsPanel-YPTDQKMG.mjs → ObjectDetailsPanel-SJ4XUXXX.mjs} +11 -9
  4. package/dist/lib/browser/ObjectDetailsPanel-SJ4XUXXX.mjs.map +7 -0
  5. package/dist/lib/browser/RecordMain-FHPCS6GM.mjs +68 -0
  6. package/dist/lib/browser/RecordMain-FHPCS6GM.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-builder-7CZZJS3S.mjs → app-graph-builder-Y2LBZX2G.mjs} +102 -61
  8. package/dist/lib/browser/app-graph-builder-Y2LBZX2G.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-425OVRTW.mjs} +14 -14
  10. package/dist/lib/browser/app-graph-serializer-425OVRTW.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-V7MJSSBQ.mjs → chunk-6KVKMOGQ.mjs} +148 -157
  12. package/dist/lib/browser/chunk-6KVKMOGQ.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-CVZAZRW4.mjs} +4 -4
  14. package/dist/lib/browser/chunk-CVZAZRW4.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-EIXZABXD.mjs +19 -0
  16. package/dist/lib/browser/chunk-EIXZABXD.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-IRKDREHY.mjs +11 -0
  18. package/dist/lib/browser/chunk-IRKDREHY.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-SGTQ52SU.mjs → chunk-OYHC63NL.mjs} +16 -10
  20. package/dist/lib/browser/chunk-OYHC63NL.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-PUF3B7XO.mjs +20 -0
  22. package/dist/lib/browser/chunk-PUF3B7XO.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-X6COEDOD.mjs} +99 -44
  24. package/dist/lib/browser/chunk-X6COEDOD.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-YZJWWMNB.mjs} +11 -10
  26. package/dist/lib/browser/chunk-YZJWWMNB.mjs.map +7 -0
  27. package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-PW2BA46S.mjs} +4 -4
  28. package/dist/lib/browser/{identity-created-23XJJV2N.mjs.map → identity-created-PW2BA46S.mjs.map} +3 -3
  29. package/dist/lib/browser/index.mjs +20 -40
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/{intent-resolver-TIXVDYN7.mjs → intent-resolver-2TBYHOBA.mjs} +47 -42
  32. package/dist/lib/browser/intent-resolver-2TBYHOBA.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/{react-root-N2J7TDRX.mjs → react-root-KMJXJ5VX.mjs} +11 -11
  35. package/dist/lib/browser/react-root-KMJXJ5VX.mjs.map +7 -0
  36. package/dist/lib/browser/{react-surface-TPNLWJJH.mjs → react-surface-YAJUAMER.mjs} +53 -42
  37. package/dist/lib/browser/react-surface-YAJUAMER.mjs.map +7 -0
  38. package/dist/lib/browser/{schema-defs-Z6FC4AHC.mjs → schema-defs-2OCPV7JF.mjs} +5 -5
  39. package/dist/lib/browser/schema-defs-2OCPV7JF.mjs.map +7 -0
  40. package/dist/lib/browser/{settings-4IMP5RYT.mjs → settings-UYYJ225A.mjs} +5 -5
  41. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-UYYJ225A.mjs.map} +1 -1
  42. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-YNZPWXA3.mjs} +18 -16
  43. package/dist/lib/browser/spaces-ready-YNZPWXA3.mjs.map +7 -0
  44. package/dist/lib/browser/{state-QYZAB45H.mjs → state-BPU73TYO.mjs} +7 -7
  45. package/dist/lib/browser/state-BPU73TYO.mjs.map +7 -0
  46. package/dist/lib/browser/types/index.mjs +2 -2
  47. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionMain-EU57SRYK.mjs} +4 -4
  48. package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +7 -0
  49. package/dist/lib/node-esm/{ObjectDetailsPanel-QKZEDSZK.mjs → ObjectDetailsPanel-P7D727OV.mjs} +11 -9
  50. package/dist/lib/node-esm/ObjectDetailsPanel-P7D727OV.mjs.map +7 -0
  51. package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs +70 -0
  52. package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-builder-KGIGWC72.mjs → app-graph-builder-DMNLDT7E.mjs} +102 -61
  54. package/dist/lib/node-esm/app-graph-builder-DMNLDT7E.mjs.map +7 -0
  55. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-ZEDSY77N.mjs} +14 -14
  56. package/dist/lib/node-esm/app-graph-serializer-ZEDSY77N.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-36TAYXV7.mjs +21 -0
  58. package/dist/lib/node-esm/chunk-36TAYXV7.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-7UIEPBQJ.mjs} +11 -10
  60. package/dist/lib/node-esm/chunk-7UIEPBQJ.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-JH6F4C3I.mjs → chunk-ADEZJQE3.mjs} +16 -10
  62. package/dist/lib/node-esm/chunk-ADEZJQE3.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-FLRC6XWU.mjs} +4 -4
  64. package/dist/lib/node-esm/chunk-FLRC6XWU.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-6X5DLJM5.mjs → chunk-L26ZIGHA.mjs} +148 -157
  66. package/dist/lib/node-esm/chunk-L26ZIGHA.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-HWNG4MEU.mjs → chunk-MWNATOXL.mjs} +2 -4
  68. package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-SVFKU7EW.mjs +20 -0
  70. package/dist/lib/node-esm/chunk-SVFKU7EW.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-ZFCCFELA.mjs} +99 -44
  72. package/dist/lib/node-esm/chunk-ZFCCFELA.mjs.map +7 -0
  73. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-MWTLGQRU.mjs} +4 -4
  74. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs.map → identity-created-MWTLGQRU.mjs.map} +3 -3
  75. package/dist/lib/node-esm/index.mjs +20 -40
  76. package/dist/lib/node-esm/index.mjs.map +3 -3
  77. package/dist/lib/node-esm/{intent-resolver-MHGHRGDT.mjs → intent-resolver-YOG27WOG.mjs} +47 -42
  78. package/dist/lib/node-esm/intent-resolver-YOG27WOG.mjs.map +7 -0
  79. package/dist/lib/node-esm/meta.json +1 -1
  80. package/dist/lib/node-esm/{react-root-KW3TGJGY.mjs → react-root-27QMJZD2.mjs} +11 -11
  81. package/dist/lib/node-esm/react-root-27QMJZD2.mjs.map +7 -0
  82. package/dist/lib/node-esm/{react-surface-UUIUUD6P.mjs → react-surface-RC73GAN5.mjs} +53 -42
  83. package/dist/lib/node-esm/react-surface-RC73GAN5.mjs.map +7 -0
  84. package/dist/lib/node-esm/{schema-defs-WHJM7UZE.mjs → schema-defs-X2Z7F2EV.mjs} +5 -5
  85. package/dist/lib/node-esm/schema-defs-X2Z7F2EV.mjs.map +7 -0
  86. package/dist/lib/node-esm/{settings-SAOBPND3.mjs → settings-Q736OQRP.mjs} +5 -5
  87. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-Q736OQRP.mjs.map} +1 -1
  88. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-XZQD7Q65.mjs} +18 -16
  89. package/dist/lib/node-esm/spaces-ready-XZQD7Q65.mjs.map +7 -0
  90. package/dist/lib/node-esm/{state-ZVEHQ4BJ.mjs → state-BY75TM32.mjs} +7 -7
  91. package/dist/lib/node-esm/state-BY75TM32.mjs.map +7 -0
  92. package/dist/lib/node-esm/types/index.mjs +2 -2
  93. package/dist/types/src/SpacePlugin.d.ts +1 -1
  94. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  96. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  98. package/dist/types/src/capabilities/capabilities.d.ts +4 -4
  99. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/identity-created.d.ts +1 -1
  101. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/index.d.ts +11 -12
  103. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  105. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  107. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  109. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  111. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/settings.d.ts +1 -1
  113. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  114. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/state.d.ts +1 -1
  116. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  118. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  119. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1584 -4
  120. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +5 -3
  122. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  123. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  124. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  125. package/dist/types/src/components/JoinDialog.d.ts +1 -1
  126. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  127. package/dist/types/src/components/MembersContainer.d.ts +3 -2
  128. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  129. package/dist/types/src/components/MembersContainer.stories.d.ts +1584 -5
  130. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +1 -1
  132. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  134. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  135. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
  137. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  138. package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -1
  139. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  140. package/dist/types/src/components/RecordMain.d.ts +7 -0
  141. package/dist/types/src/components/RecordMain.d.ts.map +1 -0
  142. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  143. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  144. package/dist/types/src/components/SpacePresence.stories.d.ts +1412 -4
  145. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  146. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  147. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1417 -4
  148. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  150. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1418 -5
  151. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  152. package/dist/types/src/components/ViewEditor.d.ts +1 -1
  153. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  154. package/dist/types/src/components/index.d.ts +8 -2
  155. package/dist/types/src/components/index.d.ts.map +1 -1
  156. package/dist/types/src/events.d.ts.map +1 -1
  157. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  158. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  159. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  160. package/dist/types/src/hooks/usePath.d.ts +1 -1
  161. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  162. package/dist/types/src/meta.d.ts +0 -1
  163. package/dist/types/src/meta.d.ts.map +1 -1
  164. package/dist/types/src/translations.d.ts +1216 -26
  165. package/dist/types/src/translations.d.ts.map +1 -1
  166. package/dist/types/src/types/types.d.ts +76 -96
  167. package/dist/types/src/types/types.d.ts.map +1 -1
  168. package/dist/types/src/util.d.ts +10 -7
  169. package/dist/types/src/util.d.ts.map +1 -1
  170. package/dist/types/tsconfig.tsbuildinfo +1 -1
  171. package/package.json +60 -58
  172. package/src/SpacePlugin.ts +204 -219
  173. package/src/capabilities/app-graph-builder.ts +127 -69
  174. package/src/capabilities/app-graph-serializer.ts +7 -7
  175. package/src/capabilities/capabilities.ts +12 -11
  176. package/src/capabilities/identity-created.ts +1 -1
  177. package/src/capabilities/index.ts +0 -1
  178. package/src/capabilities/intent-resolver.ts +37 -25
  179. package/src/capabilities/react-root.tsx +4 -3
  180. package/src/capabilities/react-surface.tsx +52 -38
  181. package/src/capabilities/schema-defs.ts +3 -2
  182. package/src/capabilities/spaces-ready.ts +11 -8
  183. package/src/capabilities/state.ts +5 -4
  184. package/src/components/AwaitingObject.tsx +3 -3
  185. package/src/components/CollectionMain.tsx +2 -2
  186. package/src/components/CollectionSection.tsx +2 -2
  187. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -10
  188. package/src/components/CreateDialog/CreateObjectDialog.tsx +24 -13
  189. package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
  190. package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -5
  191. package/src/components/JoinDialog.tsx +7 -7
  192. package/src/components/MembersContainer.stories.tsx +36 -10
  193. package/src/components/MembersContainer.tsx +13 -14
  194. package/src/components/MenuFooter.tsx +2 -2
  195. package/src/components/ObjectDetailsPanel.tsx +7 -5
  196. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
  197. package/src/components/ObjectSettings/ForeignKeys.tsx +3 -3
  198. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +3 -2
  199. package/src/components/PersistenceStatus.tsx +2 -2
  200. package/src/components/PopoverRenameObject.tsx +9 -15
  201. package/src/components/PopoverRenameSpace.tsx +4 -4
  202. package/src/components/RecordMain.tsx +43 -0
  203. package/src/components/SchemaContainer.tsx +5 -5
  204. package/src/components/SpacePluginSettings.tsx +8 -9
  205. package/src/components/SpacePresence.stories.tsx +23 -22
  206. package/src/components/SpacePresence.tsx +10 -10
  207. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  208. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +19 -18
  209. package/src/components/SyncStatus/InlineSyncStatus.tsx +3 -3
  210. package/src/components/SyncStatus/SyncStatus.stories.tsx +6 -7
  211. package/src/components/SyncStatus/SyncStatus.tsx +4 -3
  212. package/src/components/ViewEditor.tsx +13 -18
  213. package/src/components/index.ts +1 -0
  214. package/src/events.ts +7 -7
  215. package/src/hooks/useActiveSpace.ts +2 -2
  216. package/src/hooks/useInputSurfaceLookup.tsx +2 -2
  217. package/src/hooks/usePath.ts +1 -1
  218. package/src/meta.ts +1 -3
  219. package/src/translations.ts +9 -8
  220. package/src/types/types.ts +17 -13
  221. package/src/util.tsx +97 -40
  222. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  223. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  224. package/dist/lib/browser/app-graph-builder-7CZZJS3S.mjs.map +0 -7
  225. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  226. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  227. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  229. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  230. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  231. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  232. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-V7MJSSBQ.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  237. package/dist/lib/browser/intent-resolver-TIXVDYN7.mjs.map +0 -7
  238. package/dist/lib/browser/react-root-N2J7TDRX.mjs.map +0 -7
  239. package/dist/lib/browser/react-surface-TPNLWJJH.mjs.map +0 -7
  240. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  241. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  242. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  243. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  244. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  245. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  246. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  247. package/dist/lib/node-esm/app-graph-builder-KGIGWC72.mjs.map +0 -7
  248. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  249. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  251. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  253. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-6X5DLJM5.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  259. package/dist/lib/node-esm/intent-resolver-MHGHRGDT.mjs.map +0 -7
  260. package/dist/lib/node-esm/react-root-KW3TGJGY.mjs.map +0 -7
  261. package/dist/lib/node-esm/react-surface-UUIUUD6P.mjs.map +0 -7
  262. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  263. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  264. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  265. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  266. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
  267. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  268. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  269. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  270. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  271. package/src/capabilities/schema-tool.test.ts +0 -44
  272. package/src/capabilities/schema-tools.ts +0 -125
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Effect } from 'effect';
5
+ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import {
8
8
  Capabilities,
@@ -12,31 +12,32 @@ import {
12
12
  createIntent,
13
13
  createResolver,
14
14
  } from '@dxos/app-framework';
15
- import { Obj, Ref, Relation, Type } from '@dxos/echo';
15
+ import { Filter, Obj, Query, Ref, Relation, Type } from '@dxos/echo';
16
16
  import { invariant } from '@dxos/invariant';
17
17
  import { Migrations } from '@dxos/migrations';
18
18
  import { ClientCapabilities } from '@dxos/plugin-client';
19
19
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
20
20
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
21
- import { isSpace, getSpace, SpaceState, fullyQualifiedId } from '@dxos/react-client/echo';
21
+ import { SpaceState, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';
22
22
  import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
23
23
  import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
24
- import { DataType, ProjectionModel } from '@dxos/schema';
24
+ import { DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';
25
25
 
26
- import { SpaceCapabilities } from './capabilities';
27
26
  import {
28
27
  CREATE_OBJECT_DIALOG,
29
28
  CREATE_SPACE_DIALOG,
29
+ type CreateObjectDialogProps,
30
30
  JOIN_DIALOG,
31
+ type JoinDialogProps,
31
32
  POPOVER_RENAME_OBJECT,
32
33
  POPOVER_RENAME_SPACE,
33
- type CreateObjectDialogProps,
34
- type JoinDialogProps,
35
34
  } from '../components';
36
35
  import { SpaceEvents } from '../events';
37
- import { SPACE_PLUGIN } from '../meta';
36
+ import { meta } from '../meta';
38
37
  import { CollectionAction, SpaceAction } from '../types';
39
- import { cloneObject, COMPOSER_SPACE_LOCK, getNestedObjects } from '../util';
38
+ import { COMPOSER_SPACE_LOCK, cloneObject, getNestedObjects } from '../util';
39
+
40
+ import { SpaceCapabilities } from './capabilities';
40
41
 
41
42
  // TODO(wittjosiah): Remove.
42
43
  const SPACE_MAX_OBJECTS = 500;
@@ -87,15 +88,15 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
87
88
 
88
89
  // Create records smart collection.
89
90
  const records = Obj.make(DataType.QueryCollection, {
90
- query: { typename: DataType.StoredSchema.typename },
91
+ query: Query.select(Filter.typename(DataType.StoredSchema.typename)).ast,
91
92
  });
92
93
  collection.objects.push(Ref.make(records));
93
94
 
94
95
  // Allow other plugins to add default content.
95
96
  await context.activatePromise(SpaceEvents.SpaceCreated);
96
- const onSpaceCreatedCallbacks = context.getCapabilities(SpaceCapabilities.OnSpaceCreated);
97
- const spaceCreatedIntents = onSpaceCreatedCallbacks.map((onSpaceCreated) =>
98
- onSpaceCreated({ space, rootCollection: collection }),
97
+ const onCreateSpaceCallbacks = context.getCapabilities(SpaceCapabilities.onCreateSpace);
98
+ const spaceCreatedIntents = onCreateSpaceCallbacks.map((onCreateSpace) =>
99
+ onCreateSpace({ space, rootCollection: collection }),
99
100
  );
100
101
 
101
102
  return {
@@ -360,11 +361,17 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
360
361
  }),
361
362
  createResolver({
362
363
  intent: SpaceAction.AddSchema,
363
- resolve: async ({ space, name, schema: schemaInput }) => {
364
+ resolve: async ({ space, name, typename, version, schema: schemaInput }) => {
364
365
  const [schema] = await space.db.schemaRegistry.register([schemaInput]);
365
366
  if (name) {
366
367
  schema.storedSchema.name = name;
367
368
  }
369
+ if (typename) {
370
+ schema.storedSchema.typename = typename;
371
+ }
372
+ if (version) {
373
+ schema.storedSchema.version = version;
374
+ }
368
375
 
369
376
  await context.activatePromise(SpaceEvents.SchemaAdded);
370
377
  const onSchemaAdded = context.getCapabilities(SpaceCapabilities.OnSchemaAdded);
@@ -399,15 +406,16 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
399
406
  resolve: async ({ view, fieldId, deletionData }, undo) => {
400
407
  const space = getSpace(view);
401
408
  invariant(space);
402
- invariant(view.query.typename);
403
- const schema = await space.db.schemaRegistry.query({ typename: view.query.typename }).firstOrUndefined();
409
+ const typename = getTypenameFromQuery(view.query.ast);
410
+ invariant(typename);
411
+ const schema = await space.db.schemaRegistry.query({ typename }).firstOrUndefined();
404
412
  invariant(schema);
405
413
  const projection = new ProjectionModel(schema.jsonSchema, view.projection);
406
414
  if (!undo) {
407
415
  const { deleted, index } = projection.deleteFieldProjection(fieldId);
408
416
  return {
409
417
  undoable: {
410
- message: ['field deleted label', { ns: SPACE_PLUGIN }],
418
+ message: ['field deleted label', { ns: meta.id }],
411
419
  data: { deletionData: { ...deleted, index } },
412
420
  },
413
421
  };
@@ -419,7 +427,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
419
427
  }),
420
428
  createResolver({
421
429
  intent: SpaceAction.OpenCreateObject,
422
- resolve: ({ target, typename, navigable = true, onCreateObject }) => {
430
+ resolve: ({ target, views, typename, initialFormValues, navigable = true, onCreateObject }) => {
423
431
  const state = context.getCapability(SpaceCapabilities.State);
424
432
 
425
433
  return {
@@ -431,7 +439,9 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
431
439
  blockAlign: 'start',
432
440
  props: {
433
441
  target,
442
+ views,
434
443
  typename,
444
+ initialFormValues,
435
445
  onCreateObject,
436
446
  shouldNavigate: navigable
437
447
  ? (object: Obj.Any) => {
@@ -460,13 +470,13 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
460
470
  createIntent(LayoutAction.AddToast, {
461
471
  part: 'toast',
462
472
  subject: {
463
- id: `${SPACE_PLUGIN}/space-limit`,
464
- title: ['space limit label', { ns: SPACE_PLUGIN }],
465
- description: ['space limit description', { ns: SPACE_PLUGIN }],
473
+ id: `${meta.id}/space-limit`,
474
+ title: ['space limit label', { ns: meta.id }],
475
+ description: ['space limit description', { ns: meta.id }],
466
476
  duration: 5_000,
467
477
  icon: 'ph--warning--regular',
468
- actionLabel: ['remove deleted objects label', { ns: SPACE_PLUGIN }],
469
- actionAlt: ['remove deleted objects alt', { ns: SPACE_PLUGIN }],
478
+ actionLabel: ['remove deleted objects label', { ns: meta.id }],
479
+ actionAlt: ['remove deleted objects alt', { ns: meta.id }],
470
480
  closeLabel: ['close label', { ns: 'os' }],
471
481
  onAction: () => space.db.coreDatabase.unlinkDeletedObjects(),
472
482
  },
@@ -595,7 +605,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
595
605
  return {
596
606
  undoable: {
597
607
  // TODO(ZaymonFC): Pluralize if more than one object.
598
- message: [undoMessageKey, { ns: SPACE_PLUGIN }],
608
+ message: [undoMessageKey, { ns: meta.id }],
599
609
  data: { deletionData },
600
610
  },
601
611
  intents:
@@ -687,7 +697,9 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
687
697
  createResolver({
688
698
  intent: CollectionAction.CreateQueryCollection,
689
699
  resolve: async ({ name, typename }) => ({
690
- data: { object: Obj.make(DataType.QueryCollection, { name, query: { typename } }) },
700
+ data: {
701
+ object: Obj.make(DataType.QueryCollection, { name, query: Query.select(Filter.typename(typename)).ast }),
702
+ },
691
703
  }),
692
704
  }),
693
705
  ]);
@@ -6,13 +6,14 @@ import React from 'react';
6
6
 
7
7
  import { Capabilities, contributes, useCapability } from '@dxos/app-framework';
8
8
 
9
- import { SpaceCapabilities } from './capabilities';
10
9
  import { AwaitingObject } from '../components';
11
- import { SPACE_PLUGIN } from '../meta';
10
+ import { meta } from '../meta';
11
+
12
+ import { SpaceCapabilities } from './capabilities';
12
13
 
13
14
  export default () =>
14
15
  contributes(Capabilities.ReactRoot, {
15
- id: SPACE_PLUGIN,
16
+ id: meta.id,
16
17
  root: () => {
17
18
  const state = useCapability(SpaceCapabilities.State);
18
19
  return state.awaiting ? <AwaitingObject id={state.awaiting} /> : null;
@@ -2,14 +2,14 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Schema } from 'effect';
5
+ import type * as Schema from 'effect/Schema';
6
6
  import React, { useCallback, useMemo } from 'react';
7
7
 
8
8
  import {
9
9
  Capabilities,
10
+ Surface,
10
11
  contributes,
11
12
  createSurface,
12
- Surface,
13
13
  useCapabilities,
14
14
  useCapability,
15
15
  useLayout,
@@ -20,14 +20,14 @@ import { SettingsStore } from '@dxos/local-storage';
20
20
  import { ClientCapabilities } from '@dxos/plugin-client';
21
21
  import { useClient } from '@dxos/react-client';
22
22
  import {
23
+ type Space,
24
+ SpaceState,
23
25
  fullyQualifiedId,
24
26
  getSpace,
25
27
  isLiveObject,
26
28
  isSpace,
27
29
  parseId,
28
- SpaceState,
29
30
  useSpace,
30
- type Space,
31
31
  } from '@dxos/react-client/echo';
32
32
  import { Input, useTranslation } from '@dxos/react-ui';
33
33
  import { type InputProps, SelectInput } from '@dxos/react-ui-form';
@@ -35,13 +35,13 @@ import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
35
35
  import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
36
36
  import { type JoinPanelProps } from '@dxos/shell/react';
37
37
 
38
- import { SpaceCapabilities } from './capabilities';
39
38
  import {
40
- CollectionMain,
41
- CollectionSection,
42
39
  CREATE_OBJECT_DIALOG,
43
40
  CREATE_SPACE_DIALOG,
41
+ CollectionMain,
42
+ CollectionSection,
44
43
  CreateObjectDialog,
44
+ type CreateObjectDialogProps,
45
45
  CreateSpaceDialog,
46
46
  InlineSyncStatus,
47
47
  JOIN_DIALOG,
@@ -54,6 +54,7 @@ import {
54
54
  POPOVER_RENAME_SPACE,
55
55
  PopoverRenameObject,
56
56
  PopoverRenameSpace,
57
+ RecordMain,
57
58
  SchemaContainer,
58
59
  SmallPresenceLive,
59
60
  SpacePluginSettings,
@@ -61,21 +62,22 @@ import {
61
62
  SpaceSettingsContainer,
62
63
  SyncStatus,
63
64
  ViewEditor,
64
- type CreateObjectDialogProps,
65
65
  } from '../components';
66
- import { SPACE_PLUGIN } from '../meta';
66
+ import { meta } from '../meta';
67
67
  import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
68
68
 
69
+ import { SpaceCapabilities } from './capabilities';
70
+
69
71
  type ReactSurfaceOptions = {
70
72
  createInvitationUrl: (invitationCode: string) => string;
71
73
  };
72
74
 
73
- const OMIT = [DataType.Collection.typename, DataType.QueryCollection.typename];
75
+ const OMIT = [DataType.Collection.typename, Type.getTypename(DataType.QueryCollection)];
74
76
 
75
77
  export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
76
78
  contributes(Capabilities.ReactSurface, [
77
79
  createSurface({
78
- id: `${SPACE_PLUGIN}/article`,
80
+ id: `${meta.id}/article`,
79
81
  role: 'article',
80
82
  filter: (data): data is { subject: Space } =>
81
83
  // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
@@ -92,29 +94,36 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
92
94
  ),
93
95
  }),
94
96
  createSurface({
95
- id: `${SPACE_PLUGIN}/collection-fallback`,
97
+ id: `${meta.id}/record-article`,
98
+ role: 'article',
99
+ position: 'fallback',
100
+ filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
101
+ component: ({ data }) => <RecordMain record={data.subject} />,
102
+ }),
103
+ createSurface({
104
+ id: `${meta.id}/collection-fallback`,
96
105
  role: 'article',
97
106
  position: 'fallback',
98
107
  filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
99
108
  component: ({ data }) => <CollectionMain collection={data.subject} />,
100
109
  }),
101
110
  createSurface({
102
- id: `${SPACE_PLUGIN}/plugin-settings`,
111
+ id: `${meta.id}/plugin-settings`,
103
112
  role: 'article',
104
113
  filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
105
- data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
114
+ data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
106
115
  component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
107
116
  }),
108
117
  createSurface({
109
- id: `${SPACE_PLUGIN}/companion/object-settings`,
118
+ id: `${meta.id}/companion/object-settings`,
110
119
  role: 'article',
111
120
  filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
112
121
  component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
113
122
  }),
114
123
  createSurface({
115
- id: `${SPACE_PLUGIN}/space-settings-properties`,
124
+ id: `${meta.id}/space-settings-properties`,
116
125
  role: 'article',
117
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,
126
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
118
127
  component: () => {
119
128
  const layout = useLayout();
120
129
  const { spaceId } = parseId(layout.workspace);
@@ -127,10 +136,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
127
136
  },
128
137
  }),
129
138
  createSurface({
130
- id: `${SPACE_PLUGIN}/space-settings-members`,
139
+ id: `${meta.id}/space-settings-members`,
131
140
  role: 'article',
132
141
  position: 'hoist',
133
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,
142
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/members`,
134
143
  component: () => {
135
144
  const layout = useLayout();
136
145
  const { spaceId } = parseId(layout.workspace);
@@ -143,9 +152,9 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
143
152
  },
144
153
  }),
145
154
  createSurface({
146
- id: `${SPACE_PLUGIN}/space-settings-schema`,
155
+ id: `${meta.id}/space-settings-schema`,
147
156
  role: 'article',
148
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,
157
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
149
158
  component: () => {
150
159
  const layout = useLayout();
151
160
  const { spaceId } = parseId(layout.workspace);
@@ -158,7 +167,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
158
167
  },
159
168
  }),
160
169
  createSurface({
161
- id: `${SPACE_PLUGIN}/selected-objects`,
170
+ id: `${meta.id}/selected-objects`,
162
171
  role: 'article',
163
172
  filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>
164
173
  Obj.instanceOf(DataType.View, data.companionTo) && data.subject === 'selected-objects',
@@ -189,45 +198,45 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
189
198
  component: ({ data }) => <CreateObjectDialog {...data.props} />,
190
199
  }),
191
200
  createSurface({
192
- id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,
201
+ id: `${meta.id}/create-initial-space-form-[hue]`,
193
202
  role: 'form-input',
194
203
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
195
204
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
196
205
  return !!annotation;
197
206
  },
198
207
  component: ({ data: _, ...inputProps }) => {
199
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
208
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
200
209
  const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
201
210
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
202
211
  return (
203
212
  <Input.Root>
204
213
  <Input.Label>{label}</Input.Label>
205
- <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
214
+ <HuePicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
206
215
  </Input.Root>
207
216
  );
208
217
  },
209
218
  }),
210
219
  createSurface({
211
- id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,
220
+ id: `${meta.id}/create-initial-space-form-[icon]`,
212
221
  role: 'form-input',
213
222
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
214
223
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
215
224
  return !!annotation;
216
225
  },
217
226
  component: ({ data: _, ...inputProps }) => {
218
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
227
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
219
228
  const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
220
229
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
221
230
  return (
222
231
  <Input.Root>
223
232
  <Input.Label>{label}</Input.Label>
224
- <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
233
+ <IconPicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
225
234
  </Input.Root>
226
235
  );
227
236
  },
228
237
  }),
229
238
  createSurface({
230
- id: `${SPACE_PLUGIN}/typename-form-input`,
239
+ id: `${meta.id}/typename-form-input`,
231
240
  role: 'form-input',
232
241
  filter: (
233
242
  data,
@@ -275,14 +284,19 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
275
284
  annotation.includes('unused-static') &&
276
285
  whitelistedTypenames.has(Type.getTypename(schema)) &&
277
286
  !space.properties.staticRecords?.includes(Type.getTypename(schema));
287
+ const usedStatic =
288
+ annotation.includes('used-static') &&
289
+ whitelistedTypenames.has(Type.getTypename(schema)) &&
290
+ space.properties.staticRecords?.includes(Type.getTypename(schema));
278
291
  const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));
279
- return annotation.includes('static') || limitedStatic || unusedStatic || objectForm;
292
+ return annotation.includes('static') || limitedStatic || unusedStatic || usedStatic || objectForm;
280
293
  });
281
294
  const dynamic = space?.db.schemaRegistry.query().runSync();
282
295
  const typenames = Array.from(
283
296
  new Set<string>([
284
297
  ...(annotation.includes('limited-static') ||
285
298
  annotation.includes('unused-static') ||
299
+ annotation.includes('used-static') ||
286
300
  annotation.includes('static') ||
287
301
  annotation.includes('object-form')
288
302
  ? fixed.map((schema) => Type.getTypename(schema))
@@ -306,7 +320,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
306
320
  },
307
321
  }),
308
322
  createSurface({
309
- id: `${SPACE_PLUGIN}/object-settings`,
323
+ id: `${meta.id}/object-settings`,
310
324
  role: 'object-settings',
311
325
  filter: (data): data is { subject: DataType.View } => Obj.instanceOf(DataType.View, data.subject),
312
326
  component: ({ data }) => <ViewEditor view={data.subject} />,
@@ -325,13 +339,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
325
339
  component: ({ data }) => <PopoverRenameObject object={data.props} />,
326
340
  }),
327
341
  createSurface({
328
- id: `${SPACE_PLUGIN}/menu-footer`,
342
+ id: `${meta.id}/menu-footer`,
329
343
  role: 'menu-footer',
330
344
  filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
331
345
  component: ({ data }) => <MenuFooter object={data.subject} />,
332
346
  }),
333
347
  createSurface({
334
- id: `${SPACE_PLUGIN}/navtree-presence`,
348
+ id: `${meta.id}/navtree-presence`,
335
349
  role: 'navtree-item-end',
336
350
  filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
337
351
  typeof data.id === 'string' && Obj.isObject(data.subject),
@@ -343,7 +357,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
343
357
  }),
344
358
  // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
345
359
  createSurface({
346
- id: `${SPACE_PLUGIN}/navtree-presence-fallback`,
360
+ id: `${meta.id}/navtree-presence-fallback`,
347
361
  role: 'navtree-item-end',
348
362
  position: 'fallback',
349
363
  filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
@@ -351,13 +365,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
351
365
  }),
352
366
  // TODO(wittjosiah): Broken?
353
367
  createSurface({
354
- id: `${SPACE_PLUGIN}/navtree-sync-status`,
368
+ id: `${meta.id}/navtree-sync-status`,
355
369
  role: 'navtree-item-end',
356
370
  filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
357
371
  component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
358
372
  }),
359
373
  createSurface({
360
- id: `${SPACE_PLUGIN}/navbar-presence`,
374
+ id: `${meta.id}/navbar-presence`,
361
375
  role: 'navbar-end',
362
376
  position: 'hoist',
363
377
  filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
@@ -373,13 +387,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
373
387
  },
374
388
  }),
375
389
  createSurface({
376
- id: `${SPACE_PLUGIN}/collection-section`,
390
+ id: `${meta.id}/collection-section`,
377
391
  role: 'section',
378
392
  filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
379
393
  component: ({ data }) => <CollectionSection collection={data.subject} />,
380
394
  }),
381
395
  createSurface({
382
- id: `${SPACE_PLUGIN}/status`,
396
+ id: `${meta.id}/status`,
383
397
  role: 'status',
384
398
  component: () => <SyncStatus />,
385
399
  }),
@@ -2,12 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
6
  import { ClientCapabilities } from '@dxos/plugin-client';
7
7
 
8
- import { SpaceCapabilities } from './capabilities';
9
8
  import { type ObjectForm } from '../types';
10
9
 
10
+ import { SpaceCapabilities } from './capabilities';
11
+
11
12
  export default (context: PluginContext) => {
12
13
  const registry = context.getCapability(Capabilities.RxRegistry);
13
14
  const client = context.getCapability(ClientCapabilities.Client);
@@ -2,9 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Option } from 'effect';
5
+ import * as Option from 'effect/Option';
6
6
 
7
- import { contributes, createIntent, Capabilities, LayoutAction, type PluginContext } from '@dxos/app-framework';
7
+ import { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
8
8
  import { SubscriptionList } from '@dxos/async';
9
9
  import { Filter, Obj, Type } from '@dxos/echo';
10
10
  import { scheduledEffect } from '@dxos/echo-signals/core';
@@ -14,13 +14,14 @@ import { ClientCapabilities } from '@dxos/plugin-client';
14
14
  import { DeckCapabilities } from '@dxos/plugin-deck';
15
15
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
16
16
  import { PublicKey } from '@dxos/react-client';
17
- import { FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';
17
+ import { FQ_ID_LENGTH, SpaceState, parseFullyQualifiedId } from '@dxos/react-client/echo';
18
18
  import { ComplexMap, reduceGroupBy } from '@dxos/util';
19
19
 
20
- import { SpaceCapabilities } from './capabilities';
21
20
  import { SpaceAction } from '../types';
22
21
  import { COMPOSER_SPACE_LOCK, SHARED } from '../util';
23
22
 
23
+ import { SpaceCapabilities } from './capabilities';
24
+
24
25
  const ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;
25
26
  const WAIT_FOR_OBJECT_TIMEOUT = 5_000;
26
27
 
@@ -66,12 +67,14 @@ export default async (context: PluginContext) => {
66
67
  return;
67
68
  }
68
69
 
69
- const node = graph.getNode(active[0]).pipe(Option.getOrNull);
70
- if (!node && active[0].length === FQ_ID_LENGTH) {
70
+ const id = active[0];
71
+ const node = graph.getNode(id).pipe(Option.getOrNull);
72
+ if (!node && id.length === FQ_ID_LENGTH) {
73
+ void graph.initialize(id);
71
74
  const timeout = setTimeout(async () => {
72
- const node = graph.getNode(active[0]).pipe(Option.getOrNull);
75
+ const node = graph.getNode(id).pipe(Option.getOrNull);
73
76
  if (!node) {
74
- await dispatch(createIntent(SpaceAction.WaitForObject, { id: active[0] }));
77
+ await dispatch(createIntent(SpaceAction.WaitForObject, { id }));
75
78
  }
76
79
  }, WAIT_FOR_OBJECT_TIMEOUT);
77
80
 
@@ -4,17 +4,18 @@
4
4
 
5
5
  import { effect } from '@preact/signals-core';
6
6
 
7
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
7
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
8
8
  import { PublicKey } from '@dxos/keys';
9
9
  import { LocalStorageStore } from '@dxos/local-storage';
10
10
  import { ComplexMap } from '@dxos/util';
11
11
 
12
- import { SpaceCapabilities } from './capabilities';
13
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
14
13
  import { type PluginState } from '../types';
15
14
 
15
+ import { SpaceCapabilities } from './capabilities';
16
+
16
17
  export default (context: PluginContext) => {
17
- const state = new LocalStorageStore<PluginState>(SPACE_PLUGIN, {
18
+ const state = new LocalStorageStore<PluginState>(meta.id, {
18
19
  awaiting: undefined,
19
20
  spaceNames: {},
20
21
  viewersByObject: {},
@@ -4,12 +4,12 @@
4
4
 
5
5
  import React, { useCallback, useEffect, useState } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, useIntentDispatcher, useLayout } from '@dxos/app-framework';
7
+ import { LayoutAction, createIntent, useIntentDispatcher, useLayout } from '@dxos/app-framework';
8
8
  import { useClient } from '@dxos/react-client';
9
9
  import { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
10
10
  import { Button, Icon, Toast, useTranslation } from '@dxos/react-ui';
11
11
 
12
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
13
13
  import { SpaceAction } from '../types';
14
14
 
15
15
  const WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes
@@ -19,7 +19,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
19
19
  const [open, setOpen] = useState(true);
20
20
  const [waiting, setWaiting] = useState(true);
21
21
  const [found, setFound] = useState(false);
22
- const { t } = useTranslation(SPACE_PLUGIN);
22
+ const { t } = useTranslation(meta.id);
23
23
  const { dispatchPromise: dispatch } = useIntentDispatcher();
24
24
  const layout = useLayout();
25
25
 
@@ -8,10 +8,10 @@ import { useTranslation } from '@dxos/react-ui';
8
8
  import { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';
9
9
  import { type DataType } from '@dxos/schema';
10
10
 
11
- import { SPACE_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
12
 
13
13
  export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
14
- const { t } = useTranslation(SPACE_PLUGIN);
14
+ const { t } = useTranslation(meta.id);
15
15
 
16
16
  return (
17
17
  <div
@@ -7,10 +7,10 @@ import React from 'react';
7
7
  import { useTranslation } from '@dxos/react-ui';
8
8
  import { type DataType } from '@dxos/schema';
9
9
 
10
- import { SPACE_PLUGIN } from '../meta';
10
+ import { meta } from '../meta';
11
11
 
12
12
  export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
13
- const { t } = useTranslation(SPACE_PLUGIN);
13
+ const { t } = useTranslation(meta.id);
14
14
  // TODO(wittjosiah): Better placeholder.
15
15
  return (
16
16
  <div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>