@dxos/plugin-space 0.8.3-main.672df60 → 0.8.3-staging.0fa589b

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 (237) hide show
  1. package/dist/lib/browser/{app-graph-builder-DCWUULKX.mjs → app-graph-builder-M2RH72VL.mjs} +49 -14
  2. package/dist/lib/browser/app-graph-builder-M2RH72VL.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-MLU7XI2P.mjs → app-graph-serializer-F7ISRRBV.mjs} +13 -13
  4. package/dist/lib/browser/app-graph-serializer-F7ISRRBV.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-VEBKN45O.mjs → chunk-4ZKSFDXM.mjs} +29 -17
  6. package/dist/lib/browser/chunk-4ZKSFDXM.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-3LN4LJN6.mjs → chunk-BXNL6SDI.mjs} +2 -1
  8. package/dist/lib/browser/chunk-BXNL6SDI.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-ZQEIXWBK.mjs → chunk-NFUKCRGE.mjs} +157 -141
  10. package/dist/lib/browser/chunk-NFUKCRGE.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-TW7O2EPP.mjs +284 -0
  12. package/dist/lib/browser/chunk-TW7O2EPP.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-N5QMRLKI.mjs → chunk-V24VASAJ.mjs} +112 -43
  14. package/dist/lib/browser/chunk-V24VASAJ.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-YMCZR6EZ.mjs +18 -0
  16. package/dist/lib/browser/chunk-YMCZR6EZ.mjs.map +7 -0
  17. package/dist/lib/browser/{identity-created-O63SIYOF.mjs → identity-created-PI7TKANR.mjs} +5 -10
  18. package/dist/lib/browser/identity-created-PI7TKANR.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +61 -51
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/{intent-resolver-PG473BRV.mjs → intent-resolver-RWU6ZE4H.mjs} +66 -45
  22. package/dist/lib/browser/intent-resolver-RWU6ZE4H.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/{react-root-FRDC4UXB.mjs → react-root-QIKHSNT2.mjs} +5 -5
  25. package/dist/lib/browser/{react-surface-QOP7T66K.mjs → react-surface-W56UD53I.mjs} +79 -19
  26. package/dist/lib/browser/react-surface-W56UD53I.mjs.map +7 -0
  27. package/dist/lib/browser/{schema-defs-JMN74RNK.mjs → schema-defs-WREJNMIC.mjs} +2 -2
  28. package/dist/lib/browser/{schema-tools-JIEMHUXV.mjs → schema-tools-ILTVSSS3.mjs} +7 -6
  29. package/dist/lib/browser/schema-tools-ILTVSSS3.mjs.map +7 -0
  30. package/dist/lib/browser/{settings-2IN2WLUK.mjs → settings-K54STC5A.mjs} +4 -4
  31. package/dist/lib/browser/settings-K54STC5A.mjs.map +7 -0
  32. package/dist/lib/browser/{spaces-ready-L4QAGTDE.mjs → spaces-ready-3PDRDHPC.mjs} +12 -13
  33. package/dist/lib/browser/spaces-ready-3PDRDHPC.mjs.map +7 -0
  34. package/dist/lib/browser/{state-6HOSHLIN.mjs → state-HRZ4VRXU.mjs} +2 -2
  35. package/dist/lib/browser/types/index.mjs +1 -3
  36. package/dist/lib/node/{app-graph-builder-WC445X77.cjs → app-graph-builder-6LK5HLLE.cjs} +79 -43
  37. package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs.map +7 -0
  38. package/dist/lib/node/{app-graph-serializer-UPQOQVMJ.cjs → app-graph-serializer-HKHBNHA3.cjs} +24 -23
  39. package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs.map +7 -0
  40. package/dist/lib/node/chunk-3X4EA4XL.cjs +37 -0
  41. package/dist/lib/node/chunk-3X4EA4XL.cjs.map +7 -0
  42. package/dist/lib/node/{chunk-DXL5TDFP.cjs → chunk-DOC5XEZ4.cjs} +32 -18
  43. package/dist/lib/node/chunk-DOC5XEZ4.cjs.map +7 -0
  44. package/dist/lib/node/{chunk-USFHJG7C.cjs → chunk-NCHF433F.cjs} +207 -190
  45. package/dist/lib/node/chunk-NCHF433F.cjs.map +7 -0
  46. package/dist/lib/node/{chunk-7GQGM4ZF.cjs → chunk-NL5Y4EDX.cjs} +5 -4
  47. package/dist/lib/node/chunk-NL5Y4EDX.cjs.map +7 -0
  48. package/dist/lib/node/chunk-ULJZPATP.cjs +312 -0
  49. package/dist/lib/node/chunk-ULJZPATP.cjs.map +7 -0
  50. package/dist/lib/node/{chunk-COQYISES.cjs → chunk-XHWVT7LW.cjs} +137 -67
  51. package/dist/lib/node/chunk-XHWVT7LW.cjs.map +7 -0
  52. package/dist/lib/node/{identity-created-UXEAUGC7.cjs → identity-created-FF4WZ2WY.cjs} +8 -10
  53. package/dist/lib/node/identity-created-FF4WZ2WY.cjs.map +7 -0
  54. package/dist/lib/node/index.cjs +130 -119
  55. package/dist/lib/node/index.cjs.map +4 -4
  56. package/dist/lib/node/{intent-resolver-VPVZSSIL.cjs → intent-resolver-AV4CMM3Z.cjs} +99 -79
  57. package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs.map +7 -0
  58. package/dist/lib/node/meta.json +1 -1
  59. package/dist/lib/node/{react-root-JXLRINF3.cjs → react-root-RQUU3A45.cjs} +10 -10
  60. package/dist/lib/node/{react-surface-ZIYDBL3C.cjs → react-surface-AZFJLE72.cjs} +119 -58
  61. package/dist/lib/node/react-surface-AZFJLE72.cjs.map +7 -0
  62. package/dist/lib/node/{schema-defs-XLFBG3XK.cjs → schema-defs-OB2X2HBH.cjs} +6 -6
  63. package/dist/lib/node/{schema-tools-ZG6Z2QRC.cjs → schema-tools-IYREN4IH.cjs} +9 -8
  64. package/dist/lib/node/schema-tools-IYREN4IH.cjs.map +7 -0
  65. package/dist/lib/node/{settings-FOH7EB5C.cjs → settings-P2EQ7VKQ.cjs} +7 -7
  66. package/dist/lib/node/settings-P2EQ7VKQ.cjs.map +7 -0
  67. package/dist/lib/node/{spaces-ready-VXQYCBII.cjs → spaces-ready-DXPOHYV7.cjs} +26 -27
  68. package/dist/lib/node/spaces-ready-DXPOHYV7.cjs.map +7 -0
  69. package/dist/lib/node/{state-ZT3MTZXB.cjs → state-M35DK75Z.cjs} +6 -6
  70. package/dist/lib/node/types/index.cjs +11 -13
  71. package/dist/lib/node/types/index.cjs.map +2 -2
  72. package/dist/lib/node-esm/{app-graph-builder-E7CCGPQJ.mjs → app-graph-builder-BCHVZ4OM.mjs} +49 -14
  73. package/dist/lib/node-esm/app-graph-builder-BCHVZ4OM.mjs.map +7 -0
  74. package/dist/lib/node-esm/{app-graph-serializer-UCMSLPIA.mjs → app-graph-serializer-TXRGGNP2.mjs} +13 -13
  75. package/dist/lib/node-esm/app-graph-serializer-TXRGGNP2.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-3CP67AYY.mjs +19 -0
  77. package/dist/lib/node-esm/chunk-3CP67AYY.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-4X4Y63ND.mjs → chunk-BSLREHIX.mjs} +2 -1
  79. package/dist/lib/node-esm/chunk-BSLREHIX.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-D4QMPPS7.mjs +285 -0
  81. package/dist/lib/node-esm/chunk-D4QMPPS7.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-XAZNQ3QN.mjs → chunk-HO7AIKQS.mjs} +112 -43
  83. package/dist/lib/node-esm/chunk-HO7AIKQS.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-OSPEGYX3.mjs → chunk-JBQKU4K5.mjs} +29 -17
  85. package/dist/lib/node-esm/chunk-JBQKU4K5.mjs.map +7 -0
  86. package/dist/lib/node-esm/{chunk-BE2BLE7K.mjs → chunk-LA6AVVH6.mjs} +157 -141
  87. package/dist/lib/node-esm/chunk-LA6AVVH6.mjs.map +7 -0
  88. package/dist/lib/node-esm/{identity-created-ZECO4NH3.mjs → identity-created-35CTAQWI.mjs} +5 -9
  89. package/dist/lib/node-esm/identity-created-35CTAQWI.mjs.map +7 -0
  90. package/dist/lib/node-esm/index.mjs +61 -51
  91. package/dist/lib/node-esm/index.mjs.map +4 -4
  92. package/dist/lib/node-esm/{intent-resolver-SK5LP5ZK.mjs → intent-resolver-JO6L2VXC.mjs} +66 -45
  93. package/dist/lib/node-esm/intent-resolver-JO6L2VXC.mjs.map +7 -0
  94. package/dist/lib/node-esm/meta.json +1 -1
  95. package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs → react-root-YFGL3B4J.mjs} +5 -5
  96. package/dist/lib/node-esm/{react-surface-XNUWZCSH.mjs → react-surface-CVAPDLEZ.mjs} +79 -19
  97. package/dist/lib/node-esm/react-surface-CVAPDLEZ.mjs.map +7 -0
  98. package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs → schema-defs-4MEJETVX.mjs} +2 -2
  99. package/dist/lib/node-esm/{schema-tools-2Y4D42PD.mjs → schema-tools-SRLCRZ3B.mjs} +7 -6
  100. package/dist/lib/node-esm/schema-tools-SRLCRZ3B.mjs.map +7 -0
  101. package/dist/lib/node-esm/{settings-Q4XDFSYD.mjs → settings-TD76LTQS.mjs} +4 -4
  102. package/dist/lib/node-esm/settings-TD76LTQS.mjs.map +7 -0
  103. package/dist/lib/node-esm/{spaces-ready-JHKPD4PH.mjs → spaces-ready-FJMGPAVV.mjs} +12 -13
  104. package/dist/lib/node-esm/spaces-ready-FJMGPAVV.mjs.map +7 -0
  105. package/dist/lib/node-esm/{state-4ATRHSKA.mjs → state-XQNDCN37.mjs} +2 -2
  106. package/dist/lib/node-esm/types/index.mjs +1 -3
  107. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/capabilities.d.ts +8 -1
  111. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  118. package/dist/types/src/components/CollectionMain.d.ts +2 -2
  119. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  120. package/dist/types/src/components/CollectionSection.d.ts +2 -2
  121. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  122. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
  123. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  124. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +8 -7
  126. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  127. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  128. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  129. package/dist/types/src/components/MenuFooter.d.ts +2 -2
  130. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  131. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts +2 -2
  132. package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
  134. package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
  135. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +2 -2
  136. package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
  137. package/dist/types/src/components/SchemaContainer.d.ts +2 -2
  138. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  139. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  140. package/dist/types/src/components/SpacePresence.d.ts +2 -2
  141. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  142. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  143. package/dist/types/src/events.d.ts +1 -3
  144. package/dist/types/src/events.d.ts.map +1 -1
  145. package/dist/types/src/translations.d.ts +275 -2
  146. package/dist/types/src/translations.d.ts.map +1 -1
  147. package/dist/types/src/types/index.d.ts +0 -1
  148. package/dist/types/src/types/index.d.ts.map +1 -1
  149. package/dist/types/src/types/types.d.ts +81 -12
  150. package/dist/types/src/types/types.d.ts.map +1 -1
  151. package/dist/types/src/util.d.ts +16 -11
  152. package/dist/types/src/util.d.ts.map +1 -1
  153. package/package.json +45 -45
  154. package/src/{SpacePlugin.tsx → SpacePlugin.ts} +30 -10
  155. package/src/capabilities/app-graph-builder.ts +74 -20
  156. package/src/capabilities/app-graph-serializer.ts +11 -8
  157. package/src/capabilities/capabilities.ts +6 -1
  158. package/src/capabilities/identity-created.ts +5 -4
  159. package/src/capabilities/intent-resolver.ts +60 -36
  160. package/src/capabilities/react-surface.tsx +105 -29
  161. package/src/capabilities/schema-tools.ts +3 -2
  162. package/src/capabilities/settings.ts +6 -2
  163. package/src/capabilities/spaces-ready.ts +7 -8
  164. package/src/components/CollectionMain.tsx +3 -3
  165. package/src/components/CollectionSection.tsx +2 -2
  166. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +7 -6
  167. package/src/components/CreateDialog/CreateObjectDialog.tsx +31 -25
  168. package/src/components/CreateDialog/CreateObjectPanel.tsx +45 -52
  169. package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -5
  170. package/src/components/MembersContainer.tsx +4 -2
  171. package/src/components/MenuFooter.tsx +3 -2
  172. package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +12 -4
  173. package/src/components/ObjectSettings/BaseObjectSettings.tsx +7 -7
  174. package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -4
  175. package/src/components/SchemaContainer.tsx +3 -3
  176. package/src/components/SpacePluginSettings.tsx +24 -19
  177. package/src/components/SpacePresence.tsx +22 -15
  178. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +2 -1
  179. package/src/events.ts +1 -5
  180. package/src/translations.ts +30 -14
  181. package/src/types/index.ts +0 -1
  182. package/src/types/types.ts +32 -11
  183. package/src/util.tsx +136 -57
  184. package/dist/lib/browser/app-graph-builder-DCWUULKX.mjs.map +0 -7
  185. package/dist/lib/browser/app-graph-serializer-MLU7XI2P.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-3LN4LJN6.mjs.map +0 -7
  187. package/dist/lib/browser/chunk-N5QMRLKI.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-VEBKN45O.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-W46VVHFM.mjs +0 -288
  190. package/dist/lib/browser/chunk-W46VVHFM.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-ZQEIXWBK.mjs.map +0 -7
  192. package/dist/lib/browser/identity-created-O63SIYOF.mjs.map +0 -7
  193. package/dist/lib/browser/intent-resolver-PG473BRV.mjs.map +0 -7
  194. package/dist/lib/browser/react-surface-QOP7T66K.mjs.map +0 -7
  195. package/dist/lib/browser/schema-tools-JIEMHUXV.mjs.map +0 -7
  196. package/dist/lib/browser/settings-2IN2WLUK.mjs.map +0 -7
  197. package/dist/lib/browser/spaces-ready-L4QAGTDE.mjs.map +0 -7
  198. package/dist/lib/node/app-graph-builder-WC445X77.cjs.map +0 -7
  199. package/dist/lib/node/app-graph-serializer-UPQOQVMJ.cjs.map +0 -7
  200. package/dist/lib/node/chunk-7GQGM4ZF.cjs.map +0 -7
  201. package/dist/lib/node/chunk-COQYISES.cjs.map +0 -7
  202. package/dist/lib/node/chunk-DXL5TDFP.cjs.map +0 -7
  203. package/dist/lib/node/chunk-FXHI7JNY.cjs +0 -315
  204. package/dist/lib/node/chunk-FXHI7JNY.cjs.map +0 -7
  205. package/dist/lib/node/chunk-USFHJG7C.cjs.map +0 -7
  206. package/dist/lib/node/identity-created-UXEAUGC7.cjs.map +0 -7
  207. package/dist/lib/node/intent-resolver-VPVZSSIL.cjs.map +0 -7
  208. package/dist/lib/node/react-surface-ZIYDBL3C.cjs.map +0 -7
  209. package/dist/lib/node/schema-tools-ZG6Z2QRC.cjs.map +0 -7
  210. package/dist/lib/node/settings-FOH7EB5C.cjs.map +0 -7
  211. package/dist/lib/node/spaces-ready-VXQYCBII.cjs.map +0 -7
  212. package/dist/lib/node-esm/app-graph-builder-E7CCGPQJ.mjs.map +0 -7
  213. package/dist/lib/node-esm/app-graph-serializer-UCMSLPIA.mjs.map +0 -7
  214. package/dist/lib/node-esm/chunk-4X4Y63ND.mjs.map +0 -7
  215. package/dist/lib/node-esm/chunk-BE2BLE7K.mjs.map +0 -7
  216. package/dist/lib/node-esm/chunk-FTELJGEG.mjs +0 -289
  217. package/dist/lib/node-esm/chunk-FTELJGEG.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-OSPEGYX3.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-XAZNQ3QN.mjs.map +0 -7
  220. package/dist/lib/node-esm/identity-created-ZECO4NH3.mjs.map +0 -7
  221. package/dist/lib/node-esm/intent-resolver-SK5LP5ZK.mjs.map +0 -7
  222. package/dist/lib/node-esm/react-surface-XNUWZCSH.mjs.map +0 -7
  223. package/dist/lib/node-esm/schema-tools-2Y4D42PD.mjs.map +0 -7
  224. package/dist/lib/node-esm/settings-Q4XDFSYD.mjs.map +0 -7
  225. package/dist/lib/node-esm/spaces-ready-JHKPD4PH.mjs.map +0 -7
  226. package/dist/types/src/types/collection.d.ts +0 -15
  227. package/dist/types/src/types/collection.d.ts.map +0 -1
  228. package/src/types/collection.ts +0 -18
  229. /package/dist/lib/browser/{react-root-FRDC4UXB.mjs.map → react-root-QIKHSNT2.mjs.map} +0 -0
  230. /package/dist/lib/browser/{schema-defs-JMN74RNK.mjs.map → schema-defs-WREJNMIC.mjs.map} +0 -0
  231. /package/dist/lib/browser/{state-6HOSHLIN.mjs.map → state-HRZ4VRXU.mjs.map} +0 -0
  232. /package/dist/lib/node/{react-root-JXLRINF3.cjs.map → react-root-RQUU3A45.cjs.map} +0 -0
  233. /package/dist/lib/node/{schema-defs-XLFBG3XK.cjs.map → schema-defs-OB2X2HBH.cjs.map} +0 -0
  234. /package/dist/lib/node/{state-ZT3MTZXB.cjs.map → state-M35DK75Z.cjs.map} +0 -0
  235. /package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs.map → react-root-YFGL3B4J.mjs.map} +0 -0
  236. /package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs.map → schema-defs-4MEJETVX.mjs.map} +0 -0
  237. /package/dist/lib/node-esm/{state-4ATRHSKA.mjs.map → state-XQNDCN37.mjs.map} +0 -0
