@dxos/plugin-deck 0.8.4-main.fd6878d → 0.8.4-main.fffef41

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 (137) hide show
  1. package/dist/lib/browser/{app-graph-builder-DVEKLXB4.mjs → app-graph-builder-D74NTOMK.mjs} +18 -42
  2. package/dist/lib/browser/app-graph-builder-D74NTOMK.mjs.map +7 -0
  3. package/dist/lib/browser/{check-app-scheme-3BQJXWEY.mjs → check-app-scheme-HIEVFAAX.mjs} +6 -6
  4. package/dist/lib/browser/check-app-scheme-HIEVFAAX.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-5KMJPIQC.mjs +16 -0
  6. package/dist/lib/browser/chunk-5KMJPIQC.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-F5BQOOEG.mjs → chunk-F3VCCHVL.mjs} +8 -6
  8. package/dist/lib/browser/chunk-F3VCCHVL.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-MX7WRVX3.mjs → chunk-QKCGZ45E.mjs} +18 -17
  10. package/dist/lib/browser/chunk-QKCGZ45E.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-UXLU6CMW.mjs +16 -0
  12. package/dist/lib/browser/chunk-UXLU6CMW.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-NRCPV6AV.mjs → chunk-VBYJ664A.mjs} +12 -9
  14. package/dist/lib/browser/chunk-VBYJ664A.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-6MQIYIPY.mjs → chunk-VUJ6UNIJ.mjs} +420 -361
  16. package/dist/lib/browser/chunk-VUJ6UNIJ.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +9 -9
  18. package/dist/lib/browser/index.mjs.map +3 -3
  19. package/dist/lib/browser/{intent-resolver-2SUIIV6N.mjs → intent-resolver-UA4YQGAC.mjs} +20 -17
  20. package/dist/lib/browser/intent-resolver-UA4YQGAC.mjs.map +7 -0
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-root-GVZANZX7.mjs → react-root-JAMHKYWN.mjs} +13 -12
  23. package/dist/lib/browser/react-root-JAMHKYWN.mjs.map +7 -0
  24. package/dist/lib/browser/{react-surface-NXSSD2GW.mjs → react-surface-6LW337ZT.mjs} +13 -13
  25. package/dist/lib/browser/react-surface-6LW337ZT.mjs.map +7 -0
  26. package/dist/lib/browser/{settings-LUPQPZ27.mjs → settings-SDPTOCCM.mjs} +7 -6
  27. package/dist/lib/browser/{settings-LUPQPZ27.mjs.map → settings-SDPTOCCM.mjs.map} +3 -3
  28. package/dist/lib/browser/state-7IFAGZQO.mjs +12 -0
  29. package/dist/lib/browser/toolkit-L5CFXJCF.mjs +52 -0
  30. package/dist/lib/browser/toolkit-L5CFXJCF.mjs.map +7 -0
  31. package/dist/lib/browser/types/index.mjs +2 -2
  32. package/dist/lib/browser/{url-handler-LROZYQ26.mjs → url-handler-QEYGYE2H.mjs} +6 -6
  33. package/dist/lib/browser/{url-handler-LROZYQ26.mjs.map → url-handler-QEYGYE2H.mjs.map} +1 -1
  34. package/dist/types/src/DeckPlugin.d.ts +1 -1
  35. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  36. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  37. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  38. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  39. package/dist/types/src/capabilities/check-app-scheme.d.ts +1 -1
  40. package/dist/types/src/capabilities/index.d.ts +8 -8
  41. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  42. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  43. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  44. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  45. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  46. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  47. package/dist/types/src/capabilities/settings.d.ts +1 -1
  48. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  49. package/dist/types/src/capabilities/state.d.ts +5 -2
  50. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/toolkit.d.ts +23 -3
  52. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  53. package/dist/types/src/capabilities/tools.d.ts +1 -1
  54. package/dist/types/src/capabilities/url-handler.d.ts +1 -1
  55. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +2 -3
  56. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  57. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +74 -0
  58. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/DeckLayout/DeckMain.d.ts +3 -0
  60. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -0
  61. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  62. package/dist/types/src/components/DeckLayout/Toast.d.ts +5 -0
  63. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  64. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  65. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  66. package/dist/types/src/components/Plank/Plank.stories.d.ts +86 -5
  67. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  69. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  70. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  71. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
  72. package/dist/types/src/events.d.ts.map +1 -1
  73. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  74. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  75. package/dist/types/src/meta.d.ts +0 -1
  76. package/dist/types/src/meta.d.ts.map +1 -1
  77. package/dist/types/src/translations.d.ts +2 -0
  78. package/dist/types/src/translations.d.ts.map +1 -1
  79. package/dist/types/src/types/schema.d.ts +4 -3
  80. package/dist/types/src/types/schema.d.ts.map +1 -1
  81. package/dist/types/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +44 -44
  83. package/src/DeckPlugin.ts +62 -63
  84. package/src/capabilities/app-graph-builder.ts +31 -30
  85. package/src/capabilities/capabilities.ts +3 -3
  86. package/src/capabilities/check-app-scheme.ts +2 -2
  87. package/src/capabilities/intent-resolver.ts +12 -10
  88. package/src/capabilities/react-root.tsx +4 -3
  89. package/src/capabilities/react-surface.tsx +4 -4
  90. package/src/capabilities/settings.ts +1 -0
  91. package/src/capabilities/state.ts +12 -4
  92. package/src/capabilities/toolkit.ts +28 -17
  93. package/src/capabilities/tools.ts +1 -1
  94. package/src/components/DeckLayout/ActiveNode.tsx +1 -1
  95. package/src/components/DeckLayout/Banner.tsx +3 -3
  96. package/src/components/DeckLayout/ContentEmpty.tsx +1 -1
  97. package/src/components/DeckLayout/DeckLayout.stories.tsx +63 -0
  98. package/src/components/DeckLayout/DeckLayout.tsx +8 -278
  99. package/src/components/DeckLayout/DeckMain.tsx +281 -0
  100. package/src/components/DeckLayout/Dialog.tsx +1 -1
  101. package/src/components/DeckLayout/Fallback.tsx +3 -3
  102. package/src/components/DeckLayout/Popover.tsx +4 -13
  103. package/src/components/DeckLayout/StatusBar.tsx +1 -1
  104. package/src/components/DeckLayout/Toast.tsx +28 -3
  105. package/src/components/DeckSettings/DeckSettings.tsx +80 -65
  106. package/src/components/Plank/Plank.stories.tsx +7 -9
  107. package/src/components/Plank/Plank.tsx +69 -37
  108. package/src/components/Plank/PlankControls.tsx +6 -5
  109. package/src/components/Plank/PlankError.tsx +2 -2
  110. package/src/components/Plank/PlankHeading.tsx +10 -9
  111. package/src/components/Sidebar/ComplementarySidebar.tsx +36 -16
  112. package/src/components/Sidebar/Sidebar.tsx +3 -3
  113. package/src/components/Sidebar/SidebarButton.tsx +14 -13
  114. package/src/events.ts +2 -2
  115. package/src/hooks/useCompanions.ts +1 -1
  116. package/src/hooks/useDeckCompanions.ts +2 -1
  117. package/src/hooks/useHoistStatusbar.ts +6 -4
  118. package/src/meta.ts +6 -3
  119. package/src/translations.ts +2 -0
  120. package/src/types/schema.ts +5 -3
  121. package/dist/lib/browser/app-graph-builder-DVEKLXB4.mjs.map +0 -7
  122. package/dist/lib/browser/check-app-scheme-3BQJXWEY.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-6MQIYIPY.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-F5BQOOEG.mjs.map +0 -7
  125. package/dist/lib/browser/chunk-M57WD3V6.mjs +0 -16
  126. package/dist/lib/browser/chunk-M57WD3V6.mjs.map +0 -7
  127. package/dist/lib/browser/chunk-MX7WRVX3.mjs.map +0 -7
  128. package/dist/lib/browser/chunk-NRCPV6AV.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-Z5KITAZW.mjs +0 -13
  130. package/dist/lib/browser/chunk-Z5KITAZW.mjs.map +0 -7
  131. package/dist/lib/browser/intent-resolver-2SUIIV6N.mjs.map +0 -7
  132. package/dist/lib/browser/react-root-GVZANZX7.mjs.map +0 -7
  133. package/dist/lib/browser/react-surface-NXSSD2GW.mjs.map +0 -7
  134. package/dist/lib/browser/state-CRXR7X63.mjs +0 -12
  135. package/dist/lib/browser/toolkit-OBKFXX23.mjs +0 -47
  136. package/dist/lib/browser/toolkit-OBKFXX23.mjs.map +0 -7
  137. /package/dist/lib/browser/{state-CRXR7X63.mjs.map → state-7IFAGZQO.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.fd6878d",
3
+ "version": "0.8.4-main.fffef41",
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",
@@ -33,59 +33,59 @@
33
33
  "src"
34
34
  ],
