@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,23 +4,25 @@
4
4
 
5
5
  import React, { useCallback, useEffect, useState } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, useIntentDispatcher, useLayout } from '@dxos/app-framework';
7
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
8
+ import { useIntentDispatcher, useLayout } from '@dxos/app-framework/react';
9
+ import { Obj } from '@dxos/echo';
8
10
  import { useClient } from '@dxos/react-client';
9
- import { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
11
+ import { Filter, useQuery } from '@dxos/react-client/echo';
10
12
  import { Button, Icon, Toast, useTranslation } from '@dxos/react-ui';
11
13
 
12
- import { SPACE_PLUGIN } from '../meta';
14
+ import { meta } from '../meta';
13
15
  import { SpaceAction } from '../types';
14
16
 
15
- const WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes
16
- const TOAST_TIMEOUT = 240e3; // 4 minutes
17
+ const WAIT_FOR_OBJECT_TIMEOUT = 3 * 60 * 1_000;
18
+ const TOAST_TIMEOUT = 4 * 60 * 1_000;
17
19
 
18
20
  export const AwaitingObject = ({ id }: { id: string }) => {
21
+ const { t } = useTranslation(meta.id);
22
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
19
23
  const [open, setOpen] = useState(true);
20
24
  const [waiting, setWaiting] = useState(true);
21
25
  const [found, setFound] = useState(false);
22
- const { t } = useTranslation(SPACE_PLUGIN);
23
- const { dispatchPromise: dispatch } = useIntentDispatcher();
24
26
  const layout = useLayout();
25
27
 
26
28
  const client = useClient();
@@ -31,17 +33,13 @@ export const AwaitingObject = ({ id }: { id: string }) => {
31
33
  return;
32
34
  }
33
35
 
34
- const timeout = setTimeout(() => {
35
- setWaiting(false);
36
- }, WAIT_FOR_OBJECT_TIMEOUT);
37
-
38
- () => clearTimeout(timeout);
36
+ const timeout = setTimeout(() => setWaiting(false), WAIT_FOR_OBJECT_TIMEOUT);
37
+ return () => clearTimeout(timeout);
39
38
  }, [id]);
40
39
 
