@dxos/plugin-space 0.8.4-main.21d9917 → 0.8.4-main.2244d791bb

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 (231) hide show
  1. package/dist/lib/browser/CollectionArticle-LKTAABXP.mjs +128 -0
  2. package/dist/lib/browser/CollectionArticle-LKTAABXP.mjs.map +7 -0
  3. package/dist/lib/browser/{ObjectCardStack-TWHN6C2Y.mjs → ObjectCardStack-CXNBCSMR.mjs} +2 -2
  4. package/dist/lib/browser/ObjectCardStack-CXNBCSMR.mjs.map +7 -0
  5. package/dist/lib/browser/{ObjectDetails-GEDIISKK.mjs → ObjectDetails-HXV4IQEM.mjs} +6 -5
  6. package/dist/lib/browser/ObjectDetails-HXV4IQEM.mjs.map +7 -0
  7. package/dist/lib/browser/{RecordArticle-W57QE7QV.mjs → RecordArticle-36LDKFWF.mjs} +11 -10
  8. package/dist/lib/browser/RecordArticle-36LDKFWF.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-SJHTZXZF.mjs → app-graph-builder-GLV46QSI.mjs} +26 -19
  10. package/dist/lib/browser/app-graph-builder-GLV46QSI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-7AT7QMSK.mjs → app-graph-serializer-VOLRDNVE.mjs} +9 -8
  12. package/dist/lib/browser/app-graph-serializer-VOLRDNVE.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-ZT2VPYRM.mjs → chunk-7D63MVRS.mjs} +3 -3
  14. package/dist/lib/browser/chunk-7D63MVRS.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-4WZUGLQQ.mjs → chunk-A7ZCVQGZ.mjs} +10 -9
  16. package/dist/lib/browser/chunk-A7ZCVQGZ.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-CCRSHECL.mjs → chunk-KGLWYGIF.mjs} +4 -3
  18. package/dist/lib/browser/chunk-KGLWYGIF.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-AWVAX26X.mjs → chunk-NF3ZFAB4.mjs} +2 -2
  20. package/dist/lib/browser/{chunk-SUI34XSA.mjs → chunk-WAOJLA2S.mjs} +12 -12
  21. package/dist/lib/browser/chunk-WAOJLA2S.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-3X2EA2OA.mjs → chunk-XRTOZE23.mjs} +128 -137
  23. package/dist/lib/browser/chunk-XRTOZE23.mjs.map +7 -0
  24. package/dist/lib/browser/cli/index.mjs +31 -29
  25. package/dist/lib/browser/cli/index.mjs.map +3 -3
  26. package/dist/lib/browser/index.mjs +58 -53
  27. package/dist/lib/browser/index.mjs.map +3 -3
  28. package/dist/lib/browser/meta.json +1 -1
  29. package/dist/lib/browser/{operation-resolver-SIRQT36Z.mjs → operation-resolver-PJJ3PCM7.mjs} +45 -42
  30. package/dist/lib/browser/operation-resolver-PJJ3PCM7.mjs.map +7 -0
  31. package/dist/lib/browser/{react-root-PI7VTZUZ.mjs → react-root-MRIDHLHH.mjs} +8 -8
  32. package/dist/lib/browser/react-root-MRIDHLHH.mjs.map +7 -0
  33. package/dist/lib/browser/{react-surface-BPE7VWI7.mjs → react-surface-ARZZ343H.mjs} +38 -37
  34. package/dist/lib/browser/react-surface-ARZZ343H.mjs.map +7 -0
  35. package/dist/lib/browser/{repair-CJG26D52.mjs → repair-DKU4TUD2.mjs} +2 -2
  36. package/dist/lib/browser/{settings-ZS2AQ73E.mjs → settings-M2DMD2ZA.mjs} +5 -4
  37. package/dist/lib/browser/settings-M2DMD2ZA.mjs.map +7 -0
  38. package/dist/lib/browser/{spaces-ready-OQDGWUOS.mjs → spaces-ready-XWJUJ43N.mjs} +13 -12
  39. package/dist/lib/browser/spaces-ready-XWJUJ43N.mjs.map +7 -0
  40. package/dist/lib/browser/{state-7YZQB2KY.mjs → state-V637BLIM.mjs} +5 -5
  41. package/dist/lib/browser/state-V637BLIM.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +1 -1
  43. package/dist/lib/node-esm/CollectionArticle-ONQMZ7BQ.mjs +129 -0
  44. package/dist/lib/node-esm/CollectionArticle-ONQMZ7BQ.mjs.map +7 -0
  45. package/dist/lib/node-esm/{ObjectCardStack-C5ZXRKP7.mjs → ObjectCardStack-EHXPNRQW.mjs} +2 -2
  46. package/dist/lib/node-esm/ObjectCardStack-EHXPNRQW.mjs.map +7 -0
  47. package/dist/lib/node-esm/{ObjectDetails-6ZLDRKCO.mjs → ObjectDetails-N73UI4ZL.mjs} +6 -5
  48. package/dist/lib/node-esm/ObjectDetails-N73UI4ZL.mjs.map +7 -0
  49. package/dist/lib/node-esm/{RecordArticle-SSV74Z46.mjs → RecordArticle-CMEXNNOZ.mjs} +11 -10
  50. package/dist/lib/node-esm/RecordArticle-CMEXNNOZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/{app-graph-builder-HZ3XXDFZ.mjs → app-graph-builder-KCEHEKVS.mjs} +26 -19
  52. package/dist/lib/node-esm/app-graph-builder-KCEHEKVS.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-serializer-WJ2TIQG6.mjs → app-graph-serializer-7C4MV5NB.mjs} +9 -8
  54. package/dist/lib/node-esm/app-graph-serializer-7C4MV5NB.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-2SW6S2BB.mjs → chunk-5N3YIAXD.mjs} +3 -3
  56. package/dist/lib/node-esm/chunk-5N3YIAXD.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-JOBIWCBC.mjs → chunk-A5A7M37T.mjs} +10 -9
  58. package/dist/lib/node-esm/chunk-A5A7M37T.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-7KMYUWSR.mjs → chunk-FB5YNROS.mjs} +12 -12
  60. package/dist/lib/node-esm/chunk-FB5YNROS.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-MPL6NHQX.mjs → chunk-NYSDQPNM.mjs} +4 -3
  62. package/dist/lib/node-esm/chunk-NYSDQPNM.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-HREWB23G.mjs → chunk-PG7DNOEX.mjs} +2 -2
  64. package/dist/lib/node-esm/{chunk-EYS3L2NO.mjs → chunk-QDIOQTXY.mjs} +128 -137
  65. package/dist/lib/node-esm/chunk-QDIOQTXY.mjs.map +7 -0
  66. package/dist/lib/node-esm/cli/index.mjs +31 -29
  67. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  68. package/dist/lib/node-esm/index.mjs +58 -53
  69. package/dist/lib/node-esm/index.mjs.map +3 -3
  70. package/dist/lib/node-esm/meta.json +1 -1
  71. package/dist/lib/node-esm/{operation-resolver-ZE3XJL5J.mjs → operation-resolver-2K7N4KYC.mjs} +45 -42
  72. package/dist/lib/node-esm/operation-resolver-2K7N4KYC.mjs.map +7 -0
  73. package/dist/lib/node-esm/{react-root-KUXM33JI.mjs → react-root-LKSSWFGF.mjs} +8 -8
  74. package/dist/lib/node-esm/react-root-LKSSWFGF.mjs.map +7 -0
  75. package/dist/lib/node-esm/{react-surface-STCQKUZ4.mjs → react-surface-QG5RNBPD.mjs} +38 -37
  76. package/dist/lib/node-esm/react-surface-QG5RNBPD.mjs.map +7 -0
  77. package/dist/lib/node-esm/{repair-G3ZW3VG3.mjs → repair-C2H6JQCL.mjs} +2 -2
  78. package/dist/lib/node-esm/{settings-PVI2VG56.mjs → settings-VCPCNBOY.mjs} +5 -4
  79. package/dist/lib/node-esm/settings-VCPCNBOY.mjs.map +7 -0
  80. package/dist/lib/node-esm/{spaces-ready-R744OHQG.mjs → spaces-ready-5JOGEWON.mjs} +13 -12
  81. package/dist/lib/node-esm/spaces-ready-5JOGEWON.mjs.map +7 -0
  82. package/dist/lib/node-esm/{state-XE5YGPHM.mjs → state-5MCEPWN3.mjs} +5 -5
  83. package/dist/lib/node-esm/state-5MCEPWN3.mjs.map +7 -0
  84. package/dist/lib/node-esm/types/index.mjs +1 -1
  85. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +2 -1
  87. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
  89. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +2 -2
  91. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +1 -1
  93. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
  95. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  97. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  100. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  102. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  104. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/settings/settings.d.ts +3 -2
  106. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
  109. package/dist/types/src/cli/commands/database/add.d.ts.map +1 -1
  110. package/dist/types/src/cli/plugin.d.ts.map +1 -1
  111. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  112. package/dist/types/src/components/CollectionArticle.d.ts +2 -2
  113. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -1
  114. package/dist/types/src/components/CollectionSection.d.ts +1 -1
  115. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  116. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1 -1
  118. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +4 -1
  119. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  120. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -1
  121. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -1
  122. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1 -1
  123. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts +1 -1
  124. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts.map +1 -1
  125. package/dist/types/src/components/RecordArticle.d.ts +1 -1
  126. package/dist/types/src/components/RecordArticle.d.ts.map +1 -1
  127. package/dist/types/src/components/RecordArticle.stories.d.ts +1 -1
  128. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  130. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  131. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -1
  132. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +4 -1
  133. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +4 -1
  135. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/index.d.ts +3 -3
  137. package/dist/types/src/components/index.d.ts.map +1 -1
  138. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  139. package/dist/types/src/types/events.d.ts.map +1 -1
  140. package/dist/types/src/types/types.d.ts +18 -12
  141. package/dist/types/src/types/types.d.ts.map +1 -1
  142. package/dist/types/src/util.d.ts +2 -1
  143. package/dist/types/src/util.d.ts.map +1 -1
  144. package/dist/types/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +66 -65
  146. package/src/SpacePlugin.ts +59 -40
  147. package/src/capabilities/app-graph-builder/app-graph-builder.ts +17 -13
  148. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +5 -4
  149. package/src/capabilities/operation-resolver/operation-resolver.ts +31 -29
  150. package/src/capabilities/react-root/react-root.tsx +3 -3
  151. package/src/capabilities/react-surface/react-surface.tsx +34 -32
  152. package/src/capabilities/settings/settings.ts +3 -2
  153. package/src/capabilities/spaces-ready/spaces-ready.ts +8 -7
  154. package/src/capabilities/state/state.ts +3 -3
  155. package/src/cli/commands/database/add.ts +7 -8
  156. package/src/cli/commands/database/query/query.ts +1 -1
  157. package/src/cli/commands/database/remove.ts +2 -2
  158. package/src/cli/commands/database/stats.ts +1 -1
  159. package/src/cli/plugin.ts +33 -26
  160. package/src/components/AwaitingObject.tsx +4 -3
  161. package/src/components/CollectionArticle.tsx +71 -72
  162. package/src/components/CollectionSection.tsx +1 -1
  163. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +1 -1
  164. package/src/components/CreateDialog/CreateObjectDialog.tsx +20 -17
  165. package/src/components/CreateDialog/CreateObjectPanel.tsx +38 -39
  166. package/src/components/CreateDialog/CreateSpaceDialog.tsx +21 -21
  167. package/src/components/JoinDialog/JoinDialog.tsx +8 -7
  168. package/src/components/MembersContainer/MembersContainer.stories.tsx +1 -1
  169. package/src/components/MembersContainer/MembersContainer.tsx +45 -48
  170. package/src/components/ObjectCardStack/ObjectCardStack.tsx +1 -1
  171. package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +4 -4
  172. package/src/components/ObjectDetails/ObjectDetails.tsx +6 -5
  173. package/src/components/ObjectRenamePopover/ObjectRenamePopover.tsx +3 -3
  174. package/src/components/RecordArticle.stories.tsx +6 -5
  175. package/src/components/RecordArticle.tsx +23 -21
  176. package/src/components/SchemaContainer.tsx +20 -17
  177. package/src/components/SpacePluginSettings.tsx +34 -31
  178. package/src/components/SpacePresence/SpacePresence.stories.tsx +1 -1
  179. package/src/components/SpacePresence/SpacePresence.tsx +2 -1
  180. package/src/components/SpaceRenamePopover/SpaceRenamePopover.tsx +3 -3
  181. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +1 -1
  182. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +161 -179
  183. package/src/components/SyncStatus/InlineSyncStatus.tsx +1 -1
  184. package/src/components/SyncStatus/SyncStatus.stories.tsx +1 -1
  185. package/src/components/ViewEditor.tsx +1 -1
  186. package/src/hooks/useActiveSpace.ts +5 -4
  187. package/src/hooks/useInputSurfaceLookup.tsx +3 -3
  188. package/src/translations.ts +2 -2
  189. package/src/types/events.ts +3 -2
  190. package/src/types/types.ts +10 -3
  191. package/src/util.tsx +9 -6
  192. package/dist/lib/browser/CollectionArticle-XPNA6EHZ.mjs +0 -129
  193. package/dist/lib/browser/CollectionArticle-XPNA6EHZ.mjs.map +0 -7
  194. package/dist/lib/browser/ObjectCardStack-TWHN6C2Y.mjs.map +0 -7
  195. package/dist/lib/browser/ObjectDetails-GEDIISKK.mjs.map +0 -7
  196. package/dist/lib/browser/RecordArticle-W57QE7QV.mjs.map +0 -7
  197. package/dist/lib/browser/app-graph-builder-SJHTZXZF.mjs.map +0 -7
  198. package/dist/lib/browser/app-graph-serializer-7AT7QMSK.mjs.map +0 -7
  199. package/dist/lib/browser/chunk-3X2EA2OA.mjs.map +0 -7
  200. package/dist/lib/browser/chunk-4WZUGLQQ.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-CCRSHECL.mjs.map +0 -7
  202. package/dist/lib/browser/chunk-SUI34XSA.mjs.map +0 -7
  203. package/dist/lib/browser/chunk-ZT2VPYRM.mjs.map +0 -7
  204. package/dist/lib/browser/operation-resolver-SIRQT36Z.mjs.map +0 -7
  205. package/dist/lib/browser/react-root-PI7VTZUZ.mjs.map +0 -7
  206. package/dist/lib/browser/react-surface-BPE7VWI7.mjs.map +0 -7
  207. package/dist/lib/browser/settings-ZS2AQ73E.mjs.map +0 -7
  208. package/dist/lib/browser/spaces-ready-OQDGWUOS.mjs.map +0 -7
  209. package/dist/lib/browser/state-7YZQB2KY.mjs.map +0 -7
  210. package/dist/lib/node-esm/CollectionArticle-WGHNZNO2.mjs +0 -130
  211. package/dist/lib/node-esm/CollectionArticle-WGHNZNO2.mjs.map +0 -7
  212. package/dist/lib/node-esm/ObjectCardStack-C5ZXRKP7.mjs.map +0 -7
  213. package/dist/lib/node-esm/ObjectDetails-6ZLDRKCO.mjs.map +0 -7
  214. package/dist/lib/node-esm/RecordArticle-SSV74Z46.mjs.map +0 -7
  215. package/dist/lib/node-esm/app-graph-builder-HZ3XXDFZ.mjs.map +0 -7
  216. package/dist/lib/node-esm/app-graph-serializer-WJ2TIQG6.mjs.map +0 -7
  217. package/dist/lib/node-esm/chunk-2SW6S2BB.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-7KMYUWSR.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-EYS3L2NO.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-JOBIWCBC.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-MPL6NHQX.mjs.map +0 -7
  222. package/dist/lib/node-esm/operation-resolver-ZE3XJL5J.mjs.map +0 -7
  223. package/dist/lib/node-esm/react-root-KUXM33JI.mjs.map +0 -7
  224. package/dist/lib/node-esm/react-surface-STCQKUZ4.mjs.map +0 -7
  225. package/dist/lib/node-esm/settings-PVI2VG56.mjs.map +0 -7
  226. package/dist/lib/node-esm/spaces-ready-R744OHQG.mjs.map +0 -7
  227. package/dist/lib/node-esm/state-XE5YGPHM.mjs.map +0 -7
  228. /package/dist/lib/browser/{chunk-AWVAX26X.mjs.map → chunk-NF3ZFAB4.mjs.map} +0 -0
  229. /package/dist/lib/browser/{repair-CJG26D52.mjs.map → repair-DKU4TUD2.mjs.map} +0 -0
  230. /package/dist/lib/node-esm/{chunk-HREWB23G.mjs.map → chunk-PG7DNOEX.mjs.map} +0 -0
  231. /package/dist/lib/node-esm/{repair-G3ZW3VG3.mjs.map → repair-C2H6JQCL.mjs.map} +0 -0