35
35
  "dependencies": {
36
- "@effect/ai": "0.25.2",
36
+ "@effect/ai": "0.29.1",
37
+ "@effect/experimental": "0.56.0",
37
38
  "@fluentui/react-tabster": "^9.24.2",
38
39
  "@preact-signals/safe-react": "^0.9.0",
39
- "@preact/signals-core": "^1.9.0",
40
+ "@preact/signals-core": "^1.12.1",
40
41
  "@radix-ui/react-context": "1.1.1",
41
- "effect": "3.17.7",
42
42
  "immer": "^10.1.1",
43
- "@dxos/ai": "0.8.4-main.fd6878d",
44
- "@dxos/app-framework": "0.8.4-main.fd6878d",
45
- "@dxos/blueprints": "0.8.4-main.fd6878d",
46
- "@dxos/assistant": "0.8.4-main.fd6878d",
47
- "@dxos/debug": "0.8.4-main.fd6878d",
48
- "@dxos/echo": "0.8.4-main.fd6878d",
49
- "@dxos/async": "0.8.4-main.fd6878d",
50
- "@dxos/echo-schema": "0.8.4-main.fd6878d",
51
- "@dxos/invariant": "0.8.4-main.fd6878d",
52
- "@dxos/keyboard": "0.8.4-main.fd6878d",
53
- "@dxos/live-object": "0.8.4-main.fd6878d",
54
- "@dxos/echo-signals": "0.8.4-main.fd6878d",
55
- "@dxos/local-storage": "0.8.4-main.fd6878d",
56
- "@dxos/plugin-attention": "0.8.4-main.fd6878d",
57
- "@dxos/log": "0.8.4-main.fd6878d",
58
- "@dxos/plugin-graph": "0.8.4-main.fd6878d",
59
- "@dxos/plugin-observability": "0.8.4-main.fd6878d",
60
- "@dxos/plugin-theme": "0.8.4-main.fd6878d",
61
- "@dxos/react-client": "0.8.4-main.fd6878d",
62
- "@dxos/react-ui-attention": "0.8.4-main.fd6878d",
63
- "@dxos/react-ui-form": "0.8.4-main.fd6878d",
64
- "@dxos/react-ui-stack": "0.8.4-main.fd6878d",
65
- "@dxos/react-ui-tabs": "0.8.4-main.fd6878d",
66
- "@dxos/util": "0.8.4-main.fd6878d",
67
- "@dxos/react-ui-text-tooltip": "0.8.4-main.fd6878d"
43
+ "@dxos/app-framework": "0.8.4-main.fffef41",
44
+ "@dxos/ai": "0.8.4-main.fffef41",
45
+ "@dxos/assistant": "0.8.4-main.fffef41",
46
+ "@dxos/async": "0.8.4-main.fffef41",
47
+ "@dxos/blueprints": "0.8.4-main.fffef41",
48
+ "@dxos/debug": "0.8.4-main.fffef41",
49
+ "@dxos/echo-signals": "0.8.4-main.fffef41",
50
+ "@dxos/invariant": "0.8.4-main.fffef41",
51
+ "@dxos/live-object": "0.8.4-main.fffef41",
52
+ "@dxos/keyboard": "0.8.4-main.fffef41",
53
+ "@dxos/local-storage": "0.8.4-main.fffef41",
54
+ "@dxos/plugin-attention": "0.8.4-main.fffef41",
55
+ "@dxos/echo": "0.8.4-main.fffef41",
56
+ "@dxos/plugin-graph": "0.8.4-main.fffef41",
57
+ "@dxos/log": "0.8.4-main.fffef41",
58
+ "@dxos/plugin-observability": "0.8.4-main.fffef41",
59
+ "@dxos/plugin-theme": "0.8.4-main.fffef41",
60
+ "@dxos/react-client": "0.8.4-main.fffef41",
61
+ "@dxos/react-ui-attention": "0.8.4-main.fffef41",
62
+ "@dxos/react-ui-form": "0.8.4-main.fffef41",
63
+ "@dxos/react-ui-tabs": "0.8.4-main.fffef41",
64
+ "@dxos/react-ui-stack": "0.8.4-main.fffef41",
65
+ "@dxos/react-ui-text-tooltip": "0.8.4-main.fffef41",
66
+ "@dxos/util": "0.8.4-main.fffef41"
68
67
  },
