@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.72ec0f3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/dist/lib/browser/{CollectionMain-D2B75XBS.mjs → CollectionArticle-WTHWY4YS.mjs} +10 -10
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-V3MP3CDK.mjs → app-graph-builder-VQAB3GCQ.mjs} +138 -90
  10. package/dist/lib/browser/app-graph-builder-VQAB3GCQ.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-KSLKMEPP.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-KSLKMEPP.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-ERQMHU7L.mjs} +124 -63
  14. package/dist/lib/browser/chunk-ERQMHU7L.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-J2BUK5E6.mjs} +587 -513
  16. package/dist/lib/browser/chunk-J2BUK5E6.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
  18. package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-SGTQ52SU.mjs → chunk-M2Z6D4ZI.mjs} +32 -21
  20. package/dist/lib/browser/chunk-M2Z6D4ZI.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-OLBBSOVI.mjs} +30 -17
  22. package/dist/lib/browser/chunk-OLBBSOVI.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-PU5IOFMG.mjs +167 -0
  24. package/dist/lib/browser/chunk-PU5IOFMG.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  26. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  28. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-NAXTPQXE.mjs} +6 -6
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +91 -91
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-Q2XWHAVA.mjs} +87 -85
  34. package/dist/lib/browser/intent-resolver-Q2XWHAVA.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-MM4HADPE.mjs +30 -0
  37. package/dist/lib/browser/react-root-MM4HADPE.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-YWZZQF7H.mjs → react-surface-SGZC3Y4U.mjs} +81 -105
  39. package/dist/lib/browser/react-surface-SGZC3Y4U.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-Z6FC4AHC.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
  41. package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-4IMP5RYT.mjs → settings-WKLGKUHQ.mjs} +5 -5
  43. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-WKLGKUHQ.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-C5QC2UFL.mjs} +21 -18
  45. package/dist/lib/browser/spaces-ready-C5QC2UFL.mjs.map +7 -0
  46. package/dist/lib/browser/{state-QYZAB45H.mjs → state-Q7YRE5KG.mjs} +7 -7
  47. package/dist/lib/browser/state-Q7YRE5KG.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +2 -2
  49. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionArticle-KHXYT3SH.mjs} +10 -10
  50. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +7 -0
  57. package/dist/lib/node-esm/{app-graph-builder-SG4VECBB.mjs → app-graph-builder-24JCLJPX.mjs} +138 -90
  58. package/dist/lib/node-esm/app-graph-builder-24JCLJPX.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-R723K764.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-R723K764.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-JH6F4C3I.mjs → chunk-2PN7QNGV.mjs} +32 -21
  62. package/dist/lib/node-esm/chunk-2PN7QNGV.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  64. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  66. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-ITQFSFQ3.mjs} +587 -513
  68. package/dist/lib/node-esm/chunk-ITQFSFQ3.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-TJPQDQNI.mjs +168 -0
  70. package/dist/lib/node-esm/chunk-TJPQDQNI.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-VH2EBZEV.mjs} +124 -63
  72. package/dist/lib/node-esm/chunk-VH2EBZEV.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-WC4VBFMA.mjs} +30 -17
  74. package/dist/lib/node-esm/chunk-WC4VBFMA.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
  76. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-OXLKCJE3.mjs} +6 -6
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +91 -91
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-YK4ESSET.mjs} +87 -85
  82. package/dist/lib/node-esm/intent-resolver-YK4ESSET.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-5Y7LJRX6.mjs → react-root-5ANDLQMX.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-5ANDLQMX.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-YQFNIKYT.mjs → react-surface-V7J2QB44.mjs} +81 -105
  87. package/dist/lib/node-esm/react-surface-V7J2QB44.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-WHJM7UZE.mjs → schema-defs-ZS2D47XW.mjs} +6 -6
  89. package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-SAOBPND3.mjs → settings-RBB5633M.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-RBB5633M.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-SJCXV6YH.mjs} +21 -18
  93. package/dist/lib/node-esm/spaces-ready-SJCXV6YH.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-ZVEHQ4BJ.mjs → state-362I5BMK.mjs} +7 -7
  95. package/dist/lib/node-esm/state-362I5BMK.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +2 -2
  97. package/dist/types/src/SpacePlugin.d.ts +1 -1
  98. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  102. package/dist/types/src/capabilities/capabilities.d.ts +7 -6
  103. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/identity-created.d.ts +1 -1
  105. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/index.d.ts +11 -12
  107. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  109. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  111. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  115. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/settings.d.ts +1 -1
  117. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  118. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/state.d.ts +1 -1
  120. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  121. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  122. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  123. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  124. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  125. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1694 -4
  129. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +7 -5
  131. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  132. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  133. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  134. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  135. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  136. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  137. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  138. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  139. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  140. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1697 -0
  141. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  142. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  143. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  147. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  148. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  149. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  150. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  151. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  152. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  153. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  154. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  155. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  156. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1530 -0
  158. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  159. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  160. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  161. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  162. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  163. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  164. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  165. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  166. package/dist/types/src/components/RecordArticle.stories.d.ts +1697 -0
  167. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  169. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  170. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  171. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  172. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  173. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1527 -0
  174. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  175. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  176. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  178. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  179. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  180. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  181. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1527 -4
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1528 -5
  186. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  188. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  189. package/dist/types/src/components/index.d.ts +10 -11
  190. package/dist/types/src/components/index.d.ts.map +1 -1
  191. package/dist/types/src/events.d.ts.map +1 -1
  192. package/dist/types/src/helpers/index.d.ts +2 -0
  193. package/dist/types/src/helpers/index.d.ts.map +1 -0
  194. package/dist/types/src/helpers/query.d.ts +8 -0
  195. package/dist/types/src/helpers/query.d.ts.map +1 -0
  196. package/dist/types/src/helpers/query.test.d.ts +2 -0
  197. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  198. package/dist/types/src/hooks/index.d.ts +1 -0
  199. package/dist/types/src/hooks/index.d.ts.map +1 -1
  200. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  202. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  203. package/dist/types/src/hooks/usePath.d.ts +1 -1
  204. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  206. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  207. package/dist/types/src/index.d.ts +1 -0
  208. package/dist/types/src/index.d.ts.map +1 -1
  209. package/dist/types/src/meta.d.ts +0 -1
  210. package/dist/types/src/meta.d.ts.map +1 -1
  211. package/dist/types/src/translations.d.ts +1326 -26
  212. package/dist/types/src/translations.d.ts.map +1 -1
  213. package/dist/types/src/types/types.d.ts +78 -96
  214. package/dist/types/src/types/types.d.ts.map +1 -1
  215. package/dist/types/src/util.d.ts +16 -11
  216. package/dist/types/src/util.d.ts.map +1 -1
  217. package/dist/types/tsconfig.tsbuildinfo +1 -1
  218. package/package.json +68 -63
  219. package/src/SpacePlugin.ts +230 -220
  220. package/src/capabilities/app-graph-builder.ts +214 -133
  221. package/src/capabilities/app-graph-serializer.ts +12 -12
  222. package/src/capabilities/capabilities.ts +19 -13
  223. package/src/capabilities/identity-created.ts +3 -3
  224. package/src/capabilities/index.ts +0 -1
  225. package/src/capabilities/intent-resolver.ts +81 -65
  226. package/src/capabilities/react-root.tsx +6 -4
  227. package/src/capabilities/react-surface.tsx +78 -145
  228. package/src/capabilities/schema-defs.ts +4 -3
  229. package/src/capabilities/spaces-ready.ts +16 -10
  230. package/src/capabilities/state.ts +5 -4
  231. package/src/components/AwaitingObject.tsx +12 -14
  232. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  233. package/src/components/CollectionSection.tsx +8 -6
  234. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
  235. package/src/components/CreateDialog/CreateObjectDialog.tsx +51 -33
  236. package/src/components/CreateDialog/CreateObjectPanel.tsx +24 -13
  237. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  238. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  239. package/src/components/JoinDialog/index.ts +5 -0
  240. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  241. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +22 -21
  242. package/src/components/MembersContainer/index.ts +5 -0
  243. package/src/components/MenuFooter.tsx +2 -2
  244. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  245. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  246. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  247. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +10 -16
  248. package/src/components/ObjectRenamePopover/index.ts +5 -0
  249. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
  250. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  251. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  252. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  253. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  254. package/src/components/ObjectSettings/index.ts +3 -1
  255. package/src/components/RecordArticle.stories.tsx +115 -0
  256. package/src/components/RecordArticle.tsx +114 -0
  257. package/src/components/SchemaContainer.tsx +25 -28
  258. package/src/components/SpacePluginSettings.tsx +16 -11
  259. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +24 -23
  260. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +22 -17
  261. package/src/components/SpacePresence/index.ts +5 -0
  262. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  263. package/src/components/SpaceRenamePopover/index.ts +5 -0
  264. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  265. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +49 -28
  266. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  267. package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
  268. package/src/components/SyncStatus/SyncStatus.tsx +109 -12
  269. package/src/components/ViewEditor.tsx +51 -23
  270. package/src/components/index.ts +7 -7
  271. package/src/events.ts +7 -7
  272. package/src/helpers/index.ts +5 -0
  273. package/src/helpers/query.test.ts +24 -0
  274. package/src/helpers/query.ts +158 -0
  275. package/src/hooks/index.ts +1 -0
  276. package/src/hooks/useActiveSpace.ts +3 -2
  277. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  278. package/src/hooks/usePath.ts +1 -1
  279. package/src/hooks/useTypeOptions.ts +59 -0
  280. package/src/index.ts +1 -0
  281. package/src/meta.ts +6 -3
  282. package/src/translations.ts +29 -14
  283. package/src/types/types.ts +31 -22
  284. package/src/util.tsx +131 -66
  285. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  286. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
  287. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  288. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
  289. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  290. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  291. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  292. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  293. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-FBJEXW54.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  296. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
  300. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  302. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  303. package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
  304. package/dist/lib/browser/react-root-CMWOGJG5.mjs +0 -29
  305. package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
  306. package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
  307. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  308. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  309. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  310. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  311. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  312. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  313. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
  314. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
  316. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
  318. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  320. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  322. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  324. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
  328. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  329. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  330. package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
  333. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  335. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  336. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  337. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
  338. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  339. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  340. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  341. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  342. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  343. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  344. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  345. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  346. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  347. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  349. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  350. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  351. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  352. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  353. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  354. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  355. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  356. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  357. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  358. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  359. package/src/capabilities/schema-tool.test.ts +0 -44
  360. package/src/capabilities/schema-tools.ts +0 -125
  361. package/src/components/MembersContainer.stories.tsx +0 -30
  362. package/src/components/ObjectDetailsPanel.tsx +0 -77
  363. package/src/components/PersistenceStatus.tsx +0 -83