package/src/cli/plugin.ts CHANGED
@@ -4,7 +4,8 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Capability, Common, Plugin } from '@dxos/app-framework';
7
+ import { ActivationEvents, Capability, Plugin } from '@dxos/app-framework';
8
+ import { AppPlugin } from '@dxos/app-toolkit';
8
9
  import { Tag } from '@dxos/echo';
9
10
  import { ClientEvents } from '@dxos/plugin-client/types';
10
11
  import { Collection, DataTypes } from '@dxos/schema';
@@ -17,7 +18,7 @@ import {
17
18
  HasSubject,
18
19
  Organization,
19
20
  Person,
20
- Project,
21
+ Pipeline,
21
22
  Task,
22
23
  } from '@dxos/types';
23
24
 
@@ -31,10 +32,19 @@ import { database, queue, space } from './commands';
31
32
 
32
33
  export const SpacePlugin = Plugin.define<SpacePluginOptions>(meta).pipe(
33
34
  // TODO(wittjosiah): Could some of these commands make use of operations?
34
- Common.Plugin.addCommandModule({
35
+ AppPlugin.addCommandModule({
35
36
  commands: [database, queue, space],
36
37
  }),
37
- Common.Plugin.addSchemaModule({
38
+ AppPlugin.addMetadataModule({
39
+ metadata: {
40
+ id: Collection.Collection.typename,
41
+ metadata: {
42
+ createObject: ((props) => Effect.sync(() => Collection.make(props))) satisfies CreateObject,
43
+ addToCollectionOnCreate: true,
44
+ },
45
+ },
46
+ }),
47
+ AppPlugin.addSchemaModule({
38
48
  schema: [
39
49
  ...DataTypes,
40
50
  AnchoredTo.AnchoredTo,
@@ -45,33 +55,30 @@ export const SpacePlugin = Plugin.define<SpacePluginOptions>(meta).pipe(
45
55
  HasSubject.HasSubject,
46
56
  Organization.Organization,
47
57
  Person.Person,
48
- Project.Project,
58
+ Pipeline.Pipeline,
49
59
  Tag.Tag,
50
60
  Task.Task,
51
61
  ],
52
62
  }),
53
- Common.Plugin.addMetadataModule({
54
- metadata: {
55
- id: Collection.Collection.typename,
56
- metadata: {
57
- createObject: ((props) => Effect.sync(() => Collection.make(props))) satisfies CreateObject,
58
- addToCollectionOnCreate: true,
59
- },
60
- },
61
- }),
62
- Plugin.addModule(({ invitationUrl = 'http://localhost:5173', invitationProp = 'spaceInvitationCode' }) => {
63
- const createInvitationUrl = (invitationCode: string) => {
64
- const baseUrl = new URL(invitationUrl);
65
- baseUrl.searchParams.set(invitationProp, invitationCode);
66
- return baseUrl.toString();
67
- };
63
+ Plugin.addModule(
64
+ ({
65
+ shareableLinkOrigin = 'http://localhost:5173',
66
+ invitationPath = '/',
67
+ invitationProp = 'spaceInvitationCode',
68
+ }) => {
69
+ const createInvitationUrl = (invitationCode: string) => {
70
+ const baseUrl = new URL(invitationPath || '/', shareableLinkOrigin);
71
+ baseUrl.searchParams.set(invitationProp, invitationCode);
72
+ return baseUrl.toString();
73
+ };
68
74
 
69
- return {
70
- id: Capability.getModuleTag(OperationResolver),
71
- activatesOn: Common.ActivationEvent.SetupOperationResolver,
72
- activate: () => OperationResolver({ createInvitationUrl, observability: false }),
73
- };
74
- }),
75
+ return {
76
+ id: Capability.getModuleTag(OperationResolver),
77
+ activatesOn: ActivationEvents.SetupOperationResolver,
78
+ activate: () => OperationResolver({ createInvitationUrl, observability: false }),
79
+ };
80
+ },
81
+ ),
75
82
  Plugin.addModule({
76
83
  activatesOn: ClientEvents.IdentityCreated,
77
84
  activatesAfter: [SpaceEvents.DefaultSpaceReady],
@@ -4,8 +4,9 @@
4
4
 
5
5
  import React, { useCallback, useEffect, useState } from 'react';
6
6
 
7
- import { Common } from '@dxos/app-framework';
8
- import { useLayout, useOperationInvoker } from '@dxos/app-framework/react';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
9
+ import { useLayout } from '@dxos/app-toolkit/ui';
9
10
  import { Obj } from '@dxos/echo';
10
11
  import { useClient } from '@dxos/react-client';
11
12
  import { Filter, useQuery } from '@dxos/react-client/echo';
@@ -53,7 +54,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
53
54
  );
54
55
 
55
56
  const handleNavigate = useCallback(() => {
56
- void invokePromise(Common.LayoutOperation.Open, { subject: [id] });
57
+ void invokePromise(LayoutOperation.Open, { subject: [id] });
57
58
  void handleClose();
58
59
  }, [id, handleClose, invokePromise]);
59
60
 
@@ -2,27 +2,37 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { useMemo } from 'react';
5
+ import React, { useCallback, useMemo } from 'react';
6
6
 
7
- import { Common } from '@dxos/app-framework';
8
- import { type SurfaceComponentProps, useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';
7
+ import { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
9
+ import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
9
10
  import { Filter, Obj } from '@dxos/echo';
10
- import { Graph, Node, useActionRunner, useConnections } from '@dxos/plugin-graph';
11
11
  import { useClient } from '@dxos/react-client';
12
12
  import { getSpace, useQuery } from '@dxos/react-client/echo';
13
- import { Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';
14
- import { Card, Layout, Mosaic, type StackTileComponent } from '@dxos/react-ui-mosaic';
13
+ import { Layout, ScrollArea, Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';
14
+ import { Card, Mosaic, type MosaicStackTileComponent } from '@dxos/react-ui-mosaic';
15
15
  import { SearchList, useSearchListResults } from '@dxos/react-ui-searchlist';
16
16
  import { Collection } from '@dxos/schema';
17
+ import { getStyles } from '@dxos/ui-theme';
17
18
 
18
19
  import { meta } from '../meta';
19
20
 
20
21
  /**
21
- *
22
+ * Hook to resolve metadata (icon, iconHue, etc.) for objects based on their typename.
23
+ */
24
+ const useMetadataResolver = () => {
25
+ const allMetadata = useCapabilities(AppCapabilities.Metadata);
26
+ return useCallback((typename: string) => allMetadata.find((m) => m.id === typename)?.metadata ?? {}, [allMetadata]);
27
+ };
28
+
29
+ /**
30
+ * Article view for collections.
22
31
  */
23
32
  export const CollectionArticle = ({ subject }: SurfaceComponentProps<Collection.Collection | Collection.Managed>) => {
24
33
  const { t } = useTranslation(meta.id);
25
- const { items, handleSearch } = useCollectionItems(subject);
34
+ const resolveMetadata = useMetadataResolver();
35
+ const { items, handleSearch } = useCollectionItems(subject, resolveMetadata);
26
36
 
27
37
  return (
28
38
  <Layout.Main toolbar>
@@ -32,9 +42,11 @@ export const CollectionArticle = ({ subject }: SurfaceComponentProps<Collection.
32
42
  </Toolbar.Root>
33
43
  <SearchList.Content>
34
44
  <Mosaic.Container asChild>
35
- <Mosaic.Viewport padding>
36
- <Mosaic.Stack items={items} getId={(node) => node.id} Tile={NodeTile} />
37
- </Mosaic.Viewport>
45
+ <ScrollArea.Root orientation='vertical'>
46
+ <ScrollArea.Viewport classNames='p-2'>
47
+ <Mosaic.Stack items={items} getId={(item) => item.id} Tile={ObjectTile} />
48
+ </ScrollArea.Viewport>
49
+ </ScrollArea.Root>
38
50
  </Mosaic.Container>
39
51
  </SearchList.Content>
40
52
  </SearchList.Root>
@@ -42,32 +54,32 @@ export const CollectionArticle = ({ subject }: SurfaceComponentProps<Collection.
42
54
  );
43
55
  };
44
56
 
45
- const NodeTile: StackTileComponent<Node.Node> = ({ data: node }) => {
57
+ type ObjectItem = {
58
+ id: string;
59
+ object: Obj.Unknown;
60
+ icon: string;
61
+ iconHue?: string;
62
+ };
63
+
64
+ const ObjectTile: MosaicStackTileComponent<ObjectItem> = (props) => {
65
+ const item = props.data;
46
66
  const { t } = useTranslation(meta.id);
47
- const { graph } = useAppGraph();
48
67
  const { invokeSync } = useOperationInvoker();
49
- const runAction = useActionRunner();
50
68
 
51
- const label = toLocalizedString(node.properties.label, t);
52
- const icon = node.properties.icon ?? 'ph--placeholder--regular';
69
+ const typename = Obj.getTypename(item.object) ?? '';
70
+ const label =
71
+ Obj.getLabel(item.object) ??
72
+ toLocalizedString(['object name placeholder', { ns: typename, defaultValue: item.id }], t);
73
+ const styles = item.iconHue ? getStyles(item.iconHue) : undefined;
53
74
 
54
75
  const handleClick = () => {
55
- if (Node.isAction(node)) {
56
- // Run action if this is an action node.
57
- const [parent] = Graph.getConnections(graph, node.id, 'inbound');
58
- if (parent) {
59
- void runAction(node, { parent });
60
- }
61
- } else {
62
- // Navigate to the node.
63
- invokeSync(Common.LayoutOperation.Open, { subject: [node.id] });
64
- }
76
+ invokeSync(LayoutOperation.Open, { subject: [item.id] });
65
77
  };
66
78
 
67
79
  return (
68
80
  <Card.Root fullWidth>
69
81
  <Card.Toolbar>
70
- <Card.ToolbarIconButton variant='ghost' label={label} icon={icon} />
82
+ <Card.ToolbarIconButton variant='ghost' label={label} icon={item.icon} iconOnly iconClassNames={styles?.icon} />
71
83
  <Card.Title onClick={handleClick}>{label}</Card.Title>
72
84
  <Card.Menu />
73
85
  </Card.Toolbar>
@@ -78,32 +90,19 @@ const NodeTile: StackTileComponent<Node.Node> = ({ data: node }) => {
78
90
  export default CollectionArticle;
79
91
 
80
92
  /**
81
- * Hook to get items from a regular collection using graph connections.
93
+ * Hook to get items from a regular collection.
82
94
  */
83
- const useRegularCollectionItems = (collection: Collection.Collection) => {
84
- const { graph } = useAppGraph();
85
- const collectionId = Obj.getDXN(collection).toString();
86
- const children = useConnections(graph, collectionId, 'outbound');
87
-
88
- // Filter children to those which are objects or actions with disposition 'item'.
95
+ const useRegularCollectionItems = (collection: Collection.Collection): Obj.Unknown[] => {
89
96
  return useMemo(
90
- () =>
91
- children.filter((node) => {
92
- // Include regular objects.
93
- if (Obj.isObject(node.data)) {
94
- return true;
95
- }
96
- // Include actions with disposition 'item'.
97
- return Node.isAction(node) && node.properties.disposition === 'item';
98
- }),
99
- [children],
97
+ () => (collection.objects ?? []).map((ref) => ref.target).filter((obj): obj is Obj.Unknown => Obj.isObject(obj)),
98
+ [collection.objects],
100
99
  );
101
100
  };
102
101
 
103
102
  /**
104
103
  * Hook to get items from a managed collection by querying the space.
105
104
  */
106
- const useManagedCollectionItems = (collection: Collection.Managed) => {
105
+ const useManagedCollectionItems = (collection: Collection.Managed): Obj.Unknown[] => {
107
106
  const client = useClient();
108
107
  const space = getSpace(collection);
109
108
 
@@ -112,46 +111,46 @@ const useManagedCollectionItems = (collection: Collection.Managed) => {
112
111
  [client, collection],
113
112
  );
114
113
 
115
- const objects = useQuery(space?.db, schema ? Filter.type(schema) : Filter.nothing());
116
-
117
- // Convert objects to node-like items for consistent rendering.
118
- return useMemo(
119
- () =>
120
- objects.map(
121
- (obj) =>
122
- ({
123
- id: Obj.getDXN(obj).toString(),
124
- type: 'managed-object',
125
- data: obj,
126
- properties: {
127
- label: Obj.getLabel(obj) ?? obj.id,
128
- icon: 'ph--placeholder--regular',
129
- },
130
- }) as Node.Node,
131
- ),
132
- [objects],
133
- );
114
+ return useQuery(space?.db, schema ? Filter.type(schema) : Filter.nothing());
134
115
  };
135
116
 
117
+ type MetadataResolver = (typename: string) => { icon?: string; iconHue?: string };
118
+
136
119
  /**
137
120
  * Combined hook to get collection items with search/filter support.
138
121
  */
139
- const useCollectionItems = (collection: Collection.Collection | Collection.Managed) => {
122
+ const useCollectionItems = (
123
+ collection: Collection.Collection | Collection.Managed,
124
+ resolveMetadata: MetadataResolver,
125
+ ) => {
140
126
  const isManaged = Obj.instanceOf(Collection.Managed, collection);
141
127
 
142
128
  // Call both hooks unconditionally to satisfy React's rules of hooks.
143
- const regularItems = useRegularCollectionItems(collection as Collection.Collection);
144
- const managedItems = useManagedCollectionItems(collection as Collection.Managed);
129
+ const regularObjects = useRegularCollectionItems(collection as Collection.Collection);
130
+ const managedObjects = useManagedCollectionItems(collection as Collection.Managed);
145
131
 
146
- const items = isManaged ? managedItems : regularItems;
132
+ const objects = isManaged ? managedObjects : regularObjects;
133
+
134
+ // Convert objects to items with resolved metadata.
135
+ const items = useMemo(
136
+ () =>
137
+ objects.map((obj) => {
138
+ const typename = Obj.getTypename(obj);
139
+ const metadata = typename ? resolveMetadata(typename) : {};
140
+ return {
141
+ id: Obj.getDXN(obj).toString(),
142
+ object: obj,
143
+ icon: metadata.icon ?? 'ph--placeholder--regular',
144
+ iconHue: metadata.iconHue,
145
+ } satisfies ObjectItem;
146
+ }),
147
+ [objects, resolveMetadata],
148
+ );
147
149
 
148
150
  // Use searchlist results for filtering.
149
151
  const { results, handleSearch } = useSearchListResults({
150
152
  items,
151
- extract: (node) => {
152
- const label = node.properties.label;
153
- return typeof label === 'string' ? label : (label?.en ?? node.id);
154
- },
153
+ extract: (item) => Obj.getLabel(item.object) ?? item.id,
155
154
  });
156
155
 
157
156
  return { items: results, handleSearch };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { type SurfaceComponentProps } from '@dxos/app-framework/react';
7
+ import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
8
8
  import { useTranslation } from '@dxos/react-ui';
9
9
  import { type Collection } from '@dxos/schema';
10
10
 
@@ -35,7 +35,7 @@ const meta = {
35
35
  component: CreateObjectDialog,
36
36
  render: DefaultStory,
37
37
  decorators: [
38
- withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
38
+ withTheme(), // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
39
39
  withPluginManager({
40
40
  plugins: [RuntimePlugin(), OperationPlugin()],
41
41
  }),
@@ -5,8 +5,9 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
  import React, { useCallback, useMemo, useRef, useState } from 'react';
7
7
 
8
- import { Capability, Common } from '@dxos/app-framework';
9
- import { useOperationInvoker, usePluginManager } from '@dxos/app-framework/react';
8
+ import { Capability } from '@dxos/app-framework';
9
+ import { useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';
10
+ import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
10
11
  import { Database, Obj, Type } from '@dxos/echo';
11
12
  import { EntityKind, getTypeAnnotation } from '@dxos/echo/internal';
12
13
  import { runAndForwardErrors } from '@dxos/effect';
@@ -52,7 +53,7 @@ export const CreateObjectDialog = ({
52
53
  const resolve = useCallback<NonNullable<CreateObjectPanelProps['resolve']>>(
53
54
  (typename) => {
54
55
  const metadata = manager.capabilities
55
- .getAll(Common.Capability.Metadata)
56
+ .getAll(AppCapabilities.Metadata)
56
57
  .find(({ id }) => id === typename)?.metadata;
57
58
  return metadata?.createObject ? (metadata as Metadata) : undefined;
58
59
  },
@@ -95,7 +96,7 @@ export const CreateObjectDialog = ({
95
96
  const shouldNavigate = _shouldNavigate ?? (() => true);
96
97
  if (shouldNavigate(object)) {
97
98
  yield* Effect.promise(() =>
98
- operationInvoker.invokePromise(Common.LayoutOperation.Open, {
99
+ operationInvoker.invokePromise(LayoutOperation.Open, {
99
100
  subject: [Obj.getDXN(object).toString()],
100
101
  }),
101
102
  );
@@ -126,19 +127,21 @@ export const CreateObjectDialog = ({
126
127
  <Dialog.CloseIconButton ref={closeRef} />
127
128
  </Dialog.Close>
128
129
  </Dialog.Header>
129
- <CreateObjectPanel
130
- schemas={userSchemas}
131
- spaces={spaces}
132
- target={target}
133
- views={views}
134
- typename={typename}
135
- initialFormValues={initialFormValues}
136
- defaultSpaceId={client.spaces.default.id}
137
- resolve={resolve}
138
- onTargetChange={setTarget}
139
- onTypenameChange={setTypename}
140
- onCreateObject={handleCreateObject}
141
- />
130
+ <Dialog.Body>
131
+ <CreateObjectPanel
132
+ schemas={userSchemas}
133
+ spaces={spaces}
134
+ target={target}
135
+ views={views}
136
+ typename={typename}
137
+ initialFormValues={initialFormValues}
138
+ defaultSpaceId={client.spaces.default.id}
139
+ resolve={resolve}
140
+ onTargetChange={setTarget}
141
+ onTypenameChange={setTypename}
142
+ onCreateObject={handleCreateObject}
143
+ />
144
+ </Dialog.Body>
142
145
  </Dialog.Content>
143
146
  );
144
147
  };
@@ -128,6 +128,8 @@ export const CreateObjectPanel = ({
128
128
  ) : null;
129
129
  };
130
130
 
131
+ CreateObjectPanel.displayName = 'CreateObjectPanel';
132
+
131
133
  const SelectSpace = ({
132
134
  spaces,
133
135
  defaultSpaceId,
@@ -166,33 +168,32 @@ const SelectSpace = ({
166
168
  ),
167
169
  });
168
170
 
171
+ // TODO(burdon): Replace with Combobox.
169
172
  return (
170
173
  <SearchList.Root onSearch={handleSearch}>
171
- <div aria-label={t('space input label')} role='combobox' aria-expanded='true'>
174
+ <SearchList.Content>
172
175
  <SearchList.Input
173
176
  autoFocus
174
177
  data-testid='create-object-form.space-input'
175
178
  placeholder={t('space input placeholder')}
176
179
  />
177
- <SearchList.Content>
178
- <SearchList.Viewport>
179
- {results.map((space) => (
180
- <SearchList.Item
181
- key={space.id}
182
- value={space.id}
183
- label={toLocalizedString(
184
- getSpaceDisplayName(space, {
185
- personal: space.id === defaultSpaceId,
186
- }),
187
- t,
188
- )}
189
- onSelect={() => onChange?.(space.db)}
190
- classNames='flex items-center gap-2'
191
- />
192
- ))}
193
- </SearchList.Viewport>
194
- </SearchList.Content>
195
- </div>
180
+ <SearchList.Viewport>
181
+ {results.map((space) => (
182
+ <SearchList.Item
183
+ key={space.id}
184
+ value={space.id}
185
+ label={toLocalizedString(
186
+ getSpaceDisplayName(space, {
187
+ personal: space.id === defaultSpaceId,
188
+ }),
189
+ t,
190
+ )}
191
+ onSelect={() => onChange?.(space.db)}
192
+ classNames='flex items-center gap-2'
193
+ />
194
+ ))}
195
+ </SearchList.Viewport>
196
+ </SearchList.Content>
196
197
  </SearchList.Root>
197
198
  );
198
199
  };
@@ -218,30 +219,28 @@ const SelectSchema = ({
218
219
 
219
220
  return (
220
221
  <SearchList.Root onSearch={handleSearch}>
221
- <div aria-label={t('schema input label')} role='combobox' aria-expanded='true'>
222
+ <SearchList.Content>
222
223
  <SearchList.Input
223
224
  autoFocus
224
225
  data-testid='create-object-form.schema-input'
225
226
  placeholder={t('schema input placeholder')}
226
227
  />
227
- <SearchList.Content>
228
- <SearchList.Viewport>
229
- {results.map((option) => (
230
- <SearchList.Item
231
- key={option.typename}
232
- value={option.typename}
233
- label={t('typename label', {
234
- ns: option.typename,
235
- defaultValue: option.typename,
236
- })}
237
- icon={resolve?.(option.typename)?.icon ?? 'ph--placeholder--regular'}
238
- onSelect={() => onChange(option.typename)}
239
- classNames='flex items-center gap-2'
240
- />
241
- ))}
242
- </SearchList.Viewport>
243
- </SearchList.Content>
244
- </div>
228
+ <SearchList.Viewport>
229
+ {results.map((option) => (
230
+ <SearchList.Item
231
+ key={option.typename}
232
+ value={option.typename}
233
+ label={t('typename label', {
234
+ ns: option.typename,
235
+ defaultValue: option.typename,
236
+ })}
237
+ icon={resolve?.(option.typename)?.icon ?? 'ph--placeholder--regular'}
238
+ onSelect={() => onChange(option.typename)}
239
+ classNames='flex items-center gap-2'
240
+ />
241
+ ))}
242
+ </SearchList.Viewport>
243
+ </SearchList.Content>
245
244
  </SearchList.Root>
246
245
  );
247
246
  };
@@ -6,8 +6,8 @@ import * as Effect from 'effect/Effect';
6
6
  import type * as Schema from 'effect/Schema';
7
7
  import React, { useCallback, useRef } from 'react';
8
8
 
9
- import { Common } from '@dxos/app-framework';
10
- import { useOperationInvoker } from '@dxos/app-framework/react';
9
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
10
+ import { LayoutOperation } from '@dxos/app-toolkit';
11
11
  import { runAndForwardErrors } from '@dxos/effect';
12
12
  import { Dialog, useTranslation } from '@dxos/react-ui';
13
13
  import { Form } from '@dxos/react-ui-form';
@@ -33,10 +33,8 @@ export const CreateSpaceDialog = () => {
33
33
  const program = Effect.gen(function* () {
34
34
  const { data: result } = yield* Effect.promise(() => invokePromise(SpaceOperation.Create, data));
35
35
  if (result?.space) {
36
- yield* Effect.promise(() =>
37
- invokePromise(Common.LayoutOperation.SwitchWorkspace, { subject: result.space.id }),
38
- );
39
- yield* Effect.promise(() => invokePromise(Common.LayoutOperation.UpdateDialog, { state: false }));
36
+ yield* Effect.promise(() => invokePromise(LayoutOperation.SwitchWorkspace, { subject: result.space.id }));
37
+ yield* Effect.promise(() => invokePromise(LayoutOperation.UpdateDialog, { state: false }));
40
38
  }
41
39
  });
42
40
  await runAndForwardErrors(program);
@@ -52,21 +50,23 @@ export const CreateSpaceDialog = () => {
52
50
  <Dialog.CloseIconButton ref={closeRef} />
53
51
  </Dialog.Close>
54
52
  </Dialog.Header>
55
- <Form.Root
56
- testId='create-space-form'
57
- autoFocus
58
- schema={SpaceForm}
59
- values={initialValues}
60
- fieldProvider={inputSurfaceLookup}
61
- onSave={handleCreateSpace}
62
- >
63
- <Form.Viewport>
64
- <Form.Content>
65
- <Form.FieldSet />
66
- <Form.Submit />
67
- </Form.Content>
68
- </Form.Viewport>
69
- </Form.Root>
53
+ <Dialog.Body>
54
+ <Form.Root
55
+ testId='create-space-form'
56
+ autoFocus
57
+ schema={SpaceForm}
58
+ values={initialValues}
59
+ fieldProvider={inputSurfaceLookup}
60
+ onSave={handleCreateSpace}
61
+ >
62
+ <Form.Viewport>
63
+ <Form.Content>
64
+ <Form.FieldSet />
65
+ <Form.Submit />
66
+ </Form.Content>
67
+ </Form.Viewport>
68
+ </Form.Root>
69
+ </Dialog.Body>
70
70
  </Dialog.Content>
71
71
  );
72
72
  };
@@ -4,8 +4,9 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { Common } from '@dxos/app-framework';
8
- import { useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
9
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
9
10
  import { Trigger } from '@dxos/async';
10
11
  import { Graph } from '@dxos/plugin-graph';
11
12
  import { ObservabilityOperation } from '@dxos/plugin-observability/types';
@@ -38,13 +39,13 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
38
39
  }
39
40
 
40
41
  await Promise.all([
41
- invokePromise(Common.LayoutOperation.AddToast, {
42
+ invokePromise(LayoutOperation.AddToast, {
42
43
  id: `${meta.id}/join-success`,
43
44
  duration: 5_000,
44
45
  title: ['join success label', { ns: meta.id }],
45
46
  closeLabel: ['dismiss label', { ns: meta.id }],
46
47
  }),
47
- invokePromise(Common.LayoutOperation.UpdateDialog, { state: false }),
48
+ invokePromise(LayoutOperation.UpdateDialog, { state: false }),
48
49
  ]);
49
50
 
50
51
  let space = client.spaces.get(spaceKey);
@@ -60,7 +61,7 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
60
61
  space = await trigger.wait();
61
62
  }
62
63
 
63
- await invokePromise(Common.LayoutOperation.SwitchWorkspace, { subject: space.id });
64
+ await invokePromise(LayoutOperation.SwitchWorkspace, { subject: space.id });
64
65
 
65
66
  // TODO(wittjosiah): If navigableCollections is false and there's no target,
66
67
  // should try to navigate to the first object of the space replicates.
@@ -71,8 +72,8 @@ export const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialo
71
72
  // If the target has not yet replicated, this will trigger a loading toast.
72
73
  await Graph.waitForPath(graph, { target }).catch(() => {});
73
74
  await Promise.all([
74
- invokePromise(Common.LayoutOperation.Open, { subject: [target] }),
75
- invokePromise(Common.LayoutOperation.Expose, { subject: target }),
75
+ invokePromise(LayoutOperation.Open, { subject: [target] }),
76
+ invokePromise(LayoutOperation.Expose, { subject: target }),
76
77
  ]);
77
78
  }
78
79
 
@@ -36,7 +36,7 @@ const meta = {
36
36
  component: MembersContainer as any,
37
37
  render: render(DefaultStory),
38
38
  decorators: [
39
- withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
39
+ withTheme(), // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
40
40
  withPluginManager({ plugins: [OperationPlugin()] }),
41
41
  withClientProvider({
42
42
  createIdentity: true,