@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
@@ -4,31 +4,24 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
  import * as Function from 'effect/Function';
7
- import React, { useCallback, useRef, useState } from 'react';
7
+ import * as Option from 'effect/Option';
8
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
8
9
 
9
- import {
10
- Capabilities,
11
- LayoutAction,
12
- chain,
13
- createIntent,
14
- useCapabilities,
15
- useIntentDispatcher,
16
- usePluginManager,
17
- } from '@dxos/app-framework';
18
- import { Obj, Query, Type } from '@dxos/echo';
10
+ import { Capabilities, LayoutAction, chain, createIntent } from '@dxos/app-framework';
11
+ import { useIntentDispatcher, usePluginManager } from '@dxos/app-framework/react';
12
+ import { Obj, Type } from '@dxos/echo';
13
+ import { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
19
14
  import { invariant } from '@dxos/invariant';
20
15
  import { useClient } from '@dxos/react-client';
21
- import { type Space, getSpace, isLiveObject, isSpace, useQuery, useSpaces } from '@dxos/react-client/echo';
22
- import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
16
+ import { type Space, getSpace, isLiveObject, isSpace, useSpaces } from '@dxos/react-client/echo';
17
+ import { Dialog, IconButton, useTranslation } from '@dxos/react-ui';
23
18
  import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
24
- import { DataType, getTypenameFromQuery } from '@dxos/schema';
25
- import { isNonNullable } from '@dxos/util';
19
+ import { type Collection } from '@dxos/schema';
26
20
 
27
- import { SpaceCapabilities } from '../../capabilities';
28
21
  import { meta } from '../../meta';
29
22
  import { SpaceAction } from '../../types';
30
23
 
31
- import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
24
+ import { CreateObjectPanel, type CreateObjectPanelProps, type Metadata } from './CreateObjectPanel';
32
25
 
33
26
  export const CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
34
27
 
@@ -48,29 +41,39 @@ export const CreateObjectDialog = ({
48
41
  onCreateObject,
49
42
  shouldNavigate: _shouldNavigate,
50
43
  }: CreateObjectDialogProps) => {
51
- const closeRef = useRef<HTMLButtonElement | null>(null);
52
44
  const manager = usePluginManager();
53
45
  const { t } = useTranslation(meta.id);
54
- const client = useClient();
55
- const spaces = useSpaces();
56
46
  const { dispatch } = useIntentDispatcher();
57
- const forms = useCapabilities(SpaceCapabilities.ObjectForm);
58
- const [target, setTarget] = useState<Space | DataType.Collection | undefined>(initialTarget);
47
+ const [target, setTarget] = useState<Space | Collection.Collection | undefined>(initialTarget);
59
48
  const [typename, setTypename] = useState<string | undefined>(initialTypename);
60
- const space = isSpace(target) ? target : getSpace(target);
61
- const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
62
- const hiddenTypenames = queryCollections
63
- .map((collection) => getTypenameFromQuery(collection.query))
64
- .filter(isNonNullable);
49
+ const client = useClient();
50
+ const spaces = useSpaces();
51
+ const closeRef = useRef<HTMLButtonElement | null>(null);
65
52
 
66
53
  const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
67
- (typename) =>
68
- manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},
54
+ (typename) => {
55
+ const metadata = manager.context
56
+ .getCapabilities(Capabilities.Metadata)
57
+ .find(({ id }) => id === typename)?.metadata;
58
+ return metadata?.createObjectIntent ? (metadata as Metadata) : undefined;
59
+ },
69
60
  [manager],
70
61
  );
71
62
 
