@dxos/plugin-simple-layout 0.8.4-main.c85a9c8dae → 0.8.4-main.fcc0d83b33

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 (227) hide show
  1. package/dist/lib/browser/index.mjs +15 -68
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/translations.mjs +34 -0
  5. package/dist/lib/browser/translations.mjs.map +7 -0
  6. package/dist/lib/node-esm/index.mjs +15 -67
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/lib/node-esm/translations.mjs +36 -0
  10. package/dist/lib/node-esm/translations.mjs.map +7 -0
  11. package/dist/types/src/SimpleLayoutPlugin.d.ts +1 -1
  12. package/dist/types/src/SimpleLayoutPlugin.d.ts.map +1 -1
  13. package/dist/types/src/capabilities/app-graph-builder.d.ts +6 -0
  14. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  15. package/dist/types/src/capabilities/index.d.ts +21 -6
  16. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  17. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  18. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  19. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  20. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  21. package/dist/types/src/capabilities/{spotlight-dismiss/spotlight-dismiss.d.ts → spotlight-dismiss.d.ts} +1 -1
  22. package/dist/types/src/capabilities/spotlight-dismiss.d.ts.map +1 -0
  23. package/dist/types/src/capabilities/{state/state.d.ts → state.d.ts} +1 -1
  24. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  25. package/dist/types/src/capabilities/{url-handler/url-handler.d.ts → url-handler.d.ts} +3 -3
  26. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -0
  27. package/dist/types/src/components/ContentError.stories.d.ts +26 -19
  28. package/dist/types/src/components/ContentError.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/DebugOverlay/DebugOverlay.d.ts +19 -0
  30. package/dist/types/src/components/DebugOverlay/DebugOverlay.d.ts.map +1 -0
  31. package/dist/types/src/components/DebugOverlay/index.d.ts +2 -0
  32. package/dist/types/src/components/DebugOverlay/index.d.ts.map +1 -0
  33. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  34. package/dist/types/src/components/Home/Home.d.ts.map +1 -1
  35. package/dist/types/src/components/Loading/Loading.d.ts +3 -0
  36. package/dist/types/src/components/Loading/Loading.d.ts.map +1 -0
  37. package/dist/types/src/components/{ContentLoading.stories.d.ts → Loading/Loading.stories.d.ts} +1 -1
  38. package/dist/types/src/components/Loading/Loading.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/Loading/index.d.ts +2 -0
  40. package/dist/types/src/components/Loading/index.d.ts.map +1 -0
  41. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts +2 -2
  42. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts.map +1 -1
  43. package/dist/types/src/components/MobileLayout/MobileLayout.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/NavBranch/NavBranch.d.ts +11 -0
  45. package/dist/types/src/components/NavBranch/NavBranch.d.ts.map +1 -0
  46. package/dist/types/src/components/NavBranch/index.d.ts +2 -0
  47. package/dist/types/src/components/NavBranch/index.d.ts.map +1 -0
  48. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  49. package/dist/types/src/components/SimpleLayout/AppBar.d.ts +5 -7
  50. package/dist/types/src/components/SimpleLayout/AppBar.d.ts.map +1 -1
  51. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts +29 -22
  52. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/SimpleLayout/Drawer.d.ts +4 -7
  54. package/dist/types/src/components/SimpleLayout/Drawer.d.ts.map +1 -1
  55. package/dist/types/src/components/SimpleLayout/Main.d.ts +4 -7
  56. package/dist/types/src/components/SimpleLayout/Main.d.ts.map +1 -1
  57. package/dist/types/src/components/SimpleLayout/NavBar.d.ts +5 -7
  58. package/dist/types/src/components/SimpleLayout/NavBar.d.ts.map +1 -1
  59. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts +29 -23
  60. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts.map +1 -1
  61. package/dist/types/src/components/SimpleLayout/SimpleLayout.d.ts.map +1 -1
  62. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts +26 -25
  63. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts.map +1 -1
  64. package/dist/types/src/components/hooks.d.ts +4 -2
  65. package/dist/types/src/components/hooks.d.ts.map +1 -1
  66. package/dist/types/src/components/index.d.ts +3 -2
  67. package/dist/types/src/components/index.d.ts.map +1 -1
  68. package/dist/types/src/hooks/actions.d.ts +5 -6
  69. package/dist/types/src/hooks/actions.d.ts.map +1 -1
  70. package/dist/types/src/hooks/useAppBarProps.d.ts +2 -2
  71. package/dist/types/src/hooks/useAppBarProps.d.ts.map +1 -1
  72. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  73. package/dist/types/src/hooks/useDrawerActions.d.ts.map +1 -1
  74. package/dist/types/src/hooks/useNavbarActions.d.ts.map +1 -1
  75. package/dist/types/src/hooks/useSimpleLayoutState.d.ts +1 -1
  76. package/dist/types/src/hooks/useSimpleLayoutState.d.ts.map +1 -1
  77. package/dist/types/src/operations/close.d.ts +5 -0
  78. package/dist/types/src/operations/close.d.ts.map +1 -0
  79. package/dist/types/src/operations/index.d.ts +3 -0
  80. package/dist/types/src/operations/index.d.ts.map +1 -0
  81. package/dist/types/src/operations/open.d.ts +5 -0
  82. package/dist/types/src/operations/open.d.ts.map +1 -0
  83. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  84. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  85. package/dist/types/src/operations/set-layout-mode.d.ts +5 -0
  86. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  87. package/dist/types/src/operations/set.d.ts +5 -0
  88. package/dist/types/src/operations/set.d.ts.map +1 -0
  89. package/dist/types/src/operations/state-access.d.ts +8 -0
  90. package/dist/types/src/operations/state-access.d.ts.map +1 -0
  91. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  92. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  93. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  94. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  95. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  96. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  97. package/dist/types/src/operations/update-popover.d.ts +5 -0
  98. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  99. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  100. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  101. package/dist/types/src/translations.d.ts +26 -20
  102. package/dist/types/src/translations.d.ts.map +1 -1
  103. package/dist/types/src/types/capabilities.d.ts +10 -2
  104. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  105. package/dist/types/src/types/events.d.ts.map +1 -1
  106. package/dist/types/tsconfig.tsbuildinfo +1 -1
  107. package/package.json +47 -30
  108. package/src/SimpleLayoutPlugin.ts +16 -7
  109. package/src/capabilities/app-graph-builder.ts +21 -0
  110. package/src/capabilities/index.ts +13 -6
  111. package/src/capabilities/operation-handler.ts +14 -0
  112. package/src/capabilities/{react-root/react-root.tsx → react-root.tsx} +2 -2
  113. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +17 -8
  114. package/src/capabilities/{state/state.tsx → state.tsx} +2 -2
  115. package/src/capabilities/url-handler.ts +161 -0
  116. package/src/components/ContentError.stories.tsx +1 -1
  117. package/src/components/DebugOverlay/DebugOverlay.tsx +96 -0
  118. package/src/components/DebugOverlay/index.ts +5 -0
  119. package/src/components/Dialog/Dialog.tsx +14 -3
  120. package/src/components/Home/Home.tsx +32 -32
  121. package/src/components/{ContentLoading.stories.tsx → Loading/Loading.stories.tsx} +4 -4
  122. package/src/components/{ContentLoading.tsx → Loading/Loading.tsx} +1 -1
  123. package/src/components/Loading/index.ts +5 -0
  124. package/src/components/MobileLayout/MobileLayout.stories.tsx +21 -17
  125. package/src/components/MobileLayout/MobileLayout.tsx +118 -49
  126. package/src/components/{Workspace/Workspace.tsx → NavBranch/NavBranch.tsx} +40 -41
  127. package/src/components/{Workspace → NavBranch}/index.ts +1 -1
  128. package/src/components/Popover/Popover.tsx +10 -16
  129. package/src/components/SimpleLayout/AppBar.stories.tsx +10 -10
  130. package/src/components/SimpleLayout/AppBar.tsx +60 -60
  131. package/src/components/SimpleLayout/Drawer.tsx +30 -31
  132. package/src/components/SimpleLayout/Main.tsx +21 -26
  133. package/src/components/SimpleLayout/NavBar.stories.tsx +2 -2
  134. package/src/components/SimpleLayout/NavBar.tsx +8 -9
  135. package/src/components/SimpleLayout/SimpleLayout.stories.tsx +44 -67
  136. package/src/components/SimpleLayout/SimpleLayout.tsx +33 -34
  137. package/src/components/hooks.ts +8 -8
  138. package/src/components/index.ts +3 -2
  139. package/src/hooks/actions.ts +15 -16
  140. package/src/hooks/useAppBarProps.ts +9 -30
  141. package/src/hooks/useDrawerActions.ts +13 -11
  142. package/src/hooks/useNavbarActions.ts +8 -7
  143. package/src/hooks/useSimpleLayoutState.ts +1 -1
  144. package/src/meta.ts +1 -1
  145. package/src/operations/close.ts +34 -0
  146. package/src/operations/index.ts +16 -0
  147. package/src/operations/open.ts +63 -0
  148. package/src/operations/revert-workspace.ts +22 -0
  149. package/src/operations/set-layout-mode.ts +12 -0
  150. package/src/operations/set.ts +23 -0
  151. package/src/operations/state-access.ts +19 -0
  152. package/src/operations/switch-workspace.ts +26 -0
  153. package/src/operations/update-complementary.ts +35 -0
  154. package/src/operations/update-dialog.ts +28 -0
  155. package/src/operations/update-popover.ts +35 -0
  156. package/src/operations/update-sidebar.ts +12 -0
  157. package/src/translations.ts +21 -19
  158. package/src/types/capabilities.ts +4 -4
  159. package/dist/lib/browser/chunk-7VLT3S46.mjs +0 -29
  160. package/dist/lib/browser/chunk-7VLT3S46.mjs.map +0 -7
  161. package/dist/lib/browser/chunk-TMZNLVT2.mjs +0 -1170
  162. package/dist/lib/browser/chunk-TMZNLVT2.mjs.map +0 -7
  163. package/dist/lib/browser/operation-resolver-BYRIQOQT.mjs +0 -205
  164. package/dist/lib/browser/operation-resolver-BYRIQOQT.mjs.map +0 -7
  165. package/dist/lib/browser/react-root-MMB575WY.mjs +0 -21
  166. package/dist/lib/browser/react-root-MMB575WY.mjs.map +0 -7
  167. package/dist/lib/browser/react-surface-M6CURANW.mjs +0 -41
  168. package/dist/lib/browser/react-surface-M6CURANW.mjs.map +0 -7
  169. package/dist/lib/browser/spotlight-dismiss-67PHYS5B.mjs +0 -66
  170. package/dist/lib/browser/spotlight-dismiss-67PHYS5B.mjs.map +0 -7
  171. package/dist/lib/browser/state-A3PGDWWZ.mjs +0 -48
  172. package/dist/lib/browser/state-A3PGDWWZ.mjs.map +0 -7
  173. package/dist/lib/browser/url-handler-HTIUY6WL.mjs +0 -152
  174. package/dist/lib/browser/url-handler-HTIUY6WL.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-FLOYBAHE.mjs +0 -1171
  176. package/dist/lib/node-esm/chunk-FLOYBAHE.mjs.map +0 -7
  177. package/dist/lib/node-esm/chunk-VIDE5UMB.mjs +0 -31
  178. package/dist/lib/node-esm/chunk-VIDE5UMB.mjs.map +0 -7
  179. package/dist/lib/node-esm/operation-resolver-BDTFNCS2.mjs +0 -206
  180. package/dist/lib/node-esm/operation-resolver-BDTFNCS2.mjs.map +0 -7
  181. package/dist/lib/node-esm/react-root-ENZKVSY4.mjs +0 -22
  182. package/dist/lib/node-esm/react-root-ENZKVSY4.mjs.map +0 -7
  183. package/dist/lib/node-esm/react-surface-ITVNQYLG.mjs +0 -42
  184. package/dist/lib/node-esm/react-surface-ITVNQYLG.mjs.map +0 -7
  185. package/dist/lib/node-esm/spotlight-dismiss-RMLRZUVY.mjs +0 -68
  186. package/dist/lib/node-esm/spotlight-dismiss-RMLRZUVY.mjs.map +0 -7
  187. package/dist/lib/node-esm/state-ZCFZTTPL.mjs +0 -49
  188. package/dist/lib/node-esm/state-ZCFZTTPL.mjs.map +0 -7
  189. package/dist/lib/node-esm/url-handler-WBVVKVPC.mjs +0 -153
  190. package/dist/lib/node-esm/url-handler-WBVVKVPC.mjs.map +0 -7
  191. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  192. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  193. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  194. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  195. package/dist/types/src/capabilities/react-root/index.d.ts +0 -6
  196. package/dist/types/src/capabilities/react-root/index.d.ts.map +0 -1
  197. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +0 -1
  198. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  199. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  200. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  201. package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts +0 -3
  202. package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts.map +0 -1
  203. package/dist/types/src/capabilities/spotlight-dismiss/spotlight-dismiss.d.ts.map +0 -1
  204. package/dist/types/src/capabilities/state/index.d.ts +0 -13
  205. package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
  206. package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
  207. package/dist/types/src/capabilities/url-handler/index.d.ts +0 -3
  208. package/dist/types/src/capabilities/url-handler/index.d.ts.map +0 -1
  209. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +0 -1
  210. package/dist/types/src/components/ContentLoading.d.ts +0 -3
  211. package/dist/types/src/components/ContentLoading.d.ts.map +0 -1
  212. package/dist/types/src/components/ContentLoading.stories.d.ts.map +0 -1
  213. package/dist/types/src/components/Workspace/Workspace.d.ts +0 -11
  214. package/dist/types/src/components/Workspace/Workspace.d.ts.map +0 -1
  215. package/dist/types/src/components/Workspace/index.d.ts +0 -2
  216. package/dist/types/src/components/Workspace/index.d.ts.map +0 -1
  217. package/src/capabilities/operation-resolver/index.ts +0 -10
  218. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -217
  219. package/src/capabilities/react-root/index.ts +0 -7
  220. package/src/capabilities/react-surface/index.ts +0 -7
  221. package/src/capabilities/spotlight-dismiss/index.ts +0 -7
  222. package/src/capabilities/state/index.ts +0 -9
  223. package/src/capabilities/url-handler/index.ts +0 -7
  224. package/src/capabilities/url-handler/url-handler.ts +0 -157
  225. /package/dist/types/src/capabilities/{react-root/react-root.d.ts → react-root.d.ts} +0 -0
  226. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
  227. /package/src/capabilities/{spotlight-dismiss/spotlight-dismiss.ts → spotlight-dismiss.ts} +0 -0