@@ -2,80 +2,64 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Schema } from 'effect';
6
- import React, { useCallback, useMemo } from 'react';
5
+ import type * as Schema from 'effect/Schema';
6
+ import React, { useCallback } from 'react';
7
7
 
8
- import {
9
- Capabilities,
10
- contributes,
11
- createSurface,
12
- Surface,
13
- useCapabilities,
14
- useCapability,
15
- useLayout,
16
- } from '@dxos/app-framework';
17
- import { Obj, Type } from '@dxos/echo';
8
+ import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
9
+ import { Surface, useCapability, useLayout } from '@dxos/app-framework/react';
10
+ import { Obj } from '@dxos/echo';
18
11
  import { findAnnotation } from '@dxos/effect';
19
12
  import { SettingsStore } from '@dxos/local-storage';
20
- import { ClientCapabilities } from '@dxos/plugin-client';
21
- import { useClient } from '@dxos/react-client';
22
- import {
23
- fullyQualifiedId,
24
- getSpace,
25
- isLiveObject,
26
- isSpace,
27
- parseId,
28
- SpaceState,
29
- useSpace,
30
- type Space,
31
- } from '@dxos/react-client/echo';
32
- import { Input, useTranslation } from '@dxos/react-ui';
13
+ import { type Space, SpaceState, getSpace, isLiveObject, isSpace, parseId, useSpace } from '@dxos/react-client/echo';
14
+ import { Input } from '@dxos/react-ui';
33
15
  import { type InputProps, SelectInput } from '@dxos/react-ui-form';