69
68
  "devDependencies": {
70
- "@effect-rx/rx-react": "0.38.0",
71
- "@effect/platform": "0.90.2",
72
- "@types/react": "~18.2.0",
73
- "@types/react-dom": "~18.2.0",
74
- "react": "~18.2.0",
75
- "react-dom": "~18.2.0",
76
- "vite": "5.4.7",
77
- "@dxos/react-ui": "0.8.4-main.fd6878d",
78
- "@dxos/react-ui-theme": "0.8.4-main.fd6878d",
79
- "@dxos/storybook-utils": "0.8.4-main.fd6878d"
69
+ "@effect-atom/atom-react": "^0.3.4",
70
+ "@effect/platform": "0.92.1",
71
+ "@types/react": "~19.2.2",
72
+ "@types/react-dom": "~19.2.2",
73
+ "effect": "3.18.3",
74
+ "react": "~19.2.0",
75
+ "react-dom": "~19.2.0",
76
+ "vite": "7.1.9",
77
+ "@dxos/react-ui-theme": "0.8.4-main.fffef41",
78
+ "@dxos/storybook-utils": "0.8.4-main.fffef41",
79
+ "@dxos/react-ui": "0.8.4-main.fffef41"
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
- "react": "~18.2.0",
86
- "react-dom": "~18.2.0",
87
- "@dxos/react-ui-theme": "0.8.4-main.fd6878d",
88
- "@dxos/react-ui": "0.8.4-main.fd6878d"
85
+ "react": "^19.0.0",
86
+ "react-dom": "^19.0.0",
87
+ "@dxos/react-ui": "0.8.4-main.fffef41",
88
+ "@dxos/react-ui-theme": "0.8.4-main.fffef41"
89
89
  },
