@dxos/plugin-space 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

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 (331) hide show
  1. package/dist/lib/browser/{CollectionMain-AX7KKXWP.mjs → CollectionArticle-WTHWY4YS.mjs} +8 -8
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-ACGHWPDX.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-U3IH7BMV.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-Y2LBZX2G.mjs → app-graph-builder-HABMCWAI.mjs} +170 -173
  10. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-425OVRTW.mjs → app-graph-serializer-G3VFEGTN.mjs} +10 -10
  12. package/dist/lib/browser/app-graph-serializer-G3VFEGTN.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-6A3NWBB6.mjs +392 -0
  14. package/dist/lib/browser/chunk-6A3NWBB6.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-PUF3B7XO.mjs → chunk-C6DAPIFF.mjs} +4 -4
  16. package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-X6COEDOD.mjs → chunk-GJOZILGC.mjs} +182 -118
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-6KVKMOGQ.mjs → chunk-KCZ527AM.mjs} +607 -456
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-CVZAZRW4.mjs → chunk-P25R3AOK.mjs} +34 -4
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-YZJWWMNB.mjs → chunk-POFUXISV.mjs} +68 -62
  24. package/dist/lib/browser/chunk-POFUXISV.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-EIXZABXD.mjs → chunk-WJXU4GKV.mjs} +2 -2
  28. package/dist/lib/browser/{identity-created-PW2BA46S.mjs → identity-created-NAXTPQXE.mjs} +3 -3
  29. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  30. package/dist/lib/browser/index.mjs +83 -110
  31. package/dist/lib/browser/index.mjs.map +3 -3
  32. package/dist/lib/browser/{intent-resolver-2TBYHOBA.mjs → intent-resolver-RZEWNJ2K.mjs} +90 -82
  33. package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-root-KMJXJ5VX.mjs → react-root-JCRD74GI.mjs} +9 -8
  36. package/dist/lib/browser/react-root-JCRD74GI.mjs.map +7 -0
  37. package/dist/lib/browser/{react-surface-YAJUAMER.mjs → react-surface-VOETEAG3.mjs} +64 -84
  38. package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
  39. package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
  40. package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
  41. package/dist/lib/browser/{settings-UYYJ225A.mjs → settings-TRLI52I5.mjs} +3 -3
  42. package/dist/lib/browser/{spaces-ready-YNZPWXA3.mjs → spaces-ready-OHGCWZHQ.mjs} +19 -12
  43. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  44. package/dist/lib/browser/{state-BPU73TYO.mjs → state-C7N6EDDZ.mjs} +3 -3
  45. package/dist/lib/browser/types/index.mjs +10 -4
  46. package/dist/lib/node-esm/{CollectionMain-EU57SRYK.mjs → CollectionArticle-KHXYT3SH.mjs} +8 -8
  47. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  48. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs +142 -0
  49. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs.map +7 -0
  50. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs +145 -0
  51. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs.map +7 -0
  52. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +117 -0
  53. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
  54. package/dist/lib/node-esm/{app-graph-builder-DMNLDT7E.mjs → app-graph-builder-T6VJKIOA.mjs} +170 -173
  55. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
  56. package/dist/lib/node-esm/{app-graph-serializer-ZEDSY77N.mjs → app-graph-serializer-2NLWWFUB.mjs} +10 -10
  57. package/dist/lib/node-esm/app-graph-serializer-2NLWWFUB.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-FLRC6XWU.mjs → chunk-7EV4SN47.mjs} +33 -4
  59. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-7UIEPBQJ.mjs → chunk-AX3UGL5D.mjs} +68 -62
  61. package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  63. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs → chunk-H4JILUJK.mjs} +2 -2
  65. package/dist/lib/node-esm/{chunk-ZFCCFELA.mjs → chunk-I6FZP42D.mjs} +182 -118
  66. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-L26ZIGHA.mjs → chunk-JAMGJUFU.mjs} +607 -456
  68. package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-36TAYXV7.mjs → chunk-WWGV5FJM.mjs} +4 -4
  70. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
  72. package/dist/lib/node-esm/chunk-X34VDVMY.mjs.map +7 -0
  73. package/dist/lib/node-esm/{identity-created-MWTLGQRU.mjs → identity-created-OXLKCJE3.mjs} +3 -3
  74. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  75. package/dist/lib/node-esm/index.mjs +83 -110
  76. package/dist/lib/node-esm/index.mjs.map +3 -3
  77. package/dist/lib/node-esm/{intent-resolver-YOG27WOG.mjs → intent-resolver-4PHJWDXW.mjs} +90 -82
  78. package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
  79. package/dist/lib/node-esm/meta.json +1 -1
  80. package/dist/lib/node-esm/{react-root-27QMJZD2.mjs → react-root-O5I5CDJ7.mjs} +9 -8
  81. package/dist/lib/node-esm/react-root-O5I5CDJ7.mjs.map +7 -0
  82. package/dist/lib/node-esm/{react-surface-RC73GAN5.mjs → react-surface-J3XDMU2D.mjs} +64 -84
  83. package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
  84. package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
  85. package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
  86. package/dist/lib/node-esm/{settings-Q736OQRP.mjs → settings-MNQTKHL7.mjs} +3 -3
  87. package/dist/lib/node-esm/{spaces-ready-XZQD7Q65.mjs → spaces-ready-ZPU24DA2.mjs} +19 -12
  88. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  89. package/dist/lib/node-esm/{state-BY75TM32.mjs → state-45TXZQJ6.mjs} +3 -3
  90. package/dist/lib/node-esm/types/index.mjs +10 -4
  91. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/capabilities.d.ts +12 -6
  94. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/index.d.ts +1 -1
  96. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/repair.d.ts +4 -0
  101. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  103. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  104. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  105. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  106. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  107. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  108. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  109. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +218 -214
  110. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +16 -9
  112. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  113. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  114. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  115. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  116. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  117. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  118. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1591 -0
  119. package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
  120. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  121. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  122. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  123. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  124. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  125. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  126. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  127. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  128. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  129. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  130. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  131. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  132. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  134. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  135. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1424 -0
  136. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  137. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
  138. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  139. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  140. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  141. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  142. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  143. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +219 -215
  144. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  145. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  146. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  147. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  148. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +6 -5
  149. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  150. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +218 -214
  151. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  152. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  153. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  154. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  155. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  156. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  157. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  158. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  159. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +218 -214
  160. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  162. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +219 -215
  163. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  164. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  165. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  166. package/dist/types/src/components/index.d.ts +10 -17
  167. package/dist/types/src/components/index.d.ts.map +1 -1
  168. package/dist/types/src/helpers/index.d.ts +2 -0
  169. package/dist/types/src/helpers/index.d.ts.map +1 -0
  170. package/dist/types/src/helpers/query.d.ts +8 -0
  171. package/dist/types/src/helpers/query.d.ts.map +1 -0
  172. package/dist/types/src/helpers/query.test.d.ts +2 -0
  173. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  174. package/dist/types/src/hooks/index.d.ts +1 -0
  175. package/dist/types/src/hooks/index.d.ts.map +1 -1
  176. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  177. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  178. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  179. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  180. package/dist/types/src/index.d.ts +1 -0
  181. package/dist/types/src/index.d.ts.map +1 -1
  182. package/dist/types/src/meta.d.ts.map +1 -1
  183. package/dist/types/src/translations.d.ts +218 -214
  184. package/dist/types/src/translations.d.ts.map +1 -1
  185. package/dist/types/src/types/form.d.ts +24 -0
  186. package/dist/types/src/types/form.d.ts.map +1 -0
  187. package/dist/types/src/types/index.d.ts +1 -0
  188. package/dist/types/src/types/index.d.ts.map +1 -1
  189. package/dist/types/src/types/types.d.ts +33 -74
  190. package/dist/types/src/types/types.d.ts.map +1 -1
  191. package/dist/types/src/util.d.ts +19 -33
  192. package/dist/types/src/util.d.ts.map +1 -1
  193. package/dist/types/tsconfig.tsbuildinfo +1 -1
  194. package/package.json +57 -48
  195. package/src/SpacePlugin.ts +64 -89
  196. package/src/capabilities/app-graph-builder.ts +165 -233
  197. package/src/capabilities/app-graph-serializer.ts +5 -5
  198. package/src/capabilities/capabilities.ts +18 -8
  199. package/src/capabilities/identity-created.ts +2 -2
  200. package/src/capabilities/index.ts +1 -1
  201. package/src/capabilities/intent-resolver.ts +66 -66
  202. package/src/capabilities/react-root.tsx +2 -1
  203. package/src/capabilities/react-surface.tsx +69 -119
  204. package/src/capabilities/repair.ts +57 -0
  205. package/src/capabilities/spaces-ready.ts +14 -5
  206. package/src/components/AwaitingObject.tsx +11 -13
  207. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +5 -4
  208. package/src/components/CollectionSection.tsx +6 -4
  209. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +6 -6
  210. package/src/components/CreateDialog/CreateObjectDialog.tsx +57 -40
  211. package/src/components/CreateDialog/CreateObjectPanel.tsx +33 -26
  212. package/src/components/CreateDialog/CreateSpaceDialog.tsx +25 -7
  213. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +21 -5
  214. package/src/components/JoinDialog/index.ts +5 -0
  215. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +1 -1
  216. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +11 -9
  217. package/src/components/MembersContainer/index.ts +5 -0
  218. package/src/components/{ObjectDetailsPanel.tsx → ObjectDetailsPanel/ObjectDetailsPanel.tsx} +8 -36
  219. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  220. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  221. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +5 -5
  222. package/src/components/ObjectRenamePopover/index.ts +5 -0
  223. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -5
  224. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  225. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  226. package/src/components/ObjectSettings/ForeignKeys.tsx +6 -6
  227. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +1 -1
  228. package/src/components/ObjectSettings/index.ts +3 -1
  229. package/src/components/RecordArticle.stories.tsx +115 -0
  230. package/src/components/RecordArticle.tsx +114 -0
  231. package/src/components/SchemaContainer.tsx +21 -24
  232. package/src/components/SpacePluginSettings.tsx +8 -2
  233. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +1 -1
  234. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +14 -9
  235. package/src/components/SpacePresence/index.ts +5 -0
  236. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +6 -5
  237. package/src/components/SpaceRenamePopover/index.ts +5 -0
  238. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +52 -13
  239. package/src/components/SyncStatus/InlineSyncStatus.tsx +5 -5
  240. package/src/components/SyncStatus/SyncStatus.stories.tsx +3 -2
  241. package/src/components/SyncStatus/SyncStatus.tsx +105 -9
  242. package/src/components/ViewEditor.tsx +57 -18
  243. package/src/components/index.ts +7 -8
  244. package/src/helpers/index.ts +5 -0
  245. package/src/helpers/query.test.ts +24 -0
  246. package/src/helpers/query.ts +158 -0
  247. package/src/hooks/index.ts +1 -0
  248. package/src/hooks/useActiveSpace.ts +2 -1
  249. package/src/hooks/useInputSurfaceLookup.tsx +7 -2
  250. package/src/hooks/useTypeOptions.ts +27 -0
  251. package/src/index.ts +1 -0
  252. package/src/meta.ts +5 -0
  253. package/src/translations.ts +67 -58
  254. package/src/types/form.ts +75 -0
  255. package/src/types/index.ts +1 -0
  256. package/src/types/types.ts +39 -44
  257. package/src/util.tsx +187 -121
  258. package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +0 -7
  259. package/dist/lib/browser/ObjectDetailsPanel-SJ4XUXXX.mjs +0 -90
  260. package/dist/lib/browser/ObjectDetailsPanel-SJ4XUXXX.mjs.map +0 -7
  261. package/dist/lib/browser/RecordMain-FHPCS6GM.mjs +0 -68
  262. package/dist/lib/browser/RecordMain-FHPCS6GM.mjs.map +0 -7
  263. package/dist/lib/browser/app-graph-builder-Y2LBZX2G.mjs.map +0 -7
  264. package/dist/lib/browser/app-graph-serializer-425OVRTW.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-6KVKMOGQ.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-CVZAZRW4.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-IRKDREHY.mjs +0 -11
  268. package/dist/lib/browser/chunk-IRKDREHY.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-OYHC63NL.mjs +0 -344
  270. package/dist/lib/browser/chunk-OYHC63NL.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-PUF3B7XO.mjs.map +0 -7
  272. package/dist/lib/browser/chunk-X6COEDOD.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-YZJWWMNB.mjs.map +0 -7
  274. package/dist/lib/browser/identity-created-PW2BA46S.mjs.map +0 -7
  275. package/dist/lib/browser/intent-resolver-2TBYHOBA.mjs.map +0 -7
  276. package/dist/lib/browser/react-root-KMJXJ5VX.mjs.map +0 -7
  277. package/dist/lib/browser/react-surface-YAJUAMER.mjs.map +0 -7
  278. package/dist/lib/browser/schema-defs-2OCPV7JF.mjs +0 -26
  279. package/dist/lib/browser/schema-defs-2OCPV7JF.mjs.map +0 -7
  280. package/dist/lib/browser/spaces-ready-YNZPWXA3.mjs.map +0 -7
  281. package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +0 -7
  282. package/dist/lib/node-esm/ObjectDetailsPanel-P7D727OV.mjs +0 -91
  283. package/dist/lib/node-esm/ObjectDetailsPanel-P7D727OV.mjs.map +0 -7
  284. package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs +0 -70
  285. package/dist/lib/node-esm/RecordMain-V73AEB6N.mjs.map +0 -7
  286. package/dist/lib/node-esm/app-graph-builder-DMNLDT7E.mjs.map +0 -7
  287. package/dist/lib/node-esm/app-graph-serializer-ZEDSY77N.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-36TAYXV7.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-7UIEPBQJ.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-ADEZJQE3.mjs +0 -345
  291. package/dist/lib/node-esm/chunk-ADEZJQE3.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-FLRC6XWU.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-L26ZIGHA.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-MWNATOXL.mjs +0 -13
  295. package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +0 -7
  296. package/dist/lib/node-esm/chunk-ZFCCFELA.mjs.map +0 -7
  297. package/dist/lib/node-esm/identity-created-MWTLGQRU.mjs.map +0 -7
  298. package/dist/lib/node-esm/intent-resolver-YOG27WOG.mjs.map +0 -7
  299. package/dist/lib/node-esm/react-root-27QMJZD2.mjs.map +0 -7
  300. package/dist/lib/node-esm/react-surface-RC73GAN5.mjs.map +0 -7
  301. package/dist/lib/node-esm/schema-defs-X2Z7F2EV.mjs +0 -27
  302. package/dist/lib/node-esm/schema-defs-X2Z7F2EV.mjs.map +0 -7
  303. package/dist/lib/node-esm/spaces-ready-XZQD7Q65.mjs.map +0 -7
  304. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  305. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  306. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  307. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  308. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  309. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  310. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  311. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  312. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  313. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  314. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  315. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  316. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  317. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  318. package/dist/types/src/components/RecordMain.d.ts +0 -7
  319. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  320. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  321. package/src/capabilities/schema-defs.ts +0 -31
  322. package/src/components/PersistenceStatus.tsx +0 -83
  323. package/src/components/RecordMain.tsx +0 -43
  324. /package/dist/lib/browser/{chunk-EIXZABXD.mjs.map → chunk-WJXU4GKV.mjs.map} +0 -0
  325. /package/dist/lib/browser/{settings-UYYJ225A.mjs.map → settings-TRLI52I5.mjs.map} +0 -0
  326. /package/dist/lib/browser/{state-BPU73TYO.mjs.map → state-C7N6EDDZ.mjs.map} +0 -0
  327. /package/dist/lib/node-esm/{chunk-SVFKU7EW.mjs.map → chunk-H4JILUJK.mjs.map} +0 -0
  328. /package/dist/lib/node-esm/{settings-Q736OQRP.mjs.map → settings-MNQTKHL7.mjs.map} +0 -0
  329. /package/dist/lib/node-esm/{state-BY75TM32.mjs.map → state-45TXZQJ6.mjs.map} +0 -0
  330. /package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +0 -0
  331. /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