34
16
  import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
35
- import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
17
+ import { Collection, type TypenameAnnotation, TypenameAnnotationId, View } from '@dxos/schema';
36
18
  import { type JoinPanelProps } from '@dxos/shell/react';
37
19
 
38
- import { SpaceCapabilities } from './capabilities';
20
+ // TODO(burdon): Component name standard: NounVerbComponent.
39
21
  import {
40
- CollectionMain,
41
- CollectionSection,
42
22
  CREATE_OBJECT_DIALOG,
43
23
  CREATE_SPACE_DIALOG,
24
+ CollectionArticle,
25
+ CollectionSection,
44
26
  CreateObjectDialog,
27
+ type CreateObjectDialogProps,
45
28
  CreateSpaceDialog,
46
29
  InlineSyncStatus,
47
30
  JOIN_DIALOG,
48
31
  JoinDialog,
49
32
  MembersContainer,
50
33
  MenuFooter,
34
+ OBJECT_RENAME_POPOVER,
51
35
  ObjectDetailsPanel,
36
+ ObjectRenamePopover,
52
37
  ObjectSettingsContainer,
53
- POPOVER_RENAME_OBJECT,
54
- POPOVER_RENAME_SPACE,
55
- PopoverRenameObject,
56
- PopoverRenameSpace,
38
+ RecordArticle,
39
+ SPACE_RENAME_POPOVER,
57
40
  SchemaContainer,
58
41
  SmallPresenceLive,
59
42
  SpacePluginSettings,
60
43
  SpacePresence,
44
+ SpaceRenamePopover,
61
45
  SpaceSettingsContainer,
62
46
  SyncStatus,
63
47
  ViewEditor,
64
- type CreateObjectDialogProps,
65
48
  } from '../components';