41
40
  useEffect(() => {
42
- if (objects.findIndex((object) => fullyQualifiedId(object) === id) > -1) {
41
+ if (objects.findIndex((object) => Obj.getDXN(object).toString() === id) > -1) {
43
42
  setFound(true);
44
-
45
43
  if (layout.active.includes(id)) {
46
44
  setOpen(false);
47
45
  }
@@ -4,14 +4,15 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
+ import { type SurfaceComponentProps } from '@dxos/app-framework/react';
7
8
  import { useTranslation } from '@dxos/react-ui';
8
9
  import { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';
9
- import { type DataType } from '@dxos/schema';
10
+ import { type Collection } from '@dxos/schema';
10
11
 
11
- import { SPACE_PLUGIN } from '../meta';
12
+ import { meta } from '../meta';
12
13
 
13
- export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
14
- const { t } = useTranslation(SPACE_PLUGIN);
14
+ export const CollectionArticle = ({ subject }: SurfaceComponentProps<Collection.Collection>) => {
15
+ const { t } = useTranslation(meta.id);
15
16
 
16
17
  return (
17
18
  <div
@@ -23,10 +24,10 @@ export const CollectionMain = ({ collection }: { collection: DataType.Collection
23
24
  role='alert'
24
25
  className={mx(descriptionMessage, 'rounded-md p-8 font-normal text-lg max-is-[24rem] break-words')}
25
26
  >
26
- {collection.name ?? t('unnamed collection label')}
27
+ {subject.name ?? t('unnamed collection label')}
27
28
  </p>
28
29
  </div>
29
30
  );
30
31
  };
31
32
 
32
- export default CollectionMain;
33
+ export default CollectionArticle;
@@ -4,17 +4,19 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
+ import { type SurfaceComponentProps } from '@dxos/app-framework/react';
7
8
  import { useTranslation } from '@dxos/react-ui';
8
- import { type DataType } from '@dxos/schema';
9
+ import { type Collection } from '@dxos/schema';
9
10
 
10
- 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,54 +2,55 @@
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
- import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
19
18
  import { translations } from '../../translations';
20
19
 
21
- const Story = (args: CreateObjectDialogProps) => {
20
+ import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
21
+
22
+ const Story = (props: CreateObjectDialogProps) => {
22
23
  return (
23
24
  <Dialog.Root open>
24
25
  <Dialog.Overlay blockAlign='start'>
25
- <CreateObjectDialog {...args} />
26
+ <CreateObjectDialog {...props} />
26
27
  </Dialog.Overlay>
27
28
  </Dialog.Root>
28
29
  );
29
30
  };
30
31
 
31
32
  // TODO(wittjosiah): Story should be for CreateObjectPanel.
32
- const meta: Meta<typeof CreateObjectDialog> = {
33
+ const meta = {
33
34
  title: 'plugins/plugin-space/CreateObjectDialog',
34
35
  component: CreateObjectDialog,
35
36
  render: Story,
36
37
  decorators: [
37
- withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
38
- withTheme,
39
- 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] }),
40
41
  ],
41
42
  parameters: {
42
43
  translations: [...translations, ...shellTranslations],
43
44
  },
44
45
  args: {},
45
- };
46
+ } satisfies Meta<typeof CreateObjectDialog>;
46
47
 
47
48
  export default meta;
48
49
 
49
50
  export const Default: StoryObj<typeof CreateObjectDialog> = {};
50
51
 
51
52
  export const Typename: StoryObj<typeof CreateObjectDialog> = {
52
- args: { typename: Type.getTypename(DataType.Collection) },
53
+ args: { typename: Collection.Collection.typename },
53
54
  };
54
55
 
55
56
  export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
@@ -67,11 +68,11 @@ export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
67
68
  export const TargetCollection: StoryObj<typeof CreateObjectDialog> = {
68
69
  render: (args) => {
69
70
  const space = useSpace();
70
- const [collection] = useQuery(space, Filter.type(DataType.Collection));
71
+ const [collection] = useQuery(space, Filter.type(Collection.Collection));
71
72
 
72
73
  useEffect(() => {
73
74
  if (space) {
74
- space.db.add(Obj.make(DataType.Collection, { name: 'My Collection', objects: [] }));
75
+ space.db.add(Obj.make(Collection.Collection, { name: 'My Collection', objects: [] }));
75
76
  }
76
77
  }, [space]);
77
78
 
@@ -2,35 +2,33 @@
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 { getSpace, isLiveObject, isSpace, type Space, 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 { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
27
- import { SpaceCapabilities } from '../../capabilities';
28
- import { SPACE_PLUGIN } from '../../meta';
21
+ import { meta } from '../../meta';
29
22
  import { SpaceAction } from '../../types';
30
23
 
31
- export const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
24
+ import { CreateObjectPanel, type CreateObjectPanelProps, type Metadata } from './CreateObjectPanel';
32
25
 
33
- export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {
26
+ export const CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
27
+
28
+ export type CreateObjectDialogProps = Pick<
29
+ CreateObjectPanelProps,
30
+ 'target' | 'views' | 'typename' | 'initialFormValues'
31
+ > & {
34
32
  onCreateObject?: (object: Obj.Any) => void;
35
33
  shouldNavigate?: (object: Obj.Any) => boolean;
36
34
  };
@@ -38,31 +36,44 @@ export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 't
38
36
  export const CreateObjectDialog = ({
39
37
  target: initialTarget,
40
38
  typename: initialTypename,
41
- name,
39
+ views,
40
+ initialFormValues,
42
41
  onCreateObject,
43
42
  shouldNavigate: _shouldNavigate,
44
43
  }: CreateObjectDialogProps) => {
45
- const closeRef = useRef<HTMLButtonElement | null>(null);
46
44
  const manager = usePluginManager();
47
- const { t } = useTranslation(SPACE_PLUGIN);
48
- const client = useClient();
49
- const spaces = useSpaces();
45
+ const { t } = useTranslation(meta.id);
50
46
  const { dispatch } = useIntentDispatcher();
51
- const forms = useCapabilities(SpaceCapabilities.ObjectForm);
52
- const [target, setTarget] = useState<Space | DataType.Collection | undefined>(initialTarget);
47
+ const [target, setTarget] = useState<Space | Collection.Collection | undefined>(initialTarget);
53
48
  const [typename, setTypename] = useState<string | undefined>(initialTypename);
54
- const space = isSpace(target) ? target : getSpace(target);
55
- const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
56
- 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);
57
52
 
58
53
  const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
59
- (typename) =>
60
- 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
+ },
61
60
  [manager],
62
61
  );
63
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
+
64
75
  const handleCreateObject = useCallback<NonNullable<CreateObjectPanelProps['onCreateObject']>>(
65
- ({ form, data = {} }) =>
76
+ ({ metadata, data = {} }) =>
66
77
  Effect.gen(function* () {
67
78
  if (!target) {
68
79
  // TODO(wittjosiah): UI feedback.
@@ -74,14 +85,18 @@ export const CreateObjectDialog = ({
74
85
 
75
86
  const space = isSpace(target) ? target : getSpace(target);
76
87
  invariant(space, 'Missing space');
77
- const { object } = yield* dispatch(form.getIntent(data, { space }));
78
- 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)) {
79
90
  // TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
80
- const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
81
- 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
+ });
82
97
  const shouldNavigate = _shouldNavigate ?? (() => true);
83
98
  if (shouldNavigate(object)) {
84
- yield* dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
99
+ yield* dispatch(Function.pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
85
100
  } else {
86
101
  yield* dispatch(addObjectIntent);
87
102
  }
@@ -89,7 +104,7 @@ export const CreateObjectDialog = ({
89
104
  onCreateObject?.(object);
90
105
  }
91
106
  }).pipe(Effect.runPromise),
92
- [dispatch, target, resolve, hiddenTypenames, _shouldNavigate],
107
+ [dispatch, target, resolve, _shouldNavigate],
93
108
  );
94
109
 
95
110
  return (
@@ -98,21 +113,34 @@ export const CreateObjectDialog = ({
98
113
  <Dialog.Content classNames={cardDialogContent}>
99
114
  <div role='none' className={cardDialogHeader}>
100
115
  <Dialog.Title>
101
- {t('create object dialog title', { object: t('typename label', { ns: typename, defaultValue: 'Item' }) })}
116
+ {t('create object dialog title', {
117
+ object: t('typename label', {
118
+ ns: typename,
119
+ defaultValue: views ? 'View' : 'Object',
120
+ }),
121
+ })}
102
122
  </Dialog.Title>
103
123
  <Dialog.Close asChild>
104
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
105
- <Icon icon='ph--x--regular' size={4} />
106
- </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
+ />
107
134
  </Dialog.Close>
108
135
  </div>
109
136
 
110
137
  <CreateObjectPanel
111
- forms={forms}
138
+ schemas={userSchemas}
112
139
  spaces={spaces}
113
140
  target={target}
141
+ views={views}
114
142
  typename={typename}
115
- name={name}
143
+ initialFormValues={initialFormValues}
116
144
  defaultSpaceId={client.spaces.default.id}
117
145
  resolve={resolve}
118
146
  onTargetChange={setTarget}
@@ -2,52 +2,70 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import * as Option from 'effect/Option';
6
+ import type * as Schema from 'effect/Schema';
5
7
  import React, { useCallback } from 'react';
6
8
 
7
- import { Type } from '@dxos/echo';
8
- import { getTypeAnnotation, type TypeAnnotation } from '@dxos/echo-schema';
9
- import { type SpaceId, type Space } from '@dxos/react-client/echo';
10
- import { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
9
+ import { type AnyProperties, type TypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
10
+ import { type Space, type SpaceId } from '@dxos/react-client/echo';
11
+ import { Icon, toLocalizedString, useDefaultValue, useTranslation } from '@dxos/react-ui';
11
12
  import { Form } from '@dxos/react-ui-form';
12
13
  import { SearchList } from '@dxos/react-ui-searchlist';
13
14
  import { cardDialogOverflow, cardDialogPaddedOverflow, cardDialogSearchListRoot } from '@dxos/react-ui-stack';
14
- import { type DataType } from '@dxos/schema';
15
- import { isNonNullable, type MaybePromise } from '@dxos/util';
15
+ import { type Collection, ViewAnnotation } from '@dxos/schema';
16
+ import { type MaybePromise, isNonNullable } from '@dxos/util';
16
17
 
17
18
  import { useInputSurfaceLookup } from '../../hooks';
18
- import { SPACE_PLUGIN } from '../../meta';
19
- import { type ObjectForm } from '../../types';
19
+ import { meta } from '../../meta';
20
+ import { type CreateObjectIntent } from '../../types';
20
21
  import { getSpaceDisplayName } from '../../util';
21
22
 
23
+ export type Metadata = {
24
+ createObjectIntent: CreateObjectIntent;
25
+ inputSchema?: Schema.Schema.AnyNoContext;
26
+ addToCollectionOnCreate?: boolean;
27
+ icon?: string;
28
+ };
29
+
22
30
  export type CreateObjectPanelProps = {
23
- forms: ObjectForm[];
31
+ schemas: Schema.Schema.AnyNoContext[];
24
32
  spaces: Space[];
25
33
  typename?: string;
26
- target?: Space | DataType.Collection;
27
- name?: string;
34
+ target?: Space | Collection.Collection;
35
+ views?: boolean;
36
+ initialFormValues?: Partial<AnyProperties>;
28
37
  defaultSpaceId?: SpaceId;
29
- resolve?: (typename: string) => Record<string, any>;
38
+ resolve?: (typename: string) => Metadata | undefined;
30
39
  onTargetChange?: (target: Space) => void;
31
40
  onTypenameChange?: (typename: string) => void;
32
- onCreateObject?: (params: { form: ObjectForm; data?: Record<string, any> }) => MaybePromise<void>;
41
+ onCreateObject?: (params: { metadata: Metadata; data?: Record<string, any> }) => MaybePromise<void>;
33
42
  };
34
43
 
35
44
  export const CreateObjectPanel = ({
36
- forms,
45
+ schemas,
37
46
  spaces,
38
47
  typename,
39
48
  target,
40
- name: initialName,
49
+ views,
50
+ initialFormValues: _initialFormValues,
41
51
  defaultSpaceId,
42
52
  resolve,
43
53
  onTargetChange,
44
54
  onTypenameChange,
45
55
  onCreateObject,
46
56
  }: CreateObjectPanelProps) => {
47
- const { t } = useTranslation(SPACE_PLUGIN);
48
- const form = forms.find((form) => Type.getTypename(form.objectSchema) === typename);
49
- const options: TypeAnnotation[] = forms
50
- .map((form) => getTypeAnnotation(form.objectSchema))
57
+ const { t } = useTranslation(meta.id);
58
+ const initialFormValues = useDefaultValue(_initialFormValues, () => ({}));
59
+ const metadata = typename && resolve?.(typename);
60
+ const options: TypeAnnotation[] = schemas
61
+ .filter((schema) => {
62
+ if (views == null) {
63
+ return true;
64
+ } else {
65
+ return views === ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false));
66
+ }
67
+ })
68
+ .map((schema) => getTypeAnnotation(schema))
51
69
  .filter(isNonNullable)
52
70
  .sort((a, b) => {
53
71
  const nameA = t('typename label', { ns: a.typename, defaultValue: a.typename });
@@ -57,39 +75,39 @@ export const CreateObjectPanel = ({
57
75
 
58
76
  const handleCreateObject = useCallback(
59
77
  async (props: Record<string, any>) => {
60
- if (!form) {
78
+ if (!metadata) {
61
79
  return;
62
80
  }
63
- await onCreateObject?.({ form, data: props });
81
+ await onCreateObject?.({ metadata, data: props });
64
82
  },
65
- [onCreateObject, form],
83
+ [onCreateObject, metadata],
66
84
  );
67
85
 
68
86
  const handleSetTypename = useCallback(
69
87
  async (typename: string) => {
70
- const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);
71
- if (form && !form.formSchema) {
72
- await onCreateObject?.({ form });
88
+ const metadata = resolve?.(typename);
89
+ if (metadata && !metadata.inputSchema) {
90
+ await onCreateObject?.({ metadata });
73
91
  } else {
74
92
  onTypenameChange?.(typename);
75
93
  }
76
94
  },
77
- [forms, onCreateObject],
95
+ [resolve, onCreateObject],
78
96
  );
79
97
 
80
98
  const inputSurfaceLookup = useInputSurfaceLookup({ target });
81
99
 
82
100
  // TODO(wittjosiah): These inputs should be rolled into a `Form` once it supports the necessary variants.
83
- return !form ? (
101
+ return !metadata ? (
84
102
  <SelectSchema options={options} resolve={resolve} onChange={handleSetTypename} />
85
103
  ) : !target ? (
86
104
  <SelectSpace spaces={spaces} defaultSpaceId={defaultSpaceId} onChange={onTargetChange} />
87
- ) : form.formSchema ? (
105
+ ) : metadata.inputSchema ? (
88
106
  <div role='none' className={cardDialogOverflow}>
89
107
  <Form
90
108
  autoFocus
91
- values={{ name: initialName }}
92
- schema={form.formSchema}
109
+ values={initialFormValues}
110
+ schema={metadata.inputSchema}
93
111
  testId='create-object-form'
94
112
  onSave={handleCreateObject}
95
113
  lookupComponent={inputSurfaceLookup}
@@ -104,7 +122,7 @@ const SelectSpace = ({
104
122
  defaultSpaceId,
105
123
  onChange,
106
124
  }: { onChange?: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
107
- const { t } = useTranslation(SPACE_PLUGIN);
125
+ const { t } = useTranslation(meta.id);
108
126
 
109
127
  return (
110
128
  <SearchList.Root label={t('space input label')} classNames={cardDialogSearchListRoot}>
@@ -145,7 +163,7 @@ const SelectSchema = ({
145
163
  options: TypeAnnotation[];
146
164
  onChange: (type: string) => void;
147
165
  } & Pick<CreateObjectPanelProps, 'resolve'>) => {
148
- const { t } = useTranslation(SPACE_PLUGIN);
166
+ const { t } = useTranslation(meta.id);
149
167
 
150
168
  return (
151
169
  <SearchList.Root label={t('schema input label')} classNames={cardDialogSearchListRoot}>
@@ -163,7 +181,7 @@ const SelectSchema = ({
163
181
  classNames='flex items-center gap-2'
164
182
  >
165
183
  <span className='flex gap-2 items-center grow truncate'>
166
- <Icon icon={resolve?.(option.typename).icon ?? 'ph--placeholder--regular'} size={5} />
184
+ <Icon icon={resolve?.(option.typename)?.icon ?? 'ph--placeholder--regular'} size={5} />
167
185
  {t('typename label', { ns: option.typename, defaultValue: option.typename })}
168
186
  </span>
169
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 { createIntent, LayoutAction, 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'>