@dxos/plugin-simple-layout 0.8.4-main.abd8ff62ef → 0.8.4-main.bc2380dfbc

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 (126) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/{browser/SimpleLayoutPlugin-Q5BZE6KD.mjs → neutral/SimpleLayoutPlugin.mjs} +3 -1
  3. package/dist/lib/neutral/app-graph-builder-EYQKLRRP.mjs +21 -0
  4. package/dist/lib/neutral/app-graph-builder-EYQKLRRP.mjs.map +7 -0
  5. package/dist/lib/neutral/capabilities/index.mjs +21 -0
  6. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  7. package/dist/lib/neutral/chunk-7UDV3JDT.mjs +22 -0
  8. package/dist/lib/neutral/chunk-7UDV3JDT.mjs.map +7 -0
  9. package/dist/lib/{browser/index.mjs → neutral/chunk-AMTEDJHG.mjs} +5 -8
  10. package/dist/lib/neutral/chunk-AMTEDJHG.mjs.map +7 -0
  11. package/dist/lib/neutral/chunk-FD2CAY4Q.mjs +26 -0
  12. package/dist/lib/neutral/chunk-FD2CAY4Q.mjs.map +7 -0
  13. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  14. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  15. package/dist/lib/neutral/chunk-XVUAQHKU.mjs +8 -0
  16. package/dist/lib/neutral/chunk-XVUAQHKU.mjs.map +7 -0
  17. package/dist/lib/neutral/close-WKMURGUB.mjs +35 -0
  18. package/dist/lib/neutral/close-WKMURGUB.mjs.map +7 -0
  19. package/dist/lib/neutral/components/index.mjs +926 -0
  20. package/dist/lib/neutral/components/index.mjs.map +7 -0
  21. package/dist/lib/neutral/hooks/index.mjs +332 -0
  22. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  23. package/dist/lib/neutral/index.mjs +14 -0
  24. package/dist/lib/neutral/index.mjs.map +7 -0
  25. package/dist/lib/neutral/meta.json +1 -0
  26. package/dist/lib/neutral/meta.mjs +8 -0
  27. package/dist/lib/neutral/meta.mjs.map +7 -0
  28. package/dist/lib/neutral/open-XI2T7D5O.mjs +49 -0
  29. package/dist/lib/neutral/open-XI2T7D5O.mjs.map +7 -0
  30. package/dist/lib/neutral/operation-handler-EAIE7KPR.mjs +13 -0
  31. package/dist/lib/neutral/operation-handler-EAIE7KPR.mjs.map +7 -0
  32. package/dist/lib/neutral/operations/index.mjs +8 -0
  33. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  34. package/dist/lib/neutral/plugin.mjs +16 -0
  35. package/dist/lib/neutral/plugin.mjs.map +7 -0
  36. package/dist/lib/neutral/react-root-VE265VX4.mjs +18 -0
  37. package/dist/lib/neutral/react-root-VE265VX4.mjs.map +7 -0
  38. package/dist/lib/neutral/react-surface-REZMYKQV.mjs +46 -0
  39. package/dist/lib/neutral/react-surface-REZMYKQV.mjs.map +7 -0
  40. package/dist/lib/neutral/revert-workspace-ST6NZUNG.mjs +22 -0
  41. package/dist/lib/neutral/revert-workspace-ST6NZUNG.mjs.map +7 -0
  42. package/dist/lib/neutral/set-6ZRLWPJS.mjs +22 -0
  43. package/dist/lib/neutral/set-6ZRLWPJS.mjs.map +7 -0
  44. package/dist/lib/neutral/set-layout-mode-L22HRCKS.mjs +13 -0
  45. package/dist/lib/neutral/set-layout-mode-L22HRCKS.mjs.map +7 -0
  46. package/dist/lib/neutral/spotlight-dismiss-EIYW5E7M.mjs +58 -0
  47. package/dist/lib/neutral/spotlight-dismiss-EIYW5E7M.mjs.map +7 -0
  48. package/dist/lib/neutral/state-7NXKBLPY.mjs +47 -0
  49. package/dist/lib/neutral/state-7NXKBLPY.mjs.map +7 -0
  50. package/dist/lib/neutral/switch-workspace-PYWPTMFO.mjs +25 -0
  51. package/dist/lib/neutral/switch-workspace-PYWPTMFO.mjs.map +7 -0
  52. package/dist/lib/{browser → neutral}/translations.mjs +2 -0
  53. package/dist/lib/neutral/types/index.mjs +10 -0
  54. package/dist/lib/neutral/types/index.mjs.map +7 -0
  55. package/dist/lib/neutral/update-complementary-HKWF5OXT.mjs +33 -0
  56. package/dist/lib/neutral/update-complementary-HKWF5OXT.mjs.map +7 -0
  57. package/dist/lib/neutral/update-dialog-P4ASXCE7.mjs +30 -0
  58. package/dist/lib/neutral/update-dialog-P4ASXCE7.mjs.map +7 -0
  59. package/dist/lib/neutral/update-popover-REAKC2GN.mjs +34 -0
  60. package/dist/lib/neutral/update-popover-REAKC2GN.mjs.map +7 -0
  61. package/dist/lib/neutral/update-sidebar-O5SQPR6Q.mjs +12 -0
  62. package/dist/lib/neutral/update-sidebar-O5SQPR6Q.mjs.map +7 -0
  63. package/dist/lib/neutral/url-handler-GZXUUAHD.mjs +129 -0
  64. package/dist/lib/neutral/url-handler-GZXUUAHD.mjs.map +7 -0
  65. package/dist/types/src/capabilities/index.d.ts +1 -1
  66. package/dist/types/src/capabilities/state.d.ts +3 -3
  67. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  68. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts.map +1 -1
  69. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  70. package/dist/types/src/components/SimpleLayout/AppBar.d.ts.map +1 -1
  71. package/dist/types/src/hooks/actions.d.ts +3 -3
  72. package/dist/types/src/hooks/actions.d.ts.map +1 -1
  73. package/dist/types/src/hooks/useSimpleLayoutState.d.ts +3 -3
  74. package/dist/types/src/hooks/useSimpleLayoutState.d.ts.map +1 -1
  75. package/dist/types/src/index.d.ts +1 -2
  76. package/dist/types/src/index.d.ts.map +1 -1
  77. package/dist/types/src/meta.d.ts.map +1 -1
  78. package/dist/types/src/operations/state-access.d.ts +3 -3
  79. package/dist/types/src/operations/state-access.d.ts.map +1 -1
  80. package/dist/types/src/plugin.d.ts +4 -0
  81. package/dist/types/src/plugin.d.ts.map +1 -0
  82. package/dist/types/src/types/{capabilities.d.ts → SimpleLayoutCapabilities.d.ts} +2 -8
  83. package/dist/types/src/types/SimpleLayoutCapabilities.d.ts.map +1 -0
  84. package/dist/types/src/types/SimpleLayoutEvents.d.ts +4 -0
  85. package/dist/types/src/types/SimpleLayoutEvents.d.ts.map +1 -0
  86. package/dist/types/src/types/index.d.ts +2 -2
  87. package/dist/types/src/types/index.d.ts.map +1 -1
  88. package/dist/types/tsconfig.tsbuildinfo +1 -1
  89. package/package.json +81 -45
  90. package/src/capabilities/state.tsx +5 -6
  91. package/src/capabilities/url-handler.ts +16 -13
  92. package/src/components/Home/Home.tsx +1 -1
  93. package/src/components/Loading/Loading.tsx +1 -1
  94. package/src/components/MobileLayout/MobileLayout.tsx +0 -2
  95. package/src/components/NavBranch/NavBranch.tsx +1 -1
  96. package/src/components/Popover/Popover.tsx +1 -0
  97. package/src/components/SimpleLayout/AppBar.tsx +42 -40
  98. package/src/components/SimpleLayout/SimpleLayout.stories.tsx +3 -3
  99. package/src/hooks/actions.ts +5 -3
  100. package/src/hooks/useAppBarProps.ts +2 -2
  101. package/src/hooks/useDrawerActions.ts +2 -2
  102. package/src/hooks/useNavbarActions.ts +2 -2
  103. package/src/hooks/useSimpleLayoutState.ts +7 -5
  104. package/src/index.ts +1 -6
  105. package/src/meta.ts +1 -0
  106. package/src/operations/open.ts +1 -1
  107. package/src/operations/state-access.ts +5 -3
  108. package/src/plugin.ts +11 -0
  109. package/src/types/{capabilities.ts → SimpleLayoutCapabilities.ts} +3 -15
  110. package/src/types/SimpleLayoutEvents.ts +15 -0
  111. package/src/types/index.ts +2 -2
  112. package/dist/lib/browser/SimpleLayoutPlugin-Q5BZE6KD.mjs.map +0 -7
  113. package/dist/lib/browser/index.mjs.map +0 -7
  114. package/dist/lib/browser/meta.json +0 -1
  115. package/dist/lib/browser/translations.mjs.map +0 -7
  116. package/dist/lib/node-esm/SimpleLayoutPlugin-OD45TNPO.mjs +0 -52
  117. package/dist/lib/node-esm/index.mjs +0 -24
  118. package/dist/lib/node-esm/index.mjs.map +0 -7
  119. package/dist/lib/node-esm/meta.json +0 -1
  120. package/dist/lib/node-esm/translations.mjs +0 -36
  121. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  122. package/dist/types/src/types/events.d.ts +0 -6
  123. package/dist/types/src/types/events.d.ts.map +0 -1
  124. package/src/types/events.ts +0 -15
  125. /package/dist/lib/{node-esm/SimpleLayoutPlugin-OD45TNPO.mjs.map → neutral/SimpleLayoutPlugin.mjs.map} +0 -0
  126. /package/dist/lib/{node-esm → neutral}/translations.mjs.map +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-simple-layout",
