@dxos/plugin-space 0.8.4-main.fd6878d → 0.8.4-main.fffef41

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 (366) 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-VZW75QPJ.mjs → app-graph-builder-DTM7BJ6D.mjs} +114 -97
  10. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-YPHYVZAP.mjs → app-graph-serializer-TIKXF43P.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-TIKXF43P.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-AFUOMLX6.mjs +167 -0
  14. package/dist/lib/browser/chunk-AFUOMLX6.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-PSIBVBTA.mjs → chunk-CKACGS7T.mjs} +576 -500
  16. package/dist/lib/browser/chunk-CKACGS7T.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-SMB4DGYO.mjs → chunk-KFUMADZF.mjs} +184 -60
  20. package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-WAXS2ZVX.mjs → chunk-VGKOXAPE.mjs} +27 -13
  22. package/dist/lib/browser/chunk-VGKOXAPE.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  24. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  26. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-3UFG6LQQ.mjs → chunk-ZQMSGD5J.mjs} +44 -22
  28. package/dist/lib/browser/chunk-ZQMSGD5J.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs → identity-created-NAXTPQXE.mjs} +5 -5
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +89 -91
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-TS6CCKST.mjs → intent-resolver-3FNTO3VW.mjs} +103 -85
  34. package/dist/lib/browser/intent-resolver-3FNTO3VW.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-Q7VBWBES.mjs +30 -0
  37. package/dist/lib/browser/react-root-Q7VBWBES.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-V3ARS2BP.mjs → react-surface-TTHS332A.mjs} +75 -109
  39. package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-5LBA43X5.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-FLLBP5KI.mjs → settings-45PGPO2V.mjs} +5 -5
  43. package/dist/lib/browser/{settings-FLLBP5KI.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-FXEP6XEW.mjs → spaces-ready-QCND4DVY.mjs} +15 -14
  45. package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
  46. package/dist/lib/browser/{state-K3UBPKYP.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-XNVQOJLE.mjs → app-graph-builder-FBJFWI4H.mjs} +114 -97
  58. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-PKVLWV6V.mjs → app-graph-serializer-BESQZAYU.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-BESQZAYU.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-S7MKRQHY.mjs → chunk-6VEONPNZ.mjs} +44 -22
  62. package/dist/lib/node-esm/chunk-6VEONPNZ.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs +168 -0
  64. package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  66. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  68. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-CTQMR7E3.mjs → chunk-OK2L7N2F.mjs} +184 -60
  70. package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-HYIZVPOA.mjs → chunk-QBRPYAEL.mjs} +27 -13
  72. package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-KYUHPPRN.mjs → chunk-XGAMJC5C.mjs} +576 -500
  74. package/dist/lib/node-esm/chunk-XGAMJC5C.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-AL7NNCKH.mjs → identity-created-OXLKCJE3.mjs} +5 -5
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +89 -91
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-W6P27SCF.mjs → intent-resolver-6O5FSB7Z.mjs} +103 -85
  82. package/dist/lib/node-esm/intent-resolver-6O5FSB7Z.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-N27KETKT.mjs → react-root-K66W3FMA.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-K66W3FMA.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-TNPAUQCM.mjs → react-surface-Y7FTEIDF.mjs} +75 -109
  87. package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-TPWZPDCR.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-WKUWY3P6.mjs → settings-6FO65BA6.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-WKUWY3P6.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-PQLLIO5W.mjs → spaces-ready-P7CKVXBE.mjs} +15 -14
  93. package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-4M5A6OSB.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 +6 -5
  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/index.d.ts +11 -12
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  110. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  114. package/dist/types/src/capabilities/settings.d.ts +1 -1
  115. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  116. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/state.d.ts +1 -1
  118. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  119. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  120. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  121. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  122. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  123. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  124. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  125. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -4
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +6 -4
  128. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  129. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  131. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  132. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  133. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  134. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  135. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  136. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -0
  138. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  139. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  140. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  141. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  142. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  143. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  148. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  149. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  150. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  151. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  152. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  153. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1540 -0
  154. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  155. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  156. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  159. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  160. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  161. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  162. package/dist/types/src/components/RecordArticle.stories.d.ts +1707 -0
  163. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  164. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  165. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  166. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  167. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  168. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  169. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1537 -0
  170. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  172. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  173. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  174. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  175. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  176. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  178. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1537 -4
  179. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  180. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  181. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
  182. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  184. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  185. package/dist/types/src/components/index.d.ts +10 -14
  186. package/dist/types/src/components/index.d.ts.map +1 -1
  187. package/dist/types/src/events.d.ts.map +1 -1
  188. package/dist/types/src/helpers/index.d.ts +2 -0
  189. package/dist/types/src/helpers/index.d.ts.map +1 -0
  190. package/dist/types/src/helpers/query.d.ts +8 -0
  191. package/dist/types/src/helpers/query.d.ts.map +1 -0
  192. package/dist/types/src/helpers/query.test.d.ts +2 -0
  193. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  194. package/dist/types/src/hooks/index.d.ts +1 -0
  195. package/dist/types/src/hooks/index.d.ts.map +1 -1
  196. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  198. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  199. package/dist/types/src/hooks/usePath.d.ts +1 -1
  200. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  202. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  203. package/dist/types/src/index.d.ts +1 -0
  204. package/dist/types/src/index.d.ts.map +1 -1
  205. package/dist/types/src/meta.d.ts +0 -1
  206. package/dist/types/src/meta.d.ts.map +1 -1
  207. package/dist/types/src/translations.d.ts +1332 -22
  208. package/dist/types/src/translations.d.ts.map +1 -1
  209. package/dist/types/src/types/types.d.ts +92 -97
  210. package/dist/types/src/types/types.d.ts.map +1 -1
  211. package/dist/types/src/util.d.ts +12 -8
  212. package/dist/types/src/util.d.ts.map +1 -1
  213. package/dist/types/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +65 -59
  215. package/src/SpacePlugin.ts +228 -218
  216. package/src/capabilities/app-graph-builder.ts +184 -135
  217. package/src/capabilities/app-graph-serializer.ts +12 -12
  218. package/src/capabilities/capabilities.ts +17 -11
  219. package/src/capabilities/identity-created.ts +2 -2
  220. package/src/capabilities/index.ts +0 -1
  221. package/src/capabilities/intent-resolver.ts +89 -62
  222. package/src/capabilities/react-root.tsx +4 -3
  223. package/src/capabilities/react-surface.tsx +69 -145
  224. package/src/capabilities/schema-defs.ts +1 -1
  225. package/src/capabilities/spaces-ready.ts +8 -5
  226. package/src/capabilities/state.ts +2 -2
  227. package/src/components/AwaitingObject.tsx +12 -14
  228. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  229. package/src/components/CollectionSection.tsx +8 -6
  230. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +15 -15
  231. package/src/components/CreateDialog/CreateObjectDialog.tsx +48 -31
  232. package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
  233. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  234. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  235. package/src/components/JoinDialog/index.ts +5 -0
  236. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  237. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +21 -20
  238. package/src/components/MembersContainer/index.ts +5 -0
  239. package/src/components/MenuFooter.tsx +2 -2
  240. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  241. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  242. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  243. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  244. package/src/components/ObjectRenamePopover/index.ts +5 -0
  245. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
  246. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  247. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  248. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  249. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  250. package/src/components/ObjectSettings/index.ts +3 -1
  251. package/src/components/RecordArticle.stories.tsx +115 -0
  252. package/src/components/RecordArticle.tsx +114 -0
  253. package/src/components/SchemaContainer.tsx +23 -26
  254. package/src/components/SpacePluginSettings.tsx +15 -10
  255. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +22 -22
  256. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  257. package/src/components/SpacePresence/index.ts +5 -0
  258. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  259. package/src/components/SpaceRenamePopover/index.ts +5 -0
  260. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +15 -8
  261. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +45 -24
  262. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  263. package/src/components/SyncStatus/SyncStatus.stories.tsx +7 -8
  264. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  265. package/src/components/ViewEditor.tsx +51 -23
  266. package/src/components/index.ts +7 -8
  267. package/src/events.ts +6 -6
  268. package/src/helpers/index.ts +5 -0
  269. package/src/helpers/query.test.ts +24 -0
  270. package/src/helpers/query.ts +158 -0
  271. package/src/hooks/index.ts +1 -0
  272. package/src/hooks/useActiveSpace.ts +3 -2
  273. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  274. package/src/hooks/usePath.ts +1 -1
  275. package/src/hooks/useTypeOptions.ts +59 -0
  276. package/src/index.ts +1 -0
  277. package/src/meta.ts +6 -3
  278. package/src/translations.ts +26 -10
  279. package/src/types/types.ts +42 -23
  280. package/src/util.tsx +183 -62
  281. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  282. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  283. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  284. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  285. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  286. package/dist/lib/browser/app-graph-builder-VZW75QPJ.mjs.map +0 -7
  287. package/dist/lib/browser/app-graph-serializer-YPHYVZAP.mjs.map +0 -7
  288. package/dist/lib/browser/chunk-3UFG6LQQ.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  290. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-DYKFFVN6.mjs +0 -94
  292. package/dist/lib/browser/chunk-DYKFFVN6.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  294. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-PSIBVBTA.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-Q5EEPP3S.mjs +0 -20
  297. package/dist/lib/browser/chunk-Q5EEPP3S.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-SMB4DGYO.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  300. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  301. package/dist/lib/browser/intent-resolver-TS6CCKST.mjs.map +0 -7
  302. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs +0 -29
  303. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs.map +0 -7
  304. package/dist/lib/browser/react-surface-V3ARS2BP.mjs.map +0 -7
  305. package/dist/lib/browser/schema-defs-5LBA43X5.mjs.map +0 -7
  306. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs +0 -124
  307. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs.map +0 -7
  308. package/dist/lib/browser/spaces-ready-FXEP6XEW.mjs.map +0 -7
  309. package/dist/lib/browser/state-K3UBPKYP.mjs.map +0 -7
  310. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  311. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  312. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  313. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  314. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-XNVQOJLE.mjs.map +0 -7
  316. package/dist/lib/node-esm/app-graph-serializer-PKVLWV6V.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs +0 -21
  318. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-CTQMR7E3.mjs.map +0 -7
  320. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  321. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  322. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  323. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs +0 -96
  326. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-KYUHPPRN.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-S7MKRQHY.mjs.map +0 -7
  329. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  330. package/dist/lib/node-esm/intent-resolver-W6P27SCF.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-root-N27KETKT.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-surface-TNPAUQCM.mjs.map +0 -7
  333. package/dist/lib/node-esm/schema-defs-TPWZPDCR.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs +0 -126
  335. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs.map +0 -7
  336. package/dist/lib/node-esm/spaces-ready-PQLLIO5W.mjs.map +0 -7
  337. package/dist/lib/node-esm/state-4M5A6OSB.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/RecordMain.d.ts +0 -7
  357. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  358. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  359. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  360. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  361. package/src/capabilities/schema-tool.test.ts +0 -44
  362. package/src/capabilities/schema-tools.ts +0 -125
  363. package/src/components/MembersContainer.stories.tsx +0 -31
  364. package/src/components/ObjectDetailsPanel.tsx +0 -77
  365. package/src/components/PersistenceStatus.tsx +0 -83
  366. package/src/components/RecordMain.tsx +0 -43