@@ -2,43 +2,27 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import * as Option from 'effect/Option';
5
6
  import type * as Schema from 'effect/Schema';
6
- import React, { useCallback, useMemo } from 'react';
7
+ import React, { useCallback } from 'react';
7
8
 
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';
9
+ import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
10
+ import { Surface, useCapability, useLayout } from '@dxos/app-framework/react';
11
+ import { Obj, type Ref } from '@dxos/echo';
18
12
  import { findAnnotation } from '@dxos/effect';
19
13
  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';
14
+ import { type Space, SpaceState, getSpace, isLiveObject, isSpace, parseId, useSpace } from '@dxos/react-client/echo';
15
+ import { Input } from '@dxos/react-ui';
33
16
  import { type InputProps, SelectInput } from '@dxos/react-ui-form';
34
17
  import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
35
- import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
18
+ import { Collection, View, ViewAnnotation } from '@dxos/schema';
36
19
  import { type JoinPanelProps } from '@dxos/shell/react';
37
20
 
21
+ // TODO(burdon): Component name standard: NounVerbComponent.
38
22
  import {
39
23
  CREATE_OBJECT_DIALOG,
40
24
  CREATE_SPACE_DIALOG,
41
- CollectionMain,
25
+ CollectionArticle,
42
26
  CollectionSection,
43
27
  CreateObjectDialog,
44
28
  type CreateObjectDialogProps,
@@ -48,23 +32,30 @@ import {
48
32
  JoinDialog,
49
33
  MembersContainer,
50
34
  MenuFooter,
35
+ OBJECT_RENAME_POPOVER,
51
36
  ObjectDetailsPanel,
37
+ ObjectRenamePopover,
52
38
  ObjectSettingsContainer,
53
- POPOVER_RENAME_OBJECT,
54
- POPOVER_RENAME_SPACE,
55
- PopoverRenameObject,
56
- PopoverRenameSpace,
57
- RecordMain,
39
+ RecordArticle,
40
+ SPACE_RENAME_POPOVER,
58
41
  SchemaContainer,
59
42
  SmallPresenceLive,
60
43
  SpacePluginSettings,
61
44
  SpacePresence,
45
+ SpaceRenamePopover,
62
46
  SpaceSettingsContainer,
63
47
  SyncStatus,
64
48
  ViewEditor,
65
49
  } from '../components';
50
+ import { useTypeOptions } from '../hooks';
66
51
  import { meta } from '../meta';
67
- import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
52
+ import {
53
+ HueAnnotationId,
54
+ IconAnnotationId,
55
+ type SpaceSettingsProps,
56
+ type TypeInputOptions,
57
+ TypeInputOptionsAnnotationId,
58
+ } from '../types';
68
59
 
69
60
  import { SpaceCapabilities } from './capabilities';
70
61
 
@@ -72,8 +63,6 @@ type ReactSurfaceOptions = {
72
63
  createInvitationUrl: (invitationCode: string) => string;
73
64
  };
74
65
 
75
- const OMIT = [DataType.Collection.typename, Type.getTypename(DataType.QueryCollection)];
76
-
77
66
  export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
78
67
  contributes(Capabilities.ReactSurface, [
79
68
  createSurface({
@@ -86,7 +75,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
86
75
  <Surface
87
76
  data={{
88
77
  id: data.subject.id,
89
- subject: data.subject.properties[DataType.Collection.typename]?.target,
78
+ subject: data.subject.properties[Collection.Collection.typename]?.target,
90
79
  }}
91
80
  role={role}
92
81
  {...rest}
@@ -98,14 +87,14 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
98
87
  role: 'article',
99
88
  position: 'fallback',
100
89
  filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
101
- component: ({ data }) => <RecordMain record={data.subject} />,
90
+ component: ({ data }) => <RecordArticle subject={data.subject} />,
102
91
  }),
103
92
  createSurface({
104
93
  id: `${meta.id}/collection-fallback`,
105
94
  role: 'article',
106
95
  position: 'fallback',
107
- filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
108
- component: ({ data }) => <CollectionMain collection={data.subject} />,
96
+ filter: (data): data is { subject: Collection.Collection } => Obj.instanceOf(Collection.Collection, data.subject),
97
+ component: ({ data }) => <CollectionArticle subject={data.subject} />,
109
98
  }),
110
99
  createSurface({
111
100
  id: `${meta.id}/plugin-settings`,
@@ -169,12 +158,12 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
169
158
  createSurface({
170
159
  id: `${meta.id}/selected-objects`,
171
160
  role: 'article',
172
- filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>
173
- Obj.instanceOf(DataType.View, data.companionTo) && data.subject === 'selected-objects',
161
+ filter: (data): data is { companionTo: View.View; subject: 'selected-objects' } =>
162
+ Obj.instanceOf(View.View, data.companionTo) && data.subject === 'selected-objects',
174
163
  component: ({ data }) => (
175
164
  <ObjectDetailsPanel
176
- key={fullyQualifiedId(data.companionTo)}
177
- objectId={fullyQualifiedId(data.companionTo)}
165
+ key={Obj.getDXN(data.companionTo).toString()}
166
+ objectId={Obj.getDXN(data.companionTo).toString()}
178
167
  view={data.companionTo}
179
168
  />
180
169
  ),
@@ -240,81 +229,25 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
240
229
  role: 'form-input',
241
230
  filter: (
242
231
  data,
243
- ): data is { prop: string; schema: Schema.Schema<any>; target: Space | DataType.Collection | undefined } => {
232
+ ): data is {
233
+ prop: string;
234
+ schema: Schema.Schema.Any;
235
+ target: Space | Collection.Collection | undefined;
236
+ } => {
244
237
  if (data.prop !== 'typename') {
245
238
  return false;
246
239
  }
247
240
 
248
- const annotation = findAnnotation((data.schema as Schema.Schema.All).ast, TypenameAnnotationId);
241
+ // TODO(wittjosiah): This doesn't work here.
242
+ // const annotation = TypeInputOptionsAnnotation.get(data.schema as Schema.Schema.Any);
243
+ const annotation = findAnnotation((data.schema as Schema.Schema.All).ast, TypeInputOptionsAnnotationId);
249
244
  return !!annotation;
250
245
  },
251
246
  component: ({ data: { schema, target }, ...inputProps }) => {
252
- const { t } = useTranslation();
253
- const client = useClient();
254
247
  const props = inputProps as any as InputProps;
255
248
  const space = isSpace(target) ? target : getSpace(target);
256
- if (!space) {
257
- return null;
258
- }
259
-
260
- 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
- );
249
+ const annotation = findAnnotation<TypeInputOptions>(schema.ast, TypeInputOptionsAnnotationId)!;
250
+ const options = useTypeOptions({ space, annotation });
318
251
 
319
252
  return <SelectInput {...props} options={options} />;
320
253
  },
@@ -322,21 +255,38 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
322
255
  createSurface({
323
256
  id: `${meta.id}/object-settings`,
324
257
  role: 'object-settings',
325
- filter: (data): data is { subject: DataType.View } => Obj.instanceOf(DataType.View, data.subject),
326
- component: ({ data }) => <ViewEditor view={data.subject} />,
258
+ filter: (data): data is { subject: { view: Ref.Ref<View.View> } } => {
259
+ if (!Obj.isObject(data.subject)) {
260
+ return false;
261
+ }
262
+
263
+ const schema = Obj.getSchema(data.subject);
264
+ return Option.fromNullable(schema).pipe(
265
+ Option.flatMap((schema) => ViewAnnotation.get(schema)),
266
+ Option.getOrElse(() => false),
267
+ );
268
+ },
269
+ component: ({ data }) => {
270
+ const view = data.subject.view.target;
271
+ if (!view) {
272
+ return null;
273
+ }
274
+
275
+ return <ViewEditor view={view} />;
276
+ },
327
277
  }),
328
278
  createSurface({
329
- id: POPOVER_RENAME_SPACE,
279
+ id: SPACE_RENAME_POPOVER,
330
280
  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} />,
281
+ filter: (data): data is { props: Space } => data.component === SPACE_RENAME_POPOVER && isSpace(data.props),
282
+ component: ({ data }) => <SpaceRenamePopover space={data.props} />,
333
283
  }),
334
284
  createSurface({
335
- id: POPOVER_RENAME_OBJECT,
285
+ id: OBJECT_RENAME_POPOVER,
336
286
  role: 'card--popover',
337
287
  filter: (data): data is { props: Obj.Any } =>
338
- data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
339
- component: ({ data }) => <PopoverRenameObject object={data.props} />,
288
+ data.component === OBJECT_RENAME_POPOVER && isLiveObject(data.props),
289
+ component: ({ data }) => <ObjectRenamePopover object={data.props} />,
340
290
  }),
341
291
  createSurface({
342
292
  id: `${meta.id}/menu-footer`,
@@ -379,7 +329,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
379
329
  const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);
380
330
  const object = isSpace(data.subject)
381
331
  ? data.subject.state.get() === SpaceState.SPACE_READY
382
- ? (space?.properties[DataType.Collection.typename]?.target as DataType.Collection)
332
+ ? (space?.properties[Collection.Collection.typename]?.target as Collection.Collection)
383
333
  : undefined
384
334
  : data.subject;
385
335
 
@@ -389,8 +339,8 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
389
339
  createSurface({
390
340
  id: `${meta.id}/collection-section`,
391
341
  role: 'section',
392
- filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
393
- component: ({ data }) => <CollectionSection collection={data.subject} />,
342
+ filter: (data): data is { subject: Collection.Collection } => Obj.instanceOf(Collection.Collection, data.subject),
343
+ component: ({ data }) => <CollectionSection subject={data.subject} />,
394
344
  }),
395
345
  createSurface({
396
346
  id: `${meta.id}/status`,
@@ -0,0 +1,57 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { contributes } from '@dxos/app-framework';
6
+ import { Obj, Ref, Type } from '@dxos/echo';
7
+ import { type Space } from '@dxos/react-client/echo';
8
+ import { Collection } from '@dxos/schema';
9
+
10
+ import { SpaceCapabilities } from './capabilities';
11
+
12
+ export default () =>
13
+ contributes(SpaceCapabilities.Repair, async ({ space }) => {
14
+ await removeQueryCollections(space);
15
+ await ensureSystemCollection(space);
16
+ });
17
+
18
+ /**
19
+ * Remove all existing query collections from the root collection.
20
+ */
21
+ const removeQueryCollections = async (space: Space) => {
22
+ const rootCollection: Collection.Collection = await space.properties[Collection.Collection.typename]?.load();
23
+ if (!rootCollection) {
24
+ return;
25
+ }
26
+
27
+ const objects = await Promise.all(rootCollection.objects.map((ref) => ref.load()));
28
+ const queryCollections = objects.filter((object) => Obj.getTypename(object) === 'dxos.org/type/QueryCollection');
29
+ if (queryCollections.length === 0) {
30
+ return;
31
+ }
32
+
33
+ rootCollection.objects = objects
34
+ .filter((object) => Obj.getTypename(object) !== 'dxos.org/type/QueryCollection')
35
+ .map((object) => Ref.make(object));
36
+ queryCollections.forEach((object) => space.db.remove(object));
37
+ };
38
+
39
+ /**
40
+ * Ensure the root collection has a system collection for StoredSchema.
41
+ */
42
+ const ensureSystemCollection = async (space: Space) => {
43
+ const rootCollection: Collection.Collection = await space.properties[Collection.Collection.typename]?.load();
44
+ if (!rootCollection) {
45
+ return;
46
+ }
47
+
48
+ const objects = await Promise.all(rootCollection.objects.map((ref) => ref.load()));
49
+ const records = objects.find(
50
+ (object) => Obj.instanceOf(Collection.Managed, object) && object.key === Type.getTypename(Type.PersistentType),
51
+ );
52
+ if (records) {
53
+ return;
54
+ }
55
+
56
+ rootCollection.objects.push(Ref.make(Collection.makeManaged({ key: Type.getTypename(Type.PersistentType) })));
57
+ };
@@ -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);
@@ -98,7 +101,13 @@ export default async (context: PluginContext) => {
98
101
  subscriptions.add(
99
102
  scheduledEffect(
100
103
  () => ({ name: space.properties.name }),
101
- ({ name }) => (state.spaceNames[space.id] = name),
104
+ ({ name }) => {
105
+ if (!name) {
106
+ delete state.spaceNames[space.id];
107
+ } else {
108
+ state.spaceNames[space.id] = name;
109
+ }
110
+ },
102
111
  ),
103
112
  );
104
113
  });
@@ -117,7 +126,7 @@ export default async (context: PluginContext) => {
117
126
  // Group parts by space for efficient messaging.
118
127
  const idsBySpace = reduceGroupBy(active, (id) => {
119
128
  try {
120
- const [spaceId] = parseFullyQualifiedId(id);
129
+ const { spaceId } = parseId(id);
121
130
  return spaceId;
122
131
  } catch {
123
132
  return null;
@@ -126,7 +135,7 @@ export default async (context: PluginContext) => {
126
135
 
127
136
  const removedBySpace = reduceGroupBy(inactive, (id) => {
128
137
  try {
129
- const [spaceId] = parseFullyQualifiedId(id);
138
+ const { spaceId } = parseId(id);
130
139
  return spaceId;
131
140
  } catch {
132
141
  return null;
@@ -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
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(meta.id);
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,13 +4,14 @@
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
12
  import { meta } from '../meta';
12
13
 
13
- export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
14
+ export const CollectionArticle = ({ subject }: SurfaceComponentProps<Collection.Collection>) => {
14
15
  const { t } = useTranslation(meta.id);
15
16
 
16
17
  return (
@@ -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
11
  import { meta } from '../meta';
11
12
 
12
- export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
13
+ export const CollectionSection = ({ role, subject }: SurfaceComponentProps<Collection.Collection>) => {
13
14
  const { t } = useTranslation(meta.id);
15
+
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
  };
@@ -7,12 +7,12 @@ import React, { useEffect } from 'react';
7
7
 
8
8
  import { IntentPlugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
- import { Filter, Obj, Type } from '@dxos/echo';
10
+ import { Filter, Obj } from '@dxos/echo';
11
11
  import { useQuery, useSpace } from '@dxos/react-client/echo';
12
12
  import { withClientProvider } from '@dxos/react-client/testing';
13
13
  import { Dialog } from '@dxos/react-ui';
14
14
  import { withTheme } from '@dxos/react-ui/testing';
15
- import { DataType } from '@dxos/schema';
15
+ import { Collection } from '@dxos/schema';
16
16
  import { translations as shellTranslations } from '@dxos/shell/react';
17
17
 
18
18
  import { translations } from '../../translations';
@@ -37,7 +37,7 @@ const meta = {
37
37
  decorators: [
38
38
  withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
39
39
  withPluginManager({ plugins: [IntentPlugin()] }),
40
- withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
40
+ withClientProvider({ createIdentity: true, createSpace: true, types: [Collection.Collection] }),
41
41
  ],
42
42
  parameters: {
43
43
  translations: [...translations, ...shellTranslations],
@@ -50,7 +50,7 @@ export default meta;
50
50
  export const Default: StoryObj<typeof CreateObjectDialog> = {};
51
51
 
52
52
  export const Typename: StoryObj<typeof CreateObjectDialog> = {
53
- args: { typename: Type.getTypename(DataType.Collection) },
53
+ args: { typename: Collection.Collection.typename },
54
54
  };
55
55
 
56
56
  export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
@@ -68,11 +68,11 @@ export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
68
68
  export const TargetCollection: StoryObj<typeof CreateObjectDialog> = {
69
69
  render: (args) => {
70
70
  const space = useSpace();
71
- const [collection] = useQuery(space, Filter.type(DataType.Collection));
71
+ const [collection] = useQuery(space, Filter.type(Collection.Collection));
72
72
 
73
73
  useEffect(() => {
74
74
  if (space) {
75
- space.db.add(Obj.make(DataType.Collection, { name: 'My Collection', objects: [] }));
75
+ space.db.add(Obj.make(Collection.Collection, { name: 'My Collection', objects: [] }));
76
76
  }
77
77
  }, [space]);
78
78