@dxos/plugin-deck 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

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 (108) hide show
  1. package/dist/lib/browser/{app-graph-builder-YYP67JHW.mjs → app-graph-builder-D74NTOMK.mjs} +8 -33
  2. package/dist/lib/browser/app-graph-builder-D74NTOMK.mjs.map +7 -0
  3. package/dist/lib/browser/{check-app-scheme-GCOL6YDT.mjs → check-app-scheme-HIEVFAAX.mjs} +2 -2
  4. package/dist/lib/browser/{chunk-HUWUYTOI.mjs → chunk-5KMJPIQC.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-A4SRCSJX.mjs → chunk-F3VCCHVL.mjs} +5 -3
  6. package/dist/lib/browser/chunk-F3VCCHVL.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-YRDCQS7E.mjs → chunk-QKCGZ45E.mjs} +17 -16
  8. package/dist/lib/browser/chunk-QKCGZ45E.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-UXLU6CMW.mjs +16 -0
  10. package/dist/lib/browser/chunk-UXLU6CMW.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-JH4ZCG5I.mjs → chunk-VBYJ664A.mjs} +8 -5
  12. package/dist/lib/browser/chunk-VBYJ664A.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-3SV2V3AN.mjs → chunk-VUJ6UNIJ.mjs} +384 -326
  14. package/dist/lib/browser/chunk-VUJ6UNIJ.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +7 -6
  16. package/dist/lib/browser/index.mjs.map +2 -2
  17. package/dist/lib/browser/{intent-resolver-2NFDKRFG.mjs → intent-resolver-UA4YQGAC.mjs} +6 -6
  18. package/dist/lib/browser/{intent-resolver-2NFDKRFG.mjs.map → intent-resolver-UA4YQGAC.mjs.map} +2 -2
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-root-JTWYCDJT.mjs → react-root-JAMHKYWN.mjs} +9 -8
  21. package/dist/lib/browser/react-root-JAMHKYWN.mjs.map +7 -0
  22. package/dist/lib/browser/{react-surface-PZKJ73JS.mjs → react-surface-6LW337ZT.mjs} +7 -7
  23. package/dist/lib/browser/{settings-JK7UIZSB.mjs → settings-SDPTOCCM.mjs} +5 -4
  24. package/dist/lib/browser/{settings-JK7UIZSB.mjs.map → settings-SDPTOCCM.mjs.map} +3 -3
  25. package/dist/lib/browser/state-7IFAGZQO.mjs +12 -0
  26. package/dist/lib/browser/toolkit-L5CFXJCF.mjs +52 -0
  27. package/dist/lib/browser/toolkit-L5CFXJCF.mjs.map +7 -0
  28. package/dist/lib/browser/types/index.mjs +2 -2
  29. package/dist/lib/browser/{url-handler-MRYBE3HF.mjs → url-handler-QEYGYE2H.mjs} +4 -4
  30. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  31. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  32. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  33. package/dist/types/src/capabilities/state.d.ts +3 -0
  34. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  35. package/dist/types/src/capabilities/toolkit.d.ts +21 -2
  36. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  37. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +2 -3
  38. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  39. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +74 -0
  40. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  41. package/dist/types/src/components/DeckLayout/DeckMain.d.ts +3 -0
  42. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -0
  43. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  44. package/dist/types/src/components/DeckLayout/Toast.d.ts +5 -0
  45. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  46. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  47. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  48. package/dist/types/src/components/Plank/Plank.stories.d.ts +2 -1
  49. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  50. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  51. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  52. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  53. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
  54. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  55. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  56. package/dist/types/src/meta.d.ts.map +1 -1
  57. package/dist/types/src/translations.d.ts +2 -1
  58. package/dist/types/src/translations.d.ts.map +1 -1
  59. package/dist/types/src/types/schema.d.ts +1 -0
  60. package/dist/types/src/types/schema.d.ts.map +1 -1
  61. package/dist/types/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +33 -33
  63. package/src/capabilities/app-graph-builder.ts +22 -22
  64. package/src/capabilities/intent-resolver.ts +0 -1
  65. package/src/capabilities/react-root.tsx +2 -1
  66. package/src/capabilities/settings.ts +1 -0
  67. package/src/capabilities/state.ts +8 -0
  68. package/src/capabilities/toolkit.ts +23 -14
  69. package/src/components/DeckLayout/ActiveNode.tsx +1 -1
  70. package/src/components/DeckLayout/Banner.tsx +1 -1
  71. package/src/components/DeckLayout/ContentEmpty.tsx +1 -1
  72. package/src/components/DeckLayout/DeckLayout.stories.tsx +63 -0
  73. package/src/components/DeckLayout/DeckLayout.tsx +8 -278
  74. package/src/components/DeckLayout/DeckMain.tsx +281 -0
  75. package/src/components/DeckLayout/Dialog.tsx +1 -1
  76. package/src/components/DeckLayout/Fallback.tsx +1 -1
  77. package/src/components/DeckLayout/Popover.tsx +4 -13
  78. package/src/components/DeckLayout/StatusBar.tsx +1 -1
  79. package/src/components/DeckLayout/Toast.tsx +26 -1
  80. package/src/components/DeckSettings/DeckSettings.tsx +6 -0
  81. package/src/components/Plank/Plank.tsx +65 -31
  82. package/src/components/Plank/PlankControls.tsx +3 -2
  83. package/src/components/Plank/PlankHeading.tsx +5 -4
  84. package/src/components/Sidebar/ComplementarySidebar.tsx +31 -11
  85. package/src/components/Sidebar/Sidebar.tsx +1 -1
  86. package/src/components/Sidebar/SidebarButton.tsx +10 -9
  87. package/src/hooks/useCompanions.ts +1 -1
  88. package/src/hooks/useDeckCompanions.ts +2 -1
  89. package/src/hooks/useHoistStatusbar.ts +5 -3
  90. package/src/meta.ts +5 -0
  91. package/src/translations.ts +2 -1
  92. package/src/types/schema.ts +2 -0
  93. package/dist/lib/browser/app-graph-builder-YYP67JHW.mjs.map +0 -7
  94. package/dist/lib/browser/chunk-3SV2V3AN.mjs.map +0 -7
  95. package/dist/lib/browser/chunk-A4SRCSJX.mjs.map +0 -7
  96. package/dist/lib/browser/chunk-JH4ZCG5I.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-MHP4GPX5.mjs +0 -11
  98. package/dist/lib/browser/chunk-MHP4GPX5.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-YRDCQS7E.mjs.map +0 -7
  100. package/dist/lib/browser/react-root-JTWYCDJT.mjs.map +0 -7
  101. package/dist/lib/browser/state-IFKFOBBX.mjs +0 -12
  102. package/dist/lib/browser/toolkit-L7C3UAEU.mjs +0 -63
  103. package/dist/lib/browser/toolkit-L7C3UAEU.mjs.map +0 -7
  104. /package/dist/lib/browser/{check-app-scheme-GCOL6YDT.mjs.map → check-app-scheme-HIEVFAAX.mjs.map} +0 -0
  105. /package/dist/lib/browser/{chunk-HUWUYTOI.mjs.map → chunk-5KMJPIQC.mjs.map} +0 -0
  106. /package/dist/lib/browser/{react-surface-PZKJ73JS.mjs.map → react-surface-6LW337ZT.mjs.map} +0 -0
  107. /package/dist/lib/browser/{state-IFKFOBBX.mjs.map → state-7IFAGZQO.mjs.map} +0 -0
  108. /package/dist/lib/browser/{url-handler-MRYBE3HF.mjs.map → url-handler-QEYGYE2H.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-deck",
3
- "version": "0.8.4-main.5ad4a44",
3
+ "version": "0.8.4-main.66e292d",
4
4
  "description": "DXOS Surface plugin for the main application layout.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -40,52 +40,52 @@
40
40
  "@preact/signals-core": "^1.12.1",
41
41
  "@radix-ui/react-context": "1.1.1",
42
42
  "immer": "^10.1.1",
43
- "@dxos/ai": "0.8.4-main.5ad4a44",
44
- "@dxos/assistant": "0.8.4-main.5ad4a44",
45
- "@dxos/blueprints": "0.8.4-main.5ad4a44",
46
- "@dxos/async": "0.8.4-main.5ad4a44",
47
- "@dxos/debug": "0.8.4-main.5ad4a44",
48
- "@dxos/echo": "0.8.4-main.5ad4a44",
49
- "@dxos/app-framework": "0.8.4-main.5ad4a44",
50
- "@dxos/invariant": "0.8.4-main.5ad4a44",
51
- "@dxos/echo-signals": "0.8.4-main.5ad4a44",
52
- "@dxos/keyboard": "0.8.4-main.5ad4a44",
53
- "@dxos/live-object": "0.8.4-main.5ad4a44",
54
- "@dxos/local-storage": "0.8.4-main.5ad4a44",
55
- "@dxos/log": "0.8.4-main.5ad4a44",
56
- "@dxos/plugin-graph": "0.8.4-main.5ad4a44",
57
- "@dxos/plugin-attention": "0.8.4-main.5ad4a44",
58
- "@dxos/react-client": "0.8.4-main.5ad4a44",
59
- "@dxos/plugin-theme": "0.8.4-main.5ad4a44",
60
- "@dxos/react-ui-form": "0.8.4-main.5ad4a44",
61
- "@dxos/react-ui-attention": "0.8.4-main.5ad4a44",
62
- "@dxos/react-ui-tabs": "0.8.4-main.5ad4a44",
63
- "@dxos/react-ui-stack": "0.8.4-main.5ad4a44",
64
- "@dxos/react-ui-text-tooltip": "0.8.4-main.5ad4a44",
65
- "@dxos/util": "0.8.4-main.5ad4a44",
66
- "@dxos/plugin-observability": "0.8.4-main.5ad4a44"
43
+ "@dxos/ai": "0.8.4-main.66e292d",
44
+ "@dxos/assistant": "0.8.4-main.66e292d",
45
+ "@dxos/async": "0.8.4-main.66e292d",
46
+ "@dxos/blueprints": "0.8.4-main.66e292d",
47
+ "@dxos/app-framework": "0.8.4-main.66e292d",
48
+ "@dxos/echo": "0.8.4-main.66e292d",
49
+ "@dxos/debug": "0.8.4-main.66e292d",
50
+ "@dxos/echo-signals": "0.8.4-main.66e292d",
51
+ "@dxos/keyboard": "0.8.4-main.66e292d",
52
+ "@dxos/live-object": "0.8.4-main.66e292d",
53
+ "@dxos/local-storage": "0.8.4-main.66e292d",
54
+ "@dxos/log": "0.8.4-main.66e292d",
55
+ "@dxos/plugin-attention": "0.8.4-main.66e292d",
56
+ "@dxos/plugin-graph": "0.8.4-main.66e292d",
57
+ "@dxos/plugin-observability": "0.8.4-main.66e292d",
58
+ "@dxos/plugin-theme": "0.8.4-main.66e292d",
59
+ "@dxos/react-client": "0.8.4-main.66e292d",
60
+ "@dxos/react-ui-attention": "0.8.4-main.66e292d",
61
+ "@dxos/invariant": "0.8.4-main.66e292d",
62
+ "@dxos/react-ui-form": "0.8.4-main.66e292d",
63
+ "@dxos/react-ui-stack": "0.8.4-main.66e292d",
64
+ "@dxos/react-ui-tabs": "0.8.4-main.66e292d",
65
+ "@dxos/react-ui-text-tooltip": "0.8.4-main.66e292d",
66
+ "@dxos/util": "0.8.4-main.66e292d"
67
67
  },