@@ -2,43 +2,26 @@
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
- Surface,
11
- contributes,
12
- createSurface,
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
- type Space,
24
- SpaceState,
25
- fullyQualifiedId,
26
- getSpace,
27
- isLiveObject,
28
- isSpace,
29
- parseId,
30
- useSpace,
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
 
20
+ // TODO(burdon): Component name standard: NounVerbComponent.
38
21
  import {
39
22
  CREATE_OBJECT_DIALOG,
40
23
  CREATE_SPACE_DIALOG,
41
- CollectionMain,
24
+ CollectionArticle,
42
25
  CollectionSection,
43
26
  CreateObjectDialog,
44
27
  type CreateObjectDialogProps,
@@ -48,22 +31,23 @@ import {
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,
57
- RecordMain,
38
+ RecordArticle,
39
+ SPACE_RENAME_POPOVER,
58
40
  SchemaContainer,
59
41
  SmallPresenceLive,
60
42
  SpacePluginSettings,
61
43
  SpacePresence,
44
+ SpaceRenamePopover,
62
45
  SpaceSettingsContainer,
63
46
  SyncStatus,
64
47
  ViewEditor,
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
 
69
53
  import { SpaceCapabilities } from './capabilities';
@@ -72,12 +56,10 @@ type ReactSurfaceOptions = {
72
56
  createInvitationUrl: (invitationCode: string) => string;
73
57
  };
74
58
 
75
- const OMIT = [DataType.Collection.typename, DataType.QueryCollection.typename];
76
-
77
59
  export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
78
60
  contributes(Capabilities.ReactSurface, [
79
61
  createSurface({
80
- id: `${SPACE_PLUGIN}/article`,
62
+ id: `${meta.id}/article`,
81
63
  role: 'article',
82
64
  filter: (data): data is { subject: Space } =>
83
65
  // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
@@ -86,7 +68,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
86
68
  <Surface
87
69
  data={{
88
70
  id: data.subject.id,
89
- subject: data.subject.properties[DataType.Collection.typename]?.target,
71
+ subject: data.subject.properties[Collection.Collection.typename]?.target,
90
72
  }}
91
73
  role={role}
92
74
  {...rest}
@@ -94,36 +76,36 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
94
76
  ),
95
77
  }),
96
78
  createSurface({
97
- id: `${SPACE_PLUGIN}/record-article`,
79
+ id: `${meta.id}/record-article`,
98
80
  role: 'article',
99
81
  position: 'fallback',
100
82
  filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
101
- component: ({ data }) => <RecordMain record={data.subject} />,
83
+ component: ({ data }) => <RecordArticle subject={data.subject} />,
102
84
  }),
103
85
  createSurface({
104
- id: `${SPACE_PLUGIN}/collection-fallback`,
86
+ id: `${meta.id}/collection-fallback`,
105
87
  role: 'article',
106
88
  position: 'fallback',
107
- filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
108
- component: ({ data }) => <CollectionMain collection={data.subject} />,
89
+ filter: (data): data is { subject: Collection.Collection } => Obj.instanceOf(Collection.Collection, data.subject),
90
+ component: ({ data }) => <CollectionArticle subject={data.subject} />,
109
91
  }),
110
92
  createSurface({
111
- id: `${SPACE_PLUGIN}/plugin-settings`,
93
+ id: `${meta.id}/plugin-settings`,
112
94
  role: 'article',
113
95
  filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
114
- data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
96
+ data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
115
97
  component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
116
98
  }),
117
99
  createSurface({
118
- id: `${SPACE_PLUGIN}/companion/object-settings`,
100
+ id: `${meta.id}/companion/object-settings`,
119
101
  role: 'article',
120
102
  filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
121
103
  component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
122
104
  }),
123
105
  createSurface({
124
- id: `${SPACE_PLUGIN}/space-settings-properties`,
106
+ id: `${meta.id}/space-settings-properties`,
125
107
  role: 'article',
126
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,
108
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
127
109
  component: () => {
128
110
  const layout = useLayout();
129
111
  const { spaceId } = parseId(layout.workspace);
@@ -136,10 +118,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
136
118
  },
137
119
  }),
138
120
  createSurface({
139
- id: `${SPACE_PLUGIN}/space-settings-members`,
121
+ id: `${meta.id}/space-settings-members`,
140
122
  role: 'article',
141
123
  position: 'hoist',
142
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,
124
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/members`,
143
125
  component: () => {
144
126
  const layout = useLayout();
145
127
  const { spaceId } = parseId(layout.workspace);
@@ -152,9 +134,9 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
152
134
  },
153
135
  }),
154
136
  createSurface({
155
- id: `${SPACE_PLUGIN}/space-settings-schema`,
137
+ id: `${meta.id}/space-settings-schema`,
156
138
  role: 'article',
157
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,
139
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
158
140
  component: () => {
159
141
  const layout = useLayout();
160
142
  const { spaceId } = parseId(layout.workspace);
@@ -167,14 +149,14 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
167
149
  },
168
150
  }),
169
151
  createSurface({
170
- id: `${SPACE_PLUGIN}/selected-objects`,
152
+ id: `${meta.id}/selected-objects`,
171
153
  role: 'article',
172
- filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>
173
- 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',
174
156
  component: ({ data }) => (
175
157
  <ObjectDetailsPanel
176
- key={fullyQualifiedId(data.companionTo)}
177
- objectId={fullyQualifiedId(data.companionTo)}
158
+ key={Obj.getDXN(data.companionTo).toString()}
159
+ objectId={Obj.getDXN(data.companionTo).toString()}
178
160
  view={data.companionTo}
179
161
  />
180
162
  ),
@@ -198,49 +180,53 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
198
180
  component: ({ data }) => <CreateObjectDialog {...data.props} />,
199
181
  }),
200
182
  createSurface({
201
- id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,
183
+ id: `${meta.id}/create-initial-space-form-[hue]`,
202
184
  role: 'form-input',
203
185
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
204
186
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
205
187
  return !!annotation;
206
188
  },
207
189
  component: ({ data: _, ...inputProps }) => {
208
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
190
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
209
191
  const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
210
192
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
211
193
  return (
212
194
  <Input.Root>
213
195
  <Input.Label>{label}</Input.Label>
214
- <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
196
+ <HuePicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
215
197
  </Input.Root>
216
198
  );
217
199
  },
218
200
  }),
219
201
  createSurface({
220
- id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,
202
+ id: `${meta.id}/create-initial-space-form-[icon]`,
221
203
  role: 'form-input',
222
204
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
223
205
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
224
206
  return !!annotation;
225
207
  },
226
208
  component: ({ data: _, ...inputProps }) => {
227
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
209
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
228
210
  const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
229
211
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
230
212
  return (
231
213
  <Input.Root>
232
214
  <Input.Label>{label}</Input.Label>
233
- <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
215
+ <IconPicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
234
216
  </Input.Root>
235
217
  );
236
218
  },
237
219
  }),
238
220
  createSurface({
239
- id: `${SPACE_PLUGIN}/typename-form-input`,
221
+ id: `${meta.id}/typename-form-input`,
240
222
  role: 'form-input',
241
223
  filter: (
242
224
  data,
243
- ): 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
+ } => {
244
230
  if (data.prop !== 'typename') {
245
231
  return false;
246
232
  }
@@ -249,103 +235,41 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
249
235
  return !!annotation;
250
236
  },
251
237
  component: ({ data: { schema, target }, ...inputProps }) => {
252
- const { t } = useTranslation();
253
- const client = useClient();
254
238
  const props = inputProps as any as InputProps;
255
239
  const space = isSpace(target) ? target : getSpace(target);
256
- if (!space) {
257
- return null;
258
- }
259
-
260
240
  const annotation = findAnnotation<TypenameAnnotation[]>(schema.ast, TypenameAnnotationId)!;
261
-
262
- const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
263
- const whitelistedTypenames = useMemo(
264
- () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))),
265
- [schemaWhitelists],
266
- );
267
-
268
- const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
269
- const objectFormTypenames = useMemo(
270
- () =>
271
- new Set(
272
- objectForms
273
- .map((form) => Type.getTypename(form.objectSchema))
274
- // TODO(wittjosiah): Remove.
275
- .filter((typename) => !OMIT.includes(typename) && !typename.endsWith('View')),
276
- ),
277
- [objectForms],
278
- );
279
-
280
- const fixed = client.graph.schemaRegistry.schemas.filter((schema) => {
281
- const limitedStatic =
282
- annotation.includes('limited-static') && whitelistedTypenames.has(Type.getTypename(schema));
283
- const unusedStatic =
284
- annotation.includes('unused-static') &&
285
- whitelistedTypenames.has(Type.getTypename(schema)) &&
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));
291
- const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));
292
- return annotation.includes('static') || limitedStatic || unusedStatic || usedStatic || objectForm;
293
- });
294
- const dynamic = space?.db.schemaRegistry.query().runSync();
295
- const typenames = Array.from(
296
- new Set<string>([
297
- ...(annotation.includes('limited-static') ||
298
- annotation.includes('unused-static') ||
299
- annotation.includes('used-static') ||
300
- annotation.includes('static') ||
301
- annotation.includes('object-form')
302
- ? fixed.map((schema) => Type.getTypename(schema))
303
- : []),
304
- ...(annotation.includes('dynamic') ? dynamic.map((schema) => schema.typename) : []),
305
- ]),
306
- ).sort();
307
-
308
- const options = useMemo(
309
- () =>
310
- typenames
311
- .map((typename) => ({
312
- value: typename,
313
- label: t('typename label', { ns: typename, defaultValue: typename }),
314
- }))
315
- .toSorted((a, b) => a.label.localeCompare(b.label)),
316
- [t, typenames],
317
- );
241
+ const options = useTypeOptions({ space, annotation });
318
242
 
319
243
  return <SelectInput {...props} options={options} />;
320
244
  },
321
245
  }),
322
246
  createSurface({
323
- id: `${SPACE_PLUGIN}/object-settings`,
247
+ id: `${meta.id}/object-settings`,
324
248
  role: 'object-settings',
325
- 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),
326
250
  component: ({ data }) => <ViewEditor view={data.subject} />,
327
251
  }),
328
252
  createSurface({
329
- id: POPOVER_RENAME_SPACE,
253
+ id: SPACE_RENAME_POPOVER,
330
254
  role: 'card--popover',
331
- filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),
332
- 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} />,
333
257
  }),
334
258
  createSurface({
335
- id: POPOVER_RENAME_OBJECT,
259
+ id: OBJECT_RENAME_POPOVER,
336
260
  role: 'card--popover',
337
261
  filter: (data): data is { props: Obj.Any } =>
338
- data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
339
- component: ({ data }) => <PopoverRenameObject object={data.props} />,
262
+ data.component === OBJECT_RENAME_POPOVER && isLiveObject(data.props),
263
+ component: ({ data }) => <ObjectRenamePopover object={data.props} />,
340
264
  }),
341
265
  createSurface({
342
- id: `${SPACE_PLUGIN}/menu-footer`,
266
+ id: `${meta.id}/menu-footer`,
343
267
  role: 'menu-footer',
344
268
  filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
345
269
  component: ({ data }) => <MenuFooter object={data.subject} />,
346
270
  }),
347
271
  createSurface({
348
- id: `${SPACE_PLUGIN}/navtree-presence`,
272
+ id: `${meta.id}/navtree-presence`,
349
273
  role: 'navtree-item-end',
350
274
  filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
351
275
  typeof data.id === 'string' && Obj.isObject(data.subject),
@@ -357,7 +281,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
357
281
  }),
358
282
  // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
359
283
  createSurface({
360
- id: `${SPACE_PLUGIN}/navtree-presence-fallback`,
284
+ id: `${meta.id}/navtree-presence-fallback`,
361
285
  role: 'navtree-item-end',
362
286
  position: 'fallback',
363
287
  filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
@@ -365,13 +289,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
365
289
  }),
366
290
  // TODO(wittjosiah): Broken?
367
291
  createSurface({
368
- id: `${SPACE_PLUGIN}/navtree-sync-status`,
292
+ id: `${meta.id}/navtree-sync-status`,
369
293
  role: 'navtree-item-end',
370
294
  filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
371
295
  component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
372
296
  }),
373
297
  createSurface({
374
- id: `${SPACE_PLUGIN}/navbar-presence`,
298
+ id: `${meta.id}/navbar-presence`,
375
299
  role: 'navbar-end',
376
300
  position: 'hoist',
377
301
  filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
@@ -379,7 +303,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
379
303
  const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);
380
304
  const object = isSpace(data.subject)
381
305
  ? data.subject.state.get() === SpaceState.SPACE_READY
382
- ? (space?.properties[DataType.Collection.typename]?.target as DataType.Collection)
306
+ ? (space?.properties[Collection.Collection.typename]?.target as Collection.Collection)
383
307
  : undefined
384
308
  : data.subject;
385
309
 
@@ -387,13 +311,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
387
311
  },
388
312
  }),
389
313
  createSurface({
390
- id: `${SPACE_PLUGIN}/collection-section`,
314
+ id: `${meta.id}/collection-section`,
391
315
  role: 'section',
392
- filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
393
- 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} />,
394
318
  }),
395
319
  createSurface({
396
- id: `${SPACE_PLUGIN}/status`,
320
+ id: `${meta.id}/status`,
397
321
  role: 'status',
398
322
  component: () => <SyncStatus />,
399
323
  }),
@@ -10,7 +10,7 @@ import { type ObjectForm } from '../types';
10
10
  import { SpaceCapabilities } from './capabilities';
11
11
 
12
12
  export default (context: PluginContext) => {
13
- const registry = context.getCapability(Capabilities.RxRegistry);
13
+ const registry = context.getCapability(Capabilities.AtomRegistry);
14
14
  const client = context.getCapability(ClientCapabilities.Client);
15
15
 
16
16
  // TODO(wittjosiah): Unregister schemas when they are disabled.
@@ -2,7 +2,7 @@
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
7
  import { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
8
8
  import { SubscriptionList } from '@dxos/async';
@@ -14,7 +14,7 @@ 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, SpaceState, parseFullyQualifiedId } 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
20
  import { SpaceAction } from '../types';
@@ -25,6 +25,9 @@ import { SpaceCapabilities } from './capabilities';
25
25
  const ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;
26
26
  const WAIT_FOR_OBJECT_TIMEOUT = 5_000;
27
27
 
28
+ // E.g., dxn:echo:BA25QRC2FEWCSAMRP4RZL65LWJ7352CKE:01J00J9B45YHYSGZQTQMSKMGJ6
29
+ const ECHO_DXN_LENGTH = 3 + 1 + 4 + 1 + 33 + 1 + 26;
30
+
28
31
  export default async (context: PluginContext) => {
29
32
  const subscriptions = new SubscriptionList();
30
33
  const spaceSubscriptions = new SubscriptionList();
@@ -69,7 +72,7 @@ export default async (context: PluginContext) => {
69
72
 
70
73
  const id = active[0];
71
74
  const node = graph.getNode(id).pipe(Option.getOrNull);
72
- if (!node && id.length === FQ_ID_LENGTH) {
75
+ if (!node && id.length === ECHO_DXN_LENGTH) {
73
76
  void graph.initialize(id);
74
77
  const timeout = setTimeout(async () => {
75
78
  const node = graph.getNode(id).pipe(Option.getOrNull);
@@ -117,7 +120,7 @@ export default async (context: PluginContext) => {
117
120
  // Group parts by space for efficient messaging.
118
121
  const idsBySpace = reduceGroupBy(active, (id) => {
119
122
  try {
120
- const [spaceId] = parseFullyQualifiedId(id);
123
+ const { spaceId } = parseId(id);
121
124
  return spaceId;
122
125
  } catch {
123
126
  return null;
@@ -126,7 +129,7 @@ export default async (context: PluginContext) => {
126
129
 
127
130
  const removedBySpace = reduceGroupBy(inactive, (id) => {
128
131
  try {
129
- const [spaceId] = parseFullyQualifiedId(id);
132
+ const { spaceId } = parseId(id);
130
133
  return spaceId;
131
134
  } catch {
132
135
  return null;
@@ -9,13 +9,13 @@ import { PublicKey } from '@dxos/keys';
9
9
  import { LocalStorageStore } from '@dxos/local-storage';
10
10
  import { ComplexMap } from '@dxos/util';
11
11
 
12
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
13
13
  import { type PluginState } from '../types';
14
14
 
15
15
  import { SpaceCapabilities } from './capabilities';
16
16
 
17
17
  export default (context: PluginContext) => {
18
- const state = new LocalStorageStore<PluginState>(SPACE_PLUGIN, {
18
+ const state = new LocalStorageStore<PluginState>(meta.id, {
19
19
  awaiting: undefined,
20
20
  spaceNames: {},
21
21
  viewersByObject: {},
@@ -4,23 +4,25 @@
4
4
 
5
5
  import React, { useCallback, useEffect, useState } from 'react';
6
6
 
7
- import { LayoutAction, createIntent, 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
  };