@dxos/plugin-deck 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7

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 (234) hide show
  1. package/dist/lib/browser/Banner-HXRXEUOZ.mjs +14 -0
  2. package/dist/lib/browser/Banner-HXRXEUOZ.mjs.map +7 -0
  3. package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs +96 -0
  4. package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs.map +7 -0
  5. package/dist/lib/browser/{app-graph-builder-DTVCULQ4.mjs → app-graph-builder-MP6INIM2.mjs} +16 -13
  6. package/dist/lib/browser/app-graph-builder-MP6INIM2.mjs.map +7 -0
  7. package/dist/lib/browser/{check-app-scheme-JSRXXIYF.mjs → check-app-scheme-AUNCD2Y6.mjs} +9 -8
  8. package/dist/lib/browser/check-app-scheme-AUNCD2Y6.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-ATFPDN6J.mjs → chunk-3P2FJVXC.mjs} +35 -49
  10. package/dist/lib/browser/chunk-3P2FJVXC.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-BJDEG7YZ.mjs +74 -0
  12. package/dist/lib/browser/chunk-BJDEG7YZ.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-EREEXCHO.mjs → chunk-ITNJS5QX.mjs} +214 -276
  14. package/dist/lib/browser/chunk-ITNJS5QX.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-L3RYMAV7.mjs +16 -0
  16. package/dist/lib/browser/chunk-L3RYMAV7.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-UNG4CLLP.mjs → chunk-TAHLKBDO.mjs} +46 -20
  18. package/dist/lib/browser/chunk-TAHLKBDO.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +39 -35
  20. package/dist/lib/browser/index.mjs.map +3 -3
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{operation-resolver-CDYBLZJ4.mjs → operation-resolver-2TEGT4PG.mjs} +166 -122
  23. package/dist/lib/browser/operation-resolver-2TEGT4PG.mjs.map +7 -0
  24. package/dist/lib/browser/{react-root-LYNEKGHM.mjs → react-root-AS4IOYDG.mjs} +8 -7
  25. package/dist/lib/browser/react-root-AS4IOYDG.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-FH7TC6WW.mjs +44 -0
  27. package/dist/lib/browser/react-surface-FH7TC6WW.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-OMHVGZ6V.mjs → settings-PTMGCSJH.mjs} +8 -5
  29. package/dist/lib/browser/settings-PTMGCSJH.mjs.map +7 -0
  30. package/dist/lib/browser/{state-OC3BSB6E.mjs → state-MA4SQ7BE.mjs} +11 -8
  31. package/dist/lib/browser/state-MA4SQ7BE.mjs.map +7 -0
  32. package/dist/lib/browser/{toolkit-R53LD3EA.mjs → toolkit-6B34QFU3.mjs} +10 -8
  33. package/dist/lib/browser/toolkit-6B34QFU3.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +4 -5
  35. package/dist/lib/browser/{url-handler-53TE6JZO.mjs → url-handler-FEUFPQIP.mjs} +22 -17
  36. package/dist/lib/browser/url-handler-FEUFPQIP.mjs.map +7 -0
  37. package/dist/lib/node-esm/Banner-RN7XXOXY.mjs +15 -0
  38. package/dist/lib/node-esm/Banner-RN7XXOXY.mjs.map +7 -0
  39. package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs +97 -0
  40. package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs.map +7 -0
  41. package/dist/lib/node-esm/{app-graph-builder-473BNZDJ.mjs → app-graph-builder-ACHG5HY7.mjs} +16 -13
  42. package/dist/lib/node-esm/app-graph-builder-ACHG5HY7.mjs.map +7 -0
  43. package/dist/lib/node-esm/{check-app-scheme-IVYRHKRH.mjs → check-app-scheme-WN76GWVC.mjs} +9 -8
  44. package/dist/lib/node-esm/check-app-scheme-WN76GWVC.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs +76 -0
  46. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-SKEVPQ7E.mjs → chunk-EMU4VIPH.mjs} +46 -20
  48. package/dist/lib/node-esm/chunk-EMU4VIPH.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-XAKTY3EB.mjs → chunk-GZJAQ5IP.mjs} +34 -49
  50. package/dist/lib/node-esm/chunk-GZJAQ5IP.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-V6VEXRD4.mjs → chunk-MBCCNIWY.mjs} +213 -275
  52. package/dist/lib/node-esm/chunk-MBCCNIWY.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-XCNF4COU.mjs +18 -0
  54. package/dist/lib/node-esm/chunk-XCNF4COU.mjs.map +7 -0
  55. package/dist/lib/node-esm/index.mjs +39 -35
  56. package/dist/lib/node-esm/index.mjs.map +3 -3
  57. package/dist/lib/node-esm/meta.json +1 -1
  58. package/dist/lib/node-esm/{operation-resolver-WUOE33ID.mjs → operation-resolver-GCMCCI7A.mjs} +166 -122
  59. package/dist/lib/node-esm/operation-resolver-GCMCCI7A.mjs.map +7 -0
  60. package/dist/lib/node-esm/{react-root-L7H43AS3.mjs → react-root-7DTDLAF4.mjs} +8 -7
  61. package/dist/lib/node-esm/react-root-7DTDLAF4.mjs.map +7 -0
  62. package/dist/lib/node-esm/{react-surface-77DKVMDV.mjs → react-surface-U6Z2K324.mjs} +18 -16
  63. package/dist/lib/node-esm/react-surface-U6Z2K324.mjs.map +7 -0
  64. package/dist/lib/node-esm/{settings-2HB6FKIK.mjs → settings-LPPFLXNJ.mjs} +8 -5
  65. package/dist/lib/node-esm/settings-LPPFLXNJ.mjs.map +7 -0
  66. package/dist/lib/node-esm/{state-JRQ45ACJ.mjs → state-KNRU3GDC.mjs} +11 -8
  67. package/dist/lib/node-esm/state-KNRU3GDC.mjs.map +7 -0
  68. package/dist/lib/node-esm/{toolkit-JLPZNNKB.mjs → toolkit-SOWYKJY3.mjs} +10 -8
  69. package/dist/lib/node-esm/toolkit-SOWYKJY3.mjs.map +7 -0
  70. package/dist/lib/node-esm/types/index.mjs +4 -5
  71. package/dist/lib/node-esm/{url-handler-QGF2R24T.mjs → url-handler-4LEB7UWF.mjs} +22 -17
  72. package/dist/lib/node-esm/url-handler-4LEB7UWF.mjs.map +7 -0
  73. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +1 -1
  77. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  79. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-root/react-root.d.ts +1 -1
  81. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  83. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  85. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  87. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/settings/settings.d.ts +4 -3
  89. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/state/index.d.ts +6 -6
  91. package/dist/types/src/capabilities/state/state.d.ts +7 -7
  92. package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/toolkit/index.d.ts +1 -1
  94. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +4 -3
  96. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/tools/tools.d.ts +1 -1
  98. package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/url-handler/url-handler.d.ts +1 -1
  100. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -1
  101. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
  102. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +1 -0
  103. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -1
  105. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
  106. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +1 -1
  107. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  108. package/dist/types/src/components/DeckLayout/Toast.d.ts +3 -3
  109. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  110. package/dist/types/src/components/Plank/Plank.d.ts +2 -2
  111. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  112. package/dist/types/src/components/Plank/Plank.stories.d.ts +3 -2
  113. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  115. package/dist/types/src/components/Plank/PlankError.d.ts +5 -3
  116. package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
  117. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  118. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  119. package/dist/types/src/components/fragments.d.ts +4 -1
  120. package/dist/types/src/components/fragments.d.ts.map +1 -1
  121. package/dist/types/src/components/index.d.ts +0 -1
  122. package/dist/types/src/components/index.d.ts.map +1 -1
  123. package/dist/types/src/containers/Banner/Banner.d.ts +2 -0
  124. package/dist/types/src/containers/Banner/Banner.d.ts.map +1 -0
  125. package/dist/types/src/containers/Banner/index.d.ts +3 -0
  126. package/dist/types/src/containers/Banner/index.d.ts.map +1 -0
  127. package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.d.ts.map +1 -1
  128. package/dist/types/src/containers/DeckSettings/index.d.ts +3 -0
  129. package/dist/types/src/containers/DeckSettings/index.d.ts.map +1 -0
  130. package/dist/types/src/containers/index.d.ts +4 -0
  131. package/dist/types/src/containers/index.d.ts.map +1 -0
  132. package/dist/types/src/hooks/index.d.ts +1 -0
  133. package/dist/types/src/hooks/index.d.ts.map +1 -1
  134. package/dist/types/src/hooks/useDeckCompanions.d.ts +0 -1
  135. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  136. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  137. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  138. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  139. package/dist/types/src/layout.d.ts +1 -7
  140. package/dist/types/src/layout.d.ts.map +1 -1
  141. package/dist/types/src/translations.d.ts +1 -0
  142. package/dist/types/src/translations.d.ts.map +1 -1
  143. package/dist/types/src/types/capabilities.d.ts +6 -6
  144. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  145. package/dist/types/src/types/events.d.ts.map +1 -1
  146. package/dist/types/src/types/schema.d.ts +18 -16
  147. package/dist/types/src/types/schema.d.ts.map +1 -1
  148. package/dist/types/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +45 -43
  150. package/src/DeckPlugin.ts +12 -11
  151. package/src/capabilities/app-graph-builder/app-graph-builder.ts +11 -10
  152. package/src/capabilities/check-app-scheme/check-app-scheme.ts +12 -8
  153. package/src/capabilities/operation-resolver/operation-resolver.ts +110 -107
  154. package/src/capabilities/react-root/react-root.tsx +2 -2
  155. package/src/capabilities/react-surface/react-surface.tsx +11 -10
  156. package/src/capabilities/settings/settings.ts +3 -2
  157. package/src/capabilities/state/state.ts +6 -5
  158. package/src/capabilities/toolkit/toolkit.ts +7 -6
  159. package/src/capabilities/tools/tools.ts +0 -1
  160. package/src/capabilities/url-handler/url-handler.ts +16 -13
  161. package/src/components/DeckLayout/ActiveNode.tsx +3 -2
  162. package/src/components/DeckLayout/Banner.tsx +8 -8
  163. package/src/components/DeckLayout/ContentEmpty.tsx +3 -3
  164. package/src/components/DeckLayout/DeckLayout.stories.tsx +8 -6
  165. package/src/components/DeckLayout/DeckMain.tsx +28 -27
  166. package/src/components/DeckLayout/Dialog.tsx +10 -4
  167. package/src/components/DeckLayout/Fallback.tsx +2 -6
  168. package/src/components/DeckLayout/Popover.tsx +34 -8
  169. package/src/components/DeckLayout/StatusBar.tsx +4 -4
  170. package/src/components/DeckLayout/Toast.tsx +3 -3
  171. package/src/components/Plank/Plank.stories.tsx +7 -5
  172. package/src/components/Plank/Plank.tsx +32 -24
  173. package/src/components/Plank/PlankControls.tsx +6 -8
  174. package/src/components/Plank/PlankError.tsx +29 -15
  175. package/src/components/Plank/PlankHeading.tsx +20 -23
  176. package/src/components/Plank/PlankLoading.tsx +1 -1
  177. package/src/components/Sidebar/ComplementarySidebar.tsx +46 -49
  178. package/src/components/Sidebar/Sidebar.tsx +4 -4
  179. package/src/components/Sidebar/SidebarButton.tsx +12 -12
  180. package/src/components/fragments.ts +9 -4
  181. package/src/components/index.ts +0 -1
  182. package/src/containers/Banner/Banner.tsx +5 -0
  183. package/src/containers/Banner/index.ts +7 -0
  184. package/src/{components → containers}/DeckSettings/DeckSettings.tsx +23 -23
  185. package/src/containers/DeckSettings/index.ts +7 -0
  186. package/src/containers/index.ts +8 -0
  187. package/src/hooks/index.ts +1 -0
  188. package/src/hooks/useCompanions.ts +2 -2
  189. package/src/hooks/useDeckCompanions.ts +3 -8
  190. package/src/hooks/useDeckState.ts +3 -3
  191. package/src/hooks/useHoistStatusbar.ts +1 -1
  192. package/src/hooks/useMainSize.ts +2 -2
  193. package/src/hooks/useNodeActionExpander.ts +1 -1
  194. package/src/hooks/useSelectedCompanion.ts +32 -0
  195. package/src/layout.ts +1 -14
  196. package/src/meta.ts +1 -1
  197. package/src/translations.ts +1 -0
  198. package/src/types/capabilities.ts +5 -5
  199. package/src/types/events.ts +5 -4
  200. package/src/types/schema.ts +22 -21
  201. package/src/util/overscroll.ts +3 -3
  202. package/dist/lib/browser/app-graph-builder-DTVCULQ4.mjs.map +0 -7
  203. package/dist/lib/browser/check-app-scheme-JSRXXIYF.mjs.map +0 -7
  204. package/dist/lib/browser/chunk-ATFPDN6J.mjs.map +0 -7
  205. package/dist/lib/browser/chunk-EREEXCHO.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-NHABISX2.mjs +0 -152
  207. package/dist/lib/browser/chunk-NHABISX2.mjs.map +0 -7
  208. package/dist/lib/browser/chunk-UNG4CLLP.mjs.map +0 -7
  209. package/dist/lib/browser/operation-resolver-CDYBLZJ4.mjs.map +0 -7
  210. package/dist/lib/browser/react-root-LYNEKGHM.mjs.map +0 -7
  211. package/dist/lib/browser/react-surface-RPKD7XUR.mjs +0 -42
  212. package/dist/lib/browser/react-surface-RPKD7XUR.mjs.map +0 -7
  213. package/dist/lib/browser/settings-OMHVGZ6V.mjs.map +0 -7
  214. package/dist/lib/browser/state-OC3BSB6E.mjs.map +0 -7
  215. package/dist/lib/browser/toolkit-R53LD3EA.mjs.map +0 -7
  216. package/dist/lib/browser/url-handler-53TE6JZO.mjs.map +0 -7
  217. package/dist/lib/node-esm/app-graph-builder-473BNZDJ.mjs.map +0 -7
  218. package/dist/lib/node-esm/check-app-scheme-IVYRHKRH.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-ADPMWKLL.mjs +0 -154
  220. package/dist/lib/node-esm/chunk-ADPMWKLL.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-SKEVPQ7E.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-V6VEXRD4.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-XAKTY3EB.mjs.map +0 -7
  224. package/dist/lib/node-esm/operation-resolver-WUOE33ID.mjs.map +0 -7
  225. package/dist/lib/node-esm/react-root-L7H43AS3.mjs.map +0 -7
  226. package/dist/lib/node-esm/react-surface-77DKVMDV.mjs.map +0 -7
  227. package/dist/lib/node-esm/settings-2HB6FKIK.mjs.map +0 -7
  228. package/dist/lib/node-esm/state-JRQ45ACJ.mjs.map +0 -7
  229. package/dist/lib/node-esm/toolkit-JLPZNNKB.mjs.map +0 -7
  230. package/dist/lib/node-esm/url-handler-QGF2R24T.mjs.map +0 -7
  231. package/dist/types/src/components/DeckSettings/index.d.ts +0 -2
  232. package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
  233. package/src/components/DeckSettings/index.ts +0 -5
  234. /package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.d.ts +0 -0
