@dxos/plugin-space 0.8.4-main.fd6878d → 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 (366) 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-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-VZW75QPJ.mjs → app-graph-builder-DTM7BJ6D.mjs} +114 -97
  10. package/dist/lib/browser/app-graph-builder-DTM7BJ6D.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-YPHYVZAP.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-PSIBVBTA.mjs → chunk-CKACGS7T.mjs} +576 -500
  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-SMB4DGYO.mjs → chunk-KFUMADZF.mjs} +184 -60
  20. package/dist/lib/browser/chunk-KFUMADZF.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-WAXS2ZVX.mjs → chunk-VGKOXAPE.mjs} +27 -13
  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-3UFG6LQQ.mjs → chunk-ZQMSGD5J.mjs} +44 -22
  28. package/dist/lib/browser/chunk-ZQMSGD5J.mjs.map +7 -0
  29. package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs → identity-created-NAXTPQXE.mjs} +5 -5
  30. package/dist/lib/browser/identity-created-NAXTPQXE.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +89 -91
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-TS6CCKST.mjs → intent-resolver-3FNTO3VW.mjs} +103 -85
  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-V3ARS2BP.mjs → react-surface-TTHS332A.mjs} +75 -109
  39. package/dist/lib/browser/react-surface-TTHS332A.mjs.map +7 -0
  40. package/dist/lib/browser/{schema-defs-5LBA43X5.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-FLLBP5KI.mjs → settings-45PGPO2V.mjs} +5 -5
  43. package/dist/lib/browser/{settings-FLLBP5KI.mjs.map → settings-45PGPO2V.mjs.map} +1 -1
  44. package/dist/lib/browser/{spaces-ready-FXEP6XEW.mjs → spaces-ready-QCND4DVY.mjs} +15 -14
  45. package/dist/lib/browser/spaces-ready-QCND4DVY.mjs.map +7 -0
  46. package/dist/lib/browser/{state-K3UBPKYP.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/{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-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-XNVQOJLE.mjs → app-graph-builder-FBJFWI4H.mjs} +114 -97
  58. package/dist/lib/node-esm/app-graph-builder-FBJFWI4H.mjs.map +7 -0
  59. package/dist/lib/node-esm/{app-graph-serializer-PKVLWV6V.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-S7MKRQHY.mjs → chunk-6VEONPNZ.mjs} +44 -22
  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-CTQMR7E3.mjs → chunk-OK2L7N2F.mjs} +184 -60
  70. package/dist/lib/node-esm/chunk-OK2L7N2F.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-HYIZVPOA.mjs → chunk-QBRPYAEL.mjs} +27 -13
  72. package/dist/lib/node-esm/chunk-QBRPYAEL.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-KYUHPPRN.mjs → chunk-XGAMJC5C.mjs} +576 -500
  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-AL7NNCKH.mjs → identity-created-OXLKCJE3.mjs} +5 -5
  78. package/dist/lib/node-esm/identity-created-OXLKCJE3.mjs.map +7 -0
  79. package/dist/lib/node-esm/index.mjs +89 -91
  80. package/dist/lib/node-esm/index.mjs.map +3 -3
  81. package/dist/lib/node-esm/{intent-resolver-W6P27SCF.mjs → intent-resolver-6O5FSB7Z.mjs} +103 -85
  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-N27KETKT.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-TNPAUQCM.mjs → react-surface-Y7FTEIDF.mjs} +75 -109
  87. package/dist/lib/node-esm/react-surface-Y7FTEIDF.mjs.map +7 -0
  88. package/dist/lib/node-esm/{schema-defs-TPWZPDCR.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-WKUWY3P6.mjs → settings-6FO65BA6.mjs} +5 -5
  91. package/dist/lib/node-esm/{settings-WKUWY3P6.mjs.map → settings-6FO65BA6.mjs.map} +1 -1
  92. package/dist/lib/node-esm/{spaces-ready-PQLLIO5W.mjs → spaces-ready-P7CKVXBE.mjs} +15 -14
  93. package/dist/lib/node-esm/spaces-ready-P7CKVXBE.mjs.map +7 -0
  94. package/dist/lib/node-esm/{state-4M5A6OSB.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 +6 -5
  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/index.d.ts +11 -12
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  110. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  112. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  114. package/dist/types/src/capabilities/settings.d.ts +1 -1
  115. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  116. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/state.d.ts +1 -1
  118. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  119. package/dist/types/src/components/CollectionArticle.d.ts +6 -0
  120. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -0
  121. package/dist/types/src/components/CollectionSection.d.ts +3 -4
  122. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  123. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  124. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  125. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1704 -4
  126. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +6 -4
  128. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  129. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
  130. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  131. package/dist/types/src/components/{JoinDialog.d.ts → JoinDialog/JoinDialog.d.ts} +1 -1
  132. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -0
  133. package/dist/types/src/components/JoinDialog/index.d.ts +2 -0
  134. package/dist/types/src/components/JoinDialog/index.d.ts.map +1 -0
  135. package/dist/types/src/components/{MembersContainer.d.ts → MembersContainer/MembersContainer.d.ts} +3 -2
  136. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1707 -0
  138. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -0
  139. package/dist/types/src/components/MembersContainer/index.d.ts +2 -0
  140. package/dist/types/src/components/MembersContainer/index.d.ts.map +1 -0
  141. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
  142. package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
  143. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
  144. package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
  145. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
  146. package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
  147. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts +7 -0
  148. package/dist/types/src/components/ObjectRenamePopover/ObjectRenamePopover.d.ts.map +1 -0
  149. package/dist/types/src/components/ObjectRenamePopover/index.d.ts +2 -0
  150. package/dist/types/src/components/ObjectRenamePopover/index.d.ts.map +1 -0
  151. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  152. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  153. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1540 -0
  154. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
  155. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
  156. package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
  157. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
  159. package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
  160. package/dist/types/src/components/RecordArticle.d.ts +5 -0
  161. package/dist/types/src/components/RecordArticle.d.ts.map +1 -0
  162. package/dist/types/src/components/RecordArticle.stories.d.ts +1707 -0
  163. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -0
  164. package/dist/types/src/components/SchemaContainer.d.ts +1 -1
  165. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  166. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  167. package/dist/types/src/components/{SpacePresence.d.ts → SpacePresence/SpacePresence.d.ts} +4 -3
  168. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -0
  169. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +1537 -0
  170. package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts.map +1 -0
  171. package/dist/types/src/components/SpacePresence/index.d.ts +2 -0
  172. package/dist/types/src/components/SpacePresence/index.d.ts.map +1 -0
  173. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts +7 -0
  174. package/dist/types/src/components/SpaceRenamePopover/SpaceRenamePopover.d.ts.map +1 -0
  175. package/dist/types/src/components/SpaceRenamePopover/index.d.ts +2 -0
  176. package/dist/types/src/components/SpaceRenamePopover/index.d.ts.map +1 -0
  177. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  178. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +1537 -4
  179. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  180. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  181. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +1538 -5
  182. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/ViewEditor.d.ts +3 -4
  184. package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
  185. package/dist/types/src/components/index.d.ts +10 -14
  186. package/dist/types/src/components/index.d.ts.map +1 -1
  187. package/dist/types/src/events.d.ts.map +1 -1
  188. package/dist/types/src/helpers/index.d.ts +2 -0
  189. package/dist/types/src/helpers/index.d.ts.map +1 -0
  190. package/dist/types/src/helpers/query.d.ts +8 -0
  191. package/dist/types/src/helpers/query.d.ts.map +1 -0
  192. package/dist/types/src/helpers/query.test.d.ts +2 -0
  193. package/dist/types/src/helpers/query.test.d.ts.map +1 -0
  194. package/dist/types/src/hooks/index.d.ts +1 -0
  195. package/dist/types/src/hooks/index.d.ts.map +1 -1
  196. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
  198. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  199. package/dist/types/src/hooks/usePath.d.ts +1 -1
  200. package/dist/types/src/hooks/usePath.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
  202. package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
  203. package/dist/types/src/index.d.ts +1 -0
  204. package/dist/types/src/index.d.ts.map +1 -1
  205. package/dist/types/src/meta.d.ts +0 -1
  206. package/dist/types/src/meta.d.ts.map +1 -1
  207. package/dist/types/src/translations.d.ts +1332 -22
  208. package/dist/types/src/translations.d.ts.map +1 -1
  209. package/dist/types/src/types/types.d.ts +92 -97
  210. package/dist/types/src/types/types.d.ts.map +1 -1
  211. package/dist/types/src/util.d.ts +12 -8
  212. package/dist/types/src/util.d.ts.map +1 -1
  213. package/dist/types/tsconfig.tsbuildinfo +1 -1
  214. package/package.json +65 -59
  215. package/src/SpacePlugin.ts +228 -218
  216. package/src/capabilities/app-graph-builder.ts +184 -135
  217. package/src/capabilities/app-graph-serializer.ts +12 -12
  218. package/src/capabilities/capabilities.ts +17 -11
  219. package/src/capabilities/identity-created.ts +2 -2
  220. package/src/capabilities/index.ts +0 -1
  221. package/src/capabilities/intent-resolver.ts +89 -62
  222. package/src/capabilities/react-root.tsx +4 -3
  223. package/src/capabilities/react-surface.tsx +69 -145
  224. package/src/capabilities/schema-defs.ts +1 -1
  225. package/src/capabilities/spaces-ready.ts +8 -5
  226. package/src/capabilities/state.ts +2 -2
  227. package/src/components/AwaitingObject.tsx +12 -14
  228. package/src/components/{CollectionMain.tsx → CollectionArticle.tsx} +7 -6
  229. package/src/components/CollectionSection.tsx +8 -6
  230. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +15 -15
  231. package/src/components/CreateDialog/CreateObjectDialog.tsx +48 -31
  232. package/src/components/CreateDialog/CreateObjectPanel.tsx +22 -11
  233. package/src/components/CreateDialog/CreateSpaceDialog.tsx +30 -11
  234. package/src/components/{JoinDialog.tsx → JoinDialog/JoinDialog.tsx} +26 -10
  235. package/src/components/JoinDialog/index.ts +5 -0
  236. package/src/components/MembersContainer/MembersContainer.stories.tsx +56 -0
  237. package/src/components/{MembersContainer.tsx → MembersContainer/MembersContainer.tsx} +21 -20
  238. package/src/components/MembersContainer/index.ts +5 -0
  239. package/src/components/MenuFooter.tsx +2 -2
  240. package/src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx +51 -0
  241. package/src/components/ObjectDetailsPanel/ObjectForm.tsx +72 -0
  242. package/src/components/ObjectDetailsPanel/index.ts +7 -0
  243. package/src/components/{PopoverRenameObject.tsx → ObjectRenamePopover/ObjectRenamePopover.tsx} +6 -6
  244. package/src/components/ObjectRenamePopover/index.ts +5 -0
  245. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
  246. package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
  247. package/src/components/ObjectSettings/BaseObjectSettings.tsx +90 -26
  248. package/src/components/ObjectSettings/ForeignKeys.tsx +4 -4
  249. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -3
  250. package/src/components/ObjectSettings/index.ts +3 -1
  251. package/src/components/RecordArticle.stories.tsx +115 -0
  252. package/src/components/RecordArticle.tsx +114 -0
  253. package/src/components/SchemaContainer.tsx +23 -26
  254. package/src/components/SpacePluginSettings.tsx +15 -10
  255. package/src/components/{SpacePresence.stories.tsx → SpacePresence/SpacePresence.stories.tsx} +22 -22
  256. package/src/components/{SpacePresence.tsx → SpacePresence/SpacePresence.tsx} +16 -11
  257. package/src/components/SpacePresence/index.ts +5 -0
  258. package/src/components/{PopoverRenameSpace.tsx → SpaceRenamePopover/SpaceRenamePopover.tsx} +7 -6
  259. package/src/components/SpaceRenamePopover/index.ts +5 -0
  260. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +15 -8
  261. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +45 -24
  262. package/src/components/SyncStatus/InlineSyncStatus.tsx +8 -8
  263. package/src/components/SyncStatus/SyncStatus.stories.tsx +7 -8
  264. package/src/components/SyncStatus/SyncStatus.tsx +107 -11
  265. package/src/components/ViewEditor.tsx +51 -23
  266. package/src/components/index.ts +7 -8
  267. package/src/events.ts +6 -6
  268. package/src/helpers/index.ts +5 -0
  269. package/src/helpers/query.test.ts +24 -0
  270. package/src/helpers/query.ts +158 -0
  271. package/src/hooks/index.ts +1 -0
  272. package/src/hooks/useActiveSpace.ts +3 -2
  273. package/src/hooks/useInputSurfaceLookup.tsx +8 -3
  274. package/src/hooks/usePath.ts +1 -1
  275. package/src/hooks/useTypeOptions.ts +59 -0
  276. package/src/index.ts +1 -0
  277. package/src/meta.ts +6 -3
  278. package/src/translations.ts +26 -10
  279. package/src/types/types.ts +42 -23
  280. package/src/util.tsx +183 -62
  281. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
  282. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs +0 -88
  283. package/dist/lib/browser/ObjectDetailsPanel-SY6FYTYC.mjs.map +0 -7
  284. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
  285. package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
  286. package/dist/lib/browser/app-graph-builder-VZW75QPJ.mjs.map +0 -7
  287. package/dist/lib/browser/app-graph-serializer-YPHYVZAP.mjs.map +0 -7
  288. package/dist/lib/browser/chunk-3UFG6LQQ.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
  290. package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-DYKFFVN6.mjs +0 -94
  292. package/dist/lib/browser/chunk-DYKFFVN6.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
  294. package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-PSIBVBTA.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-Q5EEPP3S.mjs +0 -20
  297. package/dist/lib/browser/chunk-Q5EEPP3S.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-SMB4DGYO.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-WAXS2ZVX.mjs.map +0 -7
  300. package/dist/lib/browser/identity-created-T6ZNVE7S.mjs.map +0 -7
  301. package/dist/lib/browser/intent-resolver-TS6CCKST.mjs.map +0 -7
  302. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs +0 -29
  303. package/dist/lib/browser/react-root-RQGTZ2ZO.mjs.map +0 -7
  304. package/dist/lib/browser/react-surface-V3ARS2BP.mjs.map +0 -7
  305. package/dist/lib/browser/schema-defs-5LBA43X5.mjs.map +0 -7
  306. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs +0 -124
  307. package/dist/lib/browser/schema-tools-LPL35WOJ.mjs.map +0 -7
  308. package/dist/lib/browser/spaces-ready-FXEP6XEW.mjs.map +0 -7
  309. package/dist/lib/browser/state-K3UBPKYP.mjs.map +0 -7
  310. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
  311. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs +0 -89
  312. package/dist/lib/node-esm/ObjectDetailsPanel-3MYLTMXN.mjs.map +0 -7
  313. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
  314. package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
  315. package/dist/lib/node-esm/app-graph-builder-XNVQOJLE.mjs.map +0 -7
  316. package/dist/lib/node-esm/app-graph-serializer-PKVLWV6V.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs +0 -21
  318. package/dist/lib/node-esm/chunk-7MZ3J3LI.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-CTQMR7E3.mjs.map +0 -7
  320. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
  321. package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
  322. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs +0 -15
  323. package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
  324. package/dist/lib/node-esm/chunk-HYIZVPOA.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs +0 -96
  326. package/dist/lib/node-esm/chunk-KLG4Y4GY.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-KYUHPPRN.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-S7MKRQHY.mjs.map +0 -7
  329. package/dist/lib/node-esm/identity-created-AL7NNCKH.mjs.map +0 -7
  330. package/dist/lib/node-esm/intent-resolver-W6P27SCF.mjs.map +0 -7
  331. package/dist/lib/node-esm/react-root-N27KETKT.mjs.map +0 -7
  332. package/dist/lib/node-esm/react-surface-TNPAUQCM.mjs.map +0 -7
  333. package/dist/lib/node-esm/schema-defs-TPWZPDCR.mjs.map +0 -7
  334. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs +0 -126
  335. package/dist/lib/node-esm/schema-tools-PJE2FKWH.mjs.map +0 -7
  336. package/dist/lib/node-esm/spaces-ready-PQLLIO5W.mjs.map +0 -7
  337. package/dist/lib/node-esm/state-4M5A6OSB.mjs.map +0 -7
  338. package/dist/types/src/capabilities/schema-tool.test.d.ts +0 -2
  339. package/dist/types/src/capabilities/schema-tool.test.d.ts.map +0 -1
  340. package/dist/types/src/capabilities/schema-tools.d.ts +0 -13
  341. package/dist/types/src/capabilities/schema-tools.d.ts.map +0 -1
  342. package/dist/types/src/components/CollectionMain.d.ts +0 -7
  343. package/dist/types/src/components/CollectionMain.d.ts.map +0 -1
  344. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  345. package/dist/types/src/components/MembersContainer.d.ts.map +0 -1
  346. package/dist/types/src/components/MembersContainer.stories.d.ts +0 -8
  347. package/dist/types/src/components/MembersContainer.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
  349. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
  350. package/dist/types/src/components/PersistenceStatus.d.ts +0 -6
  351. package/dist/types/src/components/PersistenceStatus.d.ts.map +0 -1
  352. package/dist/types/src/components/PopoverRenameObject.d.ts +0 -7
  353. package/dist/types/src/components/PopoverRenameObject.d.ts.map +0 -1
  354. package/dist/types/src/components/PopoverRenameSpace.d.ts +0 -7
  355. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +0 -1
  356. package/dist/types/src/components/RecordMain.d.ts +0 -7
  357. package/dist/types/src/components/RecordMain.d.ts.map +0 -1
  358. package/dist/types/src/components/SpacePresence.d.ts.map +0 -1
  359. package/dist/types/src/components/SpacePresence.stories.d.ts +0 -9
  360. package/dist/types/src/components/SpacePresence.stories.d.ts.map +0 -1
  361. package/src/capabilities/schema-tool.test.ts +0 -44
  362. package/src/capabilities/schema-tools.ts +0 -125
  363. package/src/components/MembersContainer.stories.tsx +0 -31
  364. package/src/components/ObjectDetailsPanel.tsx +0 -77
  365. package/src/components/PersistenceStatus.tsx +0 -83
  366. package/src/components/RecordMain.tsx +0 -43
@@ -2,55 +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
18
  import { translations } from '../../translations';
19
19
 
20
20
  import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
21
21
 
22
- const Story = (args: CreateObjectDialogProps) => {
22
+ const Story = (props: CreateObjectDialogProps) => {
23
23
  return (
24
24
  <Dialog.Root open>
25
25
  <Dialog.Overlay blockAlign='start'>
26
- <CreateObjectDialog {...args} />
26
+ <CreateObjectDialog {...props} />
27
27
  </Dialog.Overlay>
28
28
  </Dialog.Root>
29
29
  );
30
30
  };
31
31
 
32
32
  // TODO(wittjosiah): Story should be for CreateObjectPanel.
33
- const meta: Meta<typeof CreateObjectDialog> = {
33
+ const meta = {
34
34
  title: 'plugins/plugin-space/CreateObjectDialog',
35
35
  component: CreateObjectDialog,
36
36
  render: Story,
37
37
  decorators: [
38
- withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
39
- withTheme,
40
- withLayout(),
38
+ withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
39
+ withPluginManager({ plugins: [IntentPlugin()] }),
40
+ withClientProvider({ createIdentity: true, createSpace: true, types: [Collection.Collection] }),
41
41
  ],
42
42
  parameters: {
43
43
  translations: [...translations, ...shellTranslations],
44
44
  },
45
45
  args: {},
46
- };
46
+ } satisfies Meta<typeof CreateObjectDialog>;
47
47
 
48
48
  export default meta;
49
49
 
50
50
  export const Default: StoryObj<typeof CreateObjectDialog> = {};
51
51
 
52
52
  export const Typename: StoryObj<typeof CreateObjectDialog> = {
53
- args: { typename: Type.getTypename(DataType.Collection) },
53
+ args: { typename: Collection.Collection.typename },
54
54
  };
55
55
 
56
56
  export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
@@ -68,11 +68,11 @@ export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
68
68
  export const TargetCollection: StoryObj<typeof CreateObjectDialog> = {
69
69
  render: (args) => {
70
70
  const space = useSpace();
71
- const [collection] = useQuery(space, Filter.type(DataType.Collection));
71
+ const [collection] = useQuery(space, Filter.type(Collection.Collection));
72
72
 
73
73
  useEffect(() => {
74
74
  if (space) {
75
- space.db.add(Obj.make(DataType.Collection, { name: 'My Collection', objects: [] }));
75
+ space.db.add(Obj.make(Collection.Collection, { name: 'My Collection', objects: [] }));
76
76
  }
77
77
  }, [space]);
78
78
 
@@ -2,36 +2,33 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Effect, 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';
9
+ import { Capabilities, LayoutAction, chain, createIntent } from '@dxos/app-framework';
10
+ import { useCapabilities, useIntentDispatcher, usePluginManager } from '@dxos/app-framework/react';
17
11
  import { Obj, Query, Type } from '@dxos/echo';
18
12
  import { invariant } from '@dxos/invariant';
19
13
  import { useClient } from '@dxos/react-client';
20
14
  import { type Space, getSpace, isLiveObject, isSpace, useQuery, useSpaces } from '@dxos/react-client/echo';
21
- import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
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
20
  import { SpaceCapabilities } from '../../capabilities';
27
- import { SPACE_PLUGIN } from '../../meta';
21
+ import { meta } from '../../meta';
28
22
  import { SpaceAction } from '../../types';
29
23
 
30
24
  import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
31
25
 
32
- export const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
26
+ export const CREATE_OBJECT_DIALOG = `${meta.id}/CreateObjectDialog`;
33
27
 
34
- export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {
28
+ export type CreateObjectDialogProps = Pick<
29
+ CreateObjectPanelProps,
30
+ 'target' | 'views' | 'typename' | 'initialFormValues'
31
+ > & {
35
32
  onCreateObject?: (object: Obj.Any) => void;
36
33
  shouldNavigate?: (object: Obj.Any) => boolean;
37
34
  };
@@ -39,22 +36,25 @@ export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 't
39
36
  export const CreateObjectDialog = ({
40
37
  target: initialTarget,
41
38
  typename: initialTypename,
42
- name,
39
+ views,
40
+ initialFormValues,
43
41
  onCreateObject,
44
42
  shouldNavigate: _shouldNavigate,
45
43
  }: CreateObjectDialogProps) => {
46
- const closeRef = useRef<HTMLButtonElement | null>(null);
47
44
  const manager = usePluginManager();
48
- const { t } = useTranslation(SPACE_PLUGIN);
49
- const client = useClient();
50
- const spaces = useSpaces();
45
+ const { t } = useTranslation(meta.id);
51
46
  const { dispatch } = useIntentDispatcher();
52
47
  const forms = useCapabilities(SpaceCapabilities.ObjectForm);
53
- const [target, setTarget] = useState<Space | DataType.Collection | undefined>(initialTarget);
48
+ const [target, setTarget] = useState<Space | Collection.Collection | undefined>(initialTarget);
54
49
  const [typename, setTypename] = useState<string | undefined>(initialTypename);
50
+ const client = useClient();
51
+ const spaces = useSpaces();
55
52
  const space = isSpace(target) ? target : getSpace(target);
56
- const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
57
- 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);
58
58
 
59
59
  const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
60
60
  (typename) =>
@@ -76,13 +76,17 @@ export const CreateObjectDialog = ({
76
76
  const space = isSpace(target) ? target : getSpace(target);
77
77
  invariant(space, 'Missing space');
78
78
  const { object } = yield* dispatch(form.getIntent(data, { space }));
79
- if (isLiveObject(object) && !Obj.instanceOf(DataType.StoredSchema, object)) {
79
+ if (isLiveObject(object) && !Obj.instanceOf(StoredSchema, object)) {
80
80
  // TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
81
81
  const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
82
- const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object, hidden });
82
+ const addObjectIntent = createIntent(SpaceAction.AddObject, {
83
+ target,
84
+ object,
85
+ hidden,
86
+ });
83
87
  const shouldNavigate = _shouldNavigate ?? (() => true);
84
88
  if (shouldNavigate(object)) {
85
- yield* dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
89
+ yield* dispatch(Function.pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
86
90
  } else {
87
91
  yield* dispatch(addObjectIntent);
88
92
  }
@@ -99,12 +103,24 @@ export const CreateObjectDialog = ({
99
103
  <Dialog.Content classNames={cardDialogContent}>
100
104
  <div role='none' className={cardDialogHeader}>
101
105
  <Dialog.Title>
102
- {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
+ })}
103
112
  </Dialog.Title>
104
113
  <Dialog.Close asChild>
105
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
106
- <Icon icon='ph--x--regular' size={4} />
107
- </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
+ />
108
124
  </Dialog.Close>
109
125
  </div>
110
126
 
@@ -112,8 +128,9 @@ export const CreateObjectDialog = ({
112
128
  forms={forms}
113
129
  spaces={spaces}
114
130
  target={target}
131
+ views={views}
115
132
  typename={typename}
116
- name={name}
133
+ initialFormValues={initialFormValues}
117
134
  defaultSpaceId={client.spaces.default.id}
118
135
  resolve={resolve}
119
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 { type TypeAnnotation, getTypeAnnotation } from '@dxos/echo-schema';
9
+ import { type BaseObject, type TypeAnnotation, ViewAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
9
10
  import { type Space, type SpaceId } from '@dxos/react-client/echo';
10
- import { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
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 { type Collection } from '@dxos/schema';
15
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 { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
9
- import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
9
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
10
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
11
+ import { Dialog, IconButton, useTranslation } from '@dxos/react-ui';
10
12
  import { Form } from '@dxos/react-ui-form';
11
13
  import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
12
14
 
13
15
  import { useInputSurfaceLookup } from '../../hooks';
14
- import { SPACE_PLUGIN } from '../../meta';
16
+ import { meta } from '../../meta';
15
17
  import { SpaceAction, SpaceForm } from '../../types';
16
18
 
17
- export const CREATE_SPACE_DIALOG = `${SPACE_PLUGIN}/CreateSpaceDialog`;
19
+ export const CREATE_SPACE_DIALOG = `${meta.id}/CreateSpaceDialog`;
18
20
 
19
21
  type FormValues = Schema.Schema.Type<typeof SpaceForm>;
20
22
  const initialValues: FormValues = { edgeReplication: true };
21
23
 
22
24
  export const CreateSpaceDialog = () => {
23
25
  const closeRef = useRef<HTMLButtonElement | null>(null);
24
- const { t } = useTranslation(SPACE_PLUGIN);
26
+ const { t } = useTranslation(meta.id);
25
27
  const { dispatch } = useIntentDispatcher();
26
28
 
27
29
  const inputSurfaceLookup = useInputSurfaceLookup();
@@ -30,8 +32,18 @@ export const CreateSpaceDialog = () => {
30
32
  async (data: FormValues) => {
31
33
  const program = Effect.gen(function* () {
32
34
  const { space } = yield* dispatch(createIntent(SpaceAction.Create, data));
33
- yield* dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
34
- yield* dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));
35
+ yield* dispatch(
36
+ createIntent(LayoutAction.SwitchWorkspace, {
37
+ part: 'workspace',
38
+ subject: space.id,
39
+ }),
40
+ );
41
+ yield* dispatch(
42
+ createIntent(LayoutAction.UpdateDialog, {
43
+ part: 'dialog',
44
+ options: { state: false },
45
+ }),
46
+ );
35
47
  });
36
48
  await Effect.runPromise(program);
37
49
  },
@@ -45,9 +57,16 @@ export const CreateSpaceDialog = () => {
45
57
  <div role='none' className={cardDialogHeader}>
46
58
  <Dialog.Title>{t('create space dialog title')}</Dialog.Title>
47
59
  <Dialog.Close asChild>
48
- <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
49
- <Icon icon='ph--x--regular' size={4} />
50
- </Button>
60
+ <IconButton
61
+ ref={closeRef}
62
+ icon='ph--x--regular'
63
+ size={4}
64
+ label='Close'
65
+ iconOnly
66
+ density='fine'
67
+ variant='ghost'
68
+ autoFocus
69
+ />
51
70
  </Dialog.Close>
52
71
  </div>
53
72
  <div role='none' className='contents'>
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { LayoutAction, createIntent, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { LayoutAction, createIntent } from '@dxos/app-framework';
8
+ import { useAppGraph, useIntentDispatcher } from '@dxos/app-framework/react';
8
9
  import { Trigger } from '@dxos/async';
9
10
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
10
11
  import { useClient } from '@dxos/react-client';
@@ -13,9 +14,9 @@ import { type InvitationResult } from '@dxos/react-client/invitations';
13
14
  import { Dialog, useTranslation } from '@dxos/react-ui';
14
15
  import { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';
15
16
 
16
- import { SPACE_PLUGIN } from '../meta';
17
+ import { meta } from '../../meta';
17
18
 
18
- export const JOIN_DIALOG = `${SPACE_PLUGIN}/JoinDialog`;
19
+ export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
19
20
 
20
21
  export type JoinDialogProps = JoinPanelProps & {
21
22
  navigableCollections?: boolean;
@@ -25,7 +26,7 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
25
26
  const { dispatchPromise: dispatch } = useIntentDispatcher();
26
27
  const client = useClient();
27
28
  const { graph } = useAppGraph();
28
- const { t } = useTranslation(SPACE_PLUGIN);
29
+ const { t } = useTranslation(meta.id);
29
30
 
30
31
  const handleDone = useCallback(
31
32
  async (result: InvitationResult | null) => {
@@ -39,10 +40,10 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
39
40
  createIntent(LayoutAction.AddToast, {
40
41
  part: 'toast',
41
42
  subject: {
42
- id: `${SPACE_PLUGIN}/join-success`,
43
+ id: `${meta.id}/join-success`,
43
44
  duration: 5_000,
44
- title: ['join success label', { ns: SPACE_PLUGIN }],
45
- closeLabel: ['dismiss label', { ns: SPACE_PLUGIN }],
45
+ title: ['join success label', { ns: meta.id }],
46
+ closeLabel: ['dismiss label', { ns: meta.id }],
46
47
  },
47
48
  }),
48
49
  ),
@@ -69,7 +70,12 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
69
70
  space = await trigger.wait();
70
71
  }
71
72
 
72
- await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
73
+ await dispatch(
74
+ createIntent(LayoutAction.SwitchWorkspace, {
75
+ part: 'workspace',
76
+ subject: space.id,
77
+ }),
78
+ );
73
79
 
74
80
  // TODO(wittjosiah): If navigableCollections is false and there's no target,
75
81
  // should try to navigate to the first object of the space replicates.
@@ -80,8 +86,18 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
80
86
  // If the target has not yet replicated, this will trigger a loading toast.
81
87
  await graph.waitForPath({ target }).catch(() => {});
82
88
  await Promise.all([
83
- dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [target] })),
84
- dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: target })),
89
+ dispatch(
90
+ createIntent(LayoutAction.Open, {
91
+ part: 'main',
92
+ subject: [target],
93
+ }),
94
+ ),
95
+ dispatch(
96
+ createIntent(LayoutAction.Expose, {
97
+ part: 'navigation',
98
+ subject: target,
99
+ }),
100
+ ),
85
101
  ]);
86
102
  }
87
103
 
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './JoinDialog';
@@ -0,0 +1,56 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { useSpace } from '@dxos/react-client/echo';
11
+ import { withClientProvider } from '@dxos/react-client/testing';
12
+ import { withTheme } from '@dxos/react-ui/testing';
13
+ import { translations as shellTranslations } from '@dxos/shell/react';
14
+ import { render } from '@dxos/storybook-utils';
15
+
16
+ import { translations } from '../../translations';
17
+
18
+ import { MembersContainer } from './MembersContainer';
19
+
20
+ const DefaultStory = () => {
21
+ const space = useSpace();
22
+ if (!space) {
23
+ return null;
24
+ }
25
+
26
+ return (
27
+ <MembersContainer
28
+ space={space}
29
+ createInvitationUrl={(invitationCode) => `https://dxos.org/invite/${invitationCode}`}
30
+ />
31
+ );
32
+ };
33
+
34
+ const meta = {
35
+ title: 'plugins/plugin-space/MembersContainer',
36
+ component: MembersContainer as any,
37
+ render: render(DefaultStory),
38
+ decorators: [
39
+ withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
40
+ withPluginManager({ plugins: [IntentPlugin()] }),
41
+ withClientProvider({
42
+ createIdentity: true,
43
+ createSpace: true,
44
+ }),
45
+ ],
46
+ parameters: {
47
+ layout: 'fullscreen',
48
+ translations: [...translations, ...shellTranslations],
49
+ },
50
+ } satisfies Meta<typeof DefaultStory>;
51
+
52
+ export default meta;
53
+
54
+ type Story = StoryObj<typeof meta>;
55
+
56
+ export const Default: Story = {};
@@ -5,15 +5,17 @@
5
5
  import React, { type Dispatch, type SetStateAction, useCallback, useMemo, useState } from 'react';
6
6
  import { QR } from 'react-qr-rounded';
7
7
 
8
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { createIntent } from '@dxos/app-framework';
9
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
10
+ import { Obj } from '@dxos/echo';
9
11
  import { log } from '@dxos/log';
10
12
  import { useConfig } from '@dxos/react-client';
11
- import { type Space, fullyQualifiedId, useSpaceInvitations } from '@dxos/react-client/echo';
13
+ import { type Space, useSpaceInvitations } from '@dxos/react-client/echo';
12
14
  import { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
13
15
  import { Button, Clipboard, Icon, Input, useId, useTranslation } from '@dxos/react-ui';
14
16
  import { ControlFrame, ControlFrameItem, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
15
17
  import { StackItem } from '@dxos/react-ui-stack';
16
- import { DataType } from '@dxos/schema';
18
+ import { Collection } from '@dxos/schema';
17
19
  import {
18
20
  type ActionMenuItem,
19
21
  AuthCode,
@@ -26,9 +28,9 @@ import {
26
28
  } from '@dxos/shell/react';
27
29
  import { hexToEmoji } from '@dxos/util';
28
30
 
29
- import { SPACE_PLUGIN } from '../meta';
30
- import { SpaceAction } from '../types';
31
- import { COMPOSER_SPACE_LOCK } from '../util';
31
+ import { meta } from '../../meta';
32
+ import { SpaceAction } from '../../types';
33
+ import { COMPOSER_SPACE_LOCK } from '../../util';
32
34
 
33
35
  // TODO(wittjosiah): Copied from Shell.
34
36
  const activeActionKey = 'dxos:react-shell/space-manager/active-action';
@@ -41,14 +43,13 @@ const handleInvitationEvent = (invitation: Invitation, subscription: ZenObservab
41
43
  }
42
44
  };
43
45
 
44
- export const MembersContainer = ({
45
- space,
46
- createInvitationUrl,
47
- }: {
46
+ export type MembersContainerProps = {
48
47
  space: Space;
49
48
  createInvitationUrl: (invitationCode: string) => string;
50
- }) => {
51
- const { t } = useTranslation(SPACE_PLUGIN);
49
+ };
50
+
51
+ export const MembersContainer = ({ space, createInvitationUrl }: MembersContainerProps) => {
52
+ const { t } = useTranslation(meta.id);
52
53
  const config = useConfig();
53
54
  const { dispatchPromise: dispatch } = useIntentDispatcher();
54
55
  const invitations = useSpaceInvitations(space.key);
@@ -64,7 +65,7 @@ export const MembersContainer = ({
64
65
  };
65
66
 
66
67
  // TODO(wittjosiah): Track which was the most recently viewed object.
67
- const target = space.properties[DataType.Collection.typename]?.target?.objects[0]?.target;
68
+ const target = space.properties[Collection.Collection.typename]?.target?.objects[0]?.target;
68
69
 
69
70
  const locked = space.properties[COMPOSER_SPACE_LOCK];
70
71
  const handleChangeLocked = useCallback(() => {
@@ -76,7 +77,7 @@ export const MembersContainer = ({
76
77
  inviteOne: {
77
78
  label: t('invite one label', { ns: 'os' }),
78
79
  description: t('invite one description', { ns: 'os' }),
79
- icon: () => <Icon icon='ph--user-plus--regular' size={5} />,
80
+ icon: 'ph--user-plus--regular',
80
81
  testId: 'membersContainer.inviteOne',
81
82
  onClick: async () => {
82
83
  const { data: invitation } = await dispatch(
@@ -85,7 +86,7 @@ export const MembersContainer = ({
85
86
  type: Invitation.Type.INTERACTIVE,
86
87
  authMethod: Invitation.AuthMethod.SHARED_SECRET,
87
88
  multiUse: false,
88
- target: target && fullyQualifiedId(target),
89
+ target: target && Obj.getDXN(target).toString(),
89
90
  }),
90
91
  );
91
92
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
@@ -98,7 +99,7 @@ export const MembersContainer = ({
98
99
  inviteMany: {
99
100
  label: t('invite many label', { ns: 'os' }),
100
101
  description: t('invite many description', { ns: 'os' }),
101
- icon: () => <Icon icon='ph--users-three--regular' size={5} />,
102
+ icon: 'ph--users-three--regular',
102
103
  testId: 'membersContainer.inviteMany',
103
104
  onClick: async () => {
104
105
  const { data: invitation } = await dispatch(
@@ -107,7 +108,7 @@ export const MembersContainer = ({
107
108
  type: Invitation.Type.DELEGATED,
108
109
  authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,
109
110
  multiUse: true,
110
- target: target && fullyQualifiedId(target),
111
+ target: target && Obj.getDXN(target).toString(),
111
112
  }),
112
113
  );
113
114
  if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {
@@ -131,7 +132,7 @@ export const MembersContainer = ({
131
132
 
132
133
  return (
133
134
  <Clipboard.Provider>
134
- <StackItem.Content classNames='block overflow-y-auto'>
135
+ <StackItem.Content scrollable>
135
136
  <ControlPage>
136
137
  <ControlSection title={t('members verbose label')} description={t('members description')}>
137
138
  <ControlFrame>
@@ -168,7 +169,7 @@ export const MembersContainer = ({
168
169
  )}
169
170
  </ControlFrame>
170
171
  {/* TODO(wittjosiah): Make ControlItemInput & ControlFrame compatible. */}
171
- <div className='justify-center gap-4 p-0 mbs-4 container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>
172
+ <div className='justify-center p-0 mbs-4 container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'>
172
173
  <ControlItemInput title={t('space locked label')} description={t('space locked description')}>
173
174
  <Input.Switch checked={locked} onCheckedChange={handleChangeLocked} classNames='justify-self-end' />
174
175
  </ControlItemInput>
@@ -231,7 +232,7 @@ const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel
231
232
  const emoji = hexToEmoji(id);
232
233
  return (
233
234
  <>
234
- <p className='text-description'>{t('qr code description', { ns: SPACE_PLUGIN })}</p>
235
+ <p className='text-description'>{t('qr code description', { ns: meta.id })}</p>
235
236
  <div role='group' className='grid grid-cols-[1fr_min-content] mlb-2 gap-2'>
236
237
  <div role='none' className='is-full aspect-square relative text-description'>
237
238
  <QR
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './MembersContainer';