68
68
  "devDependencies": {
69
- "@effect-rx/rx-react": "0.42.4",
69
+ "@effect-atom/atom-react": "^0.3.4",
70
70
  "@effect/platform": "0.92.1",
71
71
  "@types/react": "~19.2.2",
72
- "@types/react-dom": "~19.2.1",
72
+ "@types/react-dom": "~19.2.2",
73
73
  "effect": "3.18.3",
74
74
  "react": "~19.2.0",
75
75
  "react-dom": "~19.2.0",
76
76
  "vite": "7.1.9",
77
- "@dxos/react-ui": "0.8.4-main.5ad4a44",
78
- "@dxos/react-ui-theme": "0.8.4-main.5ad4a44",
79
- "@dxos/storybook-utils": "0.8.4-main.5ad4a44"
77
+ "@dxos/react-ui-theme": "0.8.4-main.66e292d",
78
+ "@dxos/storybook-utils": "0.8.4-main.66e292d",
79
+ "@dxos/react-ui": "0.8.4-main.66e292d"
80
80
  },
81
81
  "peerDependencies": {
82
- "@effect-rx/rx-react": "^0.34.1",
82
+ "@effect-atom/atom-react": "^0.3.4",
83
83
  "@effect/platform": "^0.80.12",
84
84
  "effect": "^3.13.3",
85
85
  "react": "^19.0.0",
86
86
  "react-dom": "^19.0.0",
87
- "@dxos/react-ui": "0.8.4-main.5ad4a44",
88
- "@dxos/react-ui-theme": "0.8.4-main.5ad4a44"
87
+ "@dxos/react-ui": "0.8.4-main.66e292d",
88
+ "@dxos/react-ui-theme": "0.8.4-main.66e292d"
89
89
  },