@@ -2,52 +2,50 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import React, { useCallback, useState } from 'react';
5
+ import React, { useCallback } from 'react';
6
6
 
7
+ import { Type } from '@dxos/echo';
7
8
  import { getTypeAnnotation, type TypeAnnotation } from '@dxos/echo-schema';
8
- import { invariant } from '@dxos/invariant';
9
9
  import { type SpaceId, type Space } from '@dxos/react-client/echo';
10
- import { Icon, type ThemedClassName, toLocalizedString, useTranslation } from '@dxos/react-ui';
10
+ import { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
11
  import { Form } from '@dxos/react-ui-form';
12
12
  import { SearchList } from '@dxos/react-ui-searchlist';
13
- import { mx } from '@dxos/react-ui-theme';
13
+ import { cardDialogOverflow, cardDialogPaddedOverflow, cardDialogSearchListRoot } from '@dxos/react-ui-stack';
14
+ import { type DataType } from '@dxos/schema';
14
15
  import { isNonNullable, type MaybePromise } from '@dxos/util';
15
16
 
16
17
  import { useInputSurfaceLookup } from '../../hooks';
17
18
  import { SPACE_PLUGIN } from '../../meta';
18
- import { type ObjectForm, type CollectionType } from '../../types';
19
+ import { type ObjectForm } from '../../types';
19
20
  import { getSpaceDisplayName } from '../../util';
20
21
 
21
- export type CreateObjectPanelProps = ThemedClassName<{
22
+ export type CreateObjectPanelProps = {
22
23
  forms: ObjectForm[];
23
24
  spaces: Space[];
24
25
  typename?: string;
25
- target?: Space | CollectionType;
26
+ target?: Space | DataType.Collection;
26
27
  name?: string;
27
28
  defaultSpaceId?: SpaceId;
28
29
  resolve?: (typename: string) => Record<string, any>;
29
- onCreateObject?: (params: {
30
- form: ObjectForm;
31
- target: Space | CollectionType;
32
- data?: Record<string, any>;
33
- }) => MaybePromise<void>;
34
- }>;
30
+ onTargetChange?: (target: Space) => void;
31
+ onTypenameChange?: (typename: string) => void;
32
+ onCreateObject?: (params: { form: ObjectForm; data?: Record<string, any> }) => MaybePromise<void>;
33
+ };
35
34
 
36
35
  export const CreateObjectPanel = ({
37
- classNames,
38
36
  forms,
39
37
  spaces,
40
- typename: initialTypename,
41
- target: initialTarget,
38
+ typename,
39
+ target,
42
40
  name: initialName,
43
41
  defaultSpaceId,
44
42
  resolve,
43
+ onTargetChange,
44
+ onTypenameChange,
45
45
  onCreateObject,
46
46
  }: CreateObjectPanelProps) => {
47
47
  const { t } = useTranslation(SPACE_PLUGIN);
48
- const [typename, setTypename] = useState<string | undefined>(initialTypename);
49
- const [target, setTarget] = useState<Space | CollectionType | undefined>(initialTarget);
50
- const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);
48
+ const form = forms.find((form) => Type.getTypename(form.objectSchema) === typename);
51
49
  const options: TypeAnnotation[] = forms
52
50
  .map((form) => getTypeAnnotation(form.objectSchema))
53
51
  .filter(isNonNullable)
@@ -59,67 +57,63 @@ export const CreateObjectPanel = ({
59
57
 
60
58
  const handleCreateObject = useCallback(
61
59
  async (props: Record<string, any>) => {
62
- if (!form || !target) {
60
+ if (!form) {
63
61
  return;
64
62
  }
65
- await onCreateObject?.({ form, target, data: props });
63
+ await onCreateObject?.({ form, data: props });
66
64
  },
67
- [onCreateObject, form, target],
65
+ [onCreateObject, form],
68
66
  );
69
67
 
70
68
  const handleSetTypename = useCallback(
71
69
  async (typename: string) => {
72
- invariant(target, 'target is required');
73
70
  const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);
74
71
  if (form && !form.formSchema) {
75
- await onCreateObject?.({ form, target });
72
+ await onCreateObject?.({ form });
76
73
  } else {
77
- setTypename(typename);
74
+ onTypenameChange?.(typename);
78
75
  }
79
76
  },
80
- [forms, onCreateObject, target],
77
+ [forms, onCreateObject],
81
78
  );
82
79
 
83
80
  const inputSurfaceLookup = useInputSurfaceLookup({ target });
84
81
 
85
82
  // TODO(wittjosiah): These inputs should be rolled into a `Form` once it supports the necessary variants.
86
- return (
87
- <div role='form' className={mx('flex flex-col gap-2', classNames)}>
88
- {!form ? (
89
- <SelectSchema options={options} resolve={resolve} onChange={handleSetTypename} />
90
- ) : !target ? (
91
- <SelectSpace spaces={spaces} defaultSpaceId={defaultSpaceId} onChange={setTarget} />
92
- ) : form.formSchema ? (
93
- <Form
94
- classNames='!p-0'
95
- autoFocus
96
- values={{ name: initialName }}
97
- schema={form.formSchema}
98
- testId='create-object-form'
99
- onSave={handleCreateObject}
100
- lookupComponent={inputSurfaceLookup}
101
- />
102
- ) : undefined}
83
+ return !form ? (
84
+ <SelectSchema options={options} resolve={resolve} onChange={handleSetTypename} />
85
+ ) : !target ? (
86
+ <SelectSpace spaces={spaces} defaultSpaceId={defaultSpaceId} onChange={onTargetChange} />
87
+ ) : form.formSchema ? (
88
+ <div role='none' className={cardDialogOverflow}>
89
+ <Form
90
+ autoFocus
91
+ values={{ name: initialName }}
92
+ schema={form.formSchema}
93
+ testId='create-object-form'
94
+ onSave={handleCreateObject}
95
+ lookupComponent={inputSurfaceLookup}
96
+ outerSpacing='blockStart-0'
97
+ />
103
98
  </div>
104
- );
99
+ ) : null;
105
100
  };
106
101
 
107
102
  const SelectSpace = ({
108
103
  spaces,
109
104
  defaultSpaceId,
110
105
  onChange,
111
- }: { onChange: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
106
+ }: { onChange?: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
112
107
  const { t } = useTranslation(SPACE_PLUGIN);
113
108
 
114
109
  return (
115
- <SearchList.Root label={t('space input label')} classNames='flex flex-col grow overflow-hidden'>
110
+ <SearchList.Root label={t('space input label')} classNames={cardDialogSearchListRoot}>
116
111
  <SearchList.Input
117
112
  autoFocus
118
113
  data-testid='create-object-form.space-input'
119
114
  placeholder={t('space input placeholder')}
120
- classNames='px-1 my-2'
121
115
  />
122
- <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>
116
+ <SearchList.Content classNames={[cardDialogOverflow, 'plb-cardSpacingBlock']}>
123
117
  {spaces
124
118
  .sort((a, b) => {
125
119
  const aName = toLocalizedString(getSpaceDisplayName(a, { personal: a.id === defaultSpaceId }), t);
@@ -130,7 +124,7 @@ const SelectSpace = ({
130
124
  <SearchList.Item
131
125
  key={space.id}
132
126
  value={toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}
133
- onSelect={() => onChange(space)}
127
+ onSelect={() => onChange?.(space)}
134
128
  classNames='flex items-center gap-2'
135
129
  >
136
130
  <span className='grow truncate'>
@@ -154,14 +148,13 @@ const SelectSchema = ({
154
148
  const { t } = useTranslation(SPACE_PLUGIN);
155
149
 
156
150
  return (
157
- <SearchList.Root label={t('schema input label')} classNames='flex flex-col grow overflow-hidden'>
151
+ <SearchList.Root label={t('schema input label')} classNames={cardDialogSearchListRoot}>
158
152
  <SearchList.Input
159
153
  autoFocus
160
154
  data-testid='create-object-form.schema-input'
161
155
  placeholder={t('schema input placeholder')}
162
- classNames='px-1 my-2'
163
156
  />
164
- <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>
157
+ <SearchList.Content classNames={cardDialogPaddedOverflow}>
165
158
  {options.map((option) => (
166
159
  <SearchList.Item
167
160
  key={option.typename}
@@ -8,6 +8,7 @@ import React, { useCallback, useRef } from 'react';
8
8
  import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
9
9
  import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
10
10
  import { Form } from '@dxos/react-ui-form';
11
+ import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
11
12
 
12
13
  import { useInputSurfaceLookup } from '../../hooks';
13
14
  import { SPACE_PLUGIN } from '../../meta';
@@ -30,7 +31,7 @@ export const CreateSpaceDialog = () => {
30
31
  const program = Effect.gen(function* () {
31
32
  const { space } = yield* dispatch(createIntent(SpaceAction.Create, data));
32
33
  yield* dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
33
- yield* dispatch(createIntent(SpaceAction.OpenCreateObject, { target: space }));
34
+ yield* dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));
34
35
  });
35
36
  await Effect.runPromise(program);
36
37
  },
@@ -40,8 +41,8 @@ export const CreateSpaceDialog = () => {
40
41
  return (
41
42
  // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
42
43
  // Consider factoring it out to the tabs package.
43
- <Dialog.Content classNames='p-0 bs-content min-bs-[16rem] max-bs-full md:max-is-[32rem] overflow-hidden'>
44
- <div role='none' className='flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4'>
44
+ <Dialog.Content classNames={cardDialogContent}>
45
+ <div role='none' className={cardDialogHeader}>
45
46
  <Dialog.Title>{t('create space dialog title')}</Dialog.Title>
46
47
  <Dialog.Close asChild>
47
48
  <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
@@ -49,15 +50,15 @@ export const CreateSpaceDialog = () => {
49
50
  </Button>
50
51
  </Dialog.Close>
51
52
  </div>
52
- <div className='p-4'>
53
+ <div role='none' className='contents'>
53
54
  <Form
54
55
  testId='create-space-form'
55
- classNames='!p-0'
56
56
  autoFocus
57
57
  values={initialValues}
58
58
  schema={SpaceForm}
59
59
  lookupComponent={inputSurfaceLookup}
60
60
  onSave={handleCreateSpace}
61
+ outerSpacing='scroll-fields'
61
62
  />
62
63
  </div>
63
64
  </Dialog.Content>
@@ -7,6 +7,7 @@ import React, { type Dispatch, type SetStateAction, useCallback, useMemo, useSta
7
7
  import { QR } from 'react-qr-rounded';
8
8
 
9
9
  import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
10
+ import { Type } from '@dxos/echo';
10
11
  import { log } from '@dxos/log';
11
12
  import { useConfig } from '@dxos/react-client';
12
13
  import { fullyQualifiedId, useSpaceInvitations, type Space } from '@dxos/react-client/echo';
@@ -15,6 +16,7 @@ import { Button, Clipboard, Icon, Input, useId, useTranslation } from '@dxos/rea
15
16
  import { ControlPage, ControlSection, ControlFrame, ControlFrameItem, ControlItemInput } from '@dxos/react-ui-form';
16
17
  import { StackItem } from '@dxos/react-ui-stack';
17
18
  import { getSize, mx } from '@dxos/react-ui-theme';
19
+ import { DataType } from '@dxos/schema';
18
20
  import {
19
21
  type ActionMenuItem,
20
22
  AuthCode,
@@ -28,7 +30,7 @@ import {
28
30
  import { hexToEmoji } from '@dxos/util';
29
31
 
30
32
  import { SPACE_PLUGIN } from '../meta';
31
- import { CollectionType, SpaceAction } from '../types';
33
+ import { SpaceAction } from '../types';
32
34
  import { COMPOSER_SPACE_LOCK } from '../util';
33
35
 
34
36
  // TODO(wittjosiah): Copied from Shell.
@@ -65,7 +67,7 @@ export const MembersContainer = ({
65
67
  };
66
68
 
67
69
  // TODO(wittjosiah): Track which was the most recently viewed object.
68
- const target = space.properties[CollectionType.typename]?.target?.objects[0]?.target;
70
+ const target = space.properties[Type.getTypename(DataType.Collection)]?.target?.objects[0]?.target;
69
71
 
70
72
  const locked = space.properties[COMPOSER_SPACE_LOCK];
71
73
  const handleChangeLocked = useCallback(() => {
@@ -5,14 +5,15 @@
5
5
  import { Planet } from '@phosphor-icons/react';
6
6
  import React from 'react';
7
7
 
8
- import { type AnyLiveObject, getSpace } from '@dxos/client/echo';
8
+ import { getSpace } from '@dxos/client/echo';
9
+ import { type Obj } from '@dxos/echo';
9
10
  import { useClient } from '@dxos/react-client';
10
11
  import { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
12
 
12
13
  import { SPACE_PLUGIN } from '../meta';
13
14
  import { getSpaceDisplayName } from '../util';
14
15
 
15
- export const MenuFooter = ({ object }: { object: AnyLiveObject<any> }) => {
16
+ export const MenuFooter = ({ object }: { object: Obj.Any }) => {
16
17
  const { t } = useTranslation(SPACE_PLUGIN);
17
18
  const client = useClient();
18
19
  const space = getSpace(object);
@@ -4,8 +4,8 @@
4
4
 
5
5
  import React, { useCallback, useState } from 'react';
6
6
 
7
+ import { Obj } from '@dxos/echo';
7
8
  import { ForeignKey } from '@dxos/echo-schema';
8
- import { getMeta, type AnyLiveObject } from '@dxos/react-client/echo';
9
9
  import { IconButton, useTranslation } from '@dxos/react-ui';
10
10
  import { Form } from '@dxos/react-ui-form';
11
11
 
@@ -18,13 +18,13 @@ const initialValues = {
18
18
  };
19
19
 
20
20
  export type AdvancedObjectSettingsProps = {
21
- object: AnyLiveObject<any>;
21
+ object: Obj.Any;
22
22
  };
23
23
 
24
24
  export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps) => {
25
25
  const { t } = useTranslation(SPACE_PLUGIN);
26
26
  const [adding, setAdding] = useState(false);
27
- const keys = getMeta(object).keys;
27
+ const { keys } = Obj.getMeta(object);
28
28
 
29
29
  const handleNew = useCallback(() => setAdding(true), []);
30
30
  const handleCancel = useCallback(() => setAdding(false), []);
@@ -66,7 +66,15 @@ export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps)
66
66
  {!adding && <ForeignKeys keys={keys} onDelete={handleDelete} />}
67
67
  </div>
68
68
 
69
- {adding && <Form schema={ForeignKey} values={initialValues} onSave={handleSave} onCancel={handleCancel} />}
69
+ {adding && (
70
+ <Form
71
+ outerSpacing={false}
72
+ schema={ForeignKey}
73
+ values={initialValues}
74
+ onSave={handleSave}
75
+ onCancel={handleCancel}
76
+ />
77
+ )}
70
78
  </>
71
79
  );
72
80
  };
@@ -4,15 +4,14 @@
4
4
 
5
5
  import React, { type PropsWithChildren, useRef } from 'react';
6
6
 
7
- import { type AnyLiveObject } from '@dxos/react-client/echo';
7
+ import { type Obj } from '@dxos/echo';
8
8
  import { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
- import { mx } from '@dxos/react-ui-theme';
10
9
 
11
10
  import { meta } from '../../meta';
12
11
 
13
12
  export type BaseObjectSettingsProps = ThemedClassName<
14
13
  PropsWithChildren<{
15
- object: AnyLiveObject<any>;
14
+ object: Obj.Any;
16
15
  }>
17
16
  >;
18
17
 
@@ -24,15 +23,16 @@ export const BaseObjectSettings = ({ classNames, children, object }: BaseObjectS
24
23
  // The form should only include fields with a specific settings annotation.
25
24
  // Perhaps also including the field of the title annotation as well.
26
25
  return (
27
- <form className={mx('flex flex-col p-2 gap-2', classNames)}>
26
+ <>
28
27
  <Input.Root>
29
28
  <Input.Label>{t('name label')}</Input.Label>
30
29
  <Input.TextInput
31
30
  ref={inputRef}
32
31
  placeholder={t('name placeholder')}
33
- value={object.name ?? ''}
32
+ // TODO(burdon): Use annotation to get the name field.
33
+ value={(object as any).name ?? ''}
34
34
  onChange={(event) => {
35
- object.name = event.target.value;
35
+ (object as any).name = event.target.value;
36
36
  }}
37
37
  onKeyDown={(event) => {
38
38
  if (event.key === 'Enter') {
@@ -42,6 +42,6 @@ export const BaseObjectSettings = ({ classNames, children, object }: BaseObjectS
42
42
  />
43
43
  </Input.Root>
44
44
  {children}
45
- </form>
45
+ </>
46
46
  );
47
47
  };
@@ -5,14 +5,14 @@
5
5
  import React, { useMemo } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework';
8
- import { type AnyLiveObject } from '@dxos/react-client/echo';
8
+ import { type Obj } from '@dxos/echo';
9
9
  import { Clipboard } from '@dxos/react-ui';
10
10
  import { StackItem } from '@dxos/react-ui-stack';
11
11
 
12
12
  import { BaseObjectSettings } from './BaseObjectSettings';
13
13
 
14
14
  export type ObjectSettingsContainerProps = {
15
- object: AnyLiveObject<any>;
15
+ object: Obj.Any;
16
16
  role: string;
17
17
  };
18
18
 
@@ -21,8 +21,8 @@ export const ObjectSettingsContainer = ({ object, role }: ObjectSettingsContaine
21
21
 
22
22
  return (
23
23
  <Clipboard.Provider>
24
- <StackItem.Content toolbar={false} role={role}>
25
- <div className='flex flex-col overflow-y-auto divide-y divide-separator'>
24
+ <StackItem.Content toolbar={false}>
25
+ <div role='none' className='overflow-y-auto pli-cardSpacingInline plb-cardSpacingBlock'>
26
26
  <BaseObjectSettings object={object}>
27
27
  <Surface role='base-object-settings' data={data} />
28
28
  </BaseObjectSettings>
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { useState, useEffect } from 'react';
6
6
 
7
- import { type EchoSchema } from '@dxos/echo-schema';
7
+ import { type Type } from '@dxos/echo';
8
8
  import { type Space } from '@dxos/react-client/echo';
9
9
  import { useTranslation } from '@dxos/react-ui';
10
10
  import { controlItemClasses, ControlPage, ControlSection } from '@dxos/react-ui-form';
@@ -21,8 +21,8 @@ type SchemaPanelProps = { space: Space };
21
21
  /**
22
22
  * Subscribe to and retrieve all schemas from a space's schema registry.
23
23
  */
24
- export const useQuerySpaceSchemas = (space: Space): EchoSchema[] => {
25
- const [schemas, setSchemas] = useState<EchoSchema[]>([]);
24
+ export const useQuerySpaceSchemas = (space: Space): Type.Schema[] => {
25
+ const [schemas, setSchemas] = useState<Type.Schema[]>([]);
26
26
 
27
27
  useEffect(() => {
28
28
  const query = space.db.schemaRegistry.query();
@@ -7,8 +7,8 @@ import React from 'react';
7
7
  import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
8
  import { useClient } from '@dxos/react-client';
9
9
  import { useSpaces } from '@dxos/react-client/echo';
10
- import { Input, toLocalizedString, useTranslation, List, ListItem, Button } from '@dxos/react-ui';
11
- import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
10
+ import { Input, toLocalizedString, useTranslation, List, ListItem, IconButton } from '@dxos/react-ui';
11
+ import { controlItemClasses, ControlPage, ControlSection, DeprecatedFormInput } from '@dxos/react-ui-form';
12
12
 
13
13
  import { SPACE_PLUGIN } from '../meta';
14
14
  import { SpaceAction, type SpaceSettingsProps } from '../types';
@@ -16,33 +16,38 @@ import { getSpaceDisplayName } from '../util';
16
16
 
17
17
  export const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps }) => {
18
18
  const { t } = useTranslation(SPACE_PLUGIN);
19
- const { dispatchPromise: dispatch } = useIntentDispatcher();
20
19
  const client = useClient();
21
20
  const spaces = useSpaces({ all: settings.showHidden });
21
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
22
22
 
23
23
  // TODO(wittjosiah): Migrate to new form container.
24
24
  return (
25
- <DeprecatedFormContainer>
26
- <DeprecatedFormInput label={t('show hidden spaces label')}>
27
- <Input.Switch checked={settings.showHidden} onCheckedChange={(checked) => (settings.showHidden = !!checked)} />
28
- </DeprecatedFormInput>
29
- <div role='none'>
30
- <h2 className='text-xl my-4'>Space Settings</h2>
31
- <List classNames='max-w-md mx-auto'>
25
+ <ControlPage>
26
+ <ControlSection title={t('space settings label')} description={t('space settings description')}>
27
+ <div className='pli-trimMd container-max-width'>
28
+ <DeprecatedFormInput label={t('show hidden spaces label')}>
29
+ <Input.Switch
30
+ checked={settings.showHidden}
31
+ onCheckedChange={(checked) => (settings.showHidden = !!checked)}
32
+ />
33
+ </DeprecatedFormInput>
34
+ </div>
35
+ <List classNames={[controlItemClasses, 'flex flex-col gap-trimSm']}>
32
36
  {spaces.map((space) => (
33
- <ListItem.Root key={space.id}>
34
- <ListItem.Heading classNames='flex flex-col grow truncate mbe-2'>
37
+ <ListItem.Root key={space.id} classNames='is-full items-center'>
38
+ {/* TODO(burdon): Should auto center and truncate; NOTE truncate doesn't work with flex grow. */}
39
+ <ListItem.Heading classNames='grow truncate !min-bs-0'>
35
40
  {toLocalizedString(getSpaceDisplayName(space, { personal: space === client.spaces.default }), t)}
36
41
  </ListItem.Heading>
37
- <ListItem.Endcap>
38
- <Button onClick={() => dispatch(createIntent(SpaceAction.OpenSettings, { space }))}>
39
- {t('open space settings label')}
40
- </Button>
41
- </ListItem.Endcap>
42
+ <IconButton
43
+ icon='ph--faders--regular'
44
+ onClick={() => dispatch(createIntent(SpaceAction.OpenSettings, { space }))}
45
+ label={t('open space settings label')}
46
+ />
42
47
  </ListItem.Root>
43
48
  ))}
44
49
  </List>
45
- </div>
46
- </DeprecatedFormContainer>
50
+ </ControlSection>
51
+ </ControlPage>
47
52
  );
48
53
  };
@@ -7,7 +7,7 @@ import React, { forwardRef, useCallback, useEffect, useState } from 'react';
7
7
 
8
8
  import { useAppGraph, useCapability } from '@dxos/app-framework';
9
9
  import { generateName } from '@dxos/display-name';
10
- import { type Expando } from '@dxos/echo-schema';
10
+ import { type Type } from '@dxos/echo';
11
11
  import { PublicKey, useClient } from '@dxos/react-client';
12
12
  import { getSpace, useMembers, type SpaceMember, fullyQualifiedId } from '@dxos/react-client/echo';
13
13
  import { type Identity, useIdentity } from '@dxos/react-client/halo';
@@ -42,7 +42,7 @@ const noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);
42
42
  // TODO(wittjosiah): Factor out?
43
43
  const getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());
44
44
 
45
- export const SpacePresence = ({ object, spaceKey }: { object: Expando; spaceKey?: PublicKey }) => {
45
+ export const SpacePresence = ({ object, spaceKey }: { object: Type.Expando; spaceKey?: PublicKey }) => {
46
46
  // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.
47
47
  const spaceState = useCapability(SpaceCapabilities.MutableState);
48
48
  const client = useClient();
@@ -149,19 +149,26 @@ export const FullPresence = (props: MemberPresenceProps) => {
149
149
  <Popover.Portal>
150
150
  <Popover.Content side='bottom'>
151
151
  <Popover.Arrow />
152
- <List classNames='max-h-56 overflow-y-auto'>
153
- {members.map((member) => (
154
- <ListItem.Root
155
- key={member.identity.identityKey.toHex()}
156
- classNames='flex gap-2 items-center cursor-pointer mbe-2'
157
- onClick={() => onMemberClick?.(member)}
158
- data-testid='identity-list-item'
159
- >
160
- {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}
161
- <PresenceAvatar identity={member.identity} size={size} showName match={member.currentlyAttended} />
162
- </ListItem.Root>
163
- ))}
164
- </List>
152
+ <Popover.Viewport classNames='max-bs-56'>
153
+ <List>
154
+ {members.map((member) => (
155
+ <ListItem.Root
156
+ key={member.identity.identityKey.toHex()}
157
+ classNames='flex gap-2 items-center cursor-pointer mbe-2'
158
+ onClick={() => onMemberClick?.(member)}
159
+ data-testid='identity-list-item'
160
+ >
161
+ {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}
162
+ <PresenceAvatar
163
+ identity={member.identity}
164
+ size={size}
165
+ showName
166
+ match={member.currentlyAttended}
167
+ />
168
+ </ListItem.Root>
169
+ ))}
170
+ </List>
171
+ </Popover.Viewport>
165
172
  </Popover.Content>
166
173
  </Popover.Portal>
167
174
  </Popover.Root>
@@ -174,7 +174,8 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
174
174
  autoSave
175
175
  onSave={handleSave}
176
176
  Custom={customElements}
177
- classNames='p-0 container-max-width [&_[role="form"]]:grid [&_[role="form"]]:grid-cols-1 md:[&_[role="form"]]:grid-cols-[1fr_min-content] [&_[role="form"]]:gap-4'
177
+ outerSpacing={false}
178
+ classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content] gap-4'
178
179
  />
179
180
  </ControlSection>
180
181
  </ControlPage>
package/src/events.ts CHANGED
@@ -10,9 +10,5 @@ export namespace SpaceEvents {
10
10
  export const StateReady = Events.createStateEvent(`${SPACE_PLUGIN}/event/state-ready`);
11
11
  export const SetupSettingsPanel = defineEvent(`${SPACE_PLUGIN}/event/setup-settings-panel`);
12
12
  export const DefaultSpaceReady = defineEvent(`${SPACE_PLUGIN}/event/default-space-ready`);
13
- }
14
-
15
- // TODO(wittjosiah): Factor out.
16
- export namespace ThreadEvents {
17
- export const SetupThread = defineEvent(`${SPACE_PLUGIN}/event/setup-thread`);
13
+ export const SpaceCreated = defineEvent(`${SPACE_PLUGIN}/event/space-created`);
18
14
  }