63
+ const space = isSpace(target) ? target : getSpace(target);
64
+ // TODO(wittjosiah): Support database schemas.
65
+ const schemas = space?.db.schemaRegistry.query({ location: ['runtime'] }).runSync();
66
+ const userSchemas = useMemo(
67
+ () =>
68
+ schemas
69
+ ?.filter((schema) => getTypeAnnotation(schema)?.kind !== EntityKind.Relation)
70
+ .filter((schema) => !!resolve(Type.getTypename(schema)))
71
+ .filter((schema) => !SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false))) ?? [],
72
+ [schemas],
73
+ );
74
+
72
75
  const handleCreateObject = useCallback<NonNullable<CreateObjectPanelProps['onCreateObject']>>(
73
- ({ form, data = {} }) =>
76
+ ({ metadata, data = {} }) =>
74
77
  Effect.gen(function* () {
75
78
  if (!target) {
76
79
  // TODO(wittjosiah): UI feedback.
@@ -82,11 +85,15 @@ export const CreateObjectDialog = ({
82
85
 
83
86
  const space = isSpace(target) ? target : getSpace(target);
84
87
  invariant(space, 'Missing space');
85
- const { object } = yield* dispatch(form.getIntent(data, { space }));
86
- if (isLiveObject(object) && !Obj.instanceOf(DataType.StoredSchema, object)) {
88
+ const { object } = yield* dispatch(metadata.createObjectIntent(data, { space }));
89
+ if (isLiveObject(object) && !Obj.instanceOf(Type.PersistentType, object)) {
87
90
  // TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
88
- const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
89
- const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object, hidden });
91
+ const hidden = !metadata.addToCollectionOnCreate;
92
+ const addObjectIntent = createIntent(SpaceAction.AddObject, {
93
+ target,
94
+ object,
95
+ hidden,
96
+ });
90
97
  const shouldNavigate = _shouldNavigate ?? (() => true);
91
98
  if (shouldNavigate(object)) {
92
99
  yield* dispatch(Function.pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
@@ -97,7 +104,7 @@ export const CreateObjectDialog = ({
97
104
  onCreateObject?.(object);
98
105
  }
99
106
  }).pipe(Effect.runPromise),
100
- [dispatch, target, resolve, hiddenTypenames, _shouldNavigate],
107
+ [dispatch, target, resolve, _shouldNavigate],
101
108
  );
102
109
 
103
110
  return (
@@ -107,18 +114,28 @@ export const CreateObjectDialog = ({
107
114
  <div role='none' className={cardDialogHeader}>
108
115
  <Dialog.Title>
109
116
  {t('create object dialog title', {
110
- object: t('typename label', { ns: typename, defaultValue: views ? 'View' : 'Item' }),
117
+ object: t('typename label', {
118
+ ns: typename,
119
+ defaultValue: views ? 'View' : 'Object',
120
+ }),
111
121
  })}
112
122
  </Dialog.Title>
113
123
  <Dialog.Close asChild>
114
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
115
- <Icon icon='ph--x--regular' size={4} />
116
- </Button>
124
+ <IconButton
125
+ ref={closeRef}
126
+ icon='ph--x--regular'
127
+ size={4}
128
+ label='Close'
129
+ iconOnly
130
+ density='fine'
131
+ variant='ghost'
132
+ autoFocus
133
+ />
117
134
  </Dialog.Close>
118
135
  </div>
119
136
 
120
137
  <CreateObjectPanel
121
- forms={forms}
138
+ schemas={userSchemas}
122
139
  spaces={spaces}
123
140
  target={target}
124
141
  views={views}
@@ -3,39 +3,46 @@
3
3
  //
4
4
 
5
5
  import * as Option from 'effect/Option';
6
+ import type * as Schema from 'effect/Schema';
6
7
  import React, { useCallback } from 'react';
7
8
 
8
- import { Type } from '@dxos/echo';
9
- import { type BaseObject, type TypeAnnotation, ViewAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
9
+ import { type AnyProperties, type TypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
10
10
  import { type Space, type SpaceId } from '@dxos/react-client/echo';
11
11
  import { Icon, toLocalizedString, useDefaultValue, useTranslation } from '@dxos/react-ui';
12
12
  import { Form } from '@dxos/react-ui-form';
13
13
  import { SearchList } from '@dxos/react-ui-searchlist';
14
14
  import { cardDialogOverflow, cardDialogPaddedOverflow, cardDialogSearchListRoot } from '@dxos/react-ui-stack';
15
- import { type DataType } from '@dxos/schema';
15
+ import { type Collection, ViewAnnotation } from '@dxos/schema';
16
16
  import { type MaybePromise, isNonNullable } from '@dxos/util';
17
17
 
18
18
  import { useInputSurfaceLookup } from '../../hooks';
19
19
  import { meta } from '../../meta';
20
- import { type ObjectForm } from '../../types';
20
+ import { type CreateObjectIntent } from '../../types';
21
21
  import { getSpaceDisplayName } from '../../util';
22
22
 
23
+ export type Metadata = {
24
+ createObjectIntent: CreateObjectIntent;
25
+ inputSchema?: Schema.Schema.AnyNoContext;
26
+ addToCollectionOnCreate?: boolean;
27
+ icon?: string;
28
+ };
29
+
23
30
  export type CreateObjectPanelProps = {
24
- forms: ObjectForm[];
31
+ schemas: Schema.Schema.AnyNoContext[];
25
32
  spaces: Space[];
26
33
  typename?: string;
27
- target?: Space | DataType.Collection;
34
+ target?: Space | Collection.Collection;
28
35
  views?: boolean;
29
- initialFormValues?: Partial<BaseObject>;
36
+ initialFormValues?: Partial<AnyProperties>;
30
37
  defaultSpaceId?: SpaceId;
31
- resolve?: (typename: string) => Record<string, any>;
38
+ resolve?: (typename: string) => Metadata | undefined;
32
39
  onTargetChange?: (target: Space) => void;
33
40
  onTypenameChange?: (typename: string) => void;
34
- onCreateObject?: (params: { form: ObjectForm; data?: Record<string, any> }) => MaybePromise<void>;
41
+ onCreateObject?: (params: { metadata: Metadata; data?: Record<string, any> }) => MaybePromise<void>;
35
42
  };
36
43
 
37
44
  export const CreateObjectPanel = ({
38
- forms,
45
+ schemas,
39
46
  spaces,
40
47
  typename,
41
48
  target,
@@ -49,16 +56,16 @@ export const CreateObjectPanel = ({
49
56
  }: CreateObjectPanelProps) => {
50
57
  const { t } = useTranslation(meta.id);
51
58
  const initialFormValues = useDefaultValue(_initialFormValues, () => ({}));
52
- const form = forms.find((form) => Type.getTypename(form.objectSchema) === typename);
53
- const options: TypeAnnotation[] = forms
54
- .filter((form) => {
59
+ const metadata = typename && resolve?.(typename);
60
+ const options: TypeAnnotation[] = schemas
61
+ .filter((schema) => {
55
62
  if (views == null) {
56
63
  return true;
57
64
  } else {
58
- return views === ViewAnnotation.get(form.objectSchema).pipe(Option.getOrElse(() => false));
65
+ return views === ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false));
59
66
  }
60
67
  })
61
- .map((form) => getTypeAnnotation(form.objectSchema))
68
+ .map((schema) => getTypeAnnotation(schema))
62
69
  .filter(isNonNullable)
63
70
  .sort((a, b) => {
64
71
  const nameA = t('typename label', { ns: a.typename, defaultValue: a.typename });
@@ -68,39 +75,39 @@ export const CreateObjectPanel = ({
68
75
 
69
76
  const handleCreateObject = useCallback(
70
77
  async (props: Record<string, any>) => {
71
- if (!form) {
78
+ if (!metadata) {
72
79
  return;
73
80
  }
74
- await onCreateObject?.({ form, data: props });
81
+ await onCreateObject?.({ metadata, data: props });
75
82
  },
76
- [onCreateObject, form],
83
+ [onCreateObject, metadata],
77
84
  );
78
85
 
79
86
  const handleSetTypename = useCallback(
80
87
  async (typename: string) => {
81
- const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);
82
- if (form && !form.formSchema) {
83
- await onCreateObject?.({ form });
88
+ const metadata = resolve?.(typename);
89
+ if (metadata && !metadata.inputSchema) {
90
+ await onCreateObject?.({ metadata });
84
91
  } else {
85
92
  onTypenameChange?.(typename);
86
93
  }
87
94
  },
88
- [forms, onCreateObject],
95
+ [resolve, onCreateObject],
89
96
  );
90
97
 
91
98
  const inputSurfaceLookup = useInputSurfaceLookup({ target });
92
99
 
93
100
  // TODO(wittjosiah): These inputs should be rolled into a `Form` once it supports the necessary variants.
94
- return !form ? (
101
+ return !metadata ? (
95
102
  <SelectSchema options={options} resolve={resolve} onChange={handleSetTypename} />
96
103
  ) : !target ? (
97
104
  <SelectSpace spaces={spaces} defaultSpaceId={defaultSpaceId} onChange={onTargetChange} />
98
- ) : form.formSchema ? (
105
+ ) : metadata.inputSchema ? (
99
106
  <div role='none' className={cardDialogOverflow}>
100
107
  <Form
101
108
  autoFocus
102
109
  values={initialFormValues}
103
- schema={form.formSchema}
110
+ schema={metadata.inputSchema}
104
111
  testId='create-object-form'
105
112
  onSave={handleCreateObject}
106
113
  lookupComponent={inputSurfaceLookup}
@@ -174,7 +181,7 @@ const SelectSchema = ({
174
181
  classNames='flex items-center gap-2'
175
182
  >
176
183
  <span className='flex gap-2 items-center grow truncate'>
177
- <Icon icon={resolve?.(option.typename).icon ?? 'ph--placeholder--regular'} size={5} />
184
+ <Icon icon={resolve?.(option.typename)?.icon ?? 'ph--placeholder--regular'} size={5} />
178
185
  {t('typename label', { ns: option.typename, defaultValue: option.typename })}
179
186
  </span>
180
187
  </SearchList.Item>
@@ -6,8 +6,9 @@ import * as Effect from 'effect/Effect';
6
6
  import type * as Schema from 'effect/Schema';
7
7
  import React, { useCallback, useRef } from 'react';
8
8
 
9
- import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
10
- import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
9
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
10
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
11
+ import { Dialog, IconButton, useTranslation } from '@dxos/react-ui';
11
12
  import { Form } from '@dxos/react-ui-form';
12
13
  import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
13
14
 
@@ -31,8 +32,18 @@ export const CreateSpaceDialog = () => {
31
32
  async (data: FormValues) => {
32
33
  const program = Effect.gen(function* () {
33
34
  const { space } = yield* dispatch(createIntent(SpaceAction.Create, data));
34
- yield* dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
35
- yield* dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));
35
+ yield* dispatch(
36
+ createIntent(LayoutAction.SwitchWorkspace, {
37
+ part: 'workspace',
38
+ subject: space.id,
39
+ }),
40
+ );
41
+ yield* dispatch(
42
+ createIntent(LayoutAction.UpdateDialog, {
43
+ part: 'dialog',
44
+ options: { state: false },
45
+ }),
46
+ );
36
47
  });
37
48
  await Effect.runPromise(program);
38
49
  },
@@ -46,9 +57,16 @@ export const CreateSpaceDialog = () => {
46
57
  <div role='none' className={cardDialogHeader}>
47
58
  <Dialog.Title>{t('create space dialog title')}</Dialog.Title>
48
59
  <Dialog.Close asChild>
49
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
50
- <Icon icon='ph--x--regular' size={4} />
51
- </Button>
60
+ <IconButton
61
+ ref={closeRef}
62
+ icon='ph--x--regular'
63
+ size={4}
64
+ label='Close'
65
+ iconOnly
66
+ density='fine'
67
+ variant='ghost'
68
+ autoFocus
69
+ />
52
70
  </Dialog.Close>
53
71
  </div>
54
72
  <div role='none' className='contents'>
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { LayoutAction, createIntent, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
8
+ import { useAppGraph, useIntentDispatcher } from '@dxos/app-framework/react';
8
9
  import { Trigger } from '@dxos/async';
9
10
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
10
11
  import { useClient } from '@dxos/react-client';
@@ -13,7 +14,7 @@ import { type InvitationResult } from '@dxos/react-client/invitations';
13
14
  import { Dialog, useTranslation } from '@dxos/react-ui';
14
15
  import { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';
15
16
 
16
- import { meta } from '../meta';
17
+ import { meta } from '../../meta';
17
18
 
18
19
  export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
19
20
 
@@ -69,7 +70,12 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
69
70
  space = await trigger.wait();
70
71
  }
71
72
 
72
- await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
73
+ await dispatch(
74
+ createIntent(LayoutAction.SwitchWorkspace, {
75
+ part: 'workspace',
76
+ subject: space.id,
77
+ }),
78
+ );
73
79
 
74
80
  // TODO(wittjosiah): If navigableCollections is false and there's no target,
75
81
  // should try to navigate to the first object of the space replicates.
@@ -80,8 +86,18 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
80
86
  // If the target has not yet replicated, this will trigger a loading toast.
81
87
  await graph.waitForPath({ target }).catch(() => {});
82
88
  await Promise.all([
83
- dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [target] })),
84
- dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: target })),
89
+ dispatch(
90
+ createIntent(LayoutAction.Open, {
91
+ part: 'main',
92
+ subject: [target],
93
+ }),
94
+ ),
95
+ dispatch(
96
+ createIntent(LayoutAction.Expose, {
97
+ part: 'navigation',
98
+ subject: target,
99
+ }),
100
+ ),
85
101
  ]);
86
102
  }
87
103
 
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './JoinDialog';
@@ -13,7 +13,7 @@ import { withTheme } from '@dxos/react-ui/testing';
13
13
  import { translations as shellTranslations } from '@dxos/shell/react';
14
14
  import { render } from '@dxos/storybook-utils';
15
15
 
16
- import { translations } from '../translations';
16
+ import { translations } from '../../translations';
17
17
 
18
18
  import { MembersContainer } from './MembersContainer';
19
19
 
@@ -5,15 +5,17 @@
5
5
  import React, { type Dispatch, type SetStateAction, useCallback, useMemo, useState } from 'react';
6
6
  import { QR } from 'react-qr-rounded';
7
7
 
8
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { createIntent } from '@dxos/app-framework';
9
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
10
+ import { Obj } from '@dxos/echo';
9
11
  import { log } from '@dxos/log';
10
12
  import { useConfig } from '@dxos/react-client';
11
- import { type Space, fullyQualifiedId, useSpaceInvitations } from '@dxos/react-client/echo';
13
+ import { type Space, useSpaceInvitations } from '@dxos/react-client/echo';
12
14
  import { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
13
15
  import { Button, Clipboard, Icon, Input, useId, useTranslation } from '@dxos/react-ui';
14
16
  import { ControlFrame, ControlFrameItem, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
15
17
  import { StackItem } from '@dxos/react-ui-stack';
16
- import { DataType } from '@dxos/schema';
18
+ import { Collection } from '@dxos/schema';
17
19
  import {
18
20
  type ActionMenuItem,
19
21
  AuthCode,
@@ -26,9 +28,9 @@ import {
26
28
  } from '@dxos/shell/react';
27
29
  import { hexToEmoji } from '@dxos/util';
28
30
 
29
- import { meta } from '../meta';
30
- import { SpaceAction } from '../types';
31
- import { COMPOSER_SPACE_LOCK } from '../util';
31
+ import { meta } from '../../meta';
32
+ import { SpaceAction } from '../../types';
33
+ import { COMPOSER_SPACE_LOCK } from '../../util';
32
34
 
33
35
  // TODO(wittjosiah): Copied from Shell.
34
36
  const activeActionKey = 'dxos:react-shell/space-manager/active-action';
@@ -63,7 +65,7 @@ export const MembersContainer = ({ space, createInvitationUrl }: MembersContaine
63
65
  };
64
66
 
65
67
  // TODO(wittjosiah): Track which was the most recently viewed object.
66
- const target = space.properties[DataType.Collection.typename]?.target?.objects[0]?.target;
68
+ const target = space.properties[Collection.Collection.typename]?.target?.objects[0]?.target;
67
69
 
68
70
  const locked = space.properties[COMPOSER_SPACE_LOCK];
69
71
  const handleChangeLocked = useCallback(() => {
@@ -84,7 +86,7 @@ export const MembersContainer = ({ space, createInvitationUrl }: MembersContaine
84
86
  type: Invitation.Type.INTERACTIVE,
85
87
  authMethod: Invitation.AuthMethod.SHARED_SECRET,
86
88
  multiUse: false,
87
- target: target && fullyQualifiedId(target),
89
+ target: target && Obj.getDXN(target).toString(),
88
90
  }),
89
91
  );
90
92
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
@@ -106,7 +108,7 @@ export const MembersContainer = ({ space, createInvitationUrl }: MembersContaine
106
108
  type: Invitation.Type.DELEGATED,
107
109
  authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
108
110
  multiUse: true,
109
- target: target && fullyQualifiedId(target),
111
+ target: target && Obj.getDXN(target).toString(),
110
112
  }),
111
113
  );
112
114
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './MembersContainer';
@@ -2,24 +2,22 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { useCallback } from 'react';
5
+ import React from 'react';
6
6
 
7
- import { type JsonPath, setValue } from '@dxos/echo/internal';
8
- import { invariant } from '@dxos/invariant';
9
7
  import { useClient } from '@dxos/react-client';
10
8
  import { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';
11
9
  import { Callout, useTranslation } from '@dxos/react-ui';
12
10
  import { useSelected } from '@dxos/react-ui-attention';
13
- import { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';
14
- import { type DataType } from '@dxos/schema';
15
- import { getTypenameFromQuery } from '@dxos/schema';
11
+ import { type View, getTypenameFromQuery } from '@dxos/schema';
16
12
  import { isNonNullable } from '@dxos/util';
17
13
 
18
- import { meta } from '../meta';
14
+ import { meta } from '../../meta';
19
15
 
20
- type RowDetailsPanelProps = { objectId: string; view: DataType.View };
16
+ import { ObjectForm } from './ObjectForm';
21
17
 
22
- const ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {
18
+ type RowDetailsPanelProps = { objectId: string; view: View.View };
19
+
20
+ export const ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {
23
21
  const { t } = useTranslation(meta.id);
24
22
  const client = useClient();
25
23
  const space = getSpace(view);
@@ -30,24 +28,6 @@ const ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {
30
28
  const selectedRows = useSelected(objectId, 'multi');
31
29
  const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);
32
30
 
33
- const handleRefQueryLookup = useRefQueryLookupHandler({ space });
34
-
35
- const handleSave = useCallback(
36
- (values: any, { changed }: { changed: Record<JsonPath, boolean> }) => {
37
- const id = values.id;
38
- invariant(typeof id === 'string');
39
- const object = queriedObjects.find((obj) => obj.id === id);
40
- invariant(object);
41
-
42
- const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];
43
- for (const path of changedPaths) {
44
- const value = values[path];
45
- setValue(object, path, value);
46
- }
47
- },
48
- [queriedObjects],
49
- );
50
-
51
31
  if (selectedObjects.length === 0) {
52
32
  return (
53
33
  <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>
@@ -63,17 +43,9 @@ const ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {
63
43
  {schema &&
64
44
  selectedObjects.map((object) => (
65
45
  <div key={object.id} className='border border-separator rounded'>
66
- <Form
67
- autoSave
68
- schema={schema}
69
- values={object}
70
- onSave={handleSave}
71
- onQueryRefOptions={handleRefQueryLookup}
72
- />
46
+ <ObjectForm object={object} schema={schema} />
73
47
  </div>
74
48
  ))}
75
49
  </div>
76
50
  );
77
51
  };
78
-
79
- export default ObjectDetailsPanel;
@@ -0,0 +1,72 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import React, { useCallback, useMemo } from 'react';
7
+
8
+ import { DXN, Obj, type Ref, Tag, Type } from '@dxos/echo';
9
+ import { type JsonPath, setValue } from '@dxos/echo/internal';
10
+ import { invariant } from '@dxos/invariant';
11
+ import { getSpace } from '@dxos/react-client/echo';
12
+ import { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';
13
+ import { isNonNullable } from '@dxos/util';
14
+
15
+ import { meta as pluginMeta } from '../../meta';
16
+
17
+ const TagSchema = Tag.Tag.pipe(Schema.omit('id'));
18
+
19
+ type ObjectFormProps = { object: Obj.Any; schema: Schema.Schema.AnyNoContext };
20
+
21
+ export const ObjectForm = ({ object, schema }: ObjectFormProps) => {
22
+ const space = getSpace(object);
23
+ const handleRefQueryLookup = useRefQueryLookupHandler({ space });
24
+
25
+ const formSchema = useMemo(
26
+ () => Schema.Struct({ tags: Schema.Array(Type.Ref(Tag.Tag)).pipe(Schema.optional) }).pipe(Schema.extend(schema)),
27
+ [schema],
28
+ );
29
+
30
+ const meta = Obj.getMeta(object);
31
+ const tags = (meta.tags ?? []).map((tag) => space?.db.makeRef(DXN.parse(tag))).filter(isNonNullable);
32
+ const values = useMemo(() => ({ tags, ...object }), [object, tags]);
33
+
34
+ const handleCreateTag = useCallback((values: Schema.Schema.Type<typeof TagSchema>) => {
35
+ invariant(space);
36
+ const tag = space.db.add(Tag.make(values));
37
+ const meta = Obj.getMeta(object);
38
+ meta.tags = [...(meta.tags ?? []), Obj.getDXN(tag).toString()];
39
+ }, []);
40
+
41
+ const handleSave = useCallback(
42
+ ({ tags, ...values }: any, { changed }: { changed: Record<JsonPath, boolean> }) => {
43
+ const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];
44
+ for (const path of changedPaths) {
45
+ if (path === 'tags') {
46
+ const meta = Obj.getMeta(object);
47
+ meta.tags = tags?.map((tag: Ref.Ref<Tag.Tag>) => tag.dxn.toString()) ?? [];
48
+ continue;
49
+ }
50
+
51
+ const value = values[path];
52
+ setValue(object, path, value);
53
+ }
54
+ },
55
+ [object],
56
+ );
57
+
58
+ return (
59
+ <Form
60
+ autoSave
61
+ schema={formSchema}
62
+ values={values}
63
+ createSchema={TagSchema}
64
+ createOptionIcon='ph--plus--regular'
65
+ createOptionLabel={['add tag label', { ns: pluginMeta.id }]}
66
+ createInitialValuePath='label'
67
+ onCreate={handleCreateTag}
68
+ onSave={handleSave}
69
+ onQueryRefOptions={handleRefQueryLookup}
70
+ />
71
+ );
72
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { ObjectDetailsPanel } from './ObjectDetailsPanel';
6
+
7
+ export default ObjectDetailsPanel;