@dxos/plugin-space 0.8.4-main.f9ba587 → 0.8.4-main.fffef41

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 (361) hide show
  1. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs +31 -0
  2. package/dist/lib/browser/CollectionArticle-WTHWY4YS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs +141 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-2BRUBHP6.mjs.map +7 -0
  5. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs +144 -0
  6. package/dist/lib/browser/ObjectSettings-5LLWCVEK.mjs.map +7 -0
  7. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs +116 -0
  8. package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs +528 -0
  10. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs → app-graph-serializer-TIKXF43P.mjs} +19 -19
  12. package/dist/lib/browser/app-graph-serializer-TIKXF43P.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-AFUOMLX6.mjs +167 -0
  14. package/dist/lib/browser/chunk-AFUOMLX6.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-GVTXQCIW.mjs → chunk-CKACGS7T.mjs} +714 -571
  16. package/dist/lib/browser/chunk-CKACGS7T.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-K5J7ZB5P.mjs +20 -0
  18. package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-WBSEOLEM.mjs → chunk-KFUMADZF.mjs} +301 -73
  20. package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-6VLSHG4A.mjs → chunk-VGKOXAPE.mjs} +87 -12
  22. package/dist/lib/browser/chunk-VGKOXAPE.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-VZBIIYFM.mjs +16 -0
  24. package/dist/lib/browser/chunk-VZBIIYFM.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-WJXU4GKV.mjs +19 -0
  26. package/dist/lib/browser/chunk-WJXU4GKV.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-S6NY637J.mjs → chunk-ZQMSGD5J.mjs} +95 -19
  28. package/dist/lib/browser/chunk-ZQMSGD5J.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 +148 -59
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-WK5WYFH3.mjs → intent-resolver-3FNTO3VW.mjs} +236 -68
  34. package/dist/lib/browser/intent-resolver-3FNTO3VW.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-Q7VBWBES.mjs +30 -0
  37. package/dist/lib/browser/react-root-Q7VBWBES.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-6C3YJNDK.mjs → react-surface-TTHS332A.mjs} +98 -100
  39. package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs → schema-defs-QPI2JU3X.mjs} +6 -6
  41. package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-XNWYRWNM.mjs → settings-45PGPO2V.mjs} +5 -5
  43. package/dist/lib/browser/{settings-XNWYRWNM.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs → spaces-ready-QCND4DVY.mjs} +21 -18
  45. package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
  46. package/dist/lib/browser/{state-522XTUR4.mjs → state-Q7YRE5KG.mjs} +7 -7
  47. package/dist/lib/browser/state-Q7YRE5KG.mjs.map +7 -0
  48. package/dist/lib/browser/types/index.mjs +2 -2
  49. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs +32 -0
  50. package/dist/lib/node-esm/CollectionArticle-KHXYT3SH.mjs.map +7 -0
  51. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs +142 -0
  52. package/dist/lib/node-esm/ObjectDetailsPanel-6PZQIQG3.mjs.map +7 -0
  53. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs +145 -0
  54. package/dist/lib/node-esm/ObjectSettings-OQSBOH7K.mjs.map +7 -0
  55. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs +117 -0
  56. package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +7 -0
  57. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs +529 -0
  58. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs → app-graph-serializer-BESQZAYU.mjs} +19 -19
  60. package/dist/lib/node-esm/app-graph-serializer-BESQZAYU.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-2THX6G4C.mjs → chunk-6VEONPNZ.mjs} +95 -19
  62. package/dist/lib/node-esm/chunk-6VEONPNZ.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-6ZQGZBEP.mjs +168 -0
  64. package/dist/lib/node-esm/chunk-6ZQGZBEP.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-HJJHLWKY.mjs → chunk-OK2L7N2F.mjs} +301 -73
  70. package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-SXD6T2N4.mjs → chunk-QBRPYAEL.mjs} +87 -12
  72. package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-OUBADVJE.mjs → chunk-XGAMJC5C.mjs} +714 -571
  74. package/dist/lib/node-esm/chunk-XGAMJC5C.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs +21 -0
  76. package/dist/lib/node-esm/chunk-Z7BB6HC2.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 +148 -59
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-HSR27ME4.mjs → intent-resolver-6O5FSB7Z.mjs} +236 -68
  82. package/dist/lib/node-esm/intent-resolver-6O5FSB7Z.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs → react-root-K66W3FMA.mjs} +13 -12
  85. package/dist/lib/node-esm/react-root-K66W3FMA.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-AGAWX7DD.mjs → react-surface-Y7FTEIDF.mjs} +98 -100
  87. package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs → schema-defs-ZS2D47XW.mjs} +6 -6
  89. package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +7 -0
  90. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs → settings-6FO65BA6.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs → spaces-ready-P7CKVXBE.mjs} +21 -18
  93. package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-C4IOXPZP.mjs → state-362I5BMK.mjs} +7 -7
  95. package/dist/lib/node-esm/state-362I5BMK.mjs.map +7 -0
  96. package/dist/lib/node-esm/types/index.mjs +2 -2
  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 -7
  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/schema-defs.d.ts +1 -1
  115. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  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 +5 -4
  127. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -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 +7 -5
  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 +1707 -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/MenuFooter.d.ts.map +1 -1
  145. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  148. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  149. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  150. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  151. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  152. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  153. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  154. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  155. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  156. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  157. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  158. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1540 -0
  159. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  160. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  161. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  162. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  163. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  164. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  165. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  166. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  167. package/dist/types/src/components/RecordArticle.stories.d.ts +1707 -0
  168. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  169. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  170. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  171. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  172. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  173. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  174. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1537 -0
  175. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  176. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  177. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  178. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  179. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  180. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  181. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  182. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  183. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1537 -4
  184. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
  186. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  187. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
  188. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  189. package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
  190. package/dist/types/src/components/ViewEditor.d.ts +7 -0
  191. package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
  192. package/dist/types/src/components/index.d.ts +11 -5
  193. package/dist/types/src/components/index.d.ts.map +1 -1
  194. package/dist/types/src/events.d.ts +1 -0
  195. package/dist/types/src/events.d.ts.map +1 -1
  196. package/dist/types/src/helpers/index.d.ts +2 -0
  197. package/dist/types/src/helpers/index.d.ts.map +1 -0
  198. package/dist/types/src/helpers/query.d.ts +8 -0
  199. package/dist/types/src/helpers/query.d.ts.map +1 -0
  200. package/dist/types/src/helpers/query.test.d.ts +2 -0
  201. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  202. package/dist/types/src/hooks/index.d.ts +1 -0
  203. package/dist/types/src/hooks/index.d.ts.map +1 -1
  204. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  206. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  207. package/dist/types/src/hooks/usePath.d.ts +1 -1
  208. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  209. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  210. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  211. package/dist/types/src/index.d.ts +1 -0
  212. package/dist/types/src/index.d.ts.map +1 -1
  213. package/dist/types/src/meta.d.ts +0 -1
  214. package/dist/types/src/meta.d.ts.map +1 -1
  215. package/dist/types/src/translations.d.ts +1382 -11
  216. package/dist/types/src/translations.d.ts.map +1 -1
  217. package/dist/types/src/types/types.d.ts +141 -66
  218. package/dist/types/src/types/types.d.ts.map +1 -1
  219. package/dist/types/src/util.d.ts +40 -10
  220. package/dist/types/src/util.d.ts.map +1 -1
  221. package/dist/types/tsconfig.tsbuildinfo +1 -1
  222. package/package.json +67 -61
  223. package/src/SpacePlugin.ts +232 -139
  224. package/src/capabilities/app-graph-builder.ts +335 -88
  225. package/src/capabilities/app-graph-serializer.ts +12 -12
  226. package/src/capabilities/capabilities.ts +21 -10
  227. package/src/capabilities/identity-created.ts +3 -3
  228. package/src/capabilities/index.ts +0 -1
  229. package/src/capabilities/intent-resolver.ts +191 -54
  230. package/src/capabilities/react-root.tsx +6 -4
  231. package/src/capabilities/react-surface.tsx +94 -119
  232. package/src/capabilities/schema-defs.ts +4 -3
  233. package/src/capabilities/spaces-ready.ts +16 -10
  234. package/src/capabilities/state.ts +5 -4
  235. package/src/components/AwaitingObject.tsx +16 -20
  236. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +8 -5
  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 +76 -54
  240. package/src/components/CreateDialog/CreateObjectPanel.tsx +24 -13
  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} +27 -24
  246. package/src/components/MembersContainer/index.ts +5 -0
  247. package/src/components/MenuFooter.tsx +4 -5
  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} +11 -17
  252. package/src/components/ObjectRenamePopover/index.ts +5 -0
  253. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -3
  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 +4 -4
  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 +25 -28
  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 +49 -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 +110 -13
  273. package/src/components/SyncStatus/status.ts +4 -4
  274. package/src/components/ViewEditor.tsx +92 -0
  275. package/src/components/index.ts +10 -5
  276. package/src/events.ts +7 -6
  277. package/src/helpers/index.ts +5 -0
  278. package/src/helpers/query.test.ts +24 -0
  279. package/src/helpers/query.ts +158 -0
  280. package/src/hooks/index.ts +1 -0
  281. package/src/hooks/useActiveSpace.ts +3 -2
  282. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  283. package/src/hooks/usePath.ts +1 -1
  284. package/src/hooks/useTypeOptions.ts +59 -0
  285. package/src/index.ts +1 -0
  286. package/src/meta.ts +6 -3
  287. package/src/translations.ts +85 -7
  288. package/src/types/types.ts +94 -22
  289. package/src/util.tsx +297 -75
  290. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs +0 -363
  291. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs.map +0 -7
  292. package/dist/lib/browser/app-graph-serializer-UKYMBX4O.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-6VLSHG4A.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-C7KGJTAL.mjs +0 -18
  295. package/dist/lib/browser/chunk-C7KGJTAL.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  297. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-GVTXQCIW.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-S6NY637J.mjs.map +0 -7
  300. package/dist/lib/browser/chunk-VLBRSGJ2.mjs +0 -94
  301. package/dist/lib/browser/chunk-VLBRSGJ2.mjs.map +0 -7
  302. package/dist/lib/browser/chunk-WBSEOLEM.mjs.map +0 -7
  303. package/dist/lib/browser/chunk-XXIPJLJF.mjs +0 -19
  304. package/dist/lib/browser/chunk-XXIPJLJF.mjs.map +0 -7
  305. package/dist/lib/browser/identity-created-23XJJV2N.mjs.map +0 -7
  306. package/dist/lib/browser/intent-resolver-WK5WYFH3.mjs.map +0 -7
  307. package/dist/lib/browser/react-root-7S6FIC5G.mjs +0 -29
  308. package/dist/lib/browser/react-root-7S6FIC5G.mjs.map +0 -7
  309. package/dist/lib/browser/react-surface-6C3YJNDK.mjs.map +0 -7
  310. package/dist/lib/browser/schema-defs-K3B3OAH4.mjs.map +0 -7
  311. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs +0 -124
  312. package/dist/lib/browser/schema-tools-BNP4JTD7.mjs.map +0 -7
  313. package/dist/lib/browser/spaces-ready-K7NSNBHM.mjs.map +0 -7
  314. package/dist/lib/browser/state-522XTUR4.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs +0 -364
  316. package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs.map +0 -7
  317. package/dist/lib/node-esm/app-graph-serializer-LA3IZDXJ.mjs.map +0 -7
  318. package/dist/lib/node-esm/chunk-2THX6G4C.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-72QMMRKC.mjs +0 -19
  320. package/dist/lib/node-esm/chunk-72QMMRKC.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-AT7LGFER.mjs +0 -20
  322. package/dist/lib/node-esm/chunk-AT7LGFER.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HJJHLWKY.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  325. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-OUBADVJE.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs +0 -96
  328. package/dist/lib/node-esm/chunk-SSLBYZEY.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-SXD6T2N4.mjs.map +0 -7
  330. package/dist/lib/node-esm/identity-created-IJQO6GCR.mjs.map +0 -7
  331. package/dist/lib/node-esm/intent-resolver-HSR27ME4.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-root-HUK3ANLV.mjs.map +0 -7
  333. package/dist/lib/node-esm/react-surface-AGAWX7DD.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-defs-4MCDG4DV.mjs.map +0 -7
  335. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs +0 -126
  336. package/dist/lib/node-esm/schema-tools-KWW5PTML.mjs.map +0 -7
  337. package/dist/lib/node-esm/spaces-ready-UM2P3DCR.mjs.map +0 -7
  338. package/dist/lib/node-esm/state-C4IOXPZP.mjs.map +0 -7
  339. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  340. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  341. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  342. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  343. package/dist/types/src/components/CollectionMain.d.ts +0 -6
  344. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  345. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  346. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  347. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  348. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  349. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  350. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  351. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  352. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  353. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  354. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  355. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  356. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  357. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  358. package/src/capabilities/schema-tool.test.ts +0 -44
  359. package/src/capabilities/schema-tools.ts +0 -125
  360. package/src/components/MembersContainer.stories.tsx +0 -30
  361. package/src/components/PersistenceStatus.tsx +0 -84
