@dxos/plugin-space 0.8.4-main.5ea62a8 → 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 (357) 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-3A6KBYWT.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-DCY3W36E.mjs → chunk-GJOZILGC.mjs} +210 -142
  18. package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-J6YZG77T.mjs → chunk-KCZ527AM.mjs} +641 -500
  20. package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-ELJDGQTO.mjs → chunk-P25R3AOK.mjs} +35 -5
  22. package/dist/lib/browser/chunk-P25R3AOK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-WAXS2ZVX.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-T6ZNVE7S.mjs → identity-created-NAXTPQXE.mjs} +5 -5
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +88 -131
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-7E3IZIJS.mjs → intent-resolver-RZEWNJ2K.mjs} +105 -100
  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-GL4CE2F4.mjs → react-surface-VOETEAG3.mjs} +91 -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-B6MMHLPS.mjs → settings-TRLI52I5.mjs} +5 -5
  43. package/dist/lib/browser/{settings-B6MMHLPS.mjs.map → settings-TRLI52I5.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-QVABOCO3.mjs → spaces-ready-OHGCWZHQ.mjs} +22 -15
  45. package/dist/lib/browser/spaces-ready-OHGCWZHQ.mjs.map +7 -0
  46. package/dist/lib/browser/{state-2RGW7FQG.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-M45TH5LR.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-Q6AAQLQG.mjs → chunk-7EV4SN47.mjs} +34 -5
  62. package/dist/lib/node-esm/chunk-7EV4SN47.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-HYIZVPOA.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-AUQ3SKL2.mjs → chunk-I6FZP42D.mjs} +210 -142
  70. package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-ZCEH2VYE.mjs → chunk-JAMGJUFU.mjs} +641 -500
  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-AL7NNCKH.mjs → identity-created-OXLKCJE3.mjs} +5 -5
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +88 -131
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-UVO4MKWX.mjs → intent-resolver-4PHJWDXW.mjs} +105 -100
  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-5EKYI66P.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-IOC6YSVQ.mjs → react-surface-J3XDMU2D.mjs} +91 -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-IOFU6EAS.mjs → settings-MNQTKHL7.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-IOFU6EAS.mjs.map → settings-MNQTKHL7.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-MS6GHPFR.mjs → spaces-ready-ZPU24DA2.mjs} +22 -15
  93. package/dist/lib/node-esm/spaces-ready-ZPU24DA2.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-7VBVBGNS.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.map +1 -1
  100. package/dist/types/src/capabilities/capabilities.d.ts +13 -7
  101. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/index.d.ts +1 -1
  103. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/repair.d.ts +4 -0
  108. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  110. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  111. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  112. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  113. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  114. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  115. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +1 -1
  116. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +218 -215
  118. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +16 -9
  120. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  121. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  122. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  123. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  124. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  125. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  126. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  127. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  128. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1591 -0
  129. package/dist/types/src/components/{MembersContainer.stories.d.ts.map → MembersContainer/MembersContainer.stories.d.ts.map} +1 -1
  130. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  131. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  132. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  133. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  134. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  135. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  136. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  137. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  138. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  139. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  140. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  141. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  142. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  143. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  144. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  145. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1424 -0
  146. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
  148. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  149. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  150. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  151. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  152. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  153. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  154. package/dist/types/src/components/{MembersContainer.stories.d.ts → RecordArticle.stories.d.ts} +219 -216
  155. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  156. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  157. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +6 -5
  160. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  161. package/dist/types/src/components/{SpacePresence.stories.d.ts → SpacePresence/SpacePresence.stories.d.ts} +220 -217
  162. package/dist/types/src/components/{SpacePresence.stories.d.ts.map → SpacePresence/SpacePresence.stories.d.ts.map} +1 -1
  163. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  164. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  165. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  166. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  167. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  168. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  169. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  170. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +218 -215
  171. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  172. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  173. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +219 -216
  174. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  176. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  177. package/dist/types/src/components/index.d.ts +10 -17
  178. package/dist/types/src/components/index.d.ts.map +1 -1
  179. package/dist/types/src/events.d.ts.map +1 -1
  180. package/dist/types/src/helpers/index.d.ts +2 -0
  181. package/dist/types/src/helpers/index.d.ts.map +1 -0
  182. package/dist/types/src/helpers/query.d.ts +8 -0
  183. package/dist/types/src/helpers/query.d.ts.map +1 -0
  184. package/dist/types/src/helpers/query.test.d.ts +2 -0
  185. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  186. package/dist/types/src/hooks/index.d.ts +1 -0
  187. package/dist/types/src/hooks/index.d.ts.map +1 -1
  188. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  189. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  190. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  191. package/dist/types/src/hooks/usePath.d.ts +1 -1
  192. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  194. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  195. package/dist/types/src/index.d.ts +1 -0
  196. package/dist/types/src/index.d.ts.map +1 -1
  197. package/dist/types/src/meta.d.ts +0 -1
  198. package/dist/types/src/meta.d.ts.map +1 -1
  199. package/dist/types/src/translations.d.ts +1261 -67
  200. package/dist/types/src/translations.d.ts.map +1 -1
  201. package/dist/types/src/types/form.d.ts +24 -0
  202. package/dist/types/src/types/form.d.ts.map +1 -0
  203. package/dist/types/src/types/index.d.ts +1 -0
  204. package/dist/types/src/types/index.d.ts.map +1 -1
  205. package/dist/types/src/types/types.d.ts +82 -142
  206. package/dist/types/src/types/types.d.ts.map +1 -1
  207. package/dist/types/src/util.d.ts +21 -34
  208. package/dist/types/src/util.d.ts.map +1 -1
  209. package/dist/types/tsconfig.tsbuildinfo +1 -1
  210. package/package.json +68 -59
  211. package/src/SpacePlugin.ts +181 -215
  212. package/src/capabilities/app-graph-builder.ts +205 -267
  213. package/src/capabilities/app-graph-serializer.ts +12 -12
  214. package/src/capabilities/capabilities.ts +26 -16
  215. package/src/capabilities/identity-created.ts +2 -2
  216. package/src/capabilities/index.ts +1 -1
  217. package/src/capabilities/intent-resolver.ts +78 -75
  218. package/src/capabilities/react-root.tsx +4 -3
  219. package/src/capabilities/react-surface.tsx +95 -145
  220. package/src/capabilities/repair.ts +57 -0
  221. package/src/capabilities/spaces-ready.ts +15 -6
  222. package/src/capabilities/state.ts +2 -2
  223. package/src/components/AwaitingObject.tsx +12 -14
  224. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  225. package/src/components/CollectionSection.tsx +8 -6
  226. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +11 -11
  227. package/src/components/CreateDialog/CreateObjectDialog.tsx +63 -43
  228. package/src/components/CreateDialog/CreateObjectPanel.tsx +38 -31
  229. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  230. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  231. package/src/components/JoinDialog/index.ts +5 -0
  232. package/src/components/{MembersContainer.stories.tsx → MembersContainer/MembersContainer.stories.tsx} +7 -6
  233. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +16 -14
  234. package/src/components/MembersContainer/index.ts +5 -0
  235. package/src/components/MenuFooter.tsx +2 -2
  236. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  237. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  238. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  239. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  240. package/src/components/ObjectRenamePopover/index.ts +5 -0
  241. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +6 -7
  242. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  243. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  244. package/src/components/ObjectSettings/ForeignKeys.tsx +8 -8
  245. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  246. package/src/components/ObjectSettings/index.ts +3 -1
  247. package/src/components/RecordArticle.stories.tsx +115 -0
  248. package/src/components/RecordArticle.tsx +114 -0
  249. package/src/components/SchemaContainer.tsx +24 -27
  250. package/src/components/SpacePluginSettings.tsx +10 -4
  251. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +23 -25
  252. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  253. package/src/components/SpacePresence/index.ts +5 -0
  254. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  255. package/src/components/SpaceRenamePopover/index.ts +5 -0
  256. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -4
  257. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +63 -23
  258. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  259. package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
  260. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  261. package/src/components/ViewEditor.tsx +57 -23
  262. package/src/components/index.ts +7 -8
  263. package/src/events.ts +6 -6
  264. package/src/helpers/index.ts +5 -0
  265. package/src/helpers/query.test.ts +24 -0
  266. package/src/helpers/query.ts +158 -0
  267. package/src/hooks/index.ts +1 -0
  268. package/src/hooks/useActiveSpace.ts +2 -1
  269. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  270. package/src/hooks/usePath.ts +1 -1
  271. package/src/hooks/useTypeOptions.ts +27 -0
  272. package/src/index.ts +1 -0
  273. package/src/meta.ts +6 -3
  274. package/src/translations.ts +68 -58
  275. package/src/types/form.ts +75 -0
  276. package/src/types/index.ts +1 -0
  277. package/src/types/types.ts +44 -50
  278. package/src/util.tsx +216 -143
  279. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  280. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  281. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  282. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  283. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  284. package/dist/lib/browser/app-graph-builder-FLF7XMQO.mjs +0 -516
  285. package/dist/lib/browser/app-graph-builder-FLF7XMQO.mjs.map +0 -7
  286. package/dist/lib/browser/app-graph-serializer-3A6KBYWT.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  288. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-DCY3W36E.mjs.map +0 -7
  290. package/dist/lib/browser/chunk-ELJDGQTO.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  292. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-J6YZG77T.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-RQVV4XVF.mjs +0 -343
  295. package/dist/lib/browser/chunk-RQVV4XVF.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
  297. package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  299. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  300. package/dist/lib/browser/intent-resolver-7E3IZIJS.mjs.map +0 -7
  301. package/dist/lib/browser/react-root-RWMT2RCK.mjs +0 -29
  302. package/dist/lib/browser/react-root-RWMT2RCK.mjs.map +0 -7
  303. package/dist/lib/browser/react-surface-GL4CE2F4.mjs.map +0 -7
  304. package/dist/lib/browser/schema-defs-YDPFZELA.mjs +0 -26
  305. package/dist/lib/browser/schema-defs-YDPFZELA.mjs.map +0 -7
  306. package/dist/lib/browser/spaces-ready-QVABOCO3.mjs.map +0 -7
  307. package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
  308. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  309. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  310. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  311. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  312. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  313. package/dist/lib/node-esm/app-graph-builder-D5YPOJS5.mjs +0 -517
  314. package/dist/lib/node-esm/app-graph-builder-D5YPOJS5.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-serializer-M45TH5LR.mjs.map +0 -7
  316. package/dist/lib/node-esm/chunk-AUQ3SKL2.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  318. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
  320. package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  322. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-WKQTO37U.mjs +0 -344
  326. package/dist/lib/node-esm/chunk-WKQTO37U.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-ZCEH2VYE.mjs.map +0 -7
  328. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  329. package/dist/lib/node-esm/intent-resolver-UVO4MKWX.mjs.map +0 -7
  330. package/dist/lib/node-esm/react-root-5EKYI66P.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-surface-IOC6YSVQ.mjs.map +0 -7
  332. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs +0 -27
  333. package/dist/lib/node-esm/schema-defs-OYBCWKAS.mjs.map +0 -7
  334. package/dist/lib/node-esm/spaces-ready-MS6GHPFR.mjs.map +0 -7
  335. package/dist/lib/node-esm/state-7VBVBGNS.mjs.map +0 -7
  336. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  337. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  338. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  339. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  340. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  341. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  342. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  343. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  344. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  345. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  346. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  347. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  348. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  349. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  350. package/dist/types/src/components/RecordMain.d.ts +0 -7
  351. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  352. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  353. package/src/capabilities/schema-defs.ts +0 -31
  354. package/src/components/ObjectDetailsPanel.tsx +0 -77
  355. package/src/components/PersistenceStatus.tsx +0 -83
  356. package/src/components/RecordMain.tsx +0 -43
  357. /package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +0 -0