3
- "version": "0.8.4-main.abd8ff62ef",
3
+ "version": "0.8.4-main.bc2380dfbc",
4
4
  "description": "Simple layout plugin for minimal UI contexts like popover windows.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -8,31 +8,67 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
12
12
  "author": "DXOS.org",
13
13
  "sideEffects": true,
14
14
  "type": "module",
15
15
  "imports": {
16
- "#capabilities": "./src/capabilities/index.ts",
17
- "#components": "./src/components/index.ts",
18
- "#hooks": "./src/hooks/index.ts",
19
- "#meta": "./src/meta.ts",
20
- "#operations": "./src/operations/index.ts",
21
- "#translations": "./src/translations.ts",
22
- "#types": "./src/types/index.ts"
16
+ "#capabilities": {
17
+ "source": "./src/capabilities/index.ts",
18
+ "types": "./dist/types/src/capabilities/index.d.ts",
19
+ "default": "./dist/lib/neutral/capabilities/index.mjs"
20
+ },
21
+ "#components": {
22
+ "source": "./src/components/index.ts",
23
+ "types": "./dist/types/src/components/index.d.ts",
24
+ "default": "./dist/lib/neutral/components/index.mjs"
25
+ },
26
+ "#hooks": {
27
+ "source": "./src/hooks/index.ts",
28
+ "types": "./dist/types/src/hooks/index.d.ts",
29
+ "default": "./dist/lib/neutral/hooks/index.mjs"
30
+ },
31
+ "#meta": {
32
+ "source": "./src/meta.ts",
33
+ "types": "./dist/types/src/meta.d.ts",
34
+ "default": "./dist/lib/neutral/meta.mjs"
35
+ },
36
+ "#operations": {
37
+ "source": "./src/operations/index.ts",
38
+ "types": "./dist/types/src/operations/index.d.ts",
39
+ "default": "./dist/lib/neutral/operations/index.mjs"
40
+ },
41
+ "#plugin": {
42
+ "source": "./src/SimpleLayoutPlugin.ts",
43
+ "types": "./dist/types/src/SimpleLayoutPlugin.d.ts",
44
+ "default": "./dist/lib/neutral/SimpleLayoutPlugin.mjs"
45
+ },
46
+ "#translations": {
47
+ "source": "./src/translations.ts",
48
+ "types": "./dist/types/src/translations.d.ts",
49
+ "default": "./dist/lib/neutral/translations.mjs"
50
+ },
51
+ "#types": {
52
+ "source": "./src/types/index.ts",
53
+ "types": "./dist/types/src/types/index.d.ts",
54
+ "default": "./dist/lib/neutral/types/index.mjs"
55
+ }
23
56
  },
