@dxos/plugin-deck 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8

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-AJW6225V.mjs +14 -0
  2. package/dist/lib/browser/Banner-AJW6225V.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-L3RYMAV7.mjs +16 -0
  14. package/dist/lib/browser/chunk-L3RYMAV7.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-UNG4CLLP.mjs → chunk-TAHLKBDO.mjs} +46 -20
  16. package/dist/lib/browser/chunk-TAHLKBDO.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-S4A5UO4K.mjs → chunk-WTNYSXY5.mjs} +221 -281
  18. package/dist/lib/browser/chunk-WTNYSXY5.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-XDCMNENQ.mjs → react-root-XBFHPSCP.mjs} +8 -7
  25. package/dist/lib/browser/react-root-XBFHPSCP.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-4J3BZNT2.mjs +44 -0
  27. package/dist/lib/browser/react-surface-4J3BZNT2.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-XBH2IIDR.mjs +15 -0
  38. package/dist/lib/node-esm/Banner-XBH2IIDR.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-D34L3ECT.mjs → chunk-CQ3XYTNJ.mjs} +220 -280
  46. package/dist/lib/node-esm/chunk-CQ3XYTNJ.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs +76 -0
  48. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-SKEVPQ7E.mjs → chunk-EMU4VIPH.mjs} +46 -20
  50. package/dist/lib/node-esm/chunk-EMU4VIPH.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-XAKTY3EB.mjs → chunk-GZJAQ5IP.mjs} +34 -49
  52. package/dist/lib/node-esm/chunk-GZJAQ5IP.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-O6GZO62Z.mjs → react-root-32LZ6APH.mjs} +8 -7
  61. package/dist/lib/node-esm/react-root-32LZ6APH.mjs.map +7 -0
  62. package/dist/lib/node-esm/{react-surface-IHDJDGC5.mjs → react-surface-CO4ZDZKM.mjs} +18 -16
  63. package/dist/lib/node-esm/react-surface-CO4ZDZKM.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 +48 -44
  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 +26 -25
  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 +46 -14
  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 +24 -26
  176. package/src/components/Plank/PlankLoading.tsx +1 -1
  177. package/src/components/Sidebar/ComplementarySidebar.tsx +50 -51
  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-NHABISX2.mjs +0 -152
  206. package/dist/lib/browser/chunk-NHABISX2.mjs.map +0 -7
  207. package/dist/lib/browser/chunk-S4A5UO4K.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-XDCMNENQ.mjs.map +0 -7
  211. package/dist/lib/browser/react-surface-HODERLOL.mjs +0 -42
  212. package/dist/lib/browser/react-surface-HODERLOL.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-D34L3ECT.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-SKEVPQ7E.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-O6GZO62Z.mjs.map +0 -7
  226. package/dist/lib/node-esm/react-surface-IHDJDGC5.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,8 +4,8 @@
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
10
  import { Main, type MainContentProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';
11
11
  import { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from '@dxos/react-ui-stack';
@@ -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`,
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`,
199
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>
@@ -3,11 +3,22 @@
3
3
  //
4
4
 
5
5
  import { createContext } from '@radix-ui/react-context';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
6
8
  import React, { type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';
7
9
 
8
- import { Surface } from '@dxos/app-framework/react';
9
- import { Popover, type PopoverContentInteractOutsideEvent, toLocalizedString, useTranslation } from '@dxos/react-ui';
10
- import { Card } from '@dxos/react-ui-mosaic';
10
+ import { Surface } from '@dxos/app-framework/ui';
11
+ import { useObjectMenuItems } from '@dxos/app-toolkit/ui';
12
+ import { Annotation, Obj } from '@dxos/echo';
13
+ import {
14
+ Card,
15
+ Popover,
16
+ type PopoverContentInteractOutsideEvent,
17
+ toLocalizedString,
18
+ Toolbar,
19
+ useTranslation,
20
+ } from '@dxos/react-ui';
21
+ import { Menu } from '@dxos/react-ui-menu';
11
22
 
12
23
  import { useDeckState } from '../../hooks';
13
24
  import { meta } from '../../meta';
@@ -59,7 +70,18 @@ export const PopoverContent = () => {
59
70
  const { t } = useTranslation(meta.id);
60
71
  const { state, updateEphemeral } = useDeckState();
61
72
  const { setOpen } = useDeckPopoverContext('PopoverContent');
62
-
73
+ const popoverSubject = state.popoverContent?.subject;
74
+ const isObjectPopover = Obj.isObject(popoverSubject);
75
+ const objectMenuItems = useObjectMenuItems(popoverSubject);
76
+ const icon = isObjectPopover
77
+ ? Function.pipe(
78
+ Obj.getSchema(popoverSubject),
79
+ Option.fromNullable,
80
+ Option.flatMap(Annotation.IconAnnotation.get),
81
+ Option.map(({ icon }) => icon),
82
+ Option.getOrElse(() => 'ph--placeholder--regular'),
83
+ )
84
+ : undefined;
63
85
  const handleClose = useCallback(() => {
64
86
  setOpen(false);
65
87
  updateEphemeral((state) => ({
@@ -96,18 +118,28 @@ export const PopoverContent = () => {
96
118
  onEscapeKeyDown={handleInteractOutside}
97
119
  >
98
120
  <Popover.Viewport>
121
+ {/* TODO(burdon): Set/disable column context. */}
122
+ {state.popoverKind === 'base' && <Surface.Surface role='popover' data={state.popoverContent} limit={1} />}
99
123
  {state.popoverKind === 'card' && (
100
- <Card.Root>
101
- <Card.Toolbar>
102
- {/* 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} />
106
- </Card.Toolbar>
107
- <Surface role='card--content' data={state.popoverContent} limit={1} />
108
- </Card.Root>
124
+ <Menu.Root>
125
+ <Card.Root border={false} classNames='dx-card-popover'>
126
+ <Card.Toolbar>
127
+ {icon ? <Card.Icon icon={icon} /> : <Card.IconBlock />}
128
+ {state.popoverTitle ? <Card.Title>{toLocalizedString(state.popoverTitle, t)}</Card.Title> : <span />}
129
+ <Menu.Trigger asChild disabled={!objectMenuItems.length}>
130
+ <Toolbar.IconButton
131
+ iconOnly
132
+ variant='ghost'
133
+ icon='ph--dots-three-vertical--regular'
134
+ label='Actions'
135
+ />
136
+ </Menu.Trigger>
137
+ <Menu.Content items={objectMenuItems} />
138
+ </Card.Toolbar>
139
+ <Surface.Surface role='card--content' data={state.popoverContent} limit={1} />
140
+ </Card.Root>
141
+ </Menu.Root>
109
142
  )}
110
- {state.popoverKind === 'base' && <Surface role='popover' data={state.popoverContent} limit={1} />}
111
143
  </Popover.Viewport>
112
144
  <Popover.Arrow />
113
145
  </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
  }),