@@ -7,8 +7,9 @@ import * as Toolkit from '@effect/ai/Toolkit';
7
7
  import * as Effect from 'effect/Effect';
8
8
  import * as Schema from 'effect/Schema';
9
9
 
10
- import { Capability, type CapabilityManager, Common } from '@dxos/app-framework';
11
- import { GenericToolkit } from '@dxos/assistant';
10
+ import { GenericToolkit } from '@dxos/ai';
11
+ import { Capabilities, Capability, type CapabilityManager } from '@dxos/app-framework';
12
+ import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
12
13
  import { ArtifactId } from '@dxos/assistant';
13
14
  import { type SpaceId } from '@dxos/keys';
14
15
  import { trim } from '@dxos/util';
@@ -35,7 +36,7 @@ export namespace DeckToolkit {
35
36
  Toolkit$.toLayer({
36
37
  'open-item': ({ id }) =>
37
38
  Effect.gen(function* () {
38
- const registry = capabilityManager.get(Common.Capability.AtomRegistry);
39
+ const registry = capabilityManager.get(Capabilities.AtomRegistry);
39
40
  const stateAtom = capabilityManager.get(DeckCapabilities.State);
40
41
  const state = registry.get(stateAtom);
41
42
  const dxn = ArtifactId.toDXN(id, state.activeDeck as SpaceId).asEchoDXN();
@@ -45,8 +46,8 @@ export namespace DeckToolkit {
45
46
  }
46
47
 
47
48
  // TODO(wittjosiah): Get capabilities via layers.
48
- const { invoke } = capabilityManager.get(Common.Capability.OperationInvoker);
49
- yield* invoke(Common.LayoutOperation.Open, { subject: [`${dxn.spaceId!}:${dxn.echoId}`] });
49
+ const { invoke } = capabilityManager.get(Capabilities.OperationInvoker);
50
+ yield* invoke(LayoutOperation.Open, { subject: [`${dxn.spaceId!}:${dxn.echoId}`] });
50
51
  }).pipe(Effect.orDie),
51
52
  });
52
53
  }