@@ -4,17 +4,19 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
+ import { type SurfaceComponentProps } from '@dxos/app-framework/react';
7
8
  import { useTranslation } from '@dxos/react-ui';
8
- import { type DataType } from '@dxos/schema';
9
+ import { type Collection } from '@dxos/schema';
9
10
 
10
- import { SPACE_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
+
13
+ export const CollectionSection = ({ role, subject }: SurfaceComponentProps<Collection.Collection>) => {
14
+ const { t } = useTranslation(meta.id);
11
15
 
12
- export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
13
- const { t } = useTranslation(SPACE_PLUGIN);
14
16
  // TODO(wittjosiah): Better placeholder.
15
17
  return (
16
- <div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>
17
- <span className='truncate'>{collection.name ?? t('unnamed collection label')}</span>
18
+ <div role={role} className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>
19
+ <span className='truncate'>{subject.name ?? t('unnamed collection label')}</span>
18
20
  </div>
19
21
  );
20
22
  };
@@ -2,18 +2,18 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useEffect } from 'react';
9
7
 
10
- import { Filter, Obj, Type } from '@dxos/echo';
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { Filter, Obj } from '@dxos/echo';
11
11
  import { useQuery, useSpace } from '@dxos/react-client/echo';
12
12
  import { withClientProvider } from '@dxos/react-client/testing';