@@ -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,56 +2,59 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { pipe } from 'effect';
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Function from 'effect/Function';
6
7
  import React, { useCallback, useRef, useState } from 'react';
7
8
 
8
- import {
9
- Capabilities,
10
- LayoutAction,
11
- chain,
12
- createIntent,
13
- useCapabilities,
14
- useIntentDispatcher,
15
- usePluginManager,
16
- } from '@dxos/app-framework';
17
- import { Query, Type, type Obj } from '@dxos/echo';
9
+ import { Capabilities, LayoutAction, chain, createIntent } from '@dxos/app-framework';
10
+ import { useCapabilities, useIntentDispatcher, usePluginManager } from '@dxos/app-framework/react';
11
+ import { Obj, Query, Type } from '@dxos/echo';
18
12
  import { invariant } from '@dxos/invariant';
19
13
  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';
14
+ import { type Space, getSpace, isLiveObject, isSpace, useQuery, useSpaces } from '@dxos/react-client/echo';
15
+ import { Dialog, IconButton, useTranslation } from '@dxos/react-ui';
22
16
  import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
23
- import { DataType } from '@dxos/schema';
17
+ import { Collection, StoredSchema, getTypenameFromQuery } from '@dxos/schema';
24
18
  import { isNonNullable } from '@dxos/util';
