@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
@@ -3,26 +3,27 @@
3
3
  //
4
4
 
5
5
  import { type Schema } from 'effect';
6
- import React, { useCallback } from 'react';
6
+ import React, { useCallback, useMemo } from 'react';
7
7
 
8
- import { Capabilities, contributes, createSurface, Surface, useCapability, useLayout } from '@dxos/app-framework';
9
- import { isInstanceOf } from '@dxos/echo-schema';
8
+ import {
9
+ Capabilities,
10
+ contributes,
11
+ createSurface,
12
+ Surface,
13
+ useCapabilities,
14
+ useCapability,
15
+ useLayout,
16
+ } from '@dxos/app-framework';
17
+ import { Obj, Type } from '@dxos/echo';
10
18
  import { findAnnotation } from '@dxos/effect';
11
19
  import { SettingsStore } from '@dxos/local-storage';
12
- import {
13
- getSpace,
14
- isEchoObject,
15
- isLiveObject,
16
- isSpace,
17
- parseId,
18
- SpaceState,
19
- useSpace,
20
- type AnyLiveObject,
21
- type Space,
22
- } from '@dxos/react-client/echo';
23
- import { Input } from '@dxos/react-ui';
24
- import { type InputProps } from '@dxos/react-ui-form';
20
+ import { ClientCapabilities } from '@dxos/plugin-client';
21
+ import { useClient } from '@dxos/react-client';
22
+ import { getSpace, isLiveObject, isSpace, parseId, SpaceState, useSpace, type Space } from '@dxos/react-client/echo';
23
+ import { Input, useTranslation } from '@dxos/react-ui';
24
+ import { type InputProps, SelectInput } from '@dxos/react-ui-form';
25
25
  import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
