@dxos/plugin-space 0.8.4-main.67995b8 → 0.8.4-main.70d3990

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 (376) hide show
  1. package/dist/lib/browser/{CollectionMain-D2B75XBS.mjs → CollectionArticle-WTHWY4YS.mjs} +10 -10
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-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-HABMCWAI.mjs +517 -0
  10. package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-H6AW7KGS.mjs → app-graph-serializer-G3VFEGTN.mjs} +19 -19
  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-C6DAPIFF.mjs +20 -0
  16. package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-XUYKJUU7.mjs → chunk-GJOZILGC.mjs} +262 -143
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-FBJEXW54.mjs → chunk-KCZ527AM.mjs} +667 -525
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-VLBRSGJ2.mjs → chunk-P25R3AOK.mjs} +36 -6
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-QACNNDOT.mjs → chunk-POFUXISV.mjs} +69 -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-WJXU4GKV.mjs +19 -0
  28. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-23XJJV2N.mjs → identity-created-NAXTPQXE.mjs} +6 -6
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +88 -135
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-XHGD73WZ.mjs → intent-resolver-RZEWNJ2K.mjs} +114 -101
  34. package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-JCRD74GI.mjs +30 -0
  37. package/dist/lib/browser/react-root-JCRD74GI.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-YWZZQF7H.mjs → react-surface-VOETEAG3.mjs} +101 -111
  39. package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
  40. package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
  41. package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-4IMP5RYT.mjs → settings-TRLI52I5.mjs} +5 -5
  43. package/dist/lib/browser/{settings-4IMP5RYT.mjs.map → settings-TRLI52I5.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-TOPG6IV4.mjs → spaces-ready-OHGCWZHQ.mjs} +28 -19
  45. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  46. package/dist/lib/browser/{state-QYZAB45H.mjs → state-C7N6EDDZ.mjs} +7 -7
  47. package/dist/lib/browser/state-C7N6EDDZ.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +10 -4
  49. package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionArticle-KHXYT3SH.mjs} +10 -10
  50. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6OFTT3GG.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-YXPJQMJ5.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
  57. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs +518 -0
  58. package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-2ICUGQQT.mjs → app-graph-serializer-2NLWWFUB.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-2NLWWFUB.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-SSLBYZEY.mjs → chunk-7EV4SN47.mjs} +35 -6
  62. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-P442DOQ3.mjs → chunk-AX3UGL5D.mjs} +69 -62
  64. package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs +18 -0
  66. package/dist/lib/node-esm/chunk-BDEFTL6K.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-H4JILUJK.mjs +20 -0
  68. package/dist/lib/node-esm/chunk-H4JILUJK.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-4AOMYKDE.mjs → chunk-I6FZP42D.mjs} +262 -143
  70. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-2A3VBXBP.mjs → chunk-JAMGJUFU.mjs} +667 -525
  72. package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs +21 -0
  74. package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
  76. package/dist/lib/node-esm/chunk-X34VDVMY.mjs.map +7 -0
  77. package/dist/lib/node-esm/{identity-created-IJQO6GCR.mjs → identity-created-OXLKCJE3.mjs} +6 -6
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +88 -135
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-LEANKSKZ.mjs → intent-resolver-4PHJWDXW.mjs} +114 -101
  82. package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-5Y7LJRX6.mjs → react-root-O5I5CDJ7.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-O5I5CDJ7.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-YQFNIKYT.mjs → react-surface-J3XDMU2D.mjs} +101 -111
  87. package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
  88. package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
  89. package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-SAOBPND3.mjs → settings-MNQTKHL7.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-SAOBPND3.mjs.map → settings-MNQTKHL7.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-HIUKNDZK.mjs → spaces-ready-ZPU24DA2.mjs} +28 -19
  93. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-ZVEHQ4BJ.mjs → state-45TXZQJ6.mjs} +7 -7
  95. package/dist/lib/node-esm/state-45TXZQJ6.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +10 -4
  97. package/dist/types/src/SpacePlugin.d.ts +1 -1
  98. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  102. package/dist/types/src/capabilities/capabilities.d.ts +14 -8
  103. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/identity-created.d.ts +1 -1
  105. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/index.d.ts +11 -12
  107. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  109. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  111. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/repair.d.ts +4 -0
  115. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  116. package/dist/types/src/capabilities/settings.d.ts +1 -1
  117. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  118. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/state.d.ts +1 -1
  120. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  121. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  122. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  123. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  124. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  125. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1588 -4
  129. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +18 -9
  131. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  132. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  133. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  134. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  135. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  136. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  137. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  138. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  139. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  140. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1591 -0
  141. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  142. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  143. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  147. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  148. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  149. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  150. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  151. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  152. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  153. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  154. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  155. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  156. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1424 -0
  158. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  159. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
  160. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  161. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  162. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  163. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  164. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  165. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  166. package/dist/types/src/components/RecordArticle.stories.d.ts +1591 -0
  167. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  168. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  169. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  170. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  171. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +6 -5
  172. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  173. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1421 -0
  174. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  175. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  176. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  178. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  179. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  180. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  181. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1421 -4
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1422 -5
  186. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  188. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  189. package/dist/types/src/components/index.d.ts +10 -11
  190. package/dist/types/src/components/index.d.ts.map +1 -1
  191. package/dist/types/src/events.d.ts.map +1 -1
  192. package/dist/types/src/helpers/index.d.ts +2 -0
  193. package/dist/types/src/helpers/index.d.ts.map +1 -0
  194. package/dist/types/src/helpers/query.d.ts +8 -0
  195. package/dist/types/src/helpers/query.d.ts.map +1 -0
  196. package/dist/types/src/helpers/query.test.d.ts +2 -0
  197. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  198. package/dist/types/src/hooks/index.d.ts +1 -0
  199. package/dist/types/src/hooks/index.d.ts.map +1 -1
  200. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  202. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  203. package/dist/types/src/hooks/usePath.d.ts +1 -1
  204. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  206. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  207. package/dist/types/src/index.d.ts +1 -0
  208. package/dist/types/src/index.d.ts.map +1 -1
  209. package/dist/types/src/meta.d.ts +0 -1
  210. package/dist/types/src/meta.d.ts.map +1 -1
  211. package/dist/types/src/translations.d.ts +1261 -67
  212. package/dist/types/src/translations.d.ts.map +1 -1
  213. package/dist/types/src/types/form.d.ts +24 -0
  214. package/dist/types/src/types/form.d.ts.map +1 -0
  215. package/dist/types/src/types/index.d.ts +1 -0
  216. package/dist/types/src/types/index.d.ts.map +1 -1
  217. package/dist/types/src/types/types.d.ts +94 -155
  218. package/dist/types/src/types/types.d.ts.map +1 -1
  219. package/dist/types/src/util.d.ts +25 -36
  220. package/dist/types/src/util.d.ts.map +1 -1
  221. package/dist/types/tsconfig.tsbuildinfo +1 -1
  222. package/package.json +72 -63
  223. package/src/SpacePlugin.ts +182 -222
  224. package/src/capabilities/app-graph-builder.ts +221 -237
  225. package/src/capabilities/app-graph-serializer.ts +12 -12
  226. package/src/capabilities/capabilities.ts +28 -17
  227. package/src/capabilities/identity-created.ts +3 -3
  228. package/src/capabilities/index.ts +1 -2
  229. package/src/capabilities/intent-resolver.ts +91 -79
  230. package/src/capabilities/react-root.tsx +6 -4
  231. package/src/capabilities/react-surface.tsx +108 -149
  232. package/src/capabilities/repair.ts +57 -0
  233. package/src/capabilities/spaces-ready.ts +23 -11
  234. package/src/capabilities/state.ts +5 -4
  235. package/src/components/AwaitingObject.tsx +12 -14
  236. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  237. package/src/components/CollectionSection.tsx +8 -6
  238. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +17 -16
  239. package/src/components/CreateDialog/CreateObjectDialog.tsx +74 -46
  240. package/src/components/CreateDialog/CreateObjectPanel.tsx +51 -33
  241. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  242. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  243. package/src/components/JoinDialog/index.ts +5 -0
  244. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  245. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +22 -21
  246. package/src/components/MembersContainer/index.ts +5 -0
  247. package/src/components/MenuFooter.tsx +2 -2
  248. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  249. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  250. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  251. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +10 -16
  252. package/src/components/ObjectRenamePopover/index.ts +5 -0
  253. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +7 -7
  254. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  255. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  256. package/src/components/ObjectSettings/ForeignKeys.tsx +8 -8
  257. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  258. package/src/components/ObjectSettings/index.ts +3 -1
  259. package/src/components/RecordArticle.stories.tsx +115 -0
  260. package/src/components/RecordArticle.tsx +114 -0
  261. package/src/components/SchemaContainer.tsx +26 -29
  262. package/src/components/SpacePluginSettings.tsx +16 -11
  263. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +24 -23
  264. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +22 -17
  265. package/src/components/SpacePresence/index.ts +5 -0
  266. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  267. package/src/components/SpaceRenamePopover/index.ts +5 -0
  268. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +17 -9
  269. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +68 -28
  270. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  271. package/src/components/SyncStatus/SyncStatus.stories.tsx +9 -9
  272. package/src/components/SyncStatus/SyncStatus.tsx +109 -12
  273. package/src/components/ViewEditor.tsx +57 -23
  274. package/src/components/index.ts +7 -7
  275. package/src/events.ts +7 -7
  276. package/src/helpers/index.ts +5 -0
  277. package/src/helpers/query.test.ts +24 -0
  278. package/src/helpers/query.ts +158 -0
  279. package/src/hooks/index.ts +1 -0
  280. package/src/hooks/useActiveSpace.ts +3 -2
  281. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  282. package/src/hooks/usePath.ts +1 -1
  283. package/src/hooks/useTypeOptions.ts +27 -0
  284. package/src/index.ts +1 -0
  285. package/src/meta.ts +6 -3
  286. package/src/translations.ts +68 -58
  287. package/src/types/form.ts +75 -0
  288. package/src/types/index.ts +1 -0
  289. package/src/types/types.ts +49 -50
  290. package/src/util.tsx +268 -145
  291. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  292. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +0 -88
  293. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +0 -7
  294. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs +0 -480
  295. package/dist/lib/browser/app-graph-builder-V3MP3CDK.mjs.map +0 -7
  296. package/dist/lib/browser/app-graph-serializer-H6AW7KGS.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-CEFHNVU7.mjs +0 -20
  298. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  300. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-FBJEXW54.mjs.map +0 -7
  302. package/dist/lib/browser/chunk-JS3MMC42.mjs +0 -19
  303. package/dist/lib/browser/chunk-JS3MMC42.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +0 -7
  305. package/dist/lib/browser/chunk-SGTQ52SU.mjs +0 -338
  306. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +0 -7
  307. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  308. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +0 -7
  309. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  310. package/dist/lib/browser/intent-resolver-XHGD73WZ.mjs.map +0 -7
  311. package/dist/lib/browser/react-root-CMWOGJG5.mjs +0 -29
  312. package/dist/lib/browser/react-root-CMWOGJG5.mjs.map +0 -7
  313. package/dist/lib/browser/react-surface-YWZZQF7H.mjs.map +0 -7
  314. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs +0 -26
  315. package/dist/lib/browser/schema-defs-Z6FC4AHC.mjs.map +0 -7
  316. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  317. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  318. package/dist/lib/browser/spaces-ready-TOPG6IV4.mjs.map +0 -7
  319. package/dist/lib/browser/state-QYZAB45H.mjs.map +0 -7
  320. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  321. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +0 -89
  322. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +0 -7
  323. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs +0 -481
  324. package/dist/lib/node-esm/app-graph-builder-SG4VECBB.mjs.map +0 -7
  325. package/dist/lib/node-esm/app-graph-serializer-2ICUGQQT.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-2A3VBXBP.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-5HHYE264.mjs +0 -20
  329. package/dist/lib/node-esm/chunk-5HHYE264.mjs.map +0 -7
  330. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs +0 -21
  331. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +0 -7
  332. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  333. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  334. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs +0 -339
  335. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +0 -7
  337. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  338. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  339. package/dist/lib/node-esm/intent-resolver-LEANKSKZ.mjs.map +0 -7
  340. package/dist/lib/node-esm/react-root-5Y7LJRX6.mjs.map +0 -7
  341. package/dist/lib/node-esm/react-surface-YQFNIKYT.mjs.map +0 -7
  342. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs +0 -27
  343. package/dist/lib/node-esm/schema-defs-WHJM7UZE.mjs.map +0 -7
  344. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  345. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  346. package/dist/lib/node-esm/spaces-ready-HIUKNDZK.mjs.map +0 -7
  347. package/dist/lib/node-esm/state-ZVEHQ4BJ.mjs.map +0 -7
  348. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  349. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  350. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  351. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  352. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  353. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  354. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  355. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  356. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  357. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  358. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  359. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  360. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  361. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  362. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  363. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  364. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  365. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  366. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  367. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  368. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  369. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  370. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  371. package/src/capabilities/schema-defs.ts +0 -30
  372. package/src/capabilities/schema-tool.test.ts +0 -44
  373. package/src/capabilities/schema-tools.ts +0 -125
  374. package/src/components/MembersContainer.stories.tsx +0 -30
  375. package/src/components/ObjectDetailsPanel.tsx +0 -77
  376. package/src/components/PersistenceStatus.tsx +0 -83
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, 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,9 +14,9 @@ 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 { SPACE_PLUGIN } from '../meta';
17
+ import { meta } from '../../meta';
17
18
 