90
90
  "publishConfig": {
91
91
  "access": "public"
package/src/DeckPlugin.ts CHANGED
@@ -27,66 +27,65 @@ import { translations } from './translations';
27
27
  // TODO(Zan): Move this to a more global location if we use immer more broadly.
28
28
  setAutoFreeze(false);
29
29
 
30
- export const DeckPlugin = () =>
31
- definePlugin(meta, [
32
- defineModule({
33
- id: `${meta.id}/module/check-app-scheme`,
34
- activatesOn: Events.SettingsReady,
35
- activate: CheckAppScheme,
36
- }),
37
- defineModule({
38
- id: `${meta.id}/module/settings`,
39
- activatesOn: Events.SetupSettings,
40
- activate: DeckSettings,
41
- }),
42
- defineModule({
43
- id: `${meta.id}/module/layout`,
44
- // TODO(wittjosiah): Does not integrate with settings store.
45
- // Should this be a different event?
46
- // Should settings store be renamed to be more generic?
47
- activatesOn: oneOf(Events.SetupSettings, Events.SetupAppGraph),
48
- activatesAfter: [Events.LayoutReady, DeckEvents.StateReady],
49
- activate: DeckState,
50
- }),
51
- defineModule({
52
- id: `${meta.id}/module/translations`,
53
- activatesOn: Events.SetupTranslations,
54
- activate: () => contributes(Capabilities.Translations, [...translations, ...stackTranslations]),
55
- }),
56
- defineModule({
57
- id: `${meta.id}/module/react-root`,
58
- activatesOn: Events.Startup,
59
- activate: ReactRoot,
60
- }),
61
- defineModule({
62
- id: `${meta.id}/module/react-surface`,
63
- activatesOn: Events.SetupReactSurface,
64
- activate: ReactSurface,
65
- }),
66
- defineModule({
67
- id: `${meta.id}/module/layout-intent-resolver`,
68
- activatesOn: Events.SetupIntentResolver,
69
- activate: LayoutIntentResolver,
70
- }),
71
- defineModule({
72
- id: `${meta.id}/module/app-graph-builder`,
73
- activatesOn: Events.SetupAppGraph,
74
- activate: AppGraphBuilder,
75
- }),
76
- // defineModule({
77
- // id: `${meta.id}/module/tools`,
78
- // activatesOn: Events.SetupArtifactDefinition,
79
- // activate: Tools,
80
- // }),
81
- defineModule({
82
- id: `${meta.id}/module/toolkit`,
83
- // TODO(wittjosiah): Shouldn't use the startup event.
84
- activatesOn: Events.Startup,
85
- activate: Toolkit,
86
- }),
87
- defineModule({
88
- id: `${meta.id}/module/url`,
89
- activatesOn: allOf(Events.DispatcherReady, DeckEvents.StateReady),
90
- activate: UrlHandler,
91
- }),
92
- ]);
30
+ export const DeckPlugin = definePlugin(meta, () => [
31
+ defineModule({
32
+ id: `${meta.id}/module/check-app-scheme`,
33
+ activatesOn: Events.SettingsReady,
34
+ activate: CheckAppScheme,
35
+ }),
36
+ defineModule({
37
+ id: `${meta.id}/module/settings`,
38
+ activatesOn: Events.SetupSettings,
39
+ activate: DeckSettings,
40
+ }),
41
+ defineModule({
42
+ id: `${meta.id}/module/layout`,
43
+ // TODO(wittjosiah): Does not integrate with settings store.
44
+ // Should this be a different event?
45
+ // Should settings store be renamed to be more generic?
46
+ activatesOn: oneOf(Events.SetupSettings, Events.SetupAppGraph),
47
+ activatesAfter: [Events.LayoutReady, DeckEvents.StateReady],
48
+ activate: DeckState,
49
+ }),
50
+ defineModule({
51
+ id: `${meta.id}/module/translations`,
52
+ activatesOn: Events.SetupTranslations,
53
+ activate: () => contributes(Capabilities.Translations, [...translations, ...stackTranslations]),
54
+ }),
55
+ defineModule({
56
+ id: `${meta.id}/module/react-root`,
57
+ activatesOn: Events.Startup,
58
+ activate: ReactRoot,
59
+ }),
60
+ defineModule({
61
+ id: `${meta.id}/module/react-surface`,
62
+ activatesOn: Events.SetupReactSurface,
63
+ activate: ReactSurface,
64
+ }),
65
+ defineModule({
66
+ id: `${meta.id}/module/layout-intent-resolver`,
67
+ activatesOn: Events.SetupIntentResolver,
68
+ activate: LayoutIntentResolver,
69
+ }),
70
+ defineModule({
71
+ id: `${meta.id}/module/app-graph-builder`,
72
+ activatesOn: Events.SetupAppGraph,
73
+ activate: AppGraphBuilder,
74
+ }),
75
+ // defineModule({
76
+ // id: `${meta.id}/module/tools`,
77
+ // activatesOn: Events.SetupArtifactDefinition,
78
+ // activate: Tools,
79
+ // }),
80
+ defineModule({
81
+ id: `${meta.id}/module/toolkit`,
82
+ // TODO(wittjosiah): Shouldn't use the startup event.
83
+ activatesOn: Events.Startup,
84
+ activate: Toolkit,
85
+ }),
86
+ defineModule({
87
+ id: `${meta.id}/module/url`,
88
+ activatesOn: allOf(Events.DispatcherReady, DeckEvents.StateReady),
89
+ activate: UrlHandler,
90
+ }),
91
+ ]);
@@ -2,14 +2,15 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
6
- import { Option, pipe } from 'effect';
5
+ import { Atom } from '@effect-atom/atom-react';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
7
8
 
8
9
  import { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
9
10
  import { AttentionCapabilities } from '@dxos/plugin-attention';
10
- import { ROOT_ID, createExtension, rxFromSignal } from '@dxos/plugin-graph';
11
+ import { ROOT_ID, atomFromSignal, createExtension } from '@dxos/plugin-graph';
11
12
 
12
- import { DECK_PLUGIN } from '../meta';
13
+ import { meta } from '../meta';
13
14
 
14
15
  import { DeckCapabilities } from './capabilities';
15
16
 
@@ -17,10 +18,10 @@ export default (context: PluginContext) =>
17
18
  contributes(
18
19
  Capabilities.AppGraphBuilder,
19
20
  createExtension({
20
- id: DECK_PLUGIN,
21
+ id: meta.id,
21
22
  actions: (node) =>
22
- Rx.make((get) =>
23
- pipe(
23
+ Atom.make((get) =>
24
+ Function.pipe(
24
25
  get(node),
25
26
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
26
27
  Option.map(() => {
@@ -28,23 +29,23 @@ export default (context: PluginContext) =>
28
29
 
29
30
  // NOTE(Zan): This is currently disabled.
30
31
  // TODO(Zan): Fullscreen needs to know the active node and provide that to the layout part.
31
- const _fullscreen = {
32
- id: `${LayoutAction.UpdateLayout._tag}/fullscreen`,
33
- data: async () => {
34
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
35
- await dispatch(
36
- createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'fullscreen' } }),
37
- );
38
- },
39
- properties: {
40
- label: ['toggle fullscreen label', { ns: DECK_PLUGIN }],
41
- icon: 'ph--arrows-out--regular',
42
- keyBinding: {
43
- macos: 'ctrl+meta+f',
44
- windows: 'shift+ctrl+f',
45
- },
46
- },
47
- };
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
+ // };
48
49
 
49
50
  const closeCurrent = {
50
51
  id: `${LayoutAction.Close._tag}/current`,
@@ -63,7 +64,7 @@ export default (context: PluginContext) =>
63
64
  }
64
65
  },
65
66
  properties: {
66
- label: ['close current label', { ns: DECK_PLUGIN }],
67
+ label: ['close current label', { ns: meta.id }],
67
68
  icon: 'ph--x--regular',
68
69
  },
69
70
  };
@@ -80,7 +81,7 @@ export default (context: PluginContext) =>
80
81
  );
81
82
  },
82
83
  properties: {
83
- label: ['close others label', { ns: DECK_PLUGIN }],
84
+ label: ['close others label', { ns: meta.id }],
84
85
  icon: 'ph--x-square--regular',
85
86
  },
86
87
  };
@@ -98,7 +99,7 @@ export default (context: PluginContext) =>
98
99
  );
99
100
  },
100
101
  properties: {
101
- label: ['close all label', { ns: DECK_PLUGIN }],
102
+ label: ['close all label', { ns: meta.id }],
102
103
  icon: 'ph--x-circle--regular',
103
104
  },
104
105
  };