66
- import { SPACE_PLUGIN } from '../meta';
49
+ import { useTypeOptions } from '../hooks';
50
+ import { meta } from '../meta';
67
51
  import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
68
52
 
53
+ import { SpaceCapabilities } from './capabilities';
54
+
69
55
  type ReactSurfaceOptions = {
70
56
  createInvitationUrl: (invitationCode: string) => string;
71
57
  };
72
58
 
73
- const OMIT = [DataType.Collection.typename, DataType.QueryCollection.typename];
74
-
75
59
  export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
76
60
  contributes(Capabilities.ReactSurface, [
77
61
  createSurface({
78
- id: `${SPACE_PLUGIN}/article`,
62
+ id: `${meta.id}/article`,
79
63
  role: 'article',
80
64
  filter: (data): data is { subject: Space } =>
81
65
  // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
@@ -84,7 +68,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
84
68
  <Surface
85
69
  data={{
86
70
  id: data.subject.id,
87
- subject: data.subject.properties[DataType.Collection.typename]?.target,
71
+ subject: data.subject.properties[Collection.Collection.typename]?.target,
88
72
  }}
89
73
  role={role}
90
74
  {...rest}
@@ -92,29 +76,36 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
92
76
  ),
93
77
  }),
94
78
  createSurface({
95
- id: `${SPACE_PLUGIN}/collection-fallback`,
79
+ id: `${meta.id}/record-article`,
96
80
  role: 'article',
97
81
  position: 'fallback',
98
- filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
99
- component: ({ data }) => <CollectionMain collection={data.subject} />,
82
+ filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
83
+ component: ({ data }) => <RecordArticle subject={data.subject} />,
100
84
  }),
101
85
  createSurface({
102
- id: `${SPACE_PLUGIN}/plugin-settings`,
86
+ id: `${meta.id}/collection-fallback`,
87
+ role: 'article',
88
+ position: 'fallback',
89
+ filter: (data): data is { subject: Collection.Collection } => Obj.instanceOf(Collection.Collection, data.subject),
90
+ component: ({ data }) => <CollectionArticle subject={data.subject} />,
91
+ }),
92
+ createSurface({
93
+ id: `${meta.id}/plugin-settings`,
103
94
  role: 'article',
104
95
  filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
105
- data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
96
+ data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
106
97
  component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
107
98
  }),
108
99
  createSurface({
109
- id: `${SPACE_PLUGIN}/companion/object-settings`,
100
+ id: `${meta.id}/companion/object-settings`,
110
101
  role: 'article',
111
102
  filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
112
103
  component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
113
104
  }),
114
105
  createSurface({
115
- id: `${SPACE_PLUGIN}/space-settings-properties`,
106
+ id: `${meta.id}/space-settings-properties`,
116
107
  role: 'article',
117
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,
108
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
118
109
  component: () => {
119
110
  const layout = useLayout();
120
111
  const { spaceId } = parseId(layout.workspace);
@@ -127,10 +118,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
127
118
  },
128
119
  }),
129
120
  createSurface({
130
- id: `${SPACE_PLUGIN}/space-settings-members`,
121
+ id: `${meta.id}/space-settings-members`,
131
122
  role: 'article',
132
123
  position: 'hoist',
133
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,
124
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/members`,
134
125
  component: () => {
135
126
  const layout = useLayout();
136
127
  const { spaceId } = parseId(layout.workspace);
@@ -143,9 +134,9 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
143
134
  },
144
135
  }),
145
136
  createSurface({
146
- id: `${SPACE_PLUGIN}/space-settings-schema`,
137
+ id: `${meta.id}/space-settings-schema`,
147
138
  role: 'article',
148
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,
139
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
149
140
  component: () => {
150
141
  const layout = useLayout();
151
142
  const { spaceId } = parseId(layout.workspace);
@@ -158,14 +149,14 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
158
149
  },
159
150
  }),
160
151
  createSurface({
161
- id: `${SPACE_PLUGIN}/selected-objects`,
152
+ id: `${meta.id}/selected-objects`,
162
153
  role: 'article',
163
- filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>
164
- Obj.instanceOf(DataType.View, data.companionTo) && data.subject === 'selected-objects',
154
+ filter: (data): data is { companionTo: View.View; subject: 'selected-objects' } =>
155
+ Obj.instanceOf(View.View, data.companionTo) && data.subject === 'selected-objects',
165
156
  component: ({ data }) => (
166
157
  <ObjectDetailsPanel
167
- key={fullyQualifiedId(data.companionTo)}
168
- objectId={fullyQualifiedId(data.companionTo)}
158
+ key={Obj.getDXN(data.companionTo).toString()}
159
+ objectId={Obj.getDXN(data.companionTo).toString()}
169
160
  view={data.companionTo}
170
161
  />
171
162
  ),
@@ -189,49 +180,53 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
189
180
  component: ({ data }) => <CreateObjectDialog {...data.props} />,
190
181
  }),
191
182
  createSurface({
192
- id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,
183
+ id: `${meta.id}/create-initial-space-form-[hue]`,
193
184
  role: 'form-input',
194
185
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
195
186
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
196
187
  return !!annotation;
197
188
  },
198
189
  component: ({ data: _, ...inputProps }) => {
199
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
190
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
200
191
  const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
201
192
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
202
193
  return (
203
194
  <Input.Root>
204
195
  <Input.Label>{label}</Input.Label>
205
- <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
196
+ <HuePicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
206
197
  </Input.Root>
207
198
  );
208
199
  },
209
200
  }),
210
201
  createSurface({
211
- id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,
202
+ id: `${meta.id}/create-initial-space-form-[icon]`,
212
203
  role: 'form-input',
213
204
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
214
205
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
215
206
  return !!annotation;
216
207
  },
217
208
  component: ({ data: _, ...inputProps }) => {
218
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
209
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
219
210
  const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
220
211
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
221
212
  return (
222
213
  <Input.Root>
223
214
  <Input.Label>{label}</Input.Label>
224
- <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
215
+ <IconPicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
225
216
  </Input.Root>
226
217
  );
227
218
  },
228
219
  }),
229
220
  createSurface({
230
- id: `${SPACE_PLUGIN}/typename-form-input`,
221
+ id: `${meta.id}/typename-form-input`,
231
222
  role: 'form-input',
232
223
  filter: (
233
224
  data,
234
- ): data is { prop: string; schema: Schema.Schema<any>; target: Space | DataType.Collection | undefined } => {
225
+ ): data is {
226
+ prop: string;
227
+ schema: Schema.Schema<any>;
228
+ target: Space | Collection.Collection | undefined;
229
+ } => {
235
230
  if (data.prop !== 'typename') {
236
231
  return false;
237
232
  }
@@ -240,103 +235,41 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
240
235
  return !!annotation;
241
236
  },
242
237
  component: ({ data: { schema, target }, ...inputProps }) => {
243
- const { t } = useTranslation();
244
- const client = useClient();
245
238
  const props = inputProps as any as InputProps;
246
239
  const space = isSpace(target) ? target : getSpace(target);
247
- if (!space) {
248
- return null;
249
- }
250
-
251
240
  const annotation = findAnnotation<TypenameAnnotation[]>(schema.ast, TypenameAnnotationId)!;
252
-
253
- const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
254
- const whitelistedTypenames = useMemo(
255
- () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))),
256
- [schemaWhitelists],
257
- );
258
-
259
- const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
260
- const objectFormTypenames = useMemo(
261
- () =>
262
- new Set(
263
- objectForms
264
- .map((form) => Type.getTypename(form.objectSchema))
265
- // TODO(wittjosiah): Remove.
266
- .filter((typename) => !OMIT.includes(typename) && !typename.endsWith('View')),
267
- ),
268
- [objectForms],
269
- );
270
-
271
- const fixed = client.graph.schemaRegistry.schemas.filter((schema) => {
272
- const limitedStatic =
273
- annotation.includes('limited-static') && whitelistedTypenames.has(Type.getTypename(schema));
274
- const unusedStatic =
275
- annotation.includes('unused-static') &&
276
- whitelistedTypenames.has(Type.getTypename(schema)) &&
277
- !space.properties.staticRecords?.includes(Type.getTypename(schema));
278
- const usedStatic =
279
- annotation.includes('used-static') &&
280
- whitelistedTypenames.has(Type.getTypename(schema)) &&
281
- space.properties.staticRecords?.includes(Type.getTypename(schema));
282
- const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));
283
- return annotation.includes('static') || limitedStatic || unusedStatic || usedStatic || objectForm;
284
- });
285
- const dynamic = space?.db.schemaRegistry.query().runSync();
286
- const typenames = Array.from(
287
- new Set<string>([
288
- ...(annotation.includes('limited-static') ||
289
- annotation.includes('unused-static') ||
290
- annotation.includes('used-static') ||
291
- annotation.includes('static') ||
292
- annotation.includes('object-form')
293
- ? fixed.map((schema) => Type.getTypename(schema))
294
- : []),
295
- ...(annotation.includes('dynamic') ? dynamic.map((schema) => schema.typename) : []),
296
- ]),
297
- ).sort();
298
-
299
- const options = useMemo(
300
- () =>
301
- typenames
302
- .map((typename) => ({
303
- value: typename,
304
- label: t('typename label', { ns: typename, defaultValue: typename }),
305
- }))
306
- .toSorted((a, b) => a.label.localeCompare(b.label)),
307
- [t, typenames],
308
- );
241
+ const options = useTypeOptions({ space, annotation });
309
242
 
310
243
  return <SelectInput {...props} options={options} />;
311
244
  },
312
245
  }),
313
246
  createSurface({
314
- id: `${SPACE_PLUGIN}/object-settings`,
247
+ id: `${meta.id}/object-settings`,
315
248
  role: 'object-settings',
316
- filter: (data): data is { subject: DataType.View } => Obj.instanceOf(DataType.View, data.subject),
249
+ filter: (data): data is { subject: View.View } => Obj.instanceOf(View.View, data.subject),
317
250
  component: ({ data }) => <ViewEditor view={data.subject} />,
318
251
  }),
319
252
  createSurface({
320
- id: POPOVER_RENAME_SPACE,
253
+ id: SPACE_RENAME_POPOVER,
321
254
  role: 'card--popover',
322
- filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),
323
- component: ({ data }) => <PopoverRenameSpace space={data.props} />,
255
+ filter: (data): data is { props: Space } => data.component === SPACE_RENAME_POPOVER && isSpace(data.props),
256
+ component: ({ data }) => <SpaceRenamePopover space={data.props} />,
324
257
  }),
325
258
  createSurface({
326
- id: POPOVER_RENAME_OBJECT,
259
+ id: OBJECT_RENAME_POPOVER,
327
260
  role: 'card--popover',
328
261
  filter: (data): data is { props: Obj.Any } =>
329
- data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
330
- component: ({ data }) => <PopoverRenameObject object={data.props} />,
262
+ data.component === OBJECT_RENAME_POPOVER && isLiveObject(data.props),
263
+ component: ({ data }) => <ObjectRenamePopover object={data.props} />,
331
264
  }),
332
265
  createSurface({
333
- id: `${SPACE_PLUGIN}/menu-footer`,
266
+ id: `${meta.id}/menu-footer`,
334
267
  role: 'menu-footer',
335
268
  filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
336
269
  component: ({ data }) => <MenuFooter object={data.subject} />,
337
270
  }),
338
271
  createSurface({
339
- id: `${SPACE_PLUGIN}/navtree-presence`,
272
+ id: `${meta.id}/navtree-presence`,
340
273
  role: 'navtree-item-end',
341
274
  filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
342
275
  typeof data.id === 'string' && Obj.isObject(data.subject),
@@ -348,7 +281,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
348
281
  }),
349
282
  // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
350
283
  createSurface({
351
- id: `${SPACE_PLUGIN}/navtree-presence-fallback`,
284
+ id: `${meta.id}/navtree-presence-fallback`,
352
285
  role: 'navtree-item-end',
353
286
  position: 'fallback',
354
287
  filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
@@ -356,13 +289,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
356
289
  }),
357
290
  // TODO(wittjosiah): Broken?
358
291
  createSurface({
359
- id: `${SPACE_PLUGIN}/navtree-sync-status`,
292
+ id: `${meta.id}/navtree-sync-status`,
360
293
  role: 'navtree-item-end',
361
294
  filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
362
295
  component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
363
296
  }),
364
297
  createSurface({
365
- id: `${SPACE_PLUGIN}/navbar-presence`,
298
+ id: `${meta.id}/navbar-presence`,
366
299
  role: 'navbar-end',
367
300
  position: 'hoist',
368
301
  filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
@@ -370,7 +303,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
370
303
  const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);
371
304
  const object = isSpace(data.subject)
372
305
  ? data.subject.state.get() === SpaceState.SPACE_READY
373
- ? (space?.properties[DataType.Collection.typename]?.target as DataType.Collection)
306
+ ? (space?.properties[Collection.Collection.typename]?.target as Collection.Collection)
374
307
  : undefined
375
308
  : data.subject;
376
309
 
@@ -378,13 +311,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
378
311
  },
379
312
  }),
380
313
  createSurface({
381
- id: `${SPACE_PLUGIN}/collection-section`,
314
+ id: `${meta.id}/collection-section`,
382
315
  role: 'section',
383
- filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
384
- component: ({ data }) => <CollectionSection collection={data.subject} />,
316
+ filter: (data): data is { subject: Collection.Collection } => Obj.instanceOf(Collection.Collection, data.subject),
317
+ component: ({ data }) => <CollectionSection subject={data.subject} />,
385
318
  }),
386
319
  createSurface({
387
- id: `${SPACE_PLUGIN}/status`,
320
+ id: `${meta.id}/status`,
388
321
  role: 'status',
389
322
  component: () => <SyncStatus />,
390
323
  }),
@@ -2,14 +2,15 @@
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
- const registry = context.getCapability(Capabilities.RxRegistry);
13
+ const registry = context.getCapability(Capabilities.AtomRegistry);
13
14
  const client = context.getCapability(ClientCapabilities.Client);
14
15
 
15
16
  // TODO(wittjosiah): Unregister schemas when they are disabled.
@@ -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,16 +14,20 @@ 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 { SpaceState, parseId } 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
 
28
+ // E.g., dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
29
+ const ECHO_DXN_LENGTH = 3 + 1 + 4 + 1 + 33 + 1 + 26;
30
+
27
31
  export default async (context: PluginContext) => {
28
32
  const subscriptions = new SubscriptionList();
29
33
  const spaceSubscriptions = new SubscriptionList();
@@ -66,12 +70,14 @@ export default async (context: PluginContext) => {
66
70
  return;
67
71
  }
68
72
 
69
- const node = graph.getNode(active[0]).pipe(Option.getOrNull);
70
- if (!node && active[0].length === FQ_ID_LENGTH) {
73
+ const id = active[0];
74
+ const node = graph.getNode(id).pipe(Option.getOrNull);
75
+ if (!node && id.length === ECHO_DXN_LENGTH) {
76
+ void graph.initialize(id);
71
77
  const timeout = setTimeout(async () => {
72
- const node = graph.getNode(active[0]).pipe(Option.getOrNull);
78
+ const node = graph.getNode(id).pipe(Option.getOrNull);
73
79
  if (!node) {
74
- await dispatch(createIntent(SpaceAction.WaitForObject, { id: active[0] }));
80
+ await dispatch(createIntent(SpaceAction.WaitForObject, { id }));
75
81
  }
76
82
  }, WAIT_FOR_OBJECT_TIMEOUT);
77
83
 
@@ -114,7 +120,7 @@ export default async (context: PluginContext) => {
114
120
  // Group parts by space for efficient messaging.
115
121
  const idsBySpace = reduceGroupBy(active, (id) => {
116
122
  try {
117
- const [spaceId] = parseFullyQualifiedId(id);
123
+ const { spaceId } = parseId(id);
118
124
  return spaceId;
119
125
  } catch {
120
126
  return null;
@@ -123,7 +129,7 @@ export default async (context: PluginContext) => {
123
129
 
124
130
  const removedBySpace = reduceGroupBy(inactive, (id) => {
125
131
  try {
126
- const [spaceId] = parseFullyQualifiedId(id);
132
+ const { spaceId } = parseId(id);
127
133
  return spaceId;
128
134
  } catch {
129
135
  return null;
@@ -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,23 +4,25 @@
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 } from '@dxos/app-framework';
8
+ import { useIntentDispatcher, useLayout } from '@dxos/app-framework/react';
9
+ import { Obj } from '@dxos/echo';
8
10
  import { useClient } from '@dxos/react-client';
9
- import { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
11
+ import { Filter, useQuery } from '@dxos/react-client/echo';
10
12
  import { Button, Icon, Toast, useTranslation } from '@dxos/react-ui';
11
13
 
12
- import { SPACE_PLUGIN } from '../meta';
14
+ import { meta } from '../meta';
13
15
  import { SpaceAction } from '../types';
14
16
 
15
- const WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes
16
- const TOAST_TIMEOUT = 240e3; // 4 minutes
17
+ const WAIT_FOR_OBJECT_TIMEOUT = 3 * 60 * 1_000;
18
+ const TOAST_TIMEOUT = 4 * 60 * 1_000;
17
19
 
18
20
  export const AwaitingObject = ({ id }: { id: string }) => {
21
+ const { t } = useTranslation(meta.id);
22
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
19
23
  const [open, setOpen] = useState(true);
20
24
  const [waiting, setWaiting] = useState(true);
21
25
  const [found, setFound] = useState(false);
22
- const { t } = useTranslation(SPACE_PLUGIN);
23
- const { dispatchPromise: dispatch } = useIntentDispatcher();
24
26
  const layout = useLayout();
25
27
 
26
28
  const client = useClient();
@@ -31,17 +33,13 @@ export const AwaitingObject = ({ id }: { id: string }) => {
31
33
  return;
32
34
  }
33
35
 
34
- const timeout = setTimeout(() => {
35
- setWaiting(false);
36
- }, WAIT_FOR_OBJECT_TIMEOUT);
37
-
38
- () => clearTimeout(timeout);
36
+ const timeout = setTimeout(() => setWaiting(false), WAIT_FOR_OBJECT_TIMEOUT);
37
+ return () => clearTimeout(timeout);
39
38
  }, [id]);
40
39
 
41
40
  useEffect(() => {
42
- if (objects.findIndex((object) => fullyQualifiedId(object) === id) > -1) {
41
+ if (objects.findIndex((object) => Obj.getDXN(object).toString() === id) > -1) {
43
42
  setFound(true);
44
-
45
43
  if (layout.active.includes(id)) {
46
44
  setOpen(false);
47
45
  }
@@ -4,14 +4,15 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
+ import { type SurfaceComponentProps } from '@dxos/app-framework/react';
7
8
  import { useTranslation } from '@dxos/react-ui';
8
9
  import { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';
9
- import { type DataType } from '@dxos/schema';
10
+ import { type Collection } from '@dxos/schema';
10
11
 
11
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
12
13
 
13
- export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
14
- const { t } = useTranslation(SPACE_PLUGIN);
14
+ export const CollectionArticle = ({ subject }: SurfaceComponentProps<Collection.Collection>) => {
15
+ const { t } = useTranslation(meta.id);
15
16
 
16
17
  return (
17
18
  <div
@@ -23,10 +24,10 @@ export const CollectionMain = ({ collection }: { collection: DataType.Collection
23
24
  role='alert'
24
25
  className={mx(descriptionMessage, 'rounded-md p-8 font-normal text-lg max-is-[24rem] break-words')}
25
26
  >
26
- {collection.name ?? t('unnamed collection label')}
27
+ {subject.name ?? t('unnamed collection label')}
27
28
  </p>
28
29
  </div>
29
30
  );
30
31
  };
31
32
 
32
- export default CollectionMain;
33
+ export default CollectionArticle;
@@ -4,17 +4,19 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
+ import { type SurfaceComponentProps } from '@dxos/app-framework/react';
7
8
  import { useTranslation } from '@dxos/react-ui';
8
- import { type DataType } from '@dxos/schema';
9
+ import { type Collection } from '@dxos/schema';
9
10
 
10
- import { SPACE_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
+
13
+ export const CollectionSection = ({ role, subject }: SurfaceComponentProps<Collection.Collection>) => {
14
+ const { t } = useTranslation(meta.id);
11
15
 
12
- export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
13
- const { t } = useTranslation(SPACE_PLUGIN);
14
16
  // TODO(wittjosiah): Better placeholder.
15
17
  return (
16
- <div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>
17
- <span className='truncate'>{collection.name ?? t('unnamed collection label')}</span>
18
+ <div role={role} className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>
19
+ <span className='truncate'>{subject.name ?? t('unnamed collection label')}</span>
18
20
  </div>
19
21
  );
20
22
  };