18
- export const JOIN_DIALOG = `${SPACE_PLUGIN}/JoinDialog`;
19
+ export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
19
20
 
20
21
  export type JoinDialogProps = JoinPanelProps & {
21
22
  navigableCollections?: boolean;
@@ -25,7 +26,7 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
25
26
  const { dispatchPromise: dispatch } = useIntentDispatcher();
26
27
  const client = useClient();
27
28
  const { graph } = useAppGraph();
28
- const { t } = useTranslation(SPACE_PLUGIN);
29
+ const { t } = useTranslation(meta.id);
29
30
 
30
31
  const handleDone = useCallback(
31
32
  async (result: InvitationResult | null) => {
@@ -39,10 +40,10 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
39
40
  createIntent(LayoutAction.AddToast, {
40
41
  part: 'toast',
41
42
  subject: {
42
- id: `${SPACE_PLUGIN}/join-success`,
43
+ id: `${meta.id}/join-success`,
43
44
  duration: 5_000,
44
- title: ['join success label', { ns: SPACE_PLUGIN }],
45
- closeLabel: ['dismiss label', { ns: SPACE_PLUGIN }],
45
+ title: ['join success label', { ns: meta.id }],
46
+ closeLabel: ['dismiss label', { ns: meta.id }],
46
47
  },
47
48
  }),
48
49
  ),
@@ -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';
@@ -0,0 +1,56 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { useSpace } from '@dxos/react-client/echo';
11
+ import { withClientProvider } from '@dxos/react-client/testing';
12
+ import { withTheme } from '@dxos/react-ui/testing';
13
+ import { translations as shellTranslations } from '@dxos/shell/react';
14
+ import { render } from '@dxos/storybook-utils';
15
+
16
+ import { translations } from '../../translations';
17
+
18
+ import { MembersContainer } from './MembersContainer';
19
+
20
+ const DefaultStory = () => {
21
+ const space = useSpace();
22
+ if (!space) {
23
+ return null;
24
+ }
25
+
26
+ return (
27
+ <MembersContainer
28
+ space={space}
29
+ createInvitationUrl={(invitationCode) => `https://dxos.org/invite/${invitationCode}`}
30
+ />
31
+ );
32
+ };
33
+
34
+ const meta = {
35
+ title: 'plugins/plugin-space/MembersContainer',
36
+ component: MembersContainer as any,
37
+ render: render(DefaultStory),
38
+ decorators: [
39
+ withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
40
+ withPluginManager({ plugins: [IntentPlugin()] }),
41
+ withClientProvider({
42
+ createIdentity: true,
43
+ createSpace: true,
44
+ }),
45
+ ],
46
+ parameters: {
47
+ layout: 'fullscreen',
48
+ translations: [...translations, ...shellTranslations],
49
+ },
50
+ } satisfies Meta<typeof DefaultStory>;
51
+
52
+ export default meta;
53
+
54
+ type Story = StoryObj<typeof meta>;
55
+
56
+ export const Default: Story = {};
@@ -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 { fullyQualifiedId, useSpaceInvitations, type Space } 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
- import { ControlPage, ControlSection, ControlFrame, ControlFrameItem, ControlItemInput } from '@dxos/react-ui-form';
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 { SPACE_PLUGIN } 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';
@@ -41,14 +43,13 @@ const handleInvitationEvent = (invitation: Invitation, subscription: ZenObservab
41
43
  }
42
44
  };
43
45
 
44
- export const MembersContainer = ({
45
- space,
46
- createInvitationUrl,
47
- }: {
46
+ export type MembersContainerProps = {
48
47
  space: Space;
49
48
  createInvitationUrl: (invitationCode: string) => string;
50
- }) => {
51
- const { t } = useTranslation(SPACE_PLUGIN);
49
+ };
50
+
51
+ export const MembersContainer = ({ space, createInvitationUrl }: MembersContainerProps) => {
52
+ const { t } = useTranslation(meta.id);
52
53
  const config = useConfig();
53
54
  const { dispatchPromise: dispatch } = useIntentDispatcher();
54
55
  const invitations = useSpaceInvitations(space.key);
@@ -64,7 +65,7 @@ export const MembersContainer = ({
64
65
  };
65
66
 
66
67
  // TODO(wittjosiah): Track which was the most recently viewed object.
67
- const target = space.properties[DataType.Collection.typename]?.target?.objects[0]?.target;
68
+ const target = space.properties[Collection.Collection.typename]?.target?.objects[0]?.target;
68
69
 
69
70
  const locked = space.properties[COMPOSER_SPACE_LOCK];
70
71
  const handleChangeLocked = useCallback(() => {
@@ -76,7 +77,7 @@ export const MembersContainer = ({
76
77
  inviteOne: {
77
78
  label: t('invite one label', { ns: 'os' }),
78
79
  description: t('invite one description', { ns: 'os' }),
79
- icon: () => <Icon icon='ph--user-plus--regular' size={5} />,
80
+ icon: 'ph--user-plus--regular',
80
81
  testId: 'membersContainer.inviteOne',
81
82
  onClick: async () => {
82
83
  const { data: invitation } = await dispatch(
@@ -85,7 +86,7 @@ export const MembersContainer = ({
85
86
  type: Invitation.Type.INTERACTIVE,
86
87
  authMethod: Invitation.AuthMethod.SHARED_SECRET,
87
88
  multiUse: false,
88
- target: target && fullyQualifiedId(target),
89
+ target: target && Obj.getDXN(target).toString(),
89
90
  }),
90
91
  );
91
92
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
@@ -98,7 +99,7 @@ export const MembersContainer = ({
98
99
  inviteMany: {
99
100
  label: t('invite many label', { ns: 'os' }),
100
101
  description: t('invite many description', { ns: 'os' }),
101
- icon: () => <Icon icon='ph--users-three--regular' size={5} />,
102
+ icon: 'ph--users-three--regular',
102
103
  testId: 'membersContainer.inviteMany',
103
104
  onClick: async () => {
104
105
  const { data: invitation } = await dispatch(
@@ -107,7 +108,7 @@ export const MembersContainer = ({
107
108
  type: Invitation.Type.DELEGATED,
108
109
  authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
109
110
  multiUse: true,
110
- target: target && fullyQualifiedId(target),
111
+ target: target && Obj.getDXN(target).toString(),
111
112
  }),
112
113
  );
113
114
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
@@ -131,7 +132,7 @@ export const MembersContainer = ({
131
132
 
132
133
  return (
133
134
  <Clipboard.Provider>
134
- <StackItem.Content classNames='block overflow-y-auto'>
135
+ <StackItem.Content scrollable>
135
136
  <ControlPage>
136
137
  <ControlSection title={t('members verbose label')} description={t('members description')}>
137
138
  <ControlFrame>
@@ -168,7 +169,7 @@ export const MembersContainer = ({
168
169
  )}
169
170
  </ControlFrame>
170
171
  {/* TODO(wittjosiah): Make ControlItemInput & ControlFrame compatible. */}
171
- <div className='justify-center gap-4 p-0 mbs-4 container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>
172
+ <div className='justify-center p-0 mbs-4 container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>
172
173
  <ControlItemInput title={t('space locked label')} description={t('space locked description')}>
173
174
  <Input.Switch checked={locked} onCheckedChange={handleChangeLocked} classNames='justify-self-end' />
174
175
  </ControlItemInput>
@@ -231,7 +232,7 @@ const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel
231
232
  const emoji = hexToEmoji(id);
232
233
  return (
233
234
  <>
234
- <p className='text-description'>{t('qr code description', { ns: SPACE_PLUGIN })}</p>
235
+ <p className='text-description'>{t('qr code description', { ns: meta.id })}</p>
235
236
  <div role='group' className='grid grid-cols-[1fr_min-content] mlb-2 gap-2'>
236
237
  <div role='none' className='is-full aspect-square relative text-description'>
237
238
  <QR
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './MembersContainer';
@@ -9,11 +9,11 @@ import { type Obj } from '@dxos/echo';
9
9
  import { useClient } from '@dxos/react-client';
10
10
  import { DropdownMenu, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
11
 
12
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
13
13
  import { getSpaceDisplayName } from '../util';
14
14
 
15
15
  export const MenuFooter = ({ object }: { object: Obj.Any }) => {
16
- const { t } = useTranslation(SPACE_PLUGIN);
16
+ const { t } = useTranslation(meta.id);
17
17
  const client = useClient();
18
18
  const space = getSpace(object);
19
19
  const spaceName = space ? getSpaceDisplayName(space, { personal: client.spaces.default === space }) : '';
@@ -0,0 +1,51 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { useClient } from '@dxos/react-client';
8
+ import { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';
9
+ import { Callout, useTranslation } from '@dxos/react-ui';
10
+ import { useSelected } from '@dxos/react-ui-attention';
11
+ import { type View, getTypenameFromQuery } from '@dxos/schema';
12
+ import { isNonNullable } from '@dxos/util';
13
+
14
+ import { meta } from '../../meta';
15
+
16
+ import { ObjectForm } from './ObjectForm';
17
+
18
+ type RowDetailsPanelProps = { objectId: string; view: View.View };
19
+
20
+ export const ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {
21
+ const { t } = useTranslation(meta.id);
22
+ const client = useClient();
23
+ const space = getSpace(view);
24
+ const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;
25
+ const schema = useSchema(client, space, typename);
26
+
27
+ const queriedObjects = useQuery(space, schema ? Filter.type(schema) : Filter.nothing());
28
+ const selectedRows = useSelected(objectId, 'multi');
29
+ const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);
30
+
31
+ if (selectedObjects.length === 0) {
32
+ return (
33
+ <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>
34
+ <Callout.Root classNames='is-full'>
35
+ <Callout.Title>{t('row details no selection label')}</Callout.Title>
36
+ </Callout.Root>
37
+ </div>
38
+ );
39
+ }
40
+
41
+ return (
42
+ <div role='none' className='bs-full is-full flex flex-col p-2 gap-1 overflow-y-auto'>
43
+ {schema &&
44
+ selectedObjects.map((object) => (
45
+ <div key={object.id} className='border border-separator rounded'>
46
+ <ObjectForm object={object} schema={schema} />
47
+ </div>
48
+ ))}
49
+ </div>
50
+ );
51
+ };
@@ -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;
@@ -4,33 +4,27 @@
4
4
 
5
5
  import React, { useCallback, useRef, useState } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type Live } from '@dxos/live-object';
7
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
8
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
9
+ import { Obj } from '@dxos/echo';
9
10
  import { log } from '@dxos/log';
10
11
  import { Button, Input, useTranslation } from '@dxos/react-ui';
11
12
 
12
- import { SPACE_PLUGIN } from '../meta';
13
+ import { meta } from '../../meta';
13
14
 
14
- export const POPOVER_RENAME_OBJECT = `${SPACE_PLUGIN}/PopoverRenameObject`;
15
+ export const OBJECT_RENAME_POPOVER = `${meta.id}/ObjectRenamePopover`;
15
16
 
16
- export const PopoverRenameObject = ({ object: obj }: { object: Live<any> }) => {
17
- const { t } = useTranslation(SPACE_PLUGIN);
17
+ export const ObjectRenamePopover = ({ object }: { object: Obj.Any }) => {
18
+ const { t } = useTranslation(meta.id);
18
19
  const doneButton = useRef<HTMLButtonElement>(null);
19
- // TODO(wittjosiah): Use schema here.
20
- const object = obj as any;
21
- // TODO(burdon): Field should not be hardcoded field.
22
- const [name, setName] = useState(object.name || object.title || '');
20
+ const [name, setName] = useState(Obj.getLabel(object));
23
21
  const { dispatchPromise: dispatch } = useIntentDispatcher();
24
22
 
25
23
  const handleDone = useCallback(() => {
26
24
  try {
27
- object.name = name;
25
+ name && Obj.setLabel(object, name);
28
26
  } catch (err) {
29
- try {
30
- object.title = name;
31
- } catch {
32
- log.error('Failed to rename object', { err });
33
- }
27
+ log.error('Failed to rename object', { err });
34
28
  }
35
29
  void dispatch(
36
30
  createIntent(LayoutAction.UpdatePopover, {
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './ObjectRenamePopover';
@@ -4,13 +4,13 @@
4
4
 
5
5
  import React, { useCallback, useState } from 'react';
6
6
 
7
- import { Obj } from '@dxos/echo';
8
- import { ForeignKey } from '@dxos/echo-schema';
7
+ import { Key, Obj } from '@dxos/echo';
9
8
  import { IconButton, useTranslation } from '@dxos/react-ui';
10
9
  import { Form } from '@dxos/react-ui-form';
11
10
 
11
+ import { meta } from '../../meta';
12
+
12
13
  import { ForeignKeys } from './ForeignKeys';
13
- import { SPACE_PLUGIN } from '../../meta';
14
14
 
15
15
  const initialValues = {
16
16
  source: '',
@@ -22,14 +22,14 @@ export type AdvancedObjectSettingsProps = {
22
22
  };
23
23
 
24
24
  export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps) => {
25
- const { t } = useTranslation(SPACE_PLUGIN);
25
+ const { t } = useTranslation(meta.id);
26
26
  const [adding, setAdding] = useState(false);
27
27
  const { keys } = Obj.getMeta(object);
28
28
 
29
29
  const handleNew = useCallback(() => setAdding(true), []);
30
30
  const handleCancel = useCallback(() => setAdding(false), []);
31
31
  const handleSave = useCallback(
32
- (key: ForeignKey) => {
32
+ (key: Key.ForeignKey) => {
33
33
  const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
34
34
  if (index === -1) {
35
35
  keys.push(key);
@@ -39,7 +39,7 @@ export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps)
39
39
  [keys],
40
40
  );
41
41
  const handleDelete = useCallback(
42
- (key: ForeignKey) => {
42
+ (key: Key.ForeignKey) => {
43
43
  const index = keys.findIndex(({ source, id }) => source === key.source && id === key.id);
44
44
  if (index !== -1) {
45
45
  keys.splice(index, 1);
@@ -69,7 +69,7 @@ export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps)
69
69
  {adding && (
70
70
  <Form
71
71
  outerSpacing={false}
72
- schema={ForeignKey}
72
+ schema={Key.ForeignKey}
73
73
  values={initialValues}
74
74
  onSave={handleSave}
75
75
  onCancel={handleCancel}
@@ -0,0 +1,63 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useEffect, useState } from 'react';
7
+
8
+ import { type Obj, Tag } from '@dxos/echo';
9
+ import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
10
+ import { withTheme } from '@dxos/react-ui/testing';
11
+ import { render } from '@dxos/storybook-utils';
12
+ import { Project } from '@dxos/types';
13
+
14
+ import { translations } from '../../translations';
15
+
16
+ import { BaseObjectSettings } from './BaseObjectSettings';
17
+
18
+ const DefaultStory = () => {
19
+ const { space } = useClientProvider();
20
+ const [object, setObject] = useState<Obj.Any>();
21
+
22
+ useEffect(() => {
23
+ if (space && !object) {
24
+ const object = space.db.add(Project.make());
25
+ setObject(object as Obj.Any);
26
+ }
27
+ }, [space, object]);
28
+
29
+ if (!object) {
30
+ return null;
31
+ }
32
+
33
+ return <BaseObjectSettings object={object} classNames='is-[20rem]' />;
34
+ };
35
+
36
+ const meta = {
37
+ title: 'plugins/plugin-space/BaseObjectSettings',
38
+ component: BaseObjectSettings as any,
39
+ render: render(DefaultStory),
40
+ decorators: [
41
+ withTheme,
42
+ withClientProvider({
43
+ createIdentity: true,
44
+ createSpace: true,
45
+ types: [Project.Project, Tag.Tag],
46
+ onCreateSpace: async ({ space }) => {
47
+ space.db.add(Tag.make({ label: 'Tag 1' }));
48
+ space.db.add(Tag.make({ label: 'Tag 2' }));
49
+ space.db.add(Tag.make({ label: 'Tag 3' }));
50
+ },
51
+ }),
52
+ ],
53
+ parameters: {
54
+ layout: 'centered',
55
+ translations,
56
+ },
57
+ } satisfies Meta<typeof DefaultStory>;
58
+
59
+ export default meta;
60
+
61
+ type Story = StoryObj<typeof meta>;
62
+
63
+ export const Default: Story = {};