24
57
  "exports": {
25
58
  ".": {
26
59
  "source": "./src/index.ts",
27
- "browser": "./dist/lib/browser/index.mjs",
28
- "node": "./dist/lib/node-esm/index.mjs",
29
- "types": "./dist/types/src/index.d.ts"
60
+ "types": "./dist/types/src/index.d.ts",
61
+ "default": "./dist/lib/neutral/index.mjs"
62
+ },
63
+ "./plugin": {
64
+ "source": "./src/plugin.ts",
65
+ "types": "./dist/types/src/plugin.d.ts",
66
+ "default": "./dist/lib/neutral/plugin.mjs"
30
67
  },
31
68
  "./translations": {
32
69
  "source": "./src/translations.ts",
33
70
  "types": "./dist/types/src/translations.d.ts",
34
- "browser": "./dist/lib/browser/translations.mjs",
35
- "node": "./dist/lib/node-esm/translations.mjs"
71
+ "default": "./dist/lib/neutral/translations.mjs"
36
72
  }
37
73
  },
38
74
  "types": "dist/types/src/index.d.ts",
@@ -44,26 +80,26 @@
44
80
  "@effect-atom/atom": "^0.5.1",
45
81
  "@effect-atom/atom-react": "^0.5.0",
46
82
  "@radix-ui/react-context": "1.1.1",
47
- "@tauri-apps/plugin-deep-link": "^2.2.0",
83
+ "@tauri-apps/plugin-deep-link": "^2.4.9",
48
84
  "@tauri-apps/plugin-haptics": "^2.3.2",