26
+ import { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';
26
27
  import { type JoinPanelProps } from '@dxos/shell/react';
27
28
 
28
29
  import { SpaceCapabilities } from './capabilities';
@@ -52,12 +53,14 @@ import {
52
53
  type CreateObjectDialogProps,
53
54
  } from '../components';
54
55
  import { SPACE_PLUGIN } from '../meta';
55
- import { CollectionType, HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
56
+ import { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';
56
57
 
57
58
  type ReactSurfaceOptions = {
58
59
  createInvitationUrl: (invitationCode: string) => string;
59
60
  };
60
61
 
62
+ const OMIT = [Type.getTypename(DataType.Collection), Type.getTypename(DataType.QueryCollection)];
63
+
61
64
  export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
62
65
  contributes(Capabilities.ReactSurface, [
63
66
  createSurface({
@@ -68,7 +71,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
68
71
  isSpace(data.subject) && data.subject.state.get() === SpaceState.SPACE_READY,
69
72
  component: ({ data, role, ...rest }) => (
70
73
  <Surface
71
- data={{ id: data.subject.id, subject: data.subject.properties[CollectionType.typename]?.target }}
74
+ data={{
75
+ id: data.subject.id,
76
+ subject: data.subject.properties[Type.getTypename(DataType.Collection)]?.target,
77
+ }}
72
78
  role={role}
73
79
  {...rest}
74
80
  />
@@ -78,7 +84,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
78
84
  id: `${SPACE_PLUGIN}/collection-fallback`,
79
85
  role: 'article',
80
86
  position: 'fallback',
81
- filter: (data): data is { subject: CollectionType } => isInstanceOf(CollectionType, data.subject),
87
+ filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
82
88
  component: ({ data }) => <CollectionMain collection={data.subject} />,
83
89
  }),
84
90
  createSurface({
@@ -91,8 +97,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
91
97
  createSurface({
92
98
  id: `${SPACE_PLUGIN}/companion/object-settings`,
93
99
  role: 'article',
94
- filter: (data): data is { companionTo: AnyLiveObject<any> } =>
95
- isEchoObject(data.companionTo) && data.subject === 'settings',
100
+ filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',
96
101
  component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,
97
102
  }),
98
103
  createSurface({
@@ -197,6 +202,78 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
197
202
  );
198
203
  },
199
204
  }),
205
+ createSurface({
206
+ id: `${SPACE_PLUGIN}/typename-form-input`,
207
+ role: 'form-input',
208
+ filter: (
209
+ data,
210
+ ): data is { prop: string; schema: Schema.Schema<any>; target: Space | DataType.Collection | undefined } => {
211
+ if (data.prop !== 'typename') {
212
+ return false;
213
+ }
214
+
215
+ const annotation = findAnnotation((data.schema as Schema.Schema.All).ast, TypenameAnnotationId);
216
+ return !!annotation;
217
+ },
218
+ component: ({ data: { schema, target }, ...inputProps }) => {
219
+ const { t } = useTranslation();
220
+ const client = useClient();
221
+ const props = inputProps as any as InputProps;
222
+ const space = isSpace(target) ? target : getSpace(target);
223
+ if (!space) {
224
+ return null;
225
+ }
226
+
227
+ const annotation = findAnnotation<TypenameAnnotation[]>(schema.ast, TypenameAnnotationId)!;
228
+
229
+ const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
230
+ const whitelistedTypenames = useMemo(
231
+ () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))),
232
+ [schemaWhitelists],
233
+ );
234
+
235
+ const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
236
+ const objectFormTypenames = useMemo(
237
+ () =>
238
+ new Set(
239
+ objectForms
240
+ .map((form) => Type.getTypename(form.objectSchema))
241
+ // TODO(wittjosiah): Remove.
242
+ .filter((typename) => !OMIT.includes(typename)),
243
+ ),
244
+ [objectForms],
245
+ );
246
+
247
+ const fixed = client.graph.schemaRegistry.schemas.filter((schema) => {
248
+ const limitedStatic =
249
+ annotation.includes('limited-static') && whitelistedTypenames.has(Type.getTypename(schema));
250
+ const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));
251
+ return annotation.includes('static') || limitedStatic || objectForm;
252
+ });
253
+ const dynamic = space?.db.schemaRegistry.query().runSync();
254
+ const typenames = Array.from(
255
+ new Set<string>([
256
+ ...(annotation.includes('limited-static') ||
257
+ annotation.includes('static') ||
258
+ annotation.includes('object-form')
259
+ ? fixed.map((schema) => Type.getTypename(schema))
260
+ : []),
261
+ ...(annotation.includes('dynamic') ? dynamic.map((schema) => schema.typename) : []),
262
+ ]),
263
+ ).sort();
264
+
265
+ const options = useMemo(
266
+ () =>
267
+ typenames.map((typename) => ({
268
+ value: typename,
269
+ label: t('typename label', { ns: typename, defaultValue: typename }),
270
+ })),
271
+ [t, typenames],
272
+ );
273
+
274
+ return <SelectInput {...props} options={options} />;
275
+ },
276
+ }),
200
277
  createSurface({
201
278
  id: POPOVER_RENAME_SPACE,
202
279
  role: 'popover',
@@ -206,21 +283,21 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
206
283
  createSurface({
207
284
  id: POPOVER_RENAME_OBJECT,
208
285
  role: 'popover',
209
- filter: (data): data is { props: AnyLiveObject<any> } =>
286
+ filter: (data): data is { props: Obj.Any } =>
210
287
  data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
211
288
  component: ({ data }) => <PopoverRenameObject object={data.props} />,
212
289
  }),
213
290
  createSurface({
214
291
  id: `${SPACE_PLUGIN}/menu-footer`,
215
292
  role: 'menu-footer',
216
- filter: (data): data is { subject: AnyLiveObject<any> } => isEchoObject(data.subject),
293
+ filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),
217
294
  component: ({ data }) => <MenuFooter object={data.subject} />,
218
295
  }),
219
296
  createSurface({
220
297
  id: `${SPACE_PLUGIN}/navtree-presence`,
221
298
  role: 'navtree-item-end',
222
- filter: (data): data is { id: string; subject: AnyLiveObject<any>; open?: boolean } =>
223
- typeof data.id === 'string' && isEchoObject(data.subject),
299
+ filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>
300
+ typeof data.id === 'string' && Obj.isObject(data.subject),
224
301
  component: ({ data }) => {
225
302
  // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.
226
303
  const state = useCapability(SpaceCapabilities.MutableState);
@@ -246,13 +323,12 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
246
323
  id: `${SPACE_PLUGIN}/navbar-presence`,
247
324
  role: 'navbar-end',
248
325
  position: 'hoist',
249
- filter: (data): data is { subject: Space | AnyLiveObject<any> } =>
250
- isSpace(data.subject) || isEchoObject(data.subject),
326
+ filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),
251
327
  component: ({ data }) => {
252
328
  const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);
253
329
  const object = isSpace(data.subject)
254
330
  ? data.subject.state.get() === SpaceState.SPACE_READY
255
- ? (space?.properties[CollectionType.typename]?.target as CollectionType)
331
+ ? (space?.properties[Type.getTypename(DataType.Collection)]?.target as DataType.Collection)
256
332
  : undefined
257
333
  : data.subject;
258
334
 
@@ -262,7 +338,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
262
338
  createSurface({
263
339
  id: `${SPACE_PLUGIN}/collection-section`,
264
340
  role: 'section',
265
- filter: (data): data is { subject: CollectionType } => isInstanceOf(CollectionType, data.subject),
341
+ filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),
266
342
  component: ({ data }) => <CollectionSection collection={data.subject} />,
267
343
  }),
268
344
  createSurface({
@@ -7,7 +7,8 @@ import { Schema, SchemaAST } from 'effect';
7
7
  import { createTool, ToolResult } from '@dxos/ai';
8
8
  import { Capabilities, contributes, type PromiseIntentDispatcher } from '@dxos/app-framework';
9
9
  import { type Space } from '@dxos/client/echo';
10
- import { FormatEnum, FormatEnums, SelectOptionSchema, GeoPoint, toJsonSchema } from '@dxos/echo-schema';
10
+ import { Type } from '@dxos/echo';
11
+ import { FormatEnum, FormatEnums, SelectOptionSchema } from '@dxos/echo-schema';
11
12
  import { invariant } from '@dxos/invariant';
12
13
  import { hues } from '@dxos/react-ui-theme';
13
14
  import { getSchemaFromPropertyDefinitions } from '@dxos/schema';
@@ -32,7 +33,7 @@ export const TypeNameSchema = Schema.String.pipe(
32
33
  );
33
34
 
34
35
  const formatDescription = `The format of the property. Additional information:
35
- ${FormatEnum.GeoPoint}: ${JSON.stringify(toJsonSchema(GeoPoint))}
36
+ ${FormatEnum.GeoPoint}: ${JSON.stringify(Type.toJsonSchema(Type.Format.GeoPoint))}
36
37
  This tuple is GeoJSON. You must specify \`${FormatEnum.GeoPoint}\` as [Longitude, Latitude]`;
37
38
 
38
39
  // TODO(ZaymonFC): All properties are default optional, but maybe we should allow for required properties.
@@ -5,7 +5,7 @@
5
5
  import { Capabilities, contributes } from '@dxos/app-framework';
6
6
  import { live } from '@dxos/live-object';
7
7
 
8
- import { SPACE_PLUGIN } from '../meta';
8
+ import { meta } from '../meta';
9
9
  import { type SpaceSettingsProps, SpaceSettingsSchema } from '../types';
10
10
 
11
11
  export default () => {
@@ -13,5 +13,9 @@ export default () => {
13
13
  showHidden: false,
14
14
  });
15
15
 
16
- return contributes(Capabilities.Settings, { schema: SpaceSettingsSchema, prefix: SPACE_PLUGIN, value: settings });
16
+ return contributes(Capabilities.Settings, {
17
+ prefix: meta.id,
18
+ schema: SpaceSettingsSchema,
19
+ value: settings,
20
+ });
17
21
  };
@@ -4,18 +4,17 @@
4
4
 
5
5
  import { Option } from 'effect';
6
6
 
7
- import { contributes, createIntent, type PluginContext, Capabilities, LayoutAction } from '@dxos/app-framework';
7
+ import { contributes, createIntent, Capabilities, LayoutAction, type PluginContext } from '@dxos/app-framework';
8
8
  import { SubscriptionList } from '@dxos/async';
9
- import { Expando } from '@dxos/echo-schema';
9
+ import { Filter, Obj, Type } from '@dxos/echo';
10
10
  import { scheduledEffect } from '@dxos/echo-signals/core';
11
- import { live } from '@dxos/live-object';
12
11
  import { log } from '@dxos/log';
13
12
  import { AttentionCapabilities } from '@dxos/plugin-attention';
14
13
  import { ClientCapabilities } from '@dxos/plugin-client';
15
14
  import { DeckCapabilities } from '@dxos/plugin-deck';
16
15
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
17
16
  import { PublicKey } from '@dxos/react-client';
18
- import { Filter, FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';
17
+ import { FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';
19
18
  import { ComplexMap, reduceGroupBy } from '@dxos/util';
20
19
 
21
20
  import { SpaceCapabilities } from './capabilities';
@@ -32,7 +31,7 @@ export default async (context: PluginContext) => {
32
31
  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
33
32
  const { graph } = context.getCapability(Capabilities.AppGraph);
34
33
  const layout = context.getCapability(Capabilities.Layout);
35
- const deck = context.getCapability(DeckCapabilities.DeckState);
34
+ const deck = context.getCapabilities(DeckCapabilities.DeckState)[0];
36
35
  const attention = context.getCapability(AttentionCapabilities.Attention);
37
36
  const state = context.getCapability(SpaceCapabilities.MutableState);
38
37
  const client = context.getCapability(ClientCapabilities.Client);
@@ -40,7 +39,7 @@ export default async (context: PluginContext) => {
40
39
  const defaultSpace = client.spaces.default;
41
40
  await defaultSpace.waitUntilReady();
42
41
 
43
- if (deck.activeDeck === 'default') {
42
+ if (deck?.activeDeck === 'default') {
44
43
  await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: defaultSpace.id }));
45
44
  }
46
45
 
@@ -51,11 +50,11 @@ export default async (context: PluginContext) => {
51
50
 
52
51
  const {
53
52
  objects: [spacesOrder],
54
- } = await defaultSpace.db.query(Filter.type(Expando, { key: SHARED })).run();
53
+ } = await defaultSpace.db.query(Filter.type(Type.Expando, { key: SHARED })).run();
55
54
  if (!spacesOrder) {
56
55
  // TODO(wittjosiah): Cannot be a Folder because Spaces are not TypedObjects so can't be saved in the database.
57
56
  // Instead, we store order as an array of space ids.
58
- defaultSpace.db.add(live({ key: SHARED, order: [] }));
57
+ defaultSpace.db.add(Obj.make(Type.Expando, { key: SHARED, order: [] }));
59
58
  }
60
59
 
61
60
  // Await missing objects.
@@ -6,11 +6,11 @@ import React from 'react';
6
6
 
7
7
  import { useTranslation } from '@dxos/react-ui';
8
8
  import { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';
9
+ import { type DataType } from '@dxos/schema';
9
10
 
10
11
  import { SPACE_PLUGIN } from '../meta';
11
- import type { CollectionType } from '../types';
12
12
 
13
- export const CollectionMain = ({ collection }: { collection: CollectionType }) => {
13
+ export const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {
14
14
  const { t } = useTranslation(SPACE_PLUGIN);
15
15
 
16
16
  return (
@@ -21,7 +21,7 @@ export const CollectionMain = ({ collection }: { collection: CollectionType }) =
21
21
  >
22
22
  <p
23
23
  role='alert'
24
- className={mx(descriptionMessage, 'rounded-lg p-8 font-normal text-lg max-is-[24rem] break-words')}
24
+ className={mx(descriptionMessage, 'rounded-md p-8 font-normal text-lg max-is-[24rem] break-words')}
25
25
  >
26
26
  {collection.name ?? t('unnamed collection label')}
27
27
  </p>
@@ -5,11 +5,11 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { useTranslation } from '@dxos/react-ui';
8
+ import { type DataType } from '@dxos/schema';
8
9
 
9
10
  import { SPACE_PLUGIN } from '../meta';
10
- import type { CollectionType } from '../types';
11
11
 
12
- export const CollectionSection = ({ collection }: { collection: CollectionType }) => {
12
+ export const CollectionSection = ({ collection }: { collection: DataType.Collection }) => {
13
13
  const { t } = useTranslation(SPACE_PLUGIN);
14
14
  // TODO(wittjosiah): Better placeholder.
15
15
  return (
@@ -7,15 +7,16 @@ import '@dxos-theme';
7
7
  import { type Meta, type StoryObj } from '@storybook/react';
8
8
  import React, { useEffect } from 'react';
9
9
 
10
- import { live, Filter, useQuery, useSpace } from '@dxos/react-client/echo';
10
+ import { Filter, Obj, Type } from '@dxos/echo';
11
+ import { useQuery, useSpace } from '@dxos/react-client/echo';
11
12
  import { withClientProvider } from '@dxos/react-client/testing';
12
13
  import { Dialog } from '@dxos/react-ui';
14
+ import { DataType } from '@dxos/schema';
13
15
  import { osTranslations } from '@dxos/shell/react';
14
16
  import { withLayout, withTheme } from '@dxos/storybook-utils';
15
17
 
16
18
  import { CreateObjectDialog, type CreateObjectDialogProps } from './CreateObjectDialog';
17
19
  import translations from '../../translations';
18
- import { CollectionType } from '../../types';
19
20
 
20
21
  const Story = (args: CreateObjectDialogProps) => {
21
22
  return (
@@ -33,7 +34,7 @@ const meta: Meta<typeof CreateObjectDialog> = {
33
34
  component: CreateObjectDialog,
34
35
  render: Story,
35
36
  decorators: [
36
- withClientProvider({ createIdentity: true, createSpace: true, types: [CollectionType] }),
37
+ withClientProvider({ createIdentity: true, createSpace: true, types: [DataType.Collection] }),
37
38
  withTheme,
38
39
  withLayout(),
39
40
  ],
@@ -48,7 +49,7 @@ export default meta;
48
49
  export const Default: StoryObj<typeof CreateObjectDialog> = {};
49
50
 
50
51
  export const Typename: StoryObj<typeof CreateObjectDialog> = {
51
- args: { typename: CollectionType.typename },
52
+ args: { typename: Type.getTypename(DataType.Collection) },
52
53
  };
53
54
 
54
55
  export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
@@ -66,11 +67,11 @@ export const TargetSpace: StoryObj<typeof CreateObjectDialog> = {
66
67
  export const TargetCollection: StoryObj<typeof CreateObjectDialog> = {
67
68
  render: (args) => {
68
69
  const space = useSpace();
69
- const [collection] = useQuery(space, Filter.type(CollectionType));
70
+ const [collection] = useQuery(space, Filter.type(DataType.Collection));
70
71
 
71
72
  useEffect(() => {
72
73
  if (space) {
73
- space.db.add(live(CollectionType, { name: 'My Collection', objects: [], views: {} }));
74
+ space.db.add(Obj.make(DataType.Collection, { name: 'My Collection', objects: [] }));
74
75
  }
75
76
  }, [space]);
76
77
 
@@ -3,36 +3,40 @@
3
3
  //
4
4
 
5
5
  import { pipe } from 'effect';
6
- import React, { useCallback, useRef } from 'react';
6
+ import React, { useCallback, useRef, useState } from 'react';
7
7
 
8
8
  import {
9
9
  Capabilities,
10
+ LayoutAction,
10
11
  chain,
11
12
  createIntent,
12
- LayoutAction,
13
13
  useCapabilities,
14
14
  useIntentDispatcher,
15
15
  usePluginManager,
16
16
  } from '@dxos/app-framework';
17
+ import { Query, Type, type Obj } from '@dxos/echo';
17
18
  import { invariant } from '@dxos/invariant';
18
19
  import { useClient } from '@dxos/react-client';
19
- import { getSpace, isLiveObject, isSpace, type Live, useSpaces } from '@dxos/react-client/echo';
20
+ import { getSpace, isLiveObject, isSpace, type Space, useQuery, useSpaces } from '@dxos/react-client/echo';
20
21
  import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
22
+ import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
23
+ import { DataType } from '@dxos/schema';
24
+ import { isNonNullable } from '@dxos/util';
21
25
 
22
26
  import { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';
23
27
  import { SpaceCapabilities } from '../../capabilities';
24
28
  import { SPACE_PLUGIN } from '../../meta';
25
- import { type ObjectForm, SpaceAction } from '../../types';
29
+ import { SpaceAction } from '../../types';
26
30
 
27
31
  export const CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
28
32
 
29
33
  export type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'target' | 'typename' | 'name'> & {
30
- shouldNavigate?: (object: Live<any>) => boolean;
34
+ shouldNavigate?: (object: Obj.Any) => boolean;
31
35
  };
32
36
 
33
37
  export const CreateObjectDialog = ({
34
- target,
35
- typename,
38
+ target: initialTarget,
39
+ typename: initialTypename,
36
40
  name,
37
41
  shouldNavigate: _shouldNavigate,
38
42
  }: CreateObjectDialogProps) => {
@@ -43,23 +47,20 @@ export const CreateObjectDialog = ({
43
47
  const spaces = useSpaces();
44
48
  const { dispatchPromise: dispatch } = useIntentDispatcher();
45
49
  const forms = useCapabilities(SpaceCapabilities.ObjectForm);
50
+ const [target, setTarget] = useState<Space | DataType.Collection | undefined>(initialTarget);
51
+ const [typename, setTypename] = useState<string | undefined>(initialTypename);
52
+ const space = isSpace(target) ? target : getSpace(target);
53
+ const queryCollections = useQuery(space, Query.type(DataType.QueryCollection));
54
+ const hiddenTypenames = queryCollections.map((collection) => collection.query.typename).filter(isNonNullable);
46
55
 
47
- const resolve = useCallback(
48
- (typename: string) =>
56
+ const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
57
+ (typename) =>
49
58
  manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},
50
59
  [manager],
51
60
  );
52
61
 
53
- const handleCreateObject = useCallback(
54
- async ({
55
- form,
56
- target,
57
- data = {},
58
- }: {
59
- form: ObjectForm;
60
- target: CreateObjectPanelProps['target'];
61
- data?: Record<string, any>;
62
- }) => {
62
+ const handleCreateObject = useCallback<NonNullable<CreateObjectPanelProps['onCreateObject']>>(
63
+ async ({ form, data = {} }) => {
63
64
  if (!target) {
64
65
  // TODO(wittjosiah): UI feedback.
65
66
  return;
@@ -73,7 +74,9 @@ export const CreateObjectDialog = ({
73
74
  const result = await dispatch(form.getIntent(data, { space }));
74
75
  const object = result.data?.object;
75
76
  if (isLiveObject(object)) {
76
- const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object, hidden: form.hidden });
77
+ // TODO(wittjosiah): Selection in navtree isn't working as expected when hidden typenames evals to true.
78
+ const hidden = form.hidden || hiddenTypenames.includes(Type.getTypename(form.objectSchema));
79
+ const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object, hidden });
77
80
  const shouldNavigate = _shouldNavigate ?? (() => true);
78
81
  if (shouldNavigate(object)) {
79
82
  await dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
@@ -82,15 +85,17 @@ export const CreateObjectDialog = ({
82
85
  }
83
86
  }
84
87
  },
85
- [dispatch, resolve],
88
+ [dispatch, target, resolve, hiddenTypenames, _shouldNavigate],
86
89
  );
87
90
 
88
91
  return (
89
92
  // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
90
93
  // Consider factoring it out to the tabs package.
91
- <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>
92
- <div role='none' className='flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4'>
93
- <Dialog.Title>{t('create object dialog title')}</Dialog.Title>
94
+ <Dialog.Content classNames={cardDialogContent}>
95
+ <div role='none' className={cardDialogHeader}>
96
+ <Dialog.Title>
97
+ {t('create object dialog title', { object: t('typename label', { ns: typename, defaultValue: 'Item' }) })}
98
+ </Dialog.Title>
94
99
  <Dialog.Close asChild>
95
100
  <Button ref={closeRef} density='fine' variant='ghost' autoFocus>
96
101
  <Icon icon='ph--x--regular' size={4} />
@@ -99,7 +104,6 @@ export const CreateObjectDialog = ({
99
104
  </div>
100
105
 
101
106
  <CreateObjectPanel
102
- classNames='p-4'
103
107
  forms={forms}
104
108
  spaces={spaces}
105
109
  target={target}
@@ -107,6 +111,8 @@ export const CreateObjectDialog = ({
107
111
  name={name}
108
112
  defaultSpaceId={client.spaces.default.id}
109
113
  resolve={resolve}
114
+ onTargetChange={setTarget}
115
+ onTypenameChange={setTypename}
110
116
  onCreateObject={handleCreateObject}
111
117
  />
112
118
  </Dialog.Content>