25
19
 
26
- import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
27
20
  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 } from './CreateObjectPanel';
25
+
26
+ export const CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
32
27
 
33
- export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {
28
+ export type CreateObjectDialogProps = Pick<
29
+ CreateObjectPanelProps,
30
+ 'target' | 'views' | 'typename' | 'initialFormValues'
31
+ > & {
32
+ onCreateObject?: (object: Obj.Any) => void;
34
33
  shouldNavigate?: (object: Obj.Any) => boolean;
35
34
  };
36
35
 
37
36
  export const CreateObjectDialog = ({
38
37
  target: initialTarget,
39
38
  typename: initialTypename,
40
- name,
39
+ views,
40
+ initialFormValues,
41
+ onCreateObject,
41
42
  shouldNavigate: _shouldNavigate,
42
43
  }: CreateObjectDialogProps) => {
43
- const closeRef = useRef<HTMLButtonElement | null>(null);
44
44
  const manager = usePluginManager();
45
- const { t } = useTranslation(SPACE_PLUGIN);
46
- const client = useClient();
47
- const spaces = useSpaces();
48
- const { dispatchPromise: dispatch } = useIntentDispatcher();
45
+ const { t } = useTranslation(meta.id);
46
+ const { dispatch } = useIntentDispatcher();
49
47
  const forms = useCapabilities(SpaceCapabilities.ObjectForm);
50
- const [target, setTarget] = useState<Space | DataType.Collection | undefined>(initialTarget);
48
+ const [target, setTarget] = useState<Space | Collection.Collection | undefined>(initialTarget);
51
49
  const [typename, setTypename] = useState<string | undefined>(initialTypename);
50
+ const client = useClient();
51
+ const spaces = useSpaces();
52
52
  const space = isSpace(target) ? target : getSpace(target);
53
- const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
54
- const hiddenTypenames = queryCollections.map((collection) => collection.query.typename).filter(isNonNullable);
53
+ const queryCollections = useQuery(space, Query.type(Collection.QueryCollection));
54
+ const hiddenTypenames = queryCollections
55
+ .map((collection) => getTypenameFromQuery(collection.query))
56
+ .filter(isNonNullable);
57
+ const closeRef = useRef<HTMLButtonElement | null>(null);
55
58
 
56
59
  const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
57
60
  (typename) =>
@@ -60,31 +63,37 @@ export const CreateObjectDialog = ({
60
63
  );
61
64
 
62
65
  const handleCreateObject = useCallback<NonNullable<CreateObjectPanelProps['onCreateObject']>>(
63
- async ({ form, data = {} }) => {
64
- if (!target) {
65
- // TODO(wittjosiah): UI feedback.
66
- return;
67
- }
66
+ ({ form, data = {} }) =>
67
+ Effect.gen(function* () {
68
+ if (!target) {
69
+ // TODO(wittjosiah): UI feedback.
70
+ return;
71
+ }
72
+
73
+ // NOTE: Must close before navigating or attention won't follow object.
74
+ closeRef.current?.click();
68
75
 
69
- // NOTE: Must close before navigating or attention won't follow object.
70
- closeRef.current?.click();
76
+ const space = isSpace(target) ? target : getSpace(target);
77
+ invariant(space, 'Missing space');
78
+ const { object } = yield* dispatch(form.getIntent(data, { space }));
79
+ if (isLiveObject(object) && !Obj.instanceOf(StoredSchema, object)) {
80
+ // TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
81
+ const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
82
+ const addObjectIntent = createIntent(SpaceAction.AddObject, {
83
+ target,
84
+ object,
85
+ hidden,
86
+ });
87
+ const shouldNavigate = _shouldNavigate ?? (() => true);
88
+ if (shouldNavigate(object)) {
89
+ yield* dispatch(Function.pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
90
+ } else {
91
+ yield* dispatch(addObjectIntent);
92
+ }
71
93
 
72
- const space = isSpace(target) ? target : getSpace(target);
73
- invariant(space, 'Missing space');
74
- const result = await dispatch(form.getIntent(data, { space }));
75
- const object = result.data?.object;
76
- if (isLiveObject(object)) {
77
- // TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
78
- const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
79
- const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object, hidden });
80
- const shouldNavigate = _shouldNavigate ?? (() => true);
81
- if (shouldNavigate(object)) {
82
- await dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
83
- } else {
84
- await dispatch(addObjectIntent);
94
+ onCreateObject?.(object);
85
95
  }
86
- }
87
- },
96
+ }).pipe(Effect.runPromise),
88
97
  [dispatch, target, resolve, hiddenTypenames, _shouldNavigate],
89
98
  );
90
99
 
@@ -94,12 +103,24 @@ export const CreateObjectDialog = ({
94
103
  <Dialog.Content classNames={cardDialogContent}>
95
104
  <div role='none' className={cardDialogHeader}>
96
105
  <Dialog.Title>
97
- {t('create object dialog title', { object: t('typename label', { ns: typename, defaultValue: 'Item' }) })}
106
+ {t('create object dialog title', {
107
+ object: t('typename label', {
108
+ ns: typename,
109
+ defaultValue: views ? 'View' : 'Item',
110
+ }),
111
+ })}
98
112
  </Dialog.Title>
99
113
  <Dialog.Close asChild>
100
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
101
- <Icon icon='ph--x--regular' size={4} />
102
- </Button>
114
+ <IconButton
115
+ ref={closeRef}
116
+ icon='ph--x--regular'
117
+ size={4}
118
+ label='Close'
119
+ iconOnly
120
+ density='fine'
121
+ variant='ghost'
122
+ autoFocus
123
+ />
103
124
  </Dialog.Close>
104
125
  </div>
105
126
 
@@ -107,8 +128,9 @@ export const CreateObjectDialog = ({
107
128
  forms={forms}
108
129
  spaces={spaces}
109
130
  target={target}
131
+ views={views}
110
132
  typename={typename}
111
- name={name}
133
+ initialFormValues={initialFormValues}
112
134
  defaultSpaceId={client.spaces.default.id}
113
135
  resolve={resolve}
114
136
  onTargetChange={setTarget}
@@ -2,20 +2,21 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import * as Option from 'effect/Option';
5
6
  import React, { useCallback } from 'react';
6
7
 
7
8
  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 BaseObject, type TypeAnnotation, ViewAnnotation, 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 } 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 { meta } from '../../meta';
19
20
  import { type ObjectForm } from '../../types';
20
21
  import { getSpaceDisplayName } from '../../util';
21
22
 
@@ -23,8 +24,9 @@ export type CreateObjectPanelProps = {
23
24
  forms: ObjectForm[];
24
25
  spaces: Space[];
25
26
  typename?: string;
26
- target?: Space | DataType.Collection;
27
- name?: string;
27
+ target?: Space | Collection.Collection;
28
+ views?: boolean;
29
+ initialFormValues?: Partial<BaseObject>;
28
30
  defaultSpaceId?: SpaceId;
29
31
  resolve?: (typename: string) => Record<string, any>;
30
32
  onTargetChange?: (target: Space) => void;
@@ -37,16 +39,25 @@ export const CreateObjectPanel = ({
37
39
  spaces,
38
40
  typename,
39
41
  target,
40
- name: initialName,
42
+ views,
43
+ initialFormValues: _initialFormValues,
41
44
  defaultSpaceId,
42
45
  resolve,
43
46
  onTargetChange,
44
47
  onTypenameChange,
45
48
  onCreateObject,
46
49
  }: CreateObjectPanelProps) => {
47
- const { t } = useTranslation(SPACE_PLUGIN);
50
+ const { t } = useTranslation(meta.id);
51
+ const initialFormValues = useDefaultValue(_initialFormValues, () => ({}));
48
52
  const form = forms.find((form) => Type.getTypename(form.objectSchema) === typename);
49
53
  const options: TypeAnnotation[] = forms
54
+ .filter((form) => {
55
+ if (views == null) {
56
+ return true;
57
+ } else {
58
+ return views === ViewAnnotation.get(form.objectSchema).pipe(Option.getOrElse(() => false));
59
+ }
60
+ })
50
61
  .map((form) => getTypeAnnotation(form.objectSchema))
51
62
  .filter(isNonNullable)
52
63
  .sort((a, b) => {
@@ -88,7 +99,7 @@ export const CreateObjectPanel = ({
88
99
  <div role='none' className={cardDialogOverflow}>
89
100
  <Form
90
101
  autoFocus
91
- values={{ name: initialName }}
102
+ values={initialFormValues}
92
103
  schema={form.formSchema}
93
104
  testId='create-object-form'
94
105
  onSave={handleCreateObject}
@@ -104,7 +115,7 @@ const SelectSpace = ({
104
115
  defaultSpaceId,
105
116
  onChange,
106
117
  }: { onChange?: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
107
- const { t } = useTranslation(SPACE_PLUGIN);
118
+ const { t } = useTranslation(meta.id);
108
119
 
109
120
  return (
110
121
  <SearchList.Root label={t('space input label')} classNames={cardDialogSearchListRoot}>
@@ -145,7 +156,7 @@ const SelectSchema = ({
145
156
  options: TypeAnnotation[];
146
157
  onChange: (type: string) => void;
147
158
  } & Pick<CreateObjectPanelProps, 'resolve'>) => {
148
- const { t } = useTranslation(SPACE_PLUGIN);
159
+ const { t } = useTranslation(meta.id);
149
160
 
150
161
  return (
151
162
  <SearchList.Root label={t('schema input label')} classNames={cardDialogSearchListRoot}>
@@ -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'>
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
8
+ import { useAppGraph, useIntentDispatcher } from '@dxos/app-framework/react';
8
9
  import { Trigger } from '@dxos/async';
9
10
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
10
11
  import { useClient } from '@dxos/react-client';
@@ -13,9 +14,9 @@ import { type InvitationResult } from '@dxos/react-client/invitations';
13
14
  import { Dialog, useTranslation } from '@dxos/react-ui';
14
15
  import { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';
15
16
 
16
- import { SPACE_PLUGIN } from '../meta';
17
+ import { meta } from '../../meta';
17
18
 
18
- export const JOIN_DIALOG = `${SPACE_PLUGIN}/JoinDialog`;
19
+ export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
19
20
 
20
21
  export type JoinDialogProps = JoinPanelProps & {
21
22
  navigableCollections?: boolean;
@@ -25,7 +26,7 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
25
26
  const { dispatchPromise: dispatch } = useIntentDispatcher();
26
27
  const client = useClient();
27
28
  const { graph } = useAppGraph();
28
- const { t } = useTranslation(SPACE_PLUGIN);
29
+ const { t } = useTranslation(meta.id);
29
30
 
30
31
  const handleDone = useCallback(
31
32
  async (result: InvitationResult | null) => {
@@ -39,10 +40,10 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
39
40
  createIntent(LayoutAction.AddToast, {
40
41
  part: 'toast',
41
42
  subject: {
42
- id: `${SPACE_PLUGIN}/join-success`,
43
+ id: `${meta.id}/join-success`,
43
44
  duration: 5_000,
44
- title: ['join success label', { ns: SPACE_PLUGIN }],
45
- closeLabel: ['dismiss label', { ns: SPACE_PLUGIN }],
45
+ title: ['join success label', { ns: meta.id }],
46
+ closeLabel: ['dismiss label', { ns: meta.id }],
46
47
  },
47
48
  }),
48
49
  ),
@@ -69,7 +70,12 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
69
70
  space = await trigger.wait();
70
71
  }
71
72
 
72
- await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
73
+ await dispatch(
74
+ createIntent(LayoutAction.SwitchWorkspace, {
75
+ part: 'workspace',
76
+ subject: space.id,
77
+ }),
78
+ );
73
79
 
74
80
  // TODO(wittjosiah): If navigableCollections is false and there's no target,
75
81
  // should try to navigate to the first object of the space replicates.
@@ -80,8 +86,18 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
80
86
  // If the target has not yet replicated, this will trigger a loading toast.
81
87
  await graph.waitForPath({ target }).catch(() => {});
82
88
  await Promise.all([
83
- dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [target] })),
84
- dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: target })),
89
+ dispatch(
90
+ createIntent(LayoutAction.Open, {
91
+ part: 'main',
92
+ subject: [target],
93
+ }),
94
+ ),
95
+ dispatch(
96
+ createIntent(LayoutAction.Expose, {
97
+ part: 'navigation',
98
+ subject: target,
99
+ }),
100
+ ),
85
101
  ]);
86
102
  }
87
103
 
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './JoinDialog';
@@ -0,0 +1,56 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { useSpace } from '@dxos/react-client/echo';
11
+ import { withClientProvider } from '@dxos/react-client/testing';
12
+ import { withTheme } from '@dxos/react-ui/testing';
13
+ import { translations as shellTranslations } from '@dxos/shell/react';
14
+ import { render } from '@dxos/storybook-utils';
15
+
16
+ import { translations } from '../../translations';
17
+
18
+ import { MembersContainer } from './MembersContainer';
19
+
20
+ const DefaultStory = () => {
21
+ const space = useSpace();
22
+ if (!space) {
23
+ return null;
24
+ }
25
+
26
+ return (
27
+ <MembersContainer
28
+ space={space}
29
+ createInvitationUrl={(invitationCode) => `https://dxos.org/invite/${invitationCode}`}
30
+ />
31
+ );
32
+ };
33
+
34
+ const meta = {
35
+ title: 'plugins/plugin-space/MembersContainer',
36
+ component: MembersContainer as any,
37
+ render: render(DefaultStory),
38
+ decorators: [
39
+ withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
40
+ withPluginManager({ plugins: [IntentPlugin()] }),
41
+ withClientProvider({
42
+ createIdentity: true,
43
+ createSpace: true,
44
+ }),
45
+ ],
46
+ parameters: {
47
+ layout: 'fullscreen',
48
+ translations: [...translations, ...shellTranslations],
49
+ },
50
+ } satisfies Meta<typeof DefaultStory>;
51
+
52
+ export default meta;
53
+
54
+ type Story = StoryObj<typeof meta>;
55
+
56
+ export const Default: Story = {};