@@ -0,0 +1,63 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+ import {
7
+ AppCapabilities,
8
+ LayoutOperation,
9
+ createEdgeExistenceChecker,
10
+ validateNavigationTarget,
11
+ } from '@dxos/app-toolkit';
12
+ import { Operation } from '@dxos/compute';
13
+ import { Context } from '@dxos/context';
14
+ import { ClientCapabilities } from '@dxos/plugin-client/types';
15
+
16
+ import { layoutStateAccess } from './state-access';
17
+
18
+ const handler: Operation.WithHandler<typeof LayoutOperation.Open> = LayoutOperation.Open.pipe(
19
+ Operation.withHandler(
20
+ Effect.fnUntraced(function* (input) {
21
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
22
+ const { updateState } = yield* layoutStateAccess;
23
+ const id = input.subject[0];
24
+
25
+ // Validate navigation target, redirecting to 404 if not found.
26
+ const capabilities = yield* Capability.Service;
27
+ const pathResolvers = capabilities.getAll(AppCapabilities.NavigationPathResolver);
28
+ const checkRemoteExistence = yield* Capability.get(ClientCapabilities.Client).pipe(
29
+ Effect.map((client) =>
30
+ createEdgeExistenceChecker((spaceId, body) => client.edge.http.execQuery(new Context(), spaceId, body)),
31
+ ),
32
+ Effect.catchAll(() => Effect.succeed(undefined)),
33
+ );
34
+
35
+ const validatedId =
36
+ input.navigation === 'immediate'
37
+ ? id
38
+ : yield* validateNavigationTarget({
39
+ graph,
40
+ subjectId: id,
41
+ pathResolvers,
42
+ checkRemoteExistence,
43
+ });
44
+
45
+ updateState((state) => {
46
+ const newHistory = state.active ? [...state.history, state.active] : state.history;
47
+ const trimmedHistory =
48
+ newHistory.length > MAX_HISTORY_LENGTH ? newHistory.slice(-MAX_HISTORY_LENGTH) : newHistory;
49
+ return {
50
+ ...state,
51
+ active: validatedId,
52
+ history: trimmedHistory,
53
+ };
54
+ });
55
+
56
+ return [validatedId];
57
+ }),
58
+ ),
59
+ );
60
+
61
+ export default handler;
62
+
63
+ const MAX_HISTORY_LENGTH = 50;
@@ -0,0 +1,22 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ import { layoutStateAccess } from './state-access';
9
+
10
+ const handler: Operation.WithHandler<typeof LayoutOperation.RevertWorkspace> = LayoutOperation.RevertWorkspace.pipe(
11
+ Operation.withHandler(
12
+ Effect.fnUntraced(function* () {
13
+ const { getState } = yield* layoutStateAccess;
14
+ const state = getState();
15
+ yield* Operation.invoke(LayoutOperation.SwitchWorkspace, {
16
+ subject: state.previousWorkspace,
17
+ });
18
+ }),
19
+ ),
20
+ );
21
+
22
+ export default handler;
@@ -0,0 +1,12 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ const handler: Operation.WithHandler<typeof LayoutOperation.SetLayoutMode> = LayoutOperation.SetLayoutMode.pipe(
9
+ Operation.withHandler(Effect.fnUntraced(function* () {})),
10
+ );
11
+
12
+ export default handler;
@@ -0,0 +1,23 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ import { layoutStateAccess } from './state-access';
9
+
10
+ const handler: Operation.WithHandler<typeof LayoutOperation.Set> = LayoutOperation.Set.pipe(
11
+ Operation.withHandler(
12
+ Effect.fnUntraced(function* (input) {
13
+ const { updateState } = yield* layoutStateAccess;
14
+
15
+ updateState((state) => ({
16
+ ...state,
17
+ active: input.subject[0],
18
+ }));
19
+ }),
20
+ ),
21
+ );
22
+
23
+ export default handler;
@@ -0,0 +1,19 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { Capabilities, Capability } from '@dxos/app-framework';
6
+
7
+ import { type SimpleLayoutState, SimpleLayoutState as SimpleLayoutStateCapability } from '../types';
8
+
9
+ export const layoutStateAccess = Effect.gen(function* () {
10
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
11
+ const stateAtom = yield* Capability.get(SimpleLayoutStateCapability);
12
+
13
+ return {
14
+ getState: () => registry.get(stateAtom),
15
+ updateState: (fn: (current: SimpleLayoutState) => SimpleLayoutState) => {
16
+ registry.set(stateAtom, fn(registry.get(stateAtom)));
17
+ },
18
+ };
19
+ });
@@ -0,0 +1,26 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { isPinnedWorkspace, LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ import { layoutStateAccess } from './state-access';
9
+
10
+ const handler: Operation.WithHandler<typeof LayoutOperation.SwitchWorkspace> = LayoutOperation.SwitchWorkspace.pipe(
11
+ Operation.withHandler(
12
+ Effect.fnUntraced(function* (input) {
13
+ const { updateState } = yield* layoutStateAccess;
14
+
15
+ updateState((state) => ({
16
+ ...state,
17
+ previousWorkspace: !isPinnedWorkspace(state.workspace) ? state.workspace : state.previousWorkspace,
18
+ workspace: input.subject,
19
+ active: undefined,
20
+ history: [],
21
+ }));
22
+ }),
23
+ ),
24
+ );
25
+
26
+ export default handler;
@@ -0,0 +1,35 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+ import { getLinkedVariant } from '@dxos/react-ui-attention';
8
+
9
+ import { layoutStateAccess } from './state-access';
10
+
11
+ const handler: Operation.WithHandler<typeof LayoutOperation.UpdateComplementary> =
12
+ LayoutOperation.UpdateComplementary.pipe(
13
+ Operation.withHandler(
14
+ Effect.fnUntraced(function* (input) {
15
+ const { updateState } = yield* layoutStateAccess;
16
+
17
+ if (input.state === 'closed') {
18
+ updateState((state) => ({
19
+ ...state,
20
+ drawerState: 'closed',
21
+ companionVariant: undefined,
22
+ }));
23
+ } else if (input.subject) {
24
+ const variant = getLinkedVariant(input.subject);
25
+ updateState((state) => ({
26
+ ...state,
27
+ companionVariant: variant,
28
+ drawerState: input.state === 'expanded' ? 'expanded' : 'open',
29
+ }));
30
+ }
31
+ }),
32
+ ),
33
+ );
34
+
35
+ export default handler;
@@ -0,0 +1,28 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ import { layoutStateAccess } from './state-access';
9
+
10
+ const handler: Operation.WithHandler<typeof LayoutOperation.UpdateDialog> = LayoutOperation.UpdateDialog.pipe(
11
+ Operation.withHandler(
12
+ Effect.fnUntraced(function* (input) {
13
+ const { updateState } = yield* layoutStateAccess;
14
+
15
+ updateState((state) => ({
16
+ ...state,
17
+ dialogOpen: input.state ?? Boolean(input.subject),
18
+ dialogType: input.type ?? 'default',
19
+ dialogBlockAlign: input.blockAlign ?? 'center',
20
+ dialogOverlayClasses: input.overlayClasses,
21
+ dialogOverlayStyle: input.overlayStyle,
22
+ dialogContent: input.subject ? { component: input.subject, props: input.props } : undefined,
23
+ }));
24
+ }),
25
+ ),
26
+ );
27
+
28
+ export default handler;
@@ -0,0 +1,35 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ import { layoutStateAccess } from './state-access';
9
+
10
+ const handler: Operation.WithHandler<typeof LayoutOperation.UpdatePopover> = LayoutOperation.UpdatePopover.pipe(
11
+ Operation.withHandler(
12
+ Effect.fnUntraced(function* (input) {
13
+ const { updateState } = yield* layoutStateAccess;
14
+
15
+ updateState((state) => ({
16
+ ...state,
17
+ popoverOpen: input.state ?? Boolean(input.subject),
18
+ popoverKind: input.kind ?? 'base',
19
+ popoverTitle: input.kind === 'card' ? input.title : undefined,
20
+ popoverContent:
21
+ typeof input.subject === 'string'
22
+ ? { component: input.subject, props: input.props }
23
+ : input.subject
24
+ ? { subject: input.subject }
25
+ : undefined,
26
+ popoverSide: input.side,
27
+ popoverVariant: input.variant,
28
+ popoverAnchor: input.variant === 'virtual' ? input.anchor : state.popoverAnchor,
29
+ popoverAnchorId: input.variant !== 'virtual' ? input.anchorId : state.popoverAnchorId,
30
+ }));
31
+ }),
32
+ ),
33
+ );
34
+
35
+ export default handler;
@@ -0,0 +1,12 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ const handler: Operation.WithHandler<typeof LayoutOperation.UpdateSidebar> = LayoutOperation.UpdateSidebar.pipe(
9
+ Operation.withHandler(() => Effect.void),
10
+ );
11
+
12
+ export default handler;
@@ -3,31 +3,33 @@
3
3
  //
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
+ import { translations as searchTranslations } from '@dxos/react-ui-search/translations';
6
7
 
7
- import { meta } from './meta';
8
+ import { meta } from '#meta';
8
9
 
9
10
  export const translations = [
11
+ ...searchTranslations,
10
12
  {
11
13
  'en-US': {
12
14
  [meta.id]: {
13
- 'plugin name': 'Simple layout',
14
- 'settings title': 'Simple layout settings',
15
- 'workspaces heading': 'Workspaces',
16
- 'settings heading': 'Settings',
17
- 'back label': 'Back',
18
- 'browse label': 'Browse',
19
- 'notifications label': 'Notifications',
20
- 'profile label': 'Profile',
21
- 'app menu label': 'App menu',
22
- 'main menu label': 'Main menu',
23
- 'companions menu label': 'Companions',
24
- 'error fallback message': 'An error occurred',
25
- 'search placeholder': 'Search...',
26
- 'drawer label': 'Drawer',
27
- 'close drawer label': 'Close drawer',
28
- 'expand drawer label': 'Expand drawer',
29
- 'collapse drawer label': 'Collapse drawer',
30
- 'actions menu label': 'Actions',
15
+ 'plugin.name': 'Simple layout',
16
+ 'settings.title': 'Simple layout settings',
17
+ 'workspaces.heading': 'Workspaces',
18
+ 'settings.heading': 'Settings',
19
+ 'back.label': 'Back',
20
+ 'browse.label': 'Browse',
21
+ 'notifications.label': 'Notifications',
22
+ 'profile.label': 'Profile',
23
+ 'app-menu.label': 'App menu',
24
+ 'main-menu.label': 'Main menu',
25
+ 'companions-menu.label': 'Companions',
26
+ 'error-fallback.message': 'An error occurred',
27
+ 'drawer.label': 'Drawer',
28
+ 'close-drawer.label': 'Close drawer',
29
+ 'expand-drawer.label': 'Expand drawer',
30
+ 'collapse-drawer.label': 'Collapse drawer',
31
+ 'actions-menu.label': 'Actions',
32
+ 'done.label': 'Done',
31
33
  },
32
34
  },
33
35
  },
@@ -7,7 +7,7 @@ import { type Atom } from '@effect-atom/atom-react';
7
7
  import { Capability } from '@dxos/app-framework';
8
8
  import { type Label } from '@dxos/react-ui';
9
9
 
10
- import { meta } from '../meta';
10
+ import { meta } from '#meta';
11
11
 
12
12
  export type DrawerState = 'closed' | 'open' | 'expanded';
13
13
 
@@ -26,7 +26,7 @@ export type SimpleLayoutState = {
26
26
  dialogOverlayClasses?: string;
27
27
  dialogOverlayStyle?: Record<string, any>;
28
28
  /** Data to be passed to the dialog Surface. */
29
- dialogContent?: any;
29
+ dialogContent?: { component: string; props?: any } | null;
30
30
 
31
31
  popoverOpen?: boolean;
32
32
  popoverSide?: 'top' | 'right' | 'bottom' | 'left';
@@ -35,7 +35,7 @@ export type SimpleLayoutState = {
35
35
  popoverAnchorId?: string;
36
36
  popoverKind?: 'base' | 'card';
37
37
  popoverTitle?: Label;
38
- popoverContent?: any;
38
+ popoverContent?: { component: string; props?: any } | { subject: any } | null;
39
39
 
40
40
  /** Bottom drawer state. */
41
41
  drawerState: DrawerState;
@@ -50,4 +50,4 @@ export type SimpleLayoutState = {
50
50
  companionVariant?: string;
51
51
  };
52
52
 
53
- export const SimpleLayoutState = Capability.make<Atom.Writable<SimpleLayoutState>>(`${meta.id}/state`);
53
+ export const SimpleLayoutState = Capability.make<Atom.Writable<SimpleLayoutState>>(`${meta.id}.state`);
@@ -1,29 +0,0 @@
1
- // src/meta.ts
2
- import { trim } from "@dxos/util";
3
- var meta = {
4
- id: "dxos.org/plugin/simple-layout",
5
- name: "Simple Layout",
6
- description: trim`
7
- Minimal layout plugin for simplified UI contexts like popover windows.
8
- Provides basic content rendering without sidebars or complex navigation.
9
- `,
10
- icon: "ph--layout--regular"
11
- };
12
-
13
- // src/types/capabilities.ts
14
- import { Capability } from "@dxos/app-framework";
15
- var SimpleLayoutState = Capability.make(`${meta.id}/state`);
16
-
17
- // src/types/events.ts
18
- import { AppActivationEvents } from "@dxos/app-toolkit";
19
- (function(SimpleLayoutEvents2) {
20
- SimpleLayoutEvents2.StateReady = AppActivationEvents.createStateEvent(SimpleLayoutState.identifier);
21
- })(SimpleLayoutEvents || (SimpleLayoutEvents = {}));
22
- var SimpleLayoutEvents;
23
-
24
- export {
25
- meta,
26
- SimpleLayoutState,
27
- SimpleLayoutEvents
28
- };
29
- //# sourceMappingURL=chunk-7VLT3S46.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts", "../../../src/types/capabilities.ts", "../../../src/types/events.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/simple-layout',\n name: 'Simple Layout',\n description: trim`\n Minimal layout plugin for simplified UI contexts like popover windows.\n Provides basic content rendering without sidebars or complex navigation.\n `,\n icon: 'ph--layout--regular',\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\n\nimport { Capability } from '@dxos/app-framework';\nimport { type Label } from '@dxos/react-ui';\n\nimport { meta } from '../meta';\n\nexport type DrawerState = 'closed' | 'open' | 'expanded';\n\n// TODO(wittjosiah): Handle toasts.\nexport type SimpleLayoutState = {\n /** Data to be passed to the main content Surface. */\n content?: any;\n\n previousWorkspace: string;\n workspace: string;\n active?: string;\n\n dialogOpen: boolean;\n dialogType?: 'default' | 'alert';\n dialogBlockAlign?: 'start' | 'center' | 'end';\n dialogOverlayClasses?: string;\n dialogOverlayStyle?: Record<string, any>;\n /** Data to be passed to the dialog Surface. */\n dialogContent?: any;\n\n popoverOpen?: boolean;\n popoverSide?: 'top' | 'right' | 'bottom' | 'left';\n popoverVariant?: 'virtual' | 'react';\n popoverAnchor?: HTMLButtonElement;\n popoverAnchorId?: string;\n popoverKind?: 'base' | 'card';\n popoverTitle?: Label;\n popoverContent?: any;\n\n /** Bottom drawer state. */\n drawerState: DrawerState;\n\n /** Stack of previously active item IDs for back navigation. */\n history: string[];\n\n /** Whether running in popover window context (hides mobile-specific UI). */\n isPopover?: boolean;\n\n /** Variant of the companion to display in the drawer (e.g., \"comments\", \"assistant-chat\"). */\n companionVariant?: string;\n};\n\nexport const SimpleLayoutState = Capability.make<Atom.Writable<SimpleLayoutState>>(`${meta.id}/state`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { SimpleLayoutState } from './capabilities';\n\nexport namespace SimpleLayoutEvents {\n /** Fired when SimpleLayoutState capability is ready. */\n export const StateReady: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(\n SimpleLayoutState.identifier,\n );\n}\n"],
5
- "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;AACR;;;ACTA,SAASC,kBAAkB;AA8CpB,IAAMC,oBAAoBC,WAAWC,KAAuC,GAAGC,KAAKC,EAAE,QAAQ;;;AC/CrG,SAASC,2BAA2B;UAInBC,qBAAAA;sBAEFC,aAA8CC,oBAAoBC,iBAC7EC,kBAAkBC,UAAU;AAEhC,GALiBL,uBAAAA,qBAAAA,CAAAA,EAAAA;;",
6
- "names": ["trim", "meta", "id", "name", "description", "trim", "icon", "Capability", "SimpleLayoutState", "Capability", "make", "meta", "id", "AppActivationEvents", "SimpleLayoutEvents", "StateReady", "AppActivationEvents", "createStateEvent", "SimpleLayoutState", "identifier"]
7
- }