@dxos/plugin-space 0.8.4-main.84f28bd → 0.8.4-main.ae835ea

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 (310) hide show
  1. package/dist/lib/browser/CollectionMain-HTKSZCRR.mjs +31 -0
  2. package/dist/lib/browser/CollectionMain-HTKSZCRR.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-5B45G744.mjs +145 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-5B45G744.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-UFTKBP7B.mjs +146 -0
  6. package/dist/lib/browser/ObjectSettings-UFTKBP7B.mjs.map +7 -0
  7. package/dist/lib/browser/RecordMain-BCSXTSEB.mjs +99 -0
  8. package/dist/lib/browser/RecordMain-BCSXTSEB.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-QJFO4ANM.mjs +520 -0
  10. package/dist/lib/browser/app-graph-builder-QJFO4ANM.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs → app-graph-serializer-3R5NVV7U.mjs} +14 -14
  12. package/dist/lib/browser/app-graph-serializer-3R5NVV7U.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-2NS3VPSY.mjs +20 -0
  14. package/dist/lib/browser/chunk-2NS3VPSY.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-6VLSHG4A.mjs → chunk-4V4JNJ33.mjs} +80 -10
  16. package/dist/lib/browser/chunk-4V4JNJ33.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-GVTXQCIW.mjs → chunk-ENBBJSNE.mjs} +482 -448
  18. package/dist/lib/browser/chunk-ENBBJSNE.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-HS2VD6DN.mjs +166 -0
  20. package/dist/lib/browser/chunk-HS2VD6DN.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-WBSEOLEM.mjs → chunk-OWNBEI5J.mjs} +221 -57
  22. package/dist/lib/browser/chunk-OWNBEI5J.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-S6NY637J.mjs → chunk-SLDQWMQ2.mjs} +77 -12
  24. package/dist/lib/browser/chunk-SLDQWMQ2.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-PW2BA46S.mjs} +4 -4
  30. package/dist/lib/browser/{identity-created-23XJJV2N.mjs.map → identity-created-PW2BA46S.mjs.map} +3 -3
  31. package/dist/lib/browser/index.mjs +109 -40
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-WK5WYFH3.mjs → intent-resolver-MBVOLXFQ.mjs} +194 -32
  34. package/dist/lib/browser/intent-resolver-MBVOLXFQ.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/{react-root-7S6FIC5G.mjs → react-root-NKEKCEYM.mjs} +11 -11
  37. package/dist/lib/browser/react-root-NKEKCEYM.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-6C3YJNDK.mjs → react-surface-PYSN2MBY.mjs} +78 -77
  39. package/dist/lib/browser/react-surface-PYSN2MBY.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs → schema-defs-DWYK7TYW.mjs} +5 -5
  41. package/dist/lib/browser/schema-defs-DWYK7TYW.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-XNWYRWNM.mjs → settings-ZUCC3ZLB.mjs} +5 -5
  43. package/dist/lib/browser/{settings-XNWYRWNM.mjs.map → settings-ZUCC3ZLB.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs → spaces-ready-HTWWJHLR.mjs} +18 -16
  45. package/dist/lib/browser/spaces-ready-HTWWJHLR.mjs.map +7 -0
  46. package/dist/lib/browser/{state-522XTUR4.mjs → state-ISVAKMO7.mjs} +7 -7
  47. package/dist/lib/browser/state-ISVAKMO7.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +2 -2
  49. package/dist/lib/node-esm/CollectionMain-OUHGG6OC.mjs +32 -0
  50. package/dist/lib/node-esm/CollectionMain-OUHGG6OC.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-4SDHQVQU.mjs +146 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-4SDHQVQU.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-EU6F43RP.mjs +147 -0
  54. package/dist/lib/node-esm/ObjectSettings-EU6F43RP.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordMain-SD76DGOR.mjs +100 -0
  56. package/dist/lib/node-esm/RecordMain-SD76DGOR.mjs.map +7 -0
  57. package/dist/lib/node-esm/{app-graph-builder-TO72W6MI.mjs → app-graph-builder-B23W62HY.mjs} +215 -58
  58. package/dist/lib/node-esm/app-graph-builder-B23W62HY.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs → app-graph-serializer-3Z3EXEEF.mjs} +14 -14
  60. package/dist/lib/node-esm/app-graph-serializer-3Z3EXEEF.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  62. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-SXD6T2N4.mjs → chunk-G4PDWB7G.mjs} +80 -10
  64. package/dist/lib/node-esm/chunk-G4PDWB7G.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-OUBADVJE.mjs → chunk-KKPCCA5O.mjs} +482 -448
  68. package/dist/lib/node-esm/chunk-KKPCCA5O.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-PM4ZIGKC.mjs +167 -0
  70. package/dist/lib/node-esm/chunk-PM4ZIGKC.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-HJJHLWKY.mjs → chunk-XEVIWD3O.mjs} +221 -57
  72. package/dist/lib/node-esm/chunk-XEVIWD3O.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-2THX6G4C.mjs → chunk-YFQXFQGT.mjs} +77 -12
  74. package/dist/lib/node-esm/chunk-YFQXFQGT.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-ZLMFLI7G.mjs +21 -0
  76. package/dist/lib/node-esm/chunk-ZLMFLI7G.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-MWTLGQRU.mjs} +4 -4
  78. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs.map → identity-created-MWTLGQRU.mjs.map} +3 -3
  79. package/dist/lib/node-esm/index.mjs +109 -40
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-HSR27ME4.mjs → intent-resolver-IWI47NTW.mjs} +194 -32
  82. package/dist/lib/node-esm/intent-resolver-IWI47NTW.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs → react-root-LX7SIG6M.mjs} +11 -11
  85. package/dist/lib/node-esm/react-root-LX7SIG6M.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-AGAWX7DD.mjs → react-surface-6SVGOZNJ.mjs} +78 -77
  87. package/dist/lib/node-esm/react-surface-6SVGOZNJ.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs → schema-defs-EOG2UPJU.mjs} +5 -5
  89. package/dist/lib/node-esm/schema-defs-EOG2UPJU.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs → settings-ZDJNLFGW.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs.map → settings-ZDJNLFGW.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs → spaces-ready-VUGYPF4L.mjs} +18 -16
  93. package/dist/lib/node-esm/spaces-ready-VUGYPF4L.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-C4IOXPZP.mjs → state-QZ4Q6ZRL.mjs} +7 -7
  95. package/dist/lib/node-esm/state-QZ4Q6ZRL.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 +12 -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/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/CollectionMain.d.ts +1 -0
  123. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  124. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +5 -4
  125. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1664 -4
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +5 -3
  129. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  131. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  132. package/dist/types/src/components/JoinDialog.d.ts +1 -1
  133. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  134. package/dist/types/src/components/MembersContainer.d.ts +3 -2
  135. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/MembersContainer.stories.d.ts +1664 -5
  137. package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  139. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  140. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  141. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  142. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  143. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  145. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  146. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  147. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  148. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1500 -0
  149. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  151. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  152. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  153. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  154. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  155. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  156. package/dist/types/src/components/PopoverRenameObject.d.ts +2 -2
  157. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  158. package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -1
  159. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  160. package/dist/types/src/components/RecordMain.d.ts +8 -0
  161. package/dist/types/src/components/RecordMain.d.ts.map +1 -0
  162. package/dist/types/src/components/RecordMain.stories.d.ts +1667 -0
  163. package/dist/types/src/components/RecordMain.stories.d.ts.map +1 -0
  164. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  165. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  166. package/dist/types/src/components/SpacePresence.stories.d.ts +1492 -4
  167. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  168. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  169. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1497 -4
  170. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  171. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
  172. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  173. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1498 -5
  174. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
  176. package/dist/types/src/components/ViewEditor.d.ts +8 -0
  177. package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
  178. package/dist/types/src/components/index.d.ts +13 -2
  179. package/dist/types/src/components/index.d.ts.map +1 -1
  180. package/dist/types/src/events.d.ts +1 -0
  181. package/dist/types/src/events.d.ts.map +1 -1
  182. package/dist/types/src/hooks/index.d.ts +1 -0
  183. package/dist/types/src/hooks/index.d.ts.map +1 -1
  184. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  185. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  186. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  187. package/dist/types/src/hooks/usePath.d.ts +1 -1
  188. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  189. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  190. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  191. package/dist/types/src/meta.d.ts +0 -1
  192. package/dist/types/src/meta.d.ts.map +1 -1
  193. package/dist/types/src/translations.d.ts +1342 -11
  194. package/dist/types/src/translations.d.ts.map +1 -1
  195. package/dist/types/src/types/types.d.ts +128 -66
  196. package/dist/types/src/types/types.d.ts.map +1 -1
  197. package/dist/types/src/util.d.ts +37 -7
  198. package/dist/types/src/util.d.ts.map +1 -1
  199. package/dist/types/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +63 -60
  201. package/src/SpacePlugin.ts +201 -139
  202. package/src/capabilities/app-graph-builder.ts +265 -47
  203. package/src/capabilities/app-graph-serializer.ts +7 -7
  204. package/src/capabilities/capabilities.ts +20 -9
  205. package/src/capabilities/identity-created.ts +1 -1
  206. package/src/capabilities/index.ts +0 -1
  207. package/src/capabilities/intent-resolver.ts +147 -21
  208. package/src/capabilities/react-root.tsx +4 -3
  209. package/src/capabilities/react-surface.tsx +79 -99
  210. package/src/capabilities/schema-defs.ts +3 -2
  211. package/src/capabilities/spaces-ready.ts +11 -8
  212. package/src/capabilities/state.ts +5 -4
  213. package/src/components/AwaitingObject.tsx +7 -9
  214. package/src/components/CollectionMain.tsx +4 -2
  215. package/src/components/CollectionSection.tsx +2 -2
  216. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -10
  217. package/src/components/CreateDialog/CreateObjectDialog.tsx +51 -36
  218. package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
  219. package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -5
  220. package/src/components/JoinDialog.tsx +7 -7
  221. package/src/components/MembersContainer.stories.tsx +36 -10
  222. package/src/components/MembersContainer.tsx +18 -17
  223. package/src/components/MenuFooter.tsx +4 -5
  224. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +52 -0
  225. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +75 -0
  226. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  227. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
  228. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  229. package/src/components/ObjectSettings/BaseObjectSettings.tsx +86 -26
  230. package/src/components/ObjectSettings/ForeignKeys.tsx +3 -3
  231. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +3 -2
  232. package/src/components/ObjectSettings/index.ts +3 -1
  233. package/src/components/PersistenceStatus.tsx +7 -8
  234. package/src/components/PopoverRenameObject.tsx +10 -16
  235. package/src/components/PopoverRenameSpace.tsx +4 -4
  236. package/src/components/RecordMain.stories.tsx +116 -0
  237. package/src/components/RecordMain.tsx +83 -0
  238. package/src/components/SchemaContainer.tsx +5 -5
  239. package/src/components/SpacePluginSettings.tsx +8 -9
  240. package/src/components/SpacePresence.stories.tsx +23 -22
  241. package/src/components/SpacePresence.tsx +10 -10
  242. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  243. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +19 -18
  244. package/src/components/SyncStatus/InlineSyncStatus.tsx +7 -7
  245. package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
  246. package/src/components/SyncStatus/SyncStatus.tsx +98 -7
  247. package/src/components/SyncStatus/status.ts +4 -4
  248. package/src/components/ViewEditor.tsx +58 -0
  249. package/src/components/index.ts +8 -2
  250. package/src/events.ts +7 -6
  251. package/src/hooks/index.ts +1 -0
  252. package/src/hooks/useActiveSpace.ts +2 -2
  253. package/src/hooks/useInputSurfaceLookup.tsx +2 -2
  254. package/src/hooks/usePath.ts +1 -1
  255. package/src/hooks/useTypeOptions.ts +59 -0
  256. package/src/meta.ts +6 -3
  257. package/src/translations.ts +77 -5
  258. package/src/types/types.ts +78 -16
  259. package/src/util.tsx +215 -57
  260. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs +0 -363
  261. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs.map +0 -7
  262. package/dist/lib/browser/app-graph-serializer-UKYMBX4O.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-6VLSHG4A.mjs.map +0 -7
  264. package/dist/lib/browser/chunk-C7KGJTAL.mjs +0 -18
  265. package/dist/lib/browser/chunk-C7KGJTAL.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  267. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  268. package/dist/lib/browser/chunk-GVTXQCIW.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-S6NY637J.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
  271. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-WBSEOLEM.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-XXIPJLJF.mjs +0 -19
  274. package/dist/lib/browser/chunk-XXIPJLJF.mjs.map +0 -7
  275. package/dist/lib/browser/intent-resolver-WK5WYFH3.mjs.map +0 -7
  276. package/dist/lib/browser/react-root-7S6FIC5G.mjs.map +0 -7
  277. package/dist/lib/browser/react-surface-6C3YJNDK.mjs.map +0 -7
  278. package/dist/lib/browser/schema-defs-K3B3OAH4.mjs.map +0 -7
  279. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  280. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  281. package/dist/lib/browser/spaces-ready-K7NSNBHM.mjs.map +0 -7
  282. package/dist/lib/browser/state-522XTUR4.mjs.map +0 -7
  283. package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs.map +0 -7
  284. package/dist/lib/node-esm/app-graph-serializer-LA3IZDXJ.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-2THX6G4C.mjs.map +0 -7
  286. package/dist/lib/node-esm/chunk-72QMMRKC.mjs +0 -19
  287. package/dist/lib/node-esm/chunk-72QMMRKC.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-AT7LGFER.mjs +0 -20
  289. package/dist/lib/node-esm/chunk-AT7LGFER.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-HJJHLWKY.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  292. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-OUBADVJE.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
  295. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  296. package/dist/lib/node-esm/chunk-SXD6T2N4.mjs.map +0 -7
  297. package/dist/lib/node-esm/intent-resolver-HSR27ME4.mjs.map +0 -7
  298. package/dist/lib/node-esm/react-root-HUK3ANLV.mjs.map +0 -7
  299. package/dist/lib/node-esm/react-surface-AGAWX7DD.mjs.map +0 -7
  300. package/dist/lib/node-esm/schema-defs-4MCDG4DV.mjs.map +0 -7
  301. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  302. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  303. package/dist/lib/node-esm/spaces-ready-UM2P3DCR.mjs.map +0 -7
  304. package/dist/lib/node-esm/state-C4IOXPZP.mjs.map +0 -7
  305. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  306. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  307. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  308. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  309. package/src/capabilities/schema-tool.test.ts +0 -44
  310. package/src/capabilities/schema-tools.ts +0 -125
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Effect } from 'effect';
5
+ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import {
8
8
  Capabilities,
@@ -12,31 +12,34 @@ import {
12
12
  createIntent,
13
13
  createResolver,
14
14
  } from '@dxos/app-framework';
15
- import { Obj, Ref, Relation, type Type } from '@dxos/echo';
15
+ import { Filter, Obj, Query, Ref, Relation, Type } from '@dxos/echo';
16
16
  import { invariant } from '@dxos/invariant';
17
17
  import { Migrations } from '@dxos/migrations';
18
18
  import { ClientCapabilities } from '@dxos/plugin-client';
19
19
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
20
20
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
21
- import { isSpace, getSpace, SpaceState, fullyQualifiedId } from '@dxos/react-client/echo';
21
+ import { SpaceState, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';
22
22
  import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
23
23
  import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
24
- import { DataType } from '@dxos/schema';
24
+ import { iconValues } from '@dxos/react-ui-pickers';
25
+ import { hues } from '@dxos/react-ui-theme';
26
+ import { DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';
25
27
 
26
- import { SpaceCapabilities } from './capabilities';
27
28
  import {
28
29
  CREATE_OBJECT_DIALOG,
29
30
  CREATE_SPACE_DIALOG,
31
+ type CreateObjectDialogProps,
30
32
  JOIN_DIALOG,
33
+ type JoinDialogProps,
31
34
  POPOVER_RENAME_OBJECT,
32
35
  POPOVER_RENAME_SPACE,
33
- type CreateObjectDialogProps,
34
- type JoinDialogProps,
35
36
  } from '../components';
36
37
  import { SpaceEvents } from '../events';
37
- import { SPACE_PLUGIN } from '../meta';
38
+ import { meta } from '../meta';
38
39
  import { CollectionAction, SpaceAction } from '../types';
39
- import { cloneObject, COMPOSER_SPACE_LOCK, getNestedObjects } from '../util';
40
+ import { COMPOSER_SPACE_LOCK, cloneObject, getNestedObjects } from '../util';
41
+
42
+ import { SpaceCapabilities } from './capabilities';
40
43
 
41
44
  // TODO(wittjosiah): Remove.
42
45
  const SPACE_MAX_OBJECTS = 500;
@@ -68,24 +71,37 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
68
71
  }),
69
72
  createResolver({
70
73
  intent: SpaceAction.Create,
71
- resolve: async ({ name, hue, icon, edgeReplication }) => {
74
+ resolve: async ({ name, hue: hue_, icon: icon_, edgeReplication }) => {
72
75
  const client = context.getCapability(ClientCapabilities.Client);
76
+ const hue = hue_ ?? hues[Math.floor(Math.random() * hues.length)];
77
+ const icon = icon_ ?? iconValues[Math.floor(Math.random() * iconValues.length)];
73
78
  const space = await client.spaces.create({ name, hue, icon });
74
79
  if (edgeReplication) {
75
80
  await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);
76
81
  }
77
82
  await space.waitUntilReady();
83
+
84
+ // Create root collection.
78
85
  const collection = Obj.make(DataType.Collection, { objects: [] });
79
86
  space.properties[DataType.Collection.typename] = Ref.make(collection);
80
87
 
88
+ // Set current migration version.
81
89
  if (Migrations.versionProperty) {
82
90
  space.properties[Migrations.versionProperty] = Migrations.targetVersion;
83
91
  }
84
92
 
93
+ // Create records smart collection.
94
+ const records = Obj.make(DataType.QueryCollection, {
95
+ // NOTE: This is specifically Filter.typename due to current limitations in query collection parsing.
96
+ query: Query.select(Filter.typename(DataType.StoredSchema.typename)).ast,
97
+ });
98
+ collection.objects.push(Ref.make(records));
99
+
100
+ // Allow other plugins to add default content.
85
101
  await context.activatePromise(SpaceEvents.SpaceCreated);
86
- const onSpaceCreatedCallbacks = context.getCapabilities(SpaceCapabilities.OnSpaceCreated);
87
- await Promise.all(
88
- onSpaceCreatedCallbacks.map((onSpaceCreated) => onSpaceCreated({ space, rootCollection: collection })),
102
+ const onCreateSpaceCallbacks = context.getCapabilities(SpaceCapabilities.onCreateSpace);
103
+ const spaceCreatedIntents = onCreateSpaceCallbacks.map((onCreateSpace) =>
104
+ onCreateSpace({ space, rootCollection: collection }),
89
105
  );
90
106
 
91
107
  return {
@@ -95,6 +111,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
95
111
  space,
96
112
  },
97
113
  intents: [
114
+ ...spaceCreatedIntents,
98
115
  ...(observability
99
116
  ? [
100
117
  createIntent(ObservabilityAction.SendEvent, {
@@ -309,9 +326,113 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
309
326
  };
310
327
  },
311
328
  }),
329
+ createResolver({
330
+ intent: SpaceAction.UseStaticSchema,
331
+ resolve: async ({ space, typename, show }) => {
332
+ const client = context.getCapability(ClientCapabilities.Client);
333
+ const schema = client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename);
334
+ invariant(schema, `Schema not found: ${typename}`);
335
+
336
+ if (!space.properties.staticRecords) {
337
+ space.properties.staticRecords = [];
338
+ }
339
+
340
+ if (!space.properties.staticRecords.includes(typename)) {
341
+ space.properties.staticRecords.push(typename);
342
+ }
343
+
344
+ await context.activatePromise(SpaceEvents.SchemaAdded);
345
+ const onSchemaAdded = context.getCapabilities(SpaceCapabilities.OnSchemaAdded);
346
+ const schemaAddedIntents = onSchemaAdded.map((onSchemaAdded) => onSchemaAdded({ space, schema, show }));
347
+
348
+ return {
349
+ data: {},
350
+ intents: [
351
+ ...schemaAddedIntents,
352
+ ...(observability
353
+ ? [
354
+ createIntent(ObservabilityAction.SendEvent, {
355
+ name: 'space.schema.use',
356
+ properties: {
357
+ spaceId: space.id,
358
+ typename: Type.getTypename(schema),
359
+ },
360
+ }),
361
+ ]
362
+ : []),
363
+ ],
364
+ };
365
+ },
366
+ }),
367
+ createResolver({
368
+ intent: SpaceAction.AddSchema,
369
+ resolve: async ({ space, name, typename, version, schema: schemaInput, show }) => {
370
+ const [schema] = await space.db.schemaRegistry.register([schemaInput]);
371
+ if (name) {
372
+ schema.storedSchema.name = name;
373
+ }
374
+ if (typename) {
375
+ schema.storedSchema.typename = typename;
376
+ }
377
+ if (version) {
378
+ schema.storedSchema.version = version;
379
+ }
380
+
381
+ await context.activatePromise(SpaceEvents.SchemaAdded);
382
+ const onSchemaAdded = context.getCapabilities(SpaceCapabilities.OnSchemaAdded);
383
+ const schemaAddedIntents = onSchemaAdded.map((onSchemaAdded) => onSchemaAdded({ space, schema, show }));
384
+
385
+ return {
386
+ data: {
387
+ id: schema.id,
388
+ object: schema.storedSchema,
389
+ schema,
390
+ },
391
+ intents: [
392
+ ...schemaAddedIntents,
393
+ ...(observability
394
+ ? [
395
+ createIntent(ObservabilityAction.SendEvent, {
396
+ name: 'space.schema.add',
397
+ properties: {
398
+ spaceId: space.id,
399
+ objectId: schema.id,
400
+ typename: schema.typename,
401
+ },
402
+ }),
403
+ ]
404
+ : []),
405
+ ],
406
+ };
407
+ },
408
+ }),
409
+ createResolver({
410
+ intent: SpaceAction.DeleteField,
411
+ resolve: async ({ view, fieldId, deletionData }, undo) => {
412
+ const space = getSpace(view);
413
+ invariant(space);
414
+ const typename = getTypenameFromQuery(view.query.ast);
415
+ invariant(typename);
416
+ const schema = await space.db.schemaRegistry.query({ typename }).firstOrUndefined();
417
+ invariant(schema);
418
+ const projection = new ProjectionModel(schema.jsonSchema, view.projection);
419
+ if (!undo) {
420
+ const { deleted, index } = projection.deleteFieldProjection(fieldId);
421
+ return {
422
+ undoable: {
423
+ message: ['field deleted label', { ns: meta.id }],
424
+ data: { deletionData: { ...deleted, index } },
425
+ },
426
+ };
427
+ } else if (undo && deletionData) {
428
+ const { field, props, index } = deletionData;
429
+ projection.setFieldProjection({ field, props }, index);
430
+ }
431
+ },
432
+ }),
312
433
  createResolver({
313
434
  intent: SpaceAction.OpenCreateObject,
314
- resolve: ({ target, typename, navigable = true }) => {
435
+ resolve: ({ target, views, typename, initialFormValues, navigable = true, onCreateObject }) => {
315
436
  const state = context.getCapability(SpaceCapabilities.State);
316
437
 
317
438
  return {
@@ -323,7 +444,10 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
323
444
  blockAlign: 'start',
324
445
  props: {
325
446
  target,
447
+ views,
326
448
  typename,
449
+ initialFormValues,
450
+ onCreateObject,
327
451
  shouldNavigate: navigable
328
452
  ? (object: Obj.Any) => {
329
453
  const isCollection = Obj.instanceOf(DataType.Collection, object);
@@ -351,13 +475,13 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
351
475
  createIntent(LayoutAction.AddToast, {
352
476
  part: 'toast',
353
477
  subject: {
354
- id: `${SPACE_PLUGIN}/space-limit`,
355
- title: ['space limit label', { ns: SPACE_PLUGIN }],
356
- description: ['space limit description', { ns: SPACE_PLUGIN }],
478
+ id: `${meta.id}/space-limit`,
479
+ title: ['space limit label', { ns: meta.id }],
480
+ description: ['space limit description', { ns: meta.id }],
357
481
  duration: 5_000,
358
482
  icon: 'ph--warning--regular',
359
- actionLabel: ['remove deleted objects label', { ns: SPACE_PLUGIN }],
360
- actionAlt: ['remove deleted objects alt', { ns: SPACE_PLUGIN }],
483
+ actionLabel: ['remove deleted objects label', { ns: meta.id }],
484
+ actionAlt: ['remove deleted objects alt', { ns: meta.id }],
361
485
  closeLabel: ['close label', { ns: 'os' }],
362
486
  onAction: () => space.db.coreDatabase.unlinkDeletedObjects(),
363
487
  },
@@ -486,7 +610,7 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
486
610
  return {
487
611
  undoable: {
488
612
  // TODO(ZaymonFC): Pluralize if more than one object.
489
- message: [undoMessageKey, { ns: SPACE_PLUGIN }],
613
+ message: [undoMessageKey, { ns: meta.id }],
490
614
  data: { deletionData },
491
615
  },
492
616
  intents:
@@ -578,7 +702,9 @@ export default ({ context, observability, createInvitationUrl }: IntentResolverO
578
702
  createResolver({
579
703
  intent: CollectionAction.CreateQueryCollection,
580
704
  resolve: async ({ name, typename }) => ({
581
- data: { object: Obj.make(DataType.QueryCollection, { name, query: { typename } }) },
705
+ data: {
706
+ object: Obj.make(DataType.QueryCollection, { name, query: Query.select(Filter.typename(typename)).ast }),
707
+ },
582
708
  }),
583
709
  }),
584
710
  ]);
@@ -6,13 +6,14 @@ import React from 'react';
6
6
 
7
7
  import { Capabilities, contributes, useCapability } from '@dxos/app-framework';
8
8
 
9
- import { SpaceCapabilities } from './capabilities';
10
9
  import { AwaitingObject } from '../components';
11
- import { SPACE_PLUGIN } from '../meta';
10
+ import { meta } from '../meta';
11
+
12
+ import { SpaceCapabilities } from './capabilities';
12
13
 
13
14
  export default () =>
14
15
  contributes(Capabilities.ReactRoot, {
15
- id: SPACE_PLUGIN,
16
+ id: meta.id,
16
17
  root: () => {
17
18
  const state = useCapability(SpaceCapabilities.State);
18
19
  return state.awaiting ? <AwaitingObject id={state.awaiting} /> : null;
@@ -2,69 +2,73 @@
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';
8
+ import { Capabilities, Surface, contributes, createSurface, useCapability, useLayout } from '@dxos/app-framework';
17
9
  import { Obj, Type } from '@dxos/echo';
18
10
  import { findAnnotation } from '@dxos/effect';
19
11
  import { SettingsStore } from '@dxos/local-storage';
20
- import { ClientCapabilities } from '@dxos/plugin-client';
21
- import { useClient } from '@dxos/react-client';
22
- import { getSpace, isLiveObject, isSpace, parseId, SpaceState, useSpace, type Space } from '@dxos/react-client/echo';
23
- import { Input, useTranslation } from '@dxos/react-ui';
12
+ import {
13
+ type Space,
14
+ SpaceState,
15
+ fullyQualifiedId,
16
+ getSpace,
17
+ isLiveObject,
18
+ isSpace,
19
+ parseId,
20
+ useSpace,
21
+ } from '@dxos/react-client/echo';
22
+ import { Input } from '@dxos/react-ui';
24
23
  import { type InputProps, SelectInput } from '@dxos/react-ui-form';
25
24
  import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
26
25
  import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
27
26
  import { type JoinPanelProps } from '@dxos/shell/react';
28
27
 
29
- import { SpaceCapabilities } from './capabilities';
30
28
  import {
31
- CollectionMain,
32
- CollectionSection,
33
29
  CREATE_OBJECT_DIALOG,
34
30
  CREATE_SPACE_DIALOG,
31
+ CollectionMain,
32
+ CollectionSection,
35
33
  CreateObjectDialog,
34
+ type CreateObjectDialogProps,
36
35
  CreateSpaceDialog,
37
36
  InlineSyncStatus,
38
37
  JOIN_DIALOG,
39
38
  JoinDialog,
40
39
  MembersContainer,
41
40
  MenuFooter,
41
+ ObjectDetailsPanel,
42
42
  ObjectSettingsContainer,
43
43
  POPOVER_RENAME_OBJECT,
44
44
  POPOVER_RENAME_SPACE,
45
45
  PopoverRenameObject,
46
46
  PopoverRenameSpace,
47
+ RecordMain,
47
48
  SchemaContainer,
48
49
  SmallPresenceLive,
49
50
  SpacePluginSettings,
50
51
  SpacePresence,
51
52
  SpaceSettingsContainer,
52
53
  SyncStatus,
53
- type CreateObjectDialogProps,
54
+ ViewEditor,
54
55
  } from '../components';
55
- import { SPACE_PLUGIN } from '../meta';
56
+ import { useTypeOptions } from '../hooks';
57
+ import { meta } from '../meta';
56
58
  import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
57
59
 
60
+ import { SpaceCapabilities } from './capabilities';
61
+
58
62
  type ReactSurfaceOptions = {
59
63
  createInvitationUrl: (invitationCode: string) => string;
60
64
  };
61
65
 
62
- const OMIT = [DataType.Collection.typename, DataType.QueryCollection.typename];
66
+ const OMIT = [DataType.Collection.typename, Type.getTypename(DataType.QueryCollection)];
63
67
 
64
68
  export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
65
69
  contributes(Capabilities.ReactSurface, [
66
70
  createSurface({
67
- id: `${SPACE_PLUGIN}/article`,
71
+ id: `${meta.id}/article`,
68
72
  role: 'article',
69
73
  filter: (data): data is { subject: Space } =>
70
74
  // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
@@ -81,29 +85,36 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
81
85
  ),
82
86
  }),
83
87
  createSurface({
84
- id: `${SPACE_PLUGIN}/collection-fallback`,
88
+ id: `${meta.id}/record-article`,
89
+ role: 'article',
90
+ position: 'fallback',
91
+ filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
92
+ component: ({ data }) => <RecordMain record={data.subject} />,
93
+ }),
94
+ createSurface({
95
+ id: `${meta.id}/collection-fallback`,
85
96
  role: 'article',
86
97
  position: 'fallback',
87
98
  filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
88
99
  component: ({ data }) => <CollectionMain collection={data.subject} />,
89
100
  }),
90
101
  createSurface({
91
- id: `${SPACE_PLUGIN}/plugin-settings`,
102
+ id: `${meta.id}/plugin-settings`,
92
103
  role: 'article',
93
104
  filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
94
- data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
105
+ data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
95
106
  component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
96
107
  }),
97
108
  createSurface({
98
- id: `${SPACE_PLUGIN}/companion/object-settings`,
109
+ id: `${meta.id}/companion/object-settings`,
99
110
  role: 'article',
100
111
  filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
101
112
  component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
102
113
  }),
103
114
  createSurface({
104
- id: `${SPACE_PLUGIN}/space-settings-properties`,
115
+ id: `${meta.id}/space-settings-properties`,
105
116
  role: 'article',
106
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,
117
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/properties`,
107
118
  component: () => {
108
119
  const layout = useLayout();
109
120
  const { spaceId } = parseId(layout.workspace);
@@ -116,10 +127,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
116
127
  },
117
128
  }),
118
129
  createSurface({
119
- id: `${SPACE_PLUGIN}/space-settings-members`,
130
+ id: `${meta.id}/space-settings-members`,
120
131
  role: 'article',
121
132
  position: 'hoist',
122
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,
133
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/members`,
123
134
  component: () => {
124
135
  const layout = useLayout();
125
136
  const { spaceId } = parseId(layout.workspace);
@@ -132,9 +143,9 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
132
143
  },
133
144
  }),
134
145
  createSurface({
135
- id: `${SPACE_PLUGIN}/space-settings-schema`,
146
+ id: `${meta.id}/space-settings-schema`,
136
147
  role: 'article',
137
- filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,
148
+ filter: (data): data is { subject: string } => data.subject === `${meta.id}/schema`,
138
149
  component: () => {
139
150
  const layout = useLayout();
140
151
  const { spaceId } = parseId(layout.workspace);
@@ -146,6 +157,19 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
146
157
  return <SchemaContainer space={space} />;
147
158
  },
148
159
  }),
160
+ createSurface({
161
+ id: `${meta.id}/selected-objects`,
162
+ role: 'article',
163
+ filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>
164
+ Obj.instanceOf(DataType.View, data.companionTo) && data.subject === 'selected-objects',
165
+ component: ({ data }) => (
166
+ <ObjectDetailsPanel
167
+ key={fullyQualifiedId(data.companionTo)}
168
+ objectId={fullyQualifiedId(data.companionTo)}
169
+ view={data.companionTo}
170
+ />
171
+ ),
172
+ }),
149
173
  createSurface({
150
174
  id: JOIN_DIALOG,
151
175
  role: 'dialog',
@@ -165,45 +189,45 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
165
189
  component: ({ data }) => <CreateObjectDialog {...data.props} />,
166
190
  }),
167
191
  createSurface({
168
- id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,
192
+ id: `${meta.id}/create-initial-space-form-[hue]`,
169
193
  role: 'form-input',
170
194
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
171
195
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);
172
196
  return !!annotation;
173
197
  },
174
198
  component: ({ data: _, ...inputProps }) => {
175
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
199
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
176
200
  const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);
177
201
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
178
202
  return (
179
203
  <Input.Root>
180
204
  <Input.Label>{label}</Input.Label>
181
- <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
205
+ <HuePicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
182
206
  </Input.Root>
183
207
  );
184
208
  },
185
209
  }),
186
210
  createSurface({
187
- id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,
211
+ id: `${meta.id}/create-initial-space-form-[icon]`,
188
212
  role: 'form-input',
189
213
  filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {
190
214
  const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);
191
215
  return !!annotation;
192
216
  },
193
217
  component: ({ data: _, ...inputProps }) => {
194
- const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;
218
+ const { label, readonly, type, getValue, onValueChange } = inputProps as any as InputProps;
195
219
  const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);
196
220
  const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);
197
221
  return (
198
222
  <Input.Root>
199
223
  <Input.Label>{label}</Input.Label>
200
- <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
224
+ <IconPicker disabled={!!readonly} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />
201
225
  </Input.Root>
202
226
  );
203
227
  },
204
228
  }),
205
229
  createSurface({
206
- id: `${SPACE_PLUGIN}/typename-form-input`,
230
+ id: `${meta.id}/typename-form-input`,
207
231
  role: 'form-input',
208
232
  filter: (
209
233
  data,
@@ -216,85 +240,41 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
216
240
  return !!annotation;
217
241
  },
218
242
  component: ({ data: { schema, target }, ...inputProps }) => {
219
- const { t } = useTranslation();
220
- const client = useClient();
221
243
  const props = inputProps as any as InputProps;
222
244
  const space = isSpace(target) ? target : getSpace(target);
223
- if (!space) {
224
- return null;
225
- }
226
-
227
245
  const annotation = findAnnotation<TypenameAnnotation[]>(schema.ast, TypenameAnnotationId)!;
228
-
229
- const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
230
- const whitelistedTypenames = useMemo(
231
- () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))),
232
- [schemaWhitelists],
233
- );
234
-
235
- const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
236
- const objectFormTypenames = useMemo(
237
- () =>
238
- new Set(
239
- objectForms
240
- .map((form) => Type.getTypename(form.objectSchema))
241
- // TODO(wittjosiah): Remove.
242
- .filter((typename) => !OMIT.includes(typename)),
243
- ),
244
- [objectForms],
245
- );
246
-
247
- const fixed = client.graph.schemaRegistry.schemas.filter((schema) => {
248
- const limitedStatic =
249
- annotation.includes('limited-static') && whitelistedTypenames.has(Type.getTypename(schema));
250
- const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));
251
- return annotation.includes('static') || limitedStatic || objectForm;
252
- });
253
- const dynamic = space?.db.schemaRegistry.query().runSync();
254
- const typenames = Array.from(
255
- new Set<string>([
256
- ...(annotation.includes('limited-static') ||
257
- annotation.includes('static') ||
258
- annotation.includes('object-form')
259
- ? fixed.map((schema) => Type.getTypename(schema))
260
- : []),
261
- ...(annotation.includes('dynamic') ? dynamic.map((schema) => schema.typename) : []),
262
- ]),
263
- ).sort();
264
-
265
- const options = useMemo(
266
- () =>
267
- typenames.map((typename) => ({
268
- value: typename,
269
- label: t('typename label', { ns: typename, defaultValue: typename }),
270
- })),
271
- [t, typenames],
272
- );
246
+ const options = useTypeOptions({ space, annotation });
273
247
 
274
248
  return <SelectInput {...props} options={options} />;
275
249
  },
276
250
  }),
251
+ createSurface({
252
+ id: `${meta.id}/object-settings`,
253
+ role: 'object-settings',
254
+ filter: (data): data is { subject: DataType.View } => Obj.instanceOf(DataType.View, data.subject),
255
+ component: ({ data }) => <ViewEditor view={data.subject} />,
256
+ }),
277
257
  createSurface({
278
258
  id: POPOVER_RENAME_SPACE,
279
- role: 'popover',
259
+ role: 'card--popover',
280
260
  filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),
281
261
  component: ({ data }) => <PopoverRenameSpace space={data.props} />,
282
262
  }),
283
263
  createSurface({
284
264
  id: POPOVER_RENAME_OBJECT,
285
- role: 'popover',
265
+ role: 'card--popover',
286
266
  filter: (data): data is { props: Obj.Any } =>
287
267
  data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
288
268
  component: ({ data }) => <PopoverRenameObject object={data.props} />,
289
269
  }),
290
270
  createSurface({
291
- id: `${SPACE_PLUGIN}/menu-footer`,
271
+ id: `${meta.id}/menu-footer`,
292
272
  role: 'menu-footer',
293
273
  filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
294
274
  component: ({ data }) => <MenuFooter object={data.subject} />,
295
275
  }),
296
276
  createSurface({
297
- id: `${SPACE_PLUGIN}/navtree-presence`,
277
+ id: `${meta.id}/navtree-presence`,
298
278
  role: 'navtree-item-end',
299
279
  filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
300
280
  typeof data.id === 'string' && Obj.isObject(data.subject),
@@ -306,7 +286,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
306
286
  }),
307
287
  // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
308
288
  createSurface({
309
- id: `${SPACE_PLUGIN}/navtree-presence-fallback`,
289
+ id: `${meta.id}/navtree-presence-fallback`,
310
290
  role: 'navtree-item-end',
311
291
  position: 'fallback',
312
292
  filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
@@ -314,13 +294,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
314
294
  }),
315
295
  // TODO(wittjosiah): Broken?
316
296
  createSurface({
317
- id: `${SPACE_PLUGIN}/navtree-sync-status`,
297
+ id: `${meta.id}/navtree-sync-status`,
318
298
  role: 'navtree-item-end',
319
299
  filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),
320
300
  component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,
321
301
  }),
322
302
  createSurface({
323
- id: `${SPACE_PLUGIN}/navbar-presence`,
303
+ id: `${meta.id}/navbar-presence`,
324
304
  role: 'navbar-end',
325
305
  position: 'hoist',
326
306
  filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
@@ -336,13 +316,13 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
336
316
  },
337
317
  }),
338
318
  createSurface({
339
- id: `${SPACE_PLUGIN}/collection-section`,
319
+ id: `${meta.id}/collection-section`,
340
320
  role: 'section',
341
321
  filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
342
322
  component: ({ data }) => <CollectionSection collection={data.subject} />,
343
323
  }),
344
324
  createSurface({
345
- id: `${SPACE_PLUGIN}/status`,
325
+ id: `${meta.id}/status`,
346
326
  role: 'status',
347
327
  component: () => <SyncStatus />,
348
328
  }),
@@ -2,12 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
6
  import { ClientCapabilities } from '@dxos/plugin-client';
7
7
 
8
- import { SpaceCapabilities } from './capabilities';
9
8
  import { type ObjectForm } from '../types';
10
9
 
10
+ import { SpaceCapabilities } from './capabilities';
11
+
11
12
  export default (context: PluginContext) => {
12
13
  const registry = context.getCapability(Capabilities.RxRegistry);
13
14
  const client = context.getCapability(ClientCapabilities.Client);