@@ -56,7 +57,7 @@ export default Capability.makeModule(
56
57
  const capabilityManager = yield* Capability.Service;
57
58
 
58
59
  return Capability.contributes(
59
- Common.Capability.Toolkit,
60
+ AppCapabilities.Toolkit,
60
61
  GenericToolkit.make(DeckToolkit.Toolkit, DeckToolkit.createLayer(capabilityManager)),
61
62
  );
62
63
  }),
@@ -60,7 +60,6 @@ export default Capability.makeModule(() =>
60
60
 
61
61
  if (part === 'deck') {
62
62
  const { error } = await invokePromise(DeckOperation.ChangeCompanion, {
63
- primary: pivotId,
64
63
  companion: id,
65
64
  });
66
65
  if (error) {
@@ -4,16 +4,17 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Capability, Common } from '@dxos/app-framework';
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { LayoutOperation, fromUrlPath, getWorkspaceFromPath, toUrlPath } from '@dxos/app-toolkit';
8
9
  import { invariant } from '@dxos/invariant';
10
+ import { Node } from '@dxos/plugin-graph';
9
11
 
10
12
  import { DeckCapabilities, type DeckStateProps, defaultDeck } from '../../types';
11
13
 
12
- // TODO(wittjosiah): Cleanup the url handling. May justify introducing routing capabilities.
13
14
  export default Capability.makeModule(
14
15
  Effect.fnUntraced(function* () {
15
- const { invokeSync } = yield* Capability.get(Common.Capability.OperationInvoker);
16
- const registry = yield* Capability.get(Common.Capability.AtomRegistry);
16
+ const { invokeSync } = yield* Capability.get(Capabilities.OperationInvoker);
17
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
17
18
  const stateAtom = yield* Capability.get(DeckCapabilities.State);
18
19
 
19
20
  // Helper to get state.
@@ -47,16 +48,18 @@ export default Capability.makeModule(
47
48
  return;
48
49
  }
49
50
 
50
- const [_, nextDeck, nextSolo] = pathname.split('/');
51
- if (nextDeck && nextDeck !== state.activeDeck) {
52
- invokeSync(Common.LayoutOperation.SwitchWorkspace, { subject: nextDeck });
51
+ const qualifiedId = fromUrlPath(pathname);
52
+ const workspace = getWorkspaceFromPath(qualifiedId);
53
+ if (workspace !== Node.RootId && workspace !== state.activeDeck) {
54
+ invokeSync(LayoutOperation.SwitchWorkspace, { subject: workspace });
53
55
  }
54
56
 
55
57
  const deck = getDeck();
56
- if (nextSolo && nextSolo !== deck.solo) {
57
- invokeSync(Common.LayoutOperation.SetLayoutMode, { subject: nextSolo, mode: 'solo' });
58
- } else if (!nextSolo && deck.solo) {
59
- invokeSync(Common.LayoutOperation.SetLayoutMode, { mode: 'deck' });
58
+ const activeId = qualifiedId !== workspace ? qualifiedId : undefined;
59
+ if (activeId && activeId !== deck.solo) {
60
+ invokeSync(LayoutOperation.SetLayoutMode, { subject: activeId, mode: 'solo' });
61
+ } else if (!activeId && deck.solo) {
62
+ invokeSync(LayoutOperation.SetLayoutMode, { mode: 'deck' });
60
63
  }
61
64
  };
62
65
 
@@ -77,7 +80,7 @@ export default Capability.makeModule(
77
80
  lastSolo = solo;
78
81
  lastActiveDeck = activeDeck;
79
82
 
80
- const path = solo ? `/${activeDeck}/${solo}` : `/${activeDeck}`;
83
+ const path = solo ? toUrlPath(solo) : toUrlPath(activeDeck);
81
84
  if (window.location.pathname !== path) {
82
85
  // TODO(thure): In some browsers, this only preserves the most recent state change, even though this is not `history.replace`…
83
86
  history.pushState(null, '', `${path}${window.location.search}`);
@@ -85,7 +88,7 @@ export default Capability.makeModule(
85
88
  }
86
89
  });
87
90
 
88
- return Capability.contributes(Common.Capability.Null, null, () =>
91
+ return Capability.contributes(Capabilities.Null, null, () =>
89
92
  Effect.sync(() => {
90
93
  window.removeEventListener('popstate', handleNavigation);
91
94
  unsubscribe();
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface, useAppGraph } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
8
9
  import { useNode } from '@dxos/plugin-graph';
9
10
  import { useAttended } from '@dxos/react-ui-attention';
10
11
 
@@ -21,7 +22,7 @@ export const ActiveNode = () => {
21
22
  <div role='none' className='sr-only'>
22
23
  {/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.
23
24
  Probably this lives in React-land currently in order to access translations? */}
24
- <Surface role='document-title' data={{ subject: activeNode }} limit={1} />
25
+ <Surface.Surface role='document-title' data={{ subject: activeNode }} limit={1} />
25
26
  </div>
26
27
  );
27
28
  };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
8
  import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
9
  import { mx, osTranslations } from '@dxos/ui-theme';
10
10
 
@@ -16,24 +16,24 @@ export const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'top
16
16
  return (
17
17
  <header
18
18
  className={mx(
19
- 'flex items-stretch relative plb-1 pis-1 pie-2',
19
+ 'flex items-stretch relative py-1 ps-1 pe-2',
20
20
  variant === 'topbar' &&
21
- 'fixed inset-inline-0 block-start-[env(safe-area-inset-top)] bs-[--rail-size] border-be border-separator',
21
+ 'fixed inset-x-0 top-[env(safe-area-inset-top)] h-(--dx-rail-size) border-b border-separator',
22
22
  classNames,
23
23
  )}
24
24
  >
25
25
  {variant === 'sidebar' ? <CloseSidebarButton /> : <ToggleSidebarButton />}
26
- <span className='self-center grow mis-1'>{t('current app name', { ns: osTranslations })}</span>
26
+ <span className='self-center grow ms-1'>{t('current app name', { ns: osTranslations })}</span>
27
27
  {variant === 'topbar' && (
28
28
  <div role='none' className='absolute inset-0 pointer-events-none'>
29
- <div role='none' className='grid bs-full pointer-fine:p-1 max-is-md mli-auto pointer-events-auto'>
30
- <Surface role='search-input' limit={1} />
29
+ <div role='none' className='grid h-full pointer-fine:p-1 max-w-md mx-auto pointer-events-auto'>
30
+ <Surface.Surface role='search-input' limit={1} />
31
31
  </div>
32
32
  </div>
33
33
  )}
34
34
  <span role='none' className='grow' />
35
- <Surface role='header-end' limit={1} />
36
- <Surface role='notch-start' limit={1} />
35
+ <Surface.Surface role='header-end' limit={1} />
36
+ <Surface.Surface role='notch-start' limit={1} />
37
37
  </header>
38
38
  );
39
39
  };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
8
 
9
9
  import { useBreakpoints, useDeckState } from '../../hooks';
10
10
  import { getMode } from '../../types';
@@ -20,10 +20,10 @@ export const ContentEmpty = () => {
20
20
  return (
21
21
  <div
22
22
  role='none'
23
- className='grid place-items-center p-8 relative bg-deckSurface'
23
+ className='grid place-items-center p-8 relative bg-deck-surface'
24
24
  data-testid='layoutPlugin.firstRunMessage'
25
25
  >
26
- <Surface role='keyshortcuts' />
26
+ <Surface.Surface role='keyshortcuts' />
27
27
  {!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}
28
28
  </div>
29
29
  );
@@ -5,10 +5,11 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { Capability, Common, Plugin } from '@dxos/app-framework';
8
+ import { Capability, Plugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
10
11
  import { corePlugins } from '@dxos/plugin-testing';
11
- import { withTheme } from '@dxos/react-ui/testing';
12
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
13
 
13
14
  import { DeckState, LayoutOperationResolver } from '../../capabilities';
14
15
  import { meta as pluginMeta } from '../../meta';
@@ -19,21 +20,22 @@ import { DeckLayout } from './DeckLayout';
19
20
  const TestPlugin = Plugin.define(pluginMeta).pipe(
20
21
  Plugin.addModule({
21
22
  id: Capability.getModuleTag(DeckState),
22
- activatesOn: Common.ActivationEvent.AppGraphReady,
23
+ activatesOn: AppActivationEvents.AppGraphReady,
23
24
  activate: () => DeckState(),
24
25
  }),
25
- Common.Plugin.addOperationResolverModule({
26
+ AppPlugin.addOperationResolverModule({
26
27
  activate: LayoutOperationResolver,
27
28
  }),
28
29
  Plugin.make,
29
30
  );
30
31
 
31
32
  const meta = {
32
- title: 'plugins/plugin-deck/DeckLayout',
33
+ title: 'plugins/plugin-deck/components/DeckLayout',
33
34
  component: DeckLayout,
34
35
  render: (args) => <DeckLayout {...args} />,
35
36
  decorators: [
36
- withTheme,
37
+ withTheme(),
38
+ withLayout({ layout: 'fullscreen' }),
37
39
  withPluginManager({
38
40
  plugins: [...corePlugins(), TestPlugin()],
39
41
  }),
@@ -4,10 +4,10 @@
4
4
 
5
5
  import React, { Fragment, type UIEvent, useCallback, useEffect, useMemo, useRef } from 'react';
6
6
 
7
- import { Common } from '@dxos/app-framework';
8
- import { useAtomCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/react';
7
+ import { useAtomCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
9
9
  import { AttentionCapabilities } from '@dxos/plugin-attention';
10
- import { Main, type MainProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';
10
+ import { Main, type MainContentProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';
11
11
  import { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from '@dxos/react-ui-stack';
12
12
  import { mainPaddingTransitions, mx } from '@dxos/ui-theme';
13
13
 
@@ -27,7 +27,8 @@ export const DeckMain = () => {
27
27
  const settings = useAtomCapability(DeckCapabilities.Settings);
28
28
  const { state, deck, updateState } = useDeckState();
29
29
  const { sidebarState, complementarySidebarState, complementarySidebarPanel } = state;
30
- const { active, activeCompanions, fullscreen, solo, plankSizing } = deck;
30
+ const { active, companionOpen, companionVariant, fullscreen, solo, plankSizing } = deck;
31
+ const effectiveCompanionVariant = companionOpen ? companionVariant : undefined;
31
32
  const layoutMode = getMode(deck);
32
33
  const breakpoint = useBreakpoints();
33
34
  const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
@@ -61,9 +62,9 @@ export const DeckMain = () => {
61
62
  const attended = attention.getCurrent();
62
63
 
63
64
  shouldRevert.current = true;
64
- invokeSync(Common.LayoutOperation.SetLayoutMode, { subject: attended[0], mode: 'solo' });
65
+ invokeSync(LayoutOperation.SetLayoutMode, { subject: attended[0], mode: 'solo' });
65
66
  } else if (isNotMobile && layoutMode === 'solo' && shouldRevert.current) {
66
- invokeSync(Common.LayoutOperation.SetLayoutMode, { revert: true });
67
+ invokeSync(LayoutOperation.SetLayoutMode, { revert: true });
67
68
  }
68
69
  // NOTE: Using `layoutMode` instead of `deck` to avoid infinite loops caused by object reference changes.
69
70
  }, [isNotMobile, layoutMode, invokeSync]);
@@ -72,7 +73,7 @@ export const DeckMain = () => {
72
73
  // TODO(thure): Applying this as an effect should be avoided over emitting the operation only when the setting changes.
73
74
  useEffect(() => {
74
75
  if (!settings?.enableDeck && layoutMode === 'deck') {
75
- invokeSync(Common.LayoutOperation.SetLayoutMode, { subject: active[0], mode: 'solo' });
76
+ invokeSync(LayoutOperation.SetLayoutMode, { subject: active[0], mode: 'solo' });
76
77
  }
77
78
  }, [settings?.enableDeck, invokeSync, active, layoutMode]);
78
79
 
@@ -118,9 +119,9 @@ export const DeckMain = () => {
118
119
 
119
120
  const mainPosition = useMemo(
120
121
  () => [
121
- 'grid !block-start-[env(safe-area-inset-top)]',
122
- topbar && '!block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',
123
- hoistStatusbar && 'lg:block-end-[--statusbar-size]',
122
+ 'grid !top-[env(safe-area-inset-top)]',
123
+ topbar && '!top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',
124
+ hoistStatusbar && 'lg:bottom-(--dx-statusbar-size)',
124
125
  ],
125
126
  [topbar, hoistStatusbar],
126
127
  );
@@ -129,12 +130,12 @@ export const DeckMain = () => {
129
130
  return active.reduce(
130
131
  (acc: { order: Record<string, number>; itemsCount: number }, entryId) => {
131
132
  acc.order[entryId] = acc.itemsCount + 1;
132
- acc.itemsCount += activeCompanions?.[entryId] ? 3 : 2;
133
+ acc.itemsCount += companionOpen ? 3 : 2;
133
134
  return acc;
134
135
  },
135
136
  { order: {}, itemsCount: 0 },
136
137
  );
137
- }, [active, activeCompanions]);
138
+ }, [active, companionOpen]);
138
139
 
139
140
  const handleNavigationSidebarStateChange = useCallback(
140
141
  (next: typeof sidebarState) => {
@@ -182,27 +183,27 @@ export const DeckMain = () => {
182
183
  style={
183
184
  {
184
185
  '--main-spacing': settings?.encapsulatedPlanks ? '0.75rem' : '0',
185
- '--dx-main-sidebarWidth':
186
+ '--dx-main-sidebar-width':
186
187
  sidebarState === 'expanded'
187
- ? 'var(--nav-sidebar-size)'
188
+ ? 'var(--dx-nav-sidebar-size)'
188
189
  : sidebarState === 'collapsed'
189
- ? 'var(--l0-size)'
190
+ ? 'var(--dx-l0-size)'
190
191
  : '0',
191
- '--dx-main-complementaryWidth':
192
+ '--dx-main-complementary-width':
192
193
  complementarySidebarState === 'expanded'
193
- ? 'var(--complementary-sidebar-size)'
194
+ ? 'var(--dx-complementary-sidebar-size)'
194
195
  : complementarySidebarState === 'collapsed'
195
- ? 'var(--rail-size)'
196
+ ? 'var(--dx-rail-size)'
196
197
  : '0',
197
- '--dx-main-contentFirstWidth': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
198
- '--dx-main-contentLastWidth': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
199
- } as MainProps['style']
198
+ '--dx-main-content-first-width': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
199
+ '--dx-main-content-last-width': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
200
+ } as MainContentProps['style']
200
201
  }
201
202
  >
202
203
  {/* Deck mode. */}
203
204
  <div
204
205
  role='none'
205
- className={!solo ? 'relative bg-deckSurface overflow-hidden' : 'sr-only'}
206
+ className={!solo ? 'relative bg-deck-surface overflow-hidden' : 'sr-only'}
206
207
  {...(solo && { inert: true })}
207
208
  >
208
209
  {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}
@@ -215,7 +216,7 @@ export const DeckMain = () => {
215
216
  size='contain'
216
217
  itemsCount={itemsCount - 1}
217
218
  classNames={[
218
- 'absolute inset-block-[--main-spacing] -inset-inline-px bs-[calc(100%-2*var(--main-spacing))]',
219
+ 'absolute inset-y-(--main-spacing) -inset-w-px h-[calc(100%-2*var(--main-spacing))]',
219
220
  mainPaddingTransitions,
220
221
  ]}
221
222
  style={padding}
@@ -226,7 +227,7 @@ export const DeckMain = () => {
226
227
  <PlankSeparator order={order[entryId] - 1} encapsulate={!!settings?.enableDeck} />
227
228
  <Plank
228
229
  id={entryId}
229
- companionId={activeCompanions?.[entryId]}
230
+ companionVariant={effectiveCompanionVariant}
230
231
  part='deck'
231
232
  order={order[entryId]}
232
233
  active={active}
@@ -241,7 +242,7 @@ export const DeckMain = () => {
241
242
  {/* Solo mode. */}
242
243
  <div
243
244
  role='none'
244
- className={solo ? 'relative overflow-hidden bg-deckSurface' : 'sr-only'}
245
+ className={solo ? 'relative overflow-hidden bg-deck-surface' : 'sr-only'}
245
246
  {...(!solo && { inert: true })}
246
247
  >
247
248
  {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}
@@ -257,7 +258,7 @@ export const DeckMain = () => {
257
258
  >
258
259
  <Plank
259
260
  id={solo}
260
- companionId={solo ? activeCompanions?.[solo] : undefined}
261
+ companionVariant={effectiveCompanionVariant}
261
262
  part='solo'
262
263
  layoutMode={layoutMode}
263
264
  settings={settings}
@@ -280,7 +281,7 @@ const PlankSeparator = ({ order, encapsulate }: { order: number; encapsulate?: b
280
281
  order > 0 ? (
281
282
  <span
282
283
  role='separator'
283
- className={mx('row-span-2 bg-deckSurface', encapsulate ? 'is-0' : 'is-4')}
284
+ className={mx('row-span-2 bg-deck-surface', encapsulate ? 'w-0' : 'w-4')}
284
285
  style={{ gridColumn: order }}
285
286
  />
286
287
  ) : null;
@@ -4,11 +4,11 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
8
  import { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';
9
9
 
10
10
  import { useDeckState } from '../../hooks';
11
- import { PlankContentError } from '../Plank';
11
+ import { PlankErrorFallback } from '../Plank';
12
12
 
13
13
  export const Dialog = () => {
14
14
  const { state, updateEphemeral } = useDeckState();
@@ -28,10 +28,16 @@ export const Dialog = () => {
28
28
  <Root modal={dialogBlockAlign !== 'end'} open={dialogOpen} onOpenChange={handleOpenChange}>
29
29
  {dialogBlockAlign === 'end' ? (
30
30
  // TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.
31
- <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} placeholder={<div />} />
31
+ <Surface.Surface
32
+ role='dialog'
33
+ data={dialogContent}
34
+ limit={1}
35
+ fallback={PlankErrorFallback}
36
+ placeholder={<div />}
37
+ />
32
38
  ) : (
33
39
  <Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>
34
- <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} />
40
+ <Surface.Surface role='dialog' data={dialogContent} limit={1} fallback={PlankErrorFallback} />
35
41
  </Overlay>
36
42
  )}
37
43
  </Root>
@@ -5,7 +5,6 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { useTranslation } from '@dxos/react-ui';
8
- import { errorText, mx } from '@dxos/ui-theme';
9
8
 
10
9
  import { meta } from '../../meta';
11
10
 
@@ -13,13 +12,10 @@ export const Fallback = () => {
13
12
  const { t } = useTranslation(meta.id);
14
13
 
15
14
  return (
16
- <div role='none' className='min-bs-screen is-full flex items-center justify-center p-8'>
15
+ <div role='none' className='min-h-screen w-full flex items-center justify-center p-8'>
17
16
  <p
18
17
  role='alert'
19
- className={mx(
20
- errorText,
21
- 'border border-roseFill rounded-md flex items-center justify-center p-8 font-normal text-lg',
22
- )}
18
+ className='flex items-center justify-center p-8 font-normal text-lg text-error-text border border-rose-fill rounded-md'
23
19
  >
24
20
  {t('plugin error message')}
25
21
  </p>
@@ -5,9 +5,11 @@
5
5
  import { createContext } from '@radix-ui/react-context';
6
6
  import React, { type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';
7
7
 
8
- import { Surface } from '@dxos/app-framework/react';
8
+ import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
9
+ import { LayoutOperation } from '@dxos/app-toolkit';
10
+ import { useObjectNavigate } from '@dxos/app-toolkit/ui';
9
11
  import { Popover, type PopoverContentInteractOutsideEvent, toLocalizedString, useTranslation } from '@dxos/react-ui';
10
- import { Card } from '@dxos/react-ui-mosaic';
12
+ import { Card } from '@dxos/react-ui';
11
13
 
12
14
  import { useDeckState } from '../../hooks';
13
15
  import { meta } from '../../meta';
@@ -55,10 +57,16 @@ export const PopoverRoot = ({ children }: DeckPopoverRootProps) => {
55
57
  );
56
58
  };
57
59
 
60
+ // Extracts the subject from popover content if it has one, otherwise returns the content as-is.
61
+ const getPopoverSubject = (content: unknown): unknown =>
62
+ content && typeof content === 'object' && 'subject' in content ? (content as { subject: unknown }).subject : content;
63
+
58
64
  export const PopoverContent = () => {
59
65
  const { t } = useTranslation(meta.id);
60
66
  const { state, updateEphemeral } = useDeckState();
61
67
  const { setOpen } = useDeckPopoverContext('PopoverContent');
68
+ const { invokeSync } = useOperationInvoker();
69
+ const handleNavigate = useObjectNavigate(getPopoverSubject(state.popoverContent));
62
70
 
63
71
  const handleClose = useCallback(() => {
64
72
  setOpen(false);
@@ -96,18 +104,36 @@ export const PopoverContent = () => {
96
104
  onEscapeKeyDown={handleInteractOutside}
97
105
  >
98
106
  <Popover.Viewport>
107
+ {/* TODO(burdon): Set/disable column context. */}
108
+ {state.popoverKind === 'base' && <Surface.Surface role='popover' data={state.popoverContent} limit={1} />}
99
109
  {state.popoverKind === 'card' && (
100
- <Card.Root>
110
+ <Card.Root border={false} classNames='dx-card-popover'>
101
111
  <Card.Toolbar>
102
112
  {/* TODO(wittjosiah): Cleaner way to handle no drag handle in toolbar? */}
103
- <span />
104
- {state.popoverTitle ? <Card.Title>{toLocalizedString(state.popoverTitle, t)}</Card.Title> : <span />}
105
- <Card.Close onClick={handleClose} />
113
+ {state.popoverContentRef ? (
114
+ <Card.ToolbarIconButton
115
+ icon='ph--arrow-square-out--regular'
116
+ iconOnly
117
+ label={t('open item label')}
118
+ onClick={() => {
119
+ invokeSync(LayoutOperation.Open, {
120
+ subject: [state.popoverContentRef!],
121
+ });
122
+ }}
123
+ />
124
+ ) : (
125
+ <div />
126
+ )}
127
+ {state.popoverTitle ? (
128
+ <Card.Title onClick={handleNavigate}>{toLocalizedString(state.popoverTitle, t)}</Card.Title>
129
+ ) : (
130
+ <span />
131
+ )}
132
+ <Card.CloseIconButton onClick={handleClose} />
106
133
  </Card.Toolbar>
107
- <Surface role='card--content' data={state.popoverContent} limit={1} />
134
+ <Surface.Surface role='card--content' data={state.popoverContent} limit={1} />
108
135
  </Card.Root>
109
136
  )}
110
- {state.popoverKind === 'base' && <Surface role='popover' data={state.popoverContent} limit={1} />}
111
137
  </Popover.Viewport>
112
138
  <Popover.Arrow />
113
139
  </Popover.Content>
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
8
  import { useLandmarkMover } from '@dxos/react-ui';
9
9
 
10
10
  export const StatusBar = ({ showHints }: { showHints?: boolean }) => {
@@ -12,11 +12,11 @@ export const StatusBar = ({ showHints }: { showHints?: boolean }) => {
12
12
  return (
13
13
  <div
14
14
  role='contentinfo'
15
- className='fixed block-end-0 inset-inline-0 bs-[--statusbar-size] border-bs border-separator z-[2] flex text-description'
15
+ className='fixed bottom-0 inset-x-0 h-(--dx-statusbar-size) border-y border-separator z-[2] flex text-description'
16
16
  {...mover}
17
17
  >
18
- {showHints && <Surface role='hints' limit={1} />}
19
- <Surface role='status-bar' limit={1} />
18
+ {showHints && <Surface.Surface role='hints' limit={1} />}
19
+ <Surface.Surface role='status-bar' limit={1} />
20
20
  </div>
21
21
  );
22
22
  };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { type Common } from '@dxos/app-framework';
7
+ import { type LayoutOperation } from '@dxos/app-toolkit';
8
8
  import {
9
9
  Button,
10
10
  Icon,
@@ -28,7 +28,7 @@ export const Toast = ({
28
28
  closeLabel,
29
29
  onAction,
30
30
  onOpenChange,
31
- }: Common.LayoutOperation.Toast & Pick<ToastRootProps, 'onOpenChange'>) => {
31
+ }: LayoutOperation.Toast & Pick<ToastRootProps, 'onOpenChange'>) => {
32
32
  const { t } = useTranslation(meta.id);
33
33
 
34
34
  return (
@@ -61,7 +61,7 @@ export const Toast = ({
61
61
  };
62
62
 
63
63
  export type ToasterProps = {
64
- toasts?: Common.LayoutOperation.Toast[];
64
+ toasts?: LayoutOperation.Toast[];
65
65
  onDismissToast?: (id: string) => void;
66
66
  };
67
67
 
@@ -5,10 +5,11 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { Capability, Common, Plugin } from '@dxos/app-framework';
8
+ import { Capability, Plugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { AppActivationEvents } from '@dxos/app-toolkit';
10
11
  import { corePlugins } from '@dxos/plugin-testing';
11
- import { withTheme } from '@dxos/react-ui/testing';
12
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
13
  import { Stack } from '@dxos/react-ui-stack';
13
14
 
14
15
  import { DeckState } from '../../capabilities';
@@ -20,14 +21,14 @@ import { Plank } from './Plank';
20
21
  const TestPlugin = Plugin.define(pluginMeta).pipe(
21
22
  Plugin.addModule({
22
23
  id: Capability.getModuleTag(DeckState),
23
- activatesOn: Common.ActivationEvent.AppGraphReady,
24
+ activatesOn: AppActivationEvents.AppGraphReady,
24
25
  activate: () => DeckState(),
25
26
  }),
26
27
  Plugin.make,
27
28
  );
28
29
 
29
30
  const meta = {
30
- title: 'plugins/plugin-deck/Plank',
31
+ title: 'plugins/plugin-deck/components/Plank',
31
32
  component: Plank,
32
33
  render: (args) => {
33
34
  return (
@@ -37,7 +38,8 @@ const meta = {
37
38
  );
38
39
  },
39
40
  decorators: [
40
- withTheme,
41
+ withTheme(),
42
+ withLayout({ layout: 'fullscreen' }),
41
43
  withPluginManager({
42
44
  plugins: [...corePlugins(), TestPlugin()],
43
45
  }),