@@ -111,13 +112,13 @@ export default (context: PluginContext) =>
111
112
  properties: {
112
113
  label: [
113
114
  get(
114
- rxFromSignal(() =>
115
+ atomFromSignal(() =>
115
116
  state.sidebarState === 'expanded'
116
117
  ? 'collapse navigation sidebar label'
117
118
  : 'open navigation sidebar label',
118
119
  ),
119
120
  ),
120
- { ns: DECK_PLUGIN },
121
+ { ns: meta.id },
121
122
  ],
122
123
  icon: 'ph--sidebar--regular',
123
124
  keyBinding: {
@@ -130,7 +131,7 @@ export default (context: PluginContext) =>
130
131
  };
131
132
 
132
133
  return get(
133
- rxFromSignal(() =>
134
+ atomFromSignal(() =>
134
135
  !state.deck.solo ? [closeCurrent, closeOthers, closeAll, toggleSidebar] : [toggleSidebar],
135
136
  ),
136
137
  );
@@ -5,10 +5,10 @@
5
5
  import { defineCapability } from '@dxos/app-framework';
6
6
  import { type DeepReadonly } from '@dxos/util';
7
7
 
8
- import { DECK_PLUGIN } from '../meta';
8
+ import { meta } from '../meta';
9
9
  import { type DeckPluginState } from '../types';
10
10
 
11
11
  export namespace DeckCapabilities {
12
- export const DeckState = defineCapability<DeepReadonly<DeckPluginState>>(`${DECK_PLUGIN}/capability/state`);
13
- export const MutableDeckState = defineCapability<DeckPluginState>(`${DECK_PLUGIN}/capability/state`);
12
+ export const DeckState = defineCapability<DeepReadonly<DeckPluginState>>(`${meta.id}/capability/state`);
13
+ export const MutableDeckState = defineCapability<DeckPluginState>(`${meta.id}/capability/state`);
14
14
  }
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';
6
6
 
7
- import { DECK_PLUGIN } from '../meta';
7
+ import { meta } from '../meta';
8
8
  import { type DeckSettingsProps } from '../types';
9
9
 
10
10
  const isSocket = !!(globalThis as any).__args;
@@ -31,7 +31,7 @@ const checkAppScheme = (url: string) => {
31
31
  };
32
32
 
33
33
  export default async (context: PluginContext) => {
34
- const settings = context.getCapability(Capabilities.SettingsStore).getStore<DeckSettingsProps>(DECK_PLUGIN)?.value;
34
+ const settings = context.getCapability(Capabilities.SettingsStore).getStore<DeckSettingsProps>(meta.id)?.value;
35
35
  if (!isSocket && settings?.enableNativeRedirect) {
36
36
  checkAppScheme(appScheme);
37
37
  }
@@ -3,7 +3,10 @@
3
3
  //
4
4
 
5
5
  import { batch } from '@preact/signals-core';
6
- import { Effect, Option, Schema, pipe } from 'effect';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Function from 'effect/Function';
8
+ import * as Option from 'effect/Option';
9
+ import * as Schema from 'effect/Schema';
7
10
 
8
11
  import {
9
12
  Capabilities,
@@ -25,7 +28,7 @@ import { ObservabilityAction } from '@dxos/plugin-observability/types';
25
28
  import { byPosition, isNonNullable } from '@dxos/util';
26
29
 
27
30
  import { closeEntry, createEntryId, incrementPlank, openEntry } from '../layout';
28
- import { DECK_PLUGIN } from '../meta';
31
+ import { meta } from '../meta';
29
32
  import {
30
33
  DeckAction,
31
34
  type DeckSettingsProps,
@@ -56,11 +59,11 @@ export default (context: PluginContext) =>
56
59
  ...layout.toasts,
57
60
  {
58
61
  id: layout.currentUndoId,
59
- title: data.message ?? ['undo available label', { ns: DECK_PLUGIN }],
62
+ title: data.message ?? ['undo available label', { ns: meta.id }],
60
63
  duration: 10_000,
61
- actionLabel: ['undo action label', { ns: DECK_PLUGIN }],
62
- actionAlt: ['undo action alt', { ns: DECK_PLUGIN }],
63
- closeLabel: ['undo close label', { ns: DECK_PLUGIN }],
64
+ actionLabel: ['undo action label', { ns: meta.id }],
65
+ actionAlt: ['undo action alt', { ns: meta.id }],
66
+ closeLabel: ['undo close label', { ns: meta.id }],
64
67
  onAction: () => undo(),
65
68
  },
66
69
  ];
@@ -88,7 +91,6 @@ export default (context: PluginContext) =>
88
91
  Schema.is(LayoutAction.UpdateComplementary.fields.input)(data),
89
92
  resolve: ({ subject, options }) => {
90
93
  const layout = context.getCapability(DeckCapabilities.MutableDeckState);
91
-
92
94
  if (layout.complementarySidebarPanel !== subject) {
93
95
  layout.complementarySidebarPanel = subject;
94
96
  }
@@ -261,7 +263,7 @@ export default (context: PluginContext) =>
261
263
  const attention = context.getCapability(AttentionCapabilities.Attention);
262
264
  const settings = context
263
265
  .getCapabilities(Capabilities.SettingsStore)[0]
264
- ?.getStore<DeckSettingsProps>(DECK_PLUGIN)?.value;
266
+ ?.getStore<DeckSettingsProps>(meta.id)?.value;
265
267
 
266
268
  if (options?.workspace && state.activeDeck !== options?.workspace) {
267
269
  const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
@@ -403,7 +405,7 @@ export default (context: PluginContext) =>
403
405
  }
404
406
 
405
407
  if (adjustment.type === 'companion') {
406
- return pipe(
408
+ return Function.pipe(
407
409
  graph.getNode(adjustment.id),
408
410
  Option.map((node) =>
409
411
  graph
@@ -454,7 +456,7 @@ export default (context: PluginContext) =>
454
456
  return {
455
457
  intents: [
456
458
  // NOTE: The order of these is important.
457
- pipe(
459
+ Function.pipe(
458
460
  createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'deck' } }),
459
461
  chain(LayoutAction.Open, { part: 'main', subject: [entryId] }),
460
462
  ),
@@ -4,16 +4,17 @@
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
- import { DECK_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
11
12
 
12
13
  import { DeckCapabilities } from './capabilities';
13
14
 
14
15
  export default () =>
15
16
  contributes(Capabilities.ReactRoot, {
16
- id: DECK_PLUGIN,
17
+ id: meta.id,
17
18
  root: () => {
18
19
  const layout = useCapability(DeckCapabilities.MutableDeckState);
19
20
 
@@ -8,20 +8,20 @@ import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
8
8
  import { SettingsStore } from '@dxos/local-storage';
9
9
 
10
10
  import { Banner, DeckSettings } from '../components';
11
- import { DECK_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
12
  import { type DeckSettingsProps } from '../types';
13
13
 
14
14
  export default () =>
15
15
  contributes(Capabilities.ReactSurface, [
16
16
  createSurface({
17
- id: `${DECK_PLUGIN}/plugin-settings`,
17
+ id: `${meta.id}/plugin-settings`,
18
18
  role: 'article',
19
19
  filter: (data): data is { subject: SettingsStore<DeckSettingsProps> } =>
20
- data.subject instanceof SettingsStore && data.subject.prefix === DECK_PLUGIN,
20
+ data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
21
21
  component: ({ data: { subject } }) => <DeckSettings settings={subject.value} />,
22
22
  }),
23
23
  createSurface({
24
- id: `${DECK_PLUGIN}/banner`,
24
+ id: `${meta.id}/banner`,
25
25
  role: 'banner',
26
26
  component: ({ data }) => {
27
27
  return <Banner variant={data.variant} />;
@@ -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, {
@@ -8,7 +8,7 @@ import { live } from '@dxos/live-object';
8
8
  import { LocalStorageStore } from '@dxos/local-storage';
9
9
  import { type SidebarState } from '@dxos/react-ui';
10
10
 
11
- import { DECK_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
12
  import { type DeckPluginState, type DeckState, defaultDeck, getMode } from '../types';
13
13
 
14
14
  import { DeckCapabilities } from './capabilities';
@@ -18,8 +18,8 @@ const boolean = /true|false/;
18
18
  // TODO(thure, 18 Feb 2025): Remove after the next release.
19
19
 
20
20
  const migrateSidebarStateDefaults = {
21
- [`${DECK_PLUGIN}/complementary-sidebar-state`]: 'expanded',
22
- [`${DECK_PLUGIN}/sidebar-state`]: 'collapsed',
21
+ [`${meta.id}/complementary-sidebar-state`]: 'expanded',
22
+ [`${meta.id}/sidebar-state`]: 'collapsed',
23
23
  };
24
24
 
25
25
  const migrateSidebarState = () => {
@@ -30,10 +30,13 @@ const migrateSidebarState = () => {
30
30
  });
31
31
  };
32
32
 
33
+ /**
34
+ * @deprecated
35
+ */
33
36
  export const DeckStateFactory = () => {
34
37
  migrateSidebarState();
35
38
 
36
- const state = new LocalStorageStore<DeckPluginState>(DECK_PLUGIN, {
39
+ const state = new LocalStorageStore<DeckPluginState>(meta.id, {
37
40
  sidebarState: 'expanded',
38
41
  complementarySidebarState: 'collapsed',
39
42
  complementarySidebarPanel: undefined,
@@ -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);