49
- "@dxos/app-toolkit": "0.8.4-main.abd8ff62ef",
50
- "@dxos/async": "0.8.4-main.abd8ff62ef",
51
- "@dxos/context": "0.8.4-main.abd8ff62ef",
52
- "@dxos/compute": "0.8.4-main.abd8ff62ef",
53
- "@dxos/echo": "0.8.4-main.abd8ff62ef",
54
- "@dxos/effect": "0.8.4-main.abd8ff62ef",
55
- "@dxos/plugin-client": "0.8.4-main.abd8ff62ef",
56
- "@dxos/log": "0.8.4-main.abd8ff62ef",
57
- "@dxos/react-ui-attention": "0.8.4-main.abd8ff62ef",
58
- "@dxos/plugin-graph": "0.8.4-main.abd8ff62ef",
59
- "@dxos/react-ui-list": "0.8.4-main.abd8ff62ef",
60
- "@dxos/react-ui-menu": "0.8.4-main.abd8ff62ef",
61
- "@dxos/react-ui-mosaic": "0.8.4-main.abd8ff62ef",
62
- "@dxos/schema": "0.8.4-main.abd8ff62ef",
63
- "@dxos/app-framework": "0.8.4-main.abd8ff62ef",
64
- "@dxos/react-ui-search": "0.8.4-main.abd8ff62ef",
65
- "@dxos/react-ui-stack": "0.8.4-main.abd8ff62ef",
66
- "@dxos/util": "0.8.4-main.abd8ff62ef"
85
+ "@dxos/app-framework": "0.8.4-main.bc2380dfbc",
86
+ "@dxos/app-toolkit": "0.8.4-main.bc2380dfbc",
87
+ "@dxos/compute": "0.8.4-main.bc2380dfbc",
88
+ "@dxos/async": "0.8.4-main.bc2380dfbc",
89
+ "@dxos/echo": "0.8.4-main.bc2380dfbc",
90
+ "@dxos/effect": "0.8.4-main.bc2380dfbc",
91
+ "@dxos/plugin-client": "0.8.4-main.bc2380dfbc",
92
+ "@dxos/context": "0.8.4-main.bc2380dfbc",
93
+ "@dxos/log": "0.8.4-main.bc2380dfbc",
94
+ "@dxos/plugin-graph": "0.8.4-main.bc2380dfbc",
95
+ "@dxos/react-ui-attention": "0.8.4-main.bc2380dfbc",
96
+ "@dxos/react-ui-list": "0.8.4-main.bc2380dfbc",
97
+ "@dxos/react-ui-search": "0.8.4-main.bc2380dfbc",
98
+ "@dxos/react-ui-stack": "0.8.4-main.bc2380dfbc",
99
+ "@dxos/schema": "0.8.4-main.bc2380dfbc",
100
+ "@dxos/react-ui-menu": "0.8.4-main.bc2380dfbc",
101
+ "@dxos/util": "0.8.4-main.bc2380dfbc",
102
+ "@dxos/react-ui-mosaic": "0.8.4-main.bc2380dfbc"
67
103
  },
68
104
  "devDependencies": {
69
105
  "@types/react": "~19.2.7",
@@ -71,23 +107,23 @@
71
107
  "effect": "3.20.0",
72
108
  "react": "~19.2.3",
73
109
  "react-dom": "~19.2.3",
74
- "vite": "^8.0.10",
75
- "@dxos/app-graph": "0.8.4-main.abd8ff62ef",
76
- "@dxos/plugin-search": "0.8.4-main.abd8ff62ef",
77
- "@dxos/plugin-space": "0.8.4-main.abd8ff62ef",
78
- "@dxos/plugin-testing": "0.8.4-main.abd8ff62ef",
79
- "@dxos/schema": "0.8.4-main.abd8ff62ef",
80
- "@dxos/react-ui": "0.8.4-main.abd8ff62ef",
81
- "@dxos/storybook-utils": "0.8.4-main.abd8ff62ef",
82
- "@dxos/ui-theme": "0.8.4-main.abd8ff62ef",
83
- "@dxos/plugin-preview": "0.8.4-main.abd8ff62ef"
110
+ "vite": "^8.0.13",
111
+ "@dxos/app-graph": "0.8.4-main.bc2380dfbc",
112
+ "@dxos/plugin-preview": "0.8.4-main.bc2380dfbc",
113
+ "@dxos/plugin-search": "0.8.4-main.bc2380dfbc",
114
+ "@dxos/plugin-testing": "0.8.4-main.bc2380dfbc",
115
+ "@dxos/plugin-space": "0.8.4-main.bc2380dfbc",
116
+ "@dxos/react-ui": "0.8.4-main.bc2380dfbc",
117
+ "@dxos/schema": "0.8.4-main.bc2380dfbc",
118
+ "@dxos/storybook-utils": "0.8.4-main.bc2380dfbc",
119
+ "@dxos/ui-theme": "0.8.4-main.bc2380dfbc"
84
120
  },
85
121
  "peerDependencies": {
86
122
  "effect": "3.20.0",
87
123
  "react": "~19.2.3",
88
124
  "react-dom": "~19.2.3",
89
- "@dxos/ui-theme": "0.8.4-main.abd8ff62ef",
90
- "@dxos/react-ui": "0.8.4-main.abd8ff62ef"
125
+ "@dxos/react-ui": "0.8.4-main.bc2380dfbc",
126
+ "@dxos/ui-theme": "0.8.4-main.bc2380dfbc"
91
127
  },