13
13
  import { Dialog } from '@dxos/react-ui';
14
- import { DataType } from '@dxos/schema';
14
+ import { withTheme } from '@dxos/react-ui/testing';
15
+ import { Collection } from '@dxos/schema';
15
16
  import { translations as shellTranslations } from '@dxos/shell/react';
16
- import { withLayout, withTheme } from '@dxos/storybook-utils';
17
17
 
18
18
  import { translations } from '../../translations';
19
19
 
@@ -35,9 +35,9 @@ const meta = {
35
35
  component: CreateObjectDialog,
36
36
  render: Story,
37
37
  decorators: [
38
- withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
39
- withTheme,
40
- withLayout(),
38
+ withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
39
+ withPluginManager({ plugins: [IntentPlugin()] }),
40
+ withClientProvider({ createIdentity: true, createSpace: true, types: [Collection.Collection] }),
41
41
  ],
42
42
  parameters: {
43
43
  translations: [...translations, ...shellTranslations],
@@ -50,7 +50,7 @@ export default meta;
50
50
  export const Default: StoryObj<typeof CreateObjectDialog> = {};
51
51
 
52
52
  export const Typename: StoryObj<typeof CreateObjectDialog> = {
53
- args: { typename: Type.getTypename(DataType.Collection) },
53
+ args: { typename: Collection.Collection.typename },
54
54
  };
55
55
 
56
56
  export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
@@ -68,11 +68,11 @@ export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
68
68
  export const TargetCollection: StoryObj<typeof CreateObjectDialog> = {
69
69
  render: (args) => {
70
70
  const space = useSpace();
71
- const [collection] = useQuery(space, Filter.type(DataType.Collection));
71
+ const [collection] = useQuery(space, Filter.type(Collection.Collection));
72
72
 
73
73
  useEffect(() => {
74
74
  if (space) {
75
- space.db.add(Obj.make(DataType.Collection, { name: 'My Collection', objects: [] }));
75
+ space.db.add(Obj.make(Collection.Collection, { name: 'My Collection', objects: [] }));
76
76
  }
77
77
  }, [space]);
78
78
 
@@ -2,34 +2,28 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Effect, pipe } from 'effect';
6
- import React, { useCallback, useRef, useState } from 'react';
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
8
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
7
9
 
8
- import {
9
- Capabilities,
10
- LayoutAction,
11
- chain,
12
- createIntent,
13
- useCapabilities,
14
- useIntentDispatcher,
15
- usePluginManager,
16
- } from '@dxos/app-framework';
17
- 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';
18
14
  import { invariant } from '@dxos/invariant';
19
15
  import { useClient } from '@dxos/react-client';
20
- import { type Space, getSpace, isLiveObject, isSpace, useQuery, useSpaces } from '@dxos/react-client/echo';
21
- 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';
22
18
  import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
23
- import { DataType } from '@dxos/schema';
24
- import { isNonNullable } from '@dxos/util';
19
+ import { type Collection } from '@dxos/schema';
25
20
 
26
- import { SpaceCapabilities } from '../../capabilities';
27
- import { SPACE_PLUGIN } from '../../meta';
21
+ import { meta } from '../../meta';
28
22
  import { SpaceAction } from '../../types';
29
23
 
30
- import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
24
+ import { CreateObjectPanel, type CreateObjectPanelProps, type Metadata } from './CreateObjectPanel';
31
25
 
32
- export const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
26
+ export const CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
33
27
 
34
28
  export type CreateObjectDialogProps = Pick<
35
29
  CreateObjectPanelProps,
@@ -47,27 +41,39 @@ export const CreateObjectDialog = ({
47
41
  onCreateObject,
48
42
  shouldNavigate: _shouldNavigate,
49
43
  }: CreateObjectDialogProps) => {
50
- const closeRef = useRef<HTMLButtonElement | null>(null);
51
44
  const manager = usePluginManager();
52
- const { t } = useTranslation(SPACE_PLUGIN);
53
- const client = useClient();
54
- const spaces = useSpaces();
45
+ const { t } = useTranslation(meta.id);
55
46
  const { dispatch } = useIntentDispatcher();
56
- const forms = useCapabilities(SpaceCapabilities.ObjectForm);
57
- const [target, setTarget] = useState<Space | DataType.Collection | undefined>(initialTarget);
47
+ const [target, setTarget] = useState<Space | Collection.Collection | undefined>(initialTarget);
58
48
  const [typename, setTypename] = useState<string | undefined>(initialTypename);
59
- const space = isSpace(target) ? target : getSpace(target);
60
- const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
61
- const hiddenTypenames = queryCollections.map((collection) => collection.query.typename).filter(isNonNullable);
49
+ const client = useClient();
50
+ const spaces = useSpaces();
51
+ const closeRef = useRef<HTMLButtonElement | null>(null);
62
52
 
63
53
  const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
64
- (typename) =>
65
- 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
+ },
66
60
  [manager],
67
61
  );
68
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
+
69
75
  const handleCreateObject = useCallback<NonNullable<CreateObjectPanelProps['onCreateObject']>>(
70
- ({ form, data = {} }) =>
76
+ ({ metadata, data = {} }) =>
71
77
  Effect.gen(function* () {
72
78
  if (!target) {
73
79
  // TODO(wittjosiah): UI feedback.
@@ -79,14 +85,18 @@ export const CreateObjectDialog = ({
79
85
 
80
86
  const space = isSpace(target) ? target : getSpace(target);
81
87
  invariant(space, 'Missing space');
82
- const { object } = yield* dispatch(form.getIntent(data, { space }));
83
- 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)) {
84
90
  // TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
85
- const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
86
- 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
+ });
87
97
  const shouldNavigate = _shouldNavigate ?? (() => true);
88
98
  if (shouldNavigate(object)) {
89
- yield* dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
99
+ yield* dispatch(Function.pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
90
100
  } else {
91
101
  yield* dispatch(addObjectIntent);
92
102
  }
@@ -94,7 +104,7 @@ export const CreateObjectDialog = ({
94
104
  onCreateObject?.(object);
95
105
  }
96
106
  }).pipe(Effect.runPromise),
97
- [dispatch, target, resolve, hiddenTypenames, _shouldNavigate],
107
+ [dispatch, target, resolve, _shouldNavigate],
98
108
  );
99
109
 
100
110
  return (
@@ -104,18 +114,28 @@ export const CreateObjectDialog = ({
104
114
  <div role='none' className={cardDialogHeader}>
105
115
  <Dialog.Title>
106
116
  {t('create object dialog title', {
107
- object: t('typename label', { ns: typename, defaultValue: views ? 'View' : 'Item' }),
117
+ object: t('typename label', {
118
+ ns: typename,
119
+ defaultValue: views ? 'View' : 'Object',
120
+ }),
108
121
  })}
109
122
  </Dialog.Title>
110
123
  <Dialog.Close asChild>
111
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
112
- <Icon icon='ph--x--regular' size={4} />
113
- </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
+ />
114
134
  </Dialog.Close>
115
135
  </div>
116
136
 
117
137
  <CreateObjectPanel
118
- forms={forms}
138
+ schemas={userSchemas}
119
139
  spaces={spaces}
120
140
  target={target}
121
141
  views={views}
@@ -2,40 +2,47 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Option } from 'effect';
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-schema';
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
- import { SPACE_PLUGIN } from '../../meta';
20
- import { type ObjectForm } from '../../types';
19
+ import { meta } from '../../meta';
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,
@@ -47,18 +54,18 @@ export const CreateObjectPanel = ({
47
54
  onTypenameChange,
48
55
  onCreateObject,
49
56
  }: CreateObjectPanelProps) => {
50
- const { t } = useTranslation(SPACE_PLUGIN);
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}
@@ -115,7 +122,7 @@ const SelectSpace = ({
115
122
  defaultSpaceId,
116
123
  onChange,
117
124
  }: { onChange?: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
118
- const { t } = useTranslation(SPACE_PLUGIN);
125
+ const { t } = useTranslation(meta.id);
119
126
 
120
127
  return (
121
128
  <SearchList.Root label={t('space input label')} classNames={cardDialogSearchListRoot}>
@@ -156,7 +163,7 @@ const SelectSchema = ({
156
163
  options: TypeAnnotation[];
157
164
  onChange: (type: string) => void;
158
165
  } & Pick<CreateObjectPanelProps, 'resolve'>) => {
159
- const { t } = useTranslation(SPACE_PLUGIN);
166
+ const { t } = useTranslation(meta.id);
160
167
 
161
168
  return (
162
169
  <SearchList.Root label={t('schema input label')} classNames={cardDialogSearchListRoot}>
@@ -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>
@@ -2,26 +2,28 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Effect, type Schema } from 'effect';
5
+ import * as Effect from 'effect/Effect';
6
+ import type * as Schema from 'effect/Schema';
6
7
  import React, { useCallback, useRef } from 'react';
7
8
 
8
- import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
9
- 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';
10
12
  import { Form } from '@dxos/react-ui-form';
11
13
  import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
12
14
 
13
15
  import { useInputSurfaceLookup } from '../../hooks';
14
- import { SPACE_PLUGIN } from '../../meta';
16
+ import { meta } from '../../meta';
15
17
  import { SpaceAction, SpaceForm } from '../../types';
16
18
 
17
- export const CREATE_SPACE_DIALOG = `${SPACE_PLUGIN}/CreateSpaceDialog`;
19
+ export const CREATE_SPACE_DIALOG = `${meta.id}/CreateSpaceDialog`;
18
20
 
19
21
  type FormValues = Schema.Schema.Type<typeof SpaceForm>;
20
22
  const initialValues: FormValues = { edgeReplication: true };
21
23
 
22
24
  export const CreateSpaceDialog = () => {
23
25
  const closeRef = useRef<HTMLButtonElement | null>(null);
24
- const { t } = useTranslation(SPACE_PLUGIN);
26
+ const { t } = useTranslation(meta.id);
25
27
  const { dispatch } = useIntentDispatcher();
26
28
 
27
29
  const inputSurfaceLookup = useInputSurfaceLookup();
@@ -30,8 +32,18 @@ export const CreateSpaceDialog = () => {
30
32
  async (data: FormValues) => {
31
33
  const program = Effect.gen(function* () {
32
34
  const { space } = yield* dispatch(createIntent(SpaceAction.Create, data));
33
- yield* dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
34
- 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
+ );
35
47
  });
36
48
  await Effect.runPromise(program);
37
49
  },
@@ -45,9 +57,16 @@ export const CreateSpaceDialog = () => {
45
57
  <div role='none' className={cardDialogHeader}>
46
58
  <Dialog.Title>{t('create space dialog title')}</Dialog.Title>
47
59
  <Dialog.Close asChild>
48
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
49
- <Icon icon='ph--x--regular' size={4} />
50
- </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
+ />
51
70
  </Dialog.Close>
52
71
  </div>
53
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,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';
@@ -2,17 +2,18 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
10
  import { useSpace } from '@dxos/react-client/echo';
11
11
  import { withClientProvider } from '@dxos/react-client/testing';
12
+ import { withTheme } from '@dxos/react-ui/testing';
12
13
  import { translations as shellTranslations } from '@dxos/shell/react';
13
- import { render, withLayout, withTheme } from '@dxos/storybook-utils';
14
+ import { render } from '@dxos/storybook-utils';
14
15
 
15
- import { translations } from '../translations';
16
+ import { translations } from '../../translations';
16
17
 
17
18
  import { MembersContainer } from './MembersContainer';
18
19
 
@@ -35,12 +36,12 @@ const meta = {
35
36
  component: MembersContainer as any,
36
37
  render: render(DefaultStory),
37
38
  decorators: [
39
+ withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
40
+ withPluginManager({ plugins: [IntentPlugin()] }),
38
41
  withClientProvider({
39
42
  createIdentity: true,
40
43
  createSpace: true,
41
44
  }),
42
- withTheme,
43
- withLayout(),
44
45
  ],
45
46
  parameters: {
46
47
  layout: 'fullscreen',