90
90
  "publishConfig": {
91
91
  "access": "public"
@@ -2,13 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
5
+ import { Atom } from '@effect-atom/atom-react';
6
6
  import * as Function from 'effect/Function';
7
7
  import * as Option from 'effect/Option';
8
8
 
9
9
  import { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
10
10
  import { AttentionCapabilities } from '@dxos/plugin-attention';
11
- import { ROOT_ID, createExtension, rxFromSignal } from '@dxos/plugin-graph';
11
+ import { ROOT_ID, atomFromSignal, createExtension } from '@dxos/plugin-graph';
12
12
 
13
13
  import { meta } from '../meta';
14
14
 
@@ -20,7 +20,7 @@ export default (context: PluginContext) =>
20
20
  createExtension({
21
21
  id: meta.id,
22
22
  actions: (node) =>
23
- Rx.make((get) =>
23
+ Atom.make((get) =>
24
24
  Function.pipe(
25
25
  get(node),
26
26
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
@@ -29,23 +29,23 @@ export default (context: PluginContext) =>
29
29
 
30
30
  // NOTE(Zan): This is currently disabled.
31
31
  // TODO(Zan): Fullscreen needs to know the active node and provide that to the layout part.
32
- const _fullscreen = {
33
- id: `${LayoutAction.UpdateLayout._tag}/fullscreen`,
34
- data: async () => {
35
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
36
- await dispatch(
37
- createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'fullscreen' } }),
38
- );
39
- },
40
- properties: {
41
- label: ['toggle fullscreen label', { ns: meta.id }],
42
- icon: 'ph--arrows-out--regular',
43
- keyBinding: {
44
- macos: 'ctrl+meta+f',
45
- windows: 'shift+ctrl+f',
46
- },
47
- },
48
- };
32
+ // const _fullscreen = {
33
+ // id: `${LayoutAction.UpdateLayout._tag}/fullscreen`,
34
+ // data: async () => {
35
+ // const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
36
+ // await dispatch(
37
+ // createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'fullscreen' } }),
38
+ // );
39
+ // },
40
+ // properties: {
41
+ // label: ['toggle fullscreen label', { ns: meta.id }],
42
+ // icon: 'ph--arrows-out--regular',
43
+ // keyBinding: {
44
+ // macos: 'ctrl+meta+f',
45
+ // windows: 'shift+ctrl+f',
46
+ // },
47
+ // },
48
+ // };
49
49
 
50
50
  const closeCurrent = {
51
51
  id: `${LayoutAction.Close._tag}/current`,
@@ -112,7 +112,7 @@ export default (context: PluginContext) =>
112
112
  properties: {
113
113
  label: [
114
114
  get(
115
- rxFromSignal(() =>
115
+ atomFromSignal(() =>
116
116
  state.sidebarState === 'expanded'
117
117
  ? 'collapse navigation sidebar label'
118
118
  : 'open navigation sidebar label',
@@ -131,7 +131,7 @@ export default (context: PluginContext) =>
131
131
  };
132
132
 
133
133
  return get(
134
- rxFromSignal(() =>
134
+ atomFromSignal(() =>
135
135
  !state.deck.solo ? [closeCurrent, closeOthers, closeAll, toggleSidebar] : [toggleSidebar],
136
136
  ),
137
137
  );
@@ -91,7 +91,6 @@ export default (context: PluginContext) =>
91
91
  Schema.is(LayoutAction.UpdateComplementary.fields.input)(data),
92
92
  resolve: ({ subject, options }) => {
93
93
  const layout = context.getCapability(DeckCapabilities.MutableDeckState);
94
-
95
94
  if (layout.complementarySidebarPanel !== subject) {
96
95
  layout.complementarySidebarPanel = subject;
97
96
  }
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { Capabilities, contributes, useCapability } from '@dxos/app-framework';
7
+ import { Capabilities, contributes } from '@dxos/app-framework';
8
+ import { useCapability } from '@dxos/app-framework/react';
8
9
 
9
10
  import { DeckLayout } from '../components';
10
11
  import { meta } from '../meta';
@@ -16,6 +16,7 @@ export default () => {
16
16
  enableNativeRedirect: false,
17
17
  newPlankPositioning: 'start',
18
18
  overscroll: 'none',
19
+ encapsulatedPlanks: false,
19
20
  });
20
21
 
21
22
  return contributes(Capabilities.Settings, {
@@ -30,6 +30,9 @@ const migrateSidebarState = () => {
30
30
  });
31
31
  };
32
32
 
33
+ /**
34
+ * @deprecated
35
+ */
33
36
  export const DeckStateFactory = () => {
34
37
  migrateSidebarState();
35
38
 
@@ -69,6 +72,11 @@ export const DeckStateFactory = () => {
69
72
  .prop({ key: 'activeDeck', type: LocalStorageStore.string() })
70
73
  .prop({ key: 'previousDeck', type: LocalStorageStore.string() });
71
74
 
75
+ // Don't allow fullscreen mode to be persisted to prevent getting stuck in it.
76
+ if (state.values.deck.fullscreen) {
77
+ state.values.deck.fullscreen = false;
78
+ }
79
+
72
80
  const layout = live<Capabilities.Layout>({
73
81
  get mode() {
74
82
  return getMode(state.values.deck);
@@ -7,14 +7,22 @@ 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 { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
10
+ import {
11
+ Capabilities,
12
+ type Capability,
13
+ LayoutAction,
14
+ type PluginContext,
15
+ contributes,
16
+ createIntent,
17
+ } from '@dxos/app-framework';
18
+ import { GenericToolkit } from '@dxos/assistant';
11
19
  import { ArtifactId } from '@dxos/assistant';
12
20
  import { type SpaceId } from '@dxos/keys';
13
21
  import { trim } from '@dxos/util';
14
22
 
15
23
  import { DeckCapabilities } from './capabilities';
16
24
 
17
- class DeckToolkit extends Toolkit.make(
25
+ const Toolkit$ = Toolkit.make(
18
26
  Tool.make('open-item', {
19
27
  description: trim`
20
28
  Opens an item in the application.
@@ -25,17 +33,19 @@ class DeckToolkit extends Toolkit.make(
25
33
  success: Schema.Any,
26
34
  failure: Schema.Never,
27
35
  }),
28
- ) {
29
- static layer = (context: PluginContext) =>
30
- DeckToolkit.toLayer({
36
+ );
37
+
38
+ export namespace DeckToolkit {
39
+ export const Toolkit = Toolkit$;
40
+
41
+ export const createLayer = (context: PluginContext) =>
42
+ Toolkit$.toLayer({
31
43
  'open-item': ({ id }) =>
32
44
  Effect.gen(function* () {
33
45
  const state = context.getCapability(DeckCapabilities.DeckState);
34
- const dxn = ArtifactId.toDXN(id, state.activeDeck as SpaceId);
35
-
36
- // TODO(wittjosiah): Support other variants.
37
- const echoDxn = dxn.asEchoDXN();
38
- if (!echoDxn) {
46
+ const dxn = ArtifactId.toDXN(id, state.activeDeck as SpaceId).asEchoDXN();
47
+ if (!dxn) {
48
+ // TODO(wittjosiah): Support other variants.
39
49
  throw new Error(`Invalid object ID: ${id}`);
40
50
  }
41
51
 
@@ -43,7 +53,7 @@ class DeckToolkit extends Toolkit.make(
43
53
  const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
44
54
  yield* dispatch(
45
55
  createIntent(LayoutAction.Open, {
46
- subject: [`${echoDxn.spaceId!}:${echoDxn.echoId}`],
56
+ subject: [`${dxn.spaceId!}:${dxn.echoId}`],
47
57
  part: 'main',
48
58
  }),
49
59
  );
@@ -51,7 +61,6 @@ class DeckToolkit extends Toolkit.make(
51
61
  });
52
62
  }
53
63
 
54
- export default (context: PluginContext) => [
55
- contributes(Capabilities.Toolkit, DeckToolkit),
56
- contributes(Capabilities.ToolkitHandler, DeckToolkit.layer(context)),
64
+ export default (context: PluginContext): Capability<any>[] => [
65
+ contributes(Capabilities.Toolkit, GenericToolkit.make(DeckToolkit.Toolkit, DeckToolkit.createLayer(context))),
57
66
  ];
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface, useAppGraph } from '@dxos/app-framework';
7
+ import { Surface, useAppGraph } from '@dxos/app-framework/react';
8
8
  import { useNode } from '@dxos/plugin-graph';
9
9
  import { useAttended } from '@dxos/react-ui-attention';
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework';
7
+ import { Surface } from '@dxos/app-framework/react';
8
8
  import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
9
  import { mx } from '@dxos/react-ui-theme';
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface, useCapability } from '@dxos/app-framework';
7
+ import { Surface, useCapability } from '@dxos/app-framework/react';
8
8
 
9
9
  import { DeckCapabilities } from '../../capabilities';
10
10
  import { useBreakpoints } from '../../hooks';
@@ -0,0 +1,63 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { Events, IntentPlugin, SettingsPlugin, defineModule, definePlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { AttentionPlugin } from '@dxos/plugin-attention';
11
+ import { GraphPlugin } from '@dxos/plugin-graph';
12
+ import { withTheme } from '@dxos/react-ui/testing';
13
+
14
+ import { DeckStateFactory, LayoutIntentResolver } from '../../capabilities';
15
+ import { meta as pluginMeta } from '../../meta';
16
+ import { translations } from '../../translations';
17
+
18
+ import { DeckLayout } from './DeckLayout';
19
+
20
+ const meta = {
21
+ title: 'plugins/plugin-deck/DeckLayout',
22
+ component: DeckLayout,
23
+ render: (args) => <DeckLayout {...args} />,
24
+ decorators: [
25
+ withTheme,
26
+ withPluginManager({
27
+ plugins: [
28
+ AttentionPlugin(),
29
+ SettingsPlugin(),
30
+ IntentPlugin(),
31
+ GraphPlugin(),
32
+ definePlugin(
33
+ {
34
+ id: 'example.com/plutin/testing',
35
+ name: 'Testing',
36
+ },
37
+ () => [
38
+ defineModule({
39
+ id: `${pluginMeta.id}/module/deck-state`,
40
+ activatesOn: Events.AppGraphReady,
41
+ activate: () => DeckStateFactory(),
42
+ }),
43
+ defineModule({
44
+ id: `${pluginMeta.id}/module/layout-intent-resolver`,
45
+ activatesOn: Events.SetupIntentResolver,
46
+ activate: LayoutIntentResolver,
47
+ }),
48
+ ],
49
+ )(),
50
+ ],
51
+ }),
52
+ ],
53
+ parameters: {
54
+ layout: 'fullscreen',
55
+ translations,
56
+ },
57
+ } satisfies Meta<typeof DeckLayout>;
58
+
59
+ export default meta;
60
+
61
+ type Story = StoryObj<typeof meta>;
62
+
63
+ export const Default: Story = {};