92
128
  "publishConfig": {
93
129
  "access": "public"
@@ -9,10 +9,9 @@ import { Capability } from '@dxos/app-framework';
9
9
  import { AppCapabilities } from '@dxos/app-toolkit';
10
10
  import { Node } from '@dxos/plugin-graph';
11
11
 
12
- import { type SimpleLayoutState } from '#types';
13
- import { SimpleLayoutState as SimpleLayoutStateCapability } from '#types';
12
+ import { SimpleLayoutCapabilities } from '#types';
14
13
 
15
- const defaultState: SimpleLayoutState = {
14
+ const defaultState: SimpleLayoutCapabilities.SimpleLayoutState = {
16
15
  dialogOpen: false,
17
16
  workspace: Node.RootId,
18
17
  previousWorkspace: Node.RootId,
@@ -23,12 +22,12 @@ const defaultState: SimpleLayoutState = {
23
22
  };
24
23
 
25
24
  export type SimpleLayoutStateOptions = {
26
- initialState?: Partial<SimpleLayoutState>;
25
+ initialState?: Partial<SimpleLayoutCapabilities.SimpleLayoutState>;
27
26
  };
28
27
 
29
28
  export default Capability.makeModule(({ initialState }: SimpleLayoutStateOptions = {}) =>
30
29
  Effect.sync(() => {
31
- const stateAtom = Atom.make<SimpleLayoutState>({ ...defaultState, ...initialState });
30
+ const stateAtom = Atom.make<SimpleLayoutCapabilities.SimpleLayoutState>({ ...defaultState, ...initialState });
32
31
 
33
32
  const layoutAtom = Atom.make((get): AppCapabilities.Layout => {
34
33
  const state = get(stateAtom);
@@ -45,7 +44,7 @@ export default Capability.makeModule(({ initialState }: SimpleLayoutStateOptions
45
44
  });
46
45
 
47
46
  return [
48
- Capability.contributes(SimpleLayoutStateCapability, stateAtom),
47
+ Capability.contributes(SimpleLayoutCapabilities.State, stateAtom),
49
48
  Capability.contributes(AppCapabilities.Layout, layoutAtom),
50
49
  ];
51
50
  }),
@@ -10,7 +10,7 @@ import { runAndForwardErrors } from '@dxos/effect';
10
10
  import { log } from '@dxos/log';
11
11
  import { isTauri } from '@dxos/util';
12
12
 
13
- import { type SimpleLayoutState, SimpleLayoutState as SimpleLayoutStateCapability } from '#types';
13
+ import { SimpleLayoutCapabilities } from '#types';
14
14
 
15
15
  /**
16
16
  * URL handler for simple layout that syncs browser URL with layout state.
@@ -99,19 +99,22 @@ export default Capability.makeModule(
99
99
  // Sync URL with layout state changes.
100
100
  let lastWorkspace: string | undefined;
101
101
  let lastActive: string | undefined;
102
- const unsubscribe = yield* Capabilities.subscribeAtom(SimpleLayoutStateCapability, (state: SimpleLayoutState) => {
103
- const { workspace, active } = state;
104
-
105
- if (workspace !== lastWorkspace || active !== lastActive) {
106
- lastWorkspace = workspace;
107
- lastActive = active;
108
-
109
- const path = active ? toUrlPath(active) : toUrlPath(workspace);
110
- if (window.location.pathname !== path) {
111
- history.pushState(null, '', `${path}${window.location.search}`);
102
+ const unsubscribe = yield* Capabilities.subscribeAtom(
103
+ SimpleLayoutCapabilities.State,
104
+ (state: SimpleLayoutCapabilities.SimpleLayoutState) => {
105
+ const { workspace, active } = state;
106
+
107
+ if (workspace !== lastWorkspace || active !== lastActive) {
108
+ lastWorkspace = workspace;
109
+ lastActive = active;
110
+
111
+ const path = active ? toUrlPath(active) : toUrlPath(workspace);
112
+ if (window.location.pathname !== path) {
113
+ history.pushState(null, '', `${path}${window.location.search}`);
114
+ }
112
115
  }
113
- }
114
- });
116
+ },
117
+ );
115
118
 
116
119
  return Capability.contributes(Capabilities.Null, null, () =>
117
120
  Effect.sync(() => {
@@ -100,7 +100,7 @@ const WorkspaceTile: MosaicStackTileComponent<Node.Node> = (props) => {
100
100
  fullWidth
101
101
  tabIndex={-1} // TODO(burdon): Use Mosaic.Focus.
102
102
  data-selected={isSelected}
103
- classNames={mx('dx-focus-ring', isSelected && 'bg-hover-overlay')}
103
+ classNames={mx('dx-focus-ring', isSelected && 'bg-selected-surface')}
104
104
  onClick={handleSelect}
105
105
  ref={cardRef}
106
106
  >
@@ -6,5 +6,5 @@ import React from 'react';
6
6
 
7
7
  // TODO(burdon): Show skeleton: https://github.com/dxos/dxos/issues/8259
8
8
  export const Loading = () => {
9
- return <div role='none' className='grid place-items-center dx-attention-surface' />;
9
+ return <div className='grid place-items-center dx-attention-surface' />;
10
10
  };
@@ -56,7 +56,6 @@ const MobileLayoutRoot = forwardRef<HTMLDivElement, MobileLayoutRootProps>(
56
56
  <MobileLayoutProvider keyboardOpen={keyboardOpen}>
57
57
  <div
58
58
  {...props}
59
- role='none'
60
59
  style={{
61
60
  height: 'calc(100vh - var(--kb-height, 0px))',
62
61
  transition: `height ${keyboardOpen ? 0 : transition}ms ease-out`,
@@ -95,7 +94,6 @@ const MobileLayoutPanel = forwardRef<HTMLDivElement, MobileLayoutPanelProps>(
95
94
  return (
96
95
  <div
97
96
  {...props}
98
- role='none'
99
97
  style={{
100
98
  paddingTop: safe?.top ? 'env(safe-area-inset-top)' : undefined,
101
99
  paddingBottom: safe?.bottom ? `calc((1 - var(--kb-open, 0)) * env(safe-area-inset-bottom))` : undefined,
@@ -102,7 +102,7 @@ const NavBranchTile: MosaicStackTileComponent<Node.Node> = (props) => {
102
102
  fullWidth
103
103
  tabIndex={-1} // TODO(burdon): Use Mosaic.Focus.
104
104
  data-selected={isSelected}
105
- classNames={mx('dx-focus-ring cursor-pointer', isSelected && 'bg-hover-overlay')}
105
+ classNames={mx('dx-focus-ring cursor-pointer', isSelected && 'bg-selected-surface')}
106
106
  onClick={handleSelect}
107
107
  >
108
108
  <Card.Toolbar>
@@ -84,6 +84,7 @@ export const PopoverContent = () => {
84
84
  [handleClose],
85
85
  );
86
86
 
87
+ /* TODO(thure): Make this a constant and document it. */
87
88
  const collisionBoundaries: HTMLElement[] = useMemo(() => {
88
89
  const closest = state.popoverAnchor?.closest('[data-popover-collision-boundary]') as HTMLElement | null | undefined;
89
90
  return closest ? [closest] : [];
@@ -5,7 +5,7 @@
5
5
  import { type Atom, useAtomValue } from '@effect-atom/atom-react';
6
6
  import React, { Fragment } from 'react';
7
7
 
8
- import { IconButton, Popover, Toolbar, useTranslation } from '@dxos/react-ui';
8
+ import { DensityProvider, IconButton, Popover, Toolbar, useTranslation } from '@dxos/react-ui';
9
9
  import { type ActionExecutor, type ActionGraphProps, Menu, useMenuActions } from '@dxos/react-ui-menu';
10
10
  import { composable, composableProps, osTranslations } from '@dxos/ui-theme';
11
11
 
@@ -48,45 +48,47 @@ export const AppBar = composable<HTMLDivElement, AppBarProps>(
48
48
  const AnchorRoot = popoverAnchorId ? Popover.Anchor : Fragment;
49
49
 
50
50
  return (
51
- <Toolbar.Root
52
- {...composableProps(props, {
53
- role: 'banner',
54
- classNames: 'grid grid-cols-[var(--dx-rail-size)_1fr_var(--dx-rail-size)] items-center dx-density-fine',
55
- })}
56
- ref={forwardedRef}
57
- >
58
- {keyboardOpen ? (
59
- <IconButton variant='ghost' icon='ph--x--regular' iconOnly label={t('done.label')} />
60
- ) : showBackButton ? (
61
- <IconButton
62
- variant='ghost'
63
- icon='ph--caret-left--regular'
64
- iconOnly
65
- label={t('back.label')}
66
- onClick={onBack}
67
- />
68
- ) : (
69
- <div />
70
- )}
71
- <h1 className='text-center truncate font-thin uppercase'>{displayTitle}</h1>
72
- {hasActions ? (
73
- <AnchorRoot>
74
- <Menu.Root {...menuActions} caller={meta.id} onAction={onAction}>
75
- <Menu.Trigger asChild>
76
- <IconButton
77
- variant='ghost'
78
- icon='ph--dots-three-vertical--regular'
79
- iconOnly
80
- label={t('actions-menu.label')}
81
- />
82
- </Menu.Trigger>
83
- <Menu.Content />
84
- </Menu.Root>
85
- </AnchorRoot>
86
- ) : (
87
- <span />
88
- )}
89
- </Toolbar.Root>
51
+ <DensityProvider density='fine'>
52
+ <Toolbar.Root
53
+ {...composableProps(props, {
54
+ role: 'banner',
55
+ classNames: 'grid grid-cols-[var(--dx-rail-size)_1fr_var(--dx-rail-size)] items-center dx-density-fine',
56
+ })}
57
+ ref={forwardedRef}
58
+ >
59
+ {keyboardOpen ? (
60
+ <IconButton variant='ghost' icon='ph--x--regular' iconOnly label={t('done.label')} />
61
+ ) : showBackButton ? (
62
+ <IconButton
63
+ variant='ghost'
64
+ icon='ph--caret-left--regular'
65
+ iconOnly
66
+ label={t('back.label')}
67
+ onClick={onBack}
68
+ />
69
+ ) : (
70
+ <div />
71
+ )}
72
+ <h1 className='text-center truncate font-thin uppercase'>{displayTitle}</h1>
73
+ {hasActions ? (
74
+ <AnchorRoot>
75
+ <Menu.Root {...menuActions} caller={meta.id} onAction={onAction}>
76
+ <Menu.Trigger asChild>
77
+ <IconButton
78
+ variant='ghost'
79
+ icon='ph--dots-three-vertical--regular'
80
+ iconOnly
81
+ label={t('actions-menu.label')}
82
+ />
83
+ </Menu.Trigger>
84
+ <Menu.Content />
85
+ </Menu.Root>
86
+ </AnchorRoot>
87
+ ) : (
88
+ <span />
89
+ )}
90
+ </Toolbar.Root>
91
+ </DensityProvider>
90
92
  );
91
93
  },
92
94
  );
@@ -9,9 +9,9 @@ import { ActivationEvents, Capability, Plugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
10
  import { AppActivationEvents } from '@dxos/app-toolkit';
11
11
  import { Collection } from '@dxos/echo';
12
- import { ClientPlugin } from '@dxos/plugin-client';
13
- import { SearchPlugin } from '@dxos/plugin-search';
14
- import { SpacePlugin } from '@dxos/plugin-space';
12
+ import { ClientPlugin } from '@dxos/plugin-client/testing';
13
+ import { SearchPlugin } from '@dxos/plugin-search/testing';
14
+ import { SpacePlugin } from '@dxos/plugin-space/testing';
15
15
  import { corePlugins } from '@dxos/plugin-testing';
16
16
  import { translations as searchTranslation } from '@dxos/react-ui-search/translations';
17
17
  import { withLayout } from '@dxos/react-ui/testing';
@@ -11,7 +11,7 @@ import { getLinkedVariant } from '@dxos/react-ui-attention';
11
11
  import { type ActionGraphProps } from '@dxos/react-ui-menu';
12
12
  import { byPosition } from '@dxos/util';
13
13
 
14
- import { type SimpleLayoutState } from '#types';
14
+ import { SimpleLayoutCapabilities } from '#types';
15
15
 
16
16
  // TODO(wittjosiah): Factor out to shared location with plugin-deck.
17
17
  export const PLANK_COMPANION_TYPE = 'org.dxos.plugin.deck.plank-companion';
@@ -22,7 +22,9 @@ export type CompanionActionsConfig = {
22
22
  /** Optional: highlight companion with this variant */
23
23
  selectedVariant?: string;
24
24
  /** State updater for toggling the drawer. */
25
- updateState: (fn: (state: SimpleLayoutState) => SimpleLayoutState) => void;
25
+ updateState: (
26
+ fn: (state: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState,
27
+ ) => void;
26
28
  };
27
29
 
28
30
  /**
@@ -32,7 +34,7 @@ export type CompanionActionsConfig = {
32
34
  // TODO(burdon): Use builder pattern.
33
35
  export const createCompanionActions = (
34
36
  graph: AppCapabilities.AppGraph['graph'],
35
- stateAtom: Atom.Atom<SimpleLayoutState>,
37
+ stateAtom: Atom.Atom<SimpleLayoutCapabilities.SimpleLayoutState>,
36
38
  get: (atom: Atom.Atom<any>) => any,
37
39
  config: CompanionActionsConfig,
38
40
  ): Pick<ActionGraphProps, 'nodes' | 'edges'> => {
@@ -15,7 +15,7 @@ import { type ActionGraphProps } from '@dxos/react-ui-menu';
15
15
 
16
16
  import { type AppBarProps } from '#components';
17
17
  import { meta } from '#meta';
18
- import { SimpleLayoutState as SimpleLayoutStateCapability } from '#types';
18
+ import { SimpleLayoutCapabilities } from '#types';
19
19
 
20
20
  /**
21
21
  * Hook that computes all AppBar props from the app graph.
@@ -23,7 +23,7 @@ import { SimpleLayoutState as SimpleLayoutStateCapability } from '#types';
23
23
  */
24
24
  export const useAppBarProps = (): Omit<AppBarProps, 'classNames'> => {
25
25
  const { t } = useTranslation(meta.id);
26
- const stateAtom = useCapability(SimpleLayoutStateCapability);
26
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
27
27
  const state = useAtomValue(stateAtom);
28
28
  const { graph } = useAppGraph();
29
29
  const { invokePromise } = useOperationInvoker();
@@ -14,7 +14,7 @@ import { type ActionExecutor, type ActionGraphProps, createGapSeparator } from '
14
14
 
15
15
  import { useMobileLayout } from '#components';
16
16
  import { meta } from '#meta';
17
- import { SimpleLayoutState as SimpleLayoutStateCapability } from '#types';
17
+ import { SimpleLayoutCapabilities } from '#types';
18
18
 
19
19
  import { createCompanionActions } from './actions';
20
20
  import { useSimpleLayoutState } from './useSimpleLayoutState';
@@ -31,7 +31,7 @@ export type DrawerActions = {
31
31
  */
32
32
  export const useDrawerActions = (consumerName: string): DrawerActions => {
33
33
  const { t } = useTranslation(meta.id);
34
- const stateAtom = useCapability(SimpleLayoutStateCapability);
34
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
35
35
  const { graph } = useAppGraph();
36
36
  const runAction = useActionRunner();
37
37
  const { updateState } = useSimpleLayoutState();
@@ -17,7 +17,7 @@ import {
17
17
  } from '@dxos/react-ui-menu';
18
18
 
19
19
  import { meta } from '#meta';
20
- import { SimpleLayoutState } from '#types';
20
+ import { SimpleLayoutCapabilities } from '#types';
21
21
 
22
22
  import { createCompanionActions } from './actions';
23
23
  import { useSimpleLayoutState } from './useSimpleLayoutState';
@@ -39,7 +39,7 @@ export const useNavbarActions = (): NavbarActions => {
39
39
  const { t } = useTranslation(meta.id);
40
40
  const { graph } = useAppGraph();
41
41
  const runAction = useActionRunner();
42
- const stateAtom = useCapability(SimpleLayoutState);
42
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
43
43
  const { updateState } = useSimpleLayoutState();
44
44
 
45
45
  // Create a computed atom that derives everything from graph connections and state.
@@ -7,20 +7,22 @@ import { useCallback, useContext } from 'react';
7
7
 
8
8
  import { useCapability } from '@dxos/app-framework/ui';
9
9
 
10
- import { SimpleLayoutState } from '#types';
10
+ import { SimpleLayoutCapabilities } from '#types';
11
11
 
12
12
  export type UseSimpleLayoutState = {
13
- state: SimpleLayoutState;
14
- updateState: (fn: (current: SimpleLayoutState) => SimpleLayoutState) => void;
13
+ state: SimpleLayoutCapabilities.SimpleLayoutState;
14
+ updateState: (
15
+ fn: (current: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState,
16
+ ) => void;
15
17
  };
16
18
 
17
19
  export const useSimpleLayoutState = (): UseSimpleLayoutState => {
18
20
  const registry = useContext(RegistryContext);
19
- const stateAtom = useCapability(SimpleLayoutState);
21
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
20
22
  const state = useAtomValue(stateAtom);
21
23
 
22
24
  const updateState = useCallback(
23
- (fn: (current: SimpleLayoutState) => SimpleLayoutState) => {
25
+ (fn: (current: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState) => {
24
26
  registry.set(stateAtom, fn(registry.get(stateAtom)));
25
27
  },
26
28
  [registry, stateAtom],
package/src/index.ts CHANGED
@@ -2,10 +2,5 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Plugin } from '@dxos/app-framework';
6
-
7
- import { meta } from './meta';
8
-
9
- export const SimpleLayoutPlugin = Plugin.lazy(meta, () => import('./SimpleLayoutPlugin'));
10
-
11
5
  export * from './meta';
6
+ export * from './types';
package/src/meta.ts CHANGED
@@ -13,4 +13,5 @@ export const meta: Plugin.Meta = {
13
13
  Provides basic content rendering without sidebars or complex navigation.
14
14
  `,
15
15
  icon: 'ph--layout--regular',
16
+ tags: ['system'],
16
17
  };
@@ -11,7 +11,7 @@ import {
11
11
  } from '@dxos/app-toolkit';
12
12
  import { Operation } from '@dxos/compute';
13
13
  import { Context } from '@dxos/context';
14
- import { ClientCapabilities } from '@dxos/plugin-client/types';
14
+ import { ClientCapabilities } from '@dxos/plugin-client';
15
15
 
16
16
  import { layoutStateAccess } from './state-access';
17
17
 
@@ -4,15 +4,17 @@ import * as Effect from 'effect/Effect';
4
4
 
5
5
  import { Capabilities, Capability } from '@dxos/app-framework';
6
6
 
7
- import { type SimpleLayoutState, SimpleLayoutState as SimpleLayoutStateCapability } from '../types';
7
+ import { SimpleLayoutCapabilities } from '../types';
8
8
 
9
9
  export const layoutStateAccess = Effect.gen(function* () {
10
10
  const registry = yield* Capability.get(Capabilities.AtomRegistry);
11
- const stateAtom = yield* Capability.get(SimpleLayoutStateCapability);
11
+ const stateAtom = yield* Capability.get(SimpleLayoutCapabilities.State);
12
12
 
13
13
  return {
14
14
  getState: () => registry.get(stateAtom),
15
- updateState: (fn: (current: SimpleLayoutState) => SimpleLayoutState) => {
15
+ updateState: (
16
+ fn: (current: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState,
17
+ ) => {
16
18
  registry.set(stateAtom, fn(registry.get(stateAtom)));
17
19
  },
18
20
  };
package/src/plugin.ts ADDED
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const SimpleLayoutPlugin = Plugin.lazy(meta, () => import('#plugin'));
10
+
11
+ export { SimpleLayoutOperationHandlerSet } from './operations';