@dxos/plugin-testing 0.11.1 → 0.12.0-next-bbabc02363f18d7643ea4160e3a7a7809870fd0d

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 (117) hide show
  1. package/dist/lib/{chunk-types.mjs → StorybookCapabilities.mjs} +4 -4
  2. package/dist/lib/StorybookCapabilities.mjs.map +1 -0
  3. package/dist/lib/StorybookPlugin.mjs +3 -14
  4. package/dist/lib/StorybookPlugin.mjs.map +1 -1
  5. package/dist/lib/capabilities.mjs +12 -4
  6. package/dist/lib/capabilities.mjs.map +1 -1
  7. package/dist/lib/chunk-add-toast.mjs +2 -2
  8. package/dist/lib/chunk-add-toast.mjs.map +1 -1
  9. package/dist/lib/chunk-close.mjs +2 -2
  10. package/dist/lib/chunk-close.mjs.map +1 -1
  11. package/dist/lib/chunk-meta.mjs +1 -1
  12. package/dist/lib/chunk-meta.mjs.map +1 -1
  13. package/dist/lib/chunk-open.mjs +2 -2
  14. package/dist/lib/chunk-open.mjs.map +1 -1
  15. package/dist/lib/chunk-operation-handler.mjs +3 -2
  16. package/dist/lib/chunk-operation-handler.mjs.map +1 -1
  17. package/dist/lib/chunk-react-context.mjs +13 -0
  18. package/dist/lib/chunk-react-context.mjs.map +1 -0
  19. package/dist/lib/chunk-scroll-into-view.mjs +2 -2
  20. package/dist/lib/chunk-scroll-into-view.mjs.map +1 -1
  21. package/dist/lib/chunk-state.mjs +4 -4
  22. package/dist/lib/chunk-state.mjs.map +1 -1
  23. package/dist/lib/chunk-switch-workspace.mjs +2 -2
  24. package/dist/lib/chunk-switch-workspace.mjs.map +1 -1
  25. package/dist/lib/chunk-update-complementary.mjs +2 -2
  26. package/dist/lib/chunk-update-complementary.mjs.map +1 -1
  27. package/dist/lib/chunk-update-dialog.mjs +2 -2
  28. package/dist/lib/chunk-update-dialog.mjs.map +1 -1
  29. package/dist/lib/chunk-update-popover.mjs +2 -2
  30. package/dist/lib/chunk-update-popover.mjs.map +1 -1
  31. package/dist/lib/chunk-update-sidebar.mjs +2 -2
  32. package/dist/lib/chunk-update-sidebar.mjs.map +1 -1
  33. package/dist/lib/chunk-update-state.mjs +3 -2
  34. package/dist/lib/chunk-update-state.mjs.map +1 -1
  35. package/dist/lib/components.mjs +2 -2
  36. package/dist/lib/components.mjs.map +1 -1
  37. package/dist/lib/core.mjs.map +1 -1
  38. package/dist/lib/harness.mjs +0 -2
  39. package/dist/lib/harness.mjs.map +1 -1
  40. package/dist/lib/index.mjs +1 -1
  41. package/dist/lib/operations.mjs +14 -2
  42. package/dist/lib/operations.mjs.map +1 -1
  43. package/dist/lib/plugin.mjs +2 -3
  44. package/dist/lib/plugin.mjs.map +1 -1
  45. package/dist/types/src/StorybookPlugin.d.ts +2 -2
  46. package/dist/types/src/StorybookPlugin.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/index.d.ts +7 -6
  48. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  49. package/dist/types/src/capabilities/operation-handler.d.ts +2 -3
  50. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/react-context.d.ts +5 -0
  52. package/dist/types/src/capabilities/react-context.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/state.d.ts +3 -3
  54. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  55. package/dist/types/src/components/Layout/Layout.d.ts.map +1 -1
  56. package/dist/types/src/core.d.ts +1 -1
  57. package/dist/types/src/core.d.ts.map +1 -1
  58. package/dist/types/src/harness.d.ts +1 -1
  59. package/dist/types/src/harness.d.ts.map +1 -1
  60. package/dist/types/src/index.d.ts +1 -1
  61. package/dist/types/src/index.d.ts.map +1 -1
  62. package/dist/types/src/operations/add-toast.d.ts +2 -2
  63. package/dist/types/src/operations/add-toast.d.ts.map +1 -1
  64. package/dist/types/src/operations/close.d.ts +2 -2
  65. package/dist/types/src/operations/close.d.ts.map +1 -1
  66. package/dist/types/src/operations/index.d.ts +1 -1
  67. package/dist/types/src/operations/index.d.ts.map +1 -1
  68. package/dist/types/src/operations/open.d.ts +2 -2
  69. package/dist/types/src/operations/open.d.ts.map +1 -1
  70. package/dist/types/src/operations/scroll-into-view.d.ts +2 -2
  71. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -1
  72. package/dist/types/src/operations/switch-workspace.d.ts +2 -2
  73. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -1
  74. package/dist/types/src/operations/update-complementary.d.ts +2 -2
  75. package/dist/types/src/operations/update-complementary.d.ts.map +1 -1
  76. package/dist/types/src/operations/update-dialog.d.ts +2 -2
  77. package/dist/types/src/operations/update-dialog.d.ts.map +1 -1
  78. package/dist/types/src/operations/update-popover.d.ts +2 -2
  79. package/dist/types/src/operations/update-popover.d.ts.map +1 -1
  80. package/dist/types/src/operations/update-sidebar.d.ts +2 -2
  81. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -1
  82. package/dist/types/src/operations/update-state.d.ts +3 -3
  83. package/dist/types/src/operations/update-state.d.ts.map +1 -1
  84. package/dist/types/src/plugin.d.ts +1 -2
  85. package/dist/types/src/plugin.d.ts.map +1 -1
  86. package/dist/types/src/types/StorybookCapabilities.d.ts +3 -3
  87. package/dist/types/src/types/StorybookCapabilities.d.ts.map +1 -1
  88. package/dist/types/tsconfig.tsbuildinfo +1 -1
  89. package/package.json +29 -23
  90. package/src/StorybookPlugin.ts +7 -25
  91. package/src/capabilities/index.ts +13 -6
  92. package/src/capabilities/operation-handler.ts +4 -4
  93. package/src/capabilities/react-context.tsx +19 -0
  94. package/src/capabilities/state.tsx +5 -5
  95. package/src/components/Layout/Layout.tsx +3 -2
  96. package/src/core.ts +2 -1
  97. package/src/harness.ts +2 -5
  98. package/src/index.ts +1 -1
  99. package/src/meta.ts +1 -1
  100. package/src/operations/add-toast.ts +2 -2
  101. package/src/operations/close.ts +2 -2
  102. package/src/operations/index.ts +14 -12
  103. package/src/operations/open.ts +2 -2
  104. package/src/operations/scroll-into-view.ts +2 -2
  105. package/src/operations/switch-workspace.ts +2 -2
  106. package/src/operations/update-complementary.ts +2 -2
  107. package/src/operations/update-dialog.ts +2 -2
  108. package/src/operations/update-popover.ts +3 -3
  109. package/src/operations/update-sidebar.ts +2 -2
  110. package/src/operations/update-state.ts +3 -2
  111. package/src/plugin.ts +1 -3
  112. package/src/types/StorybookCapabilities.ts +3 -3
  113. package/dist/lib/chunk-types.mjs.map +0 -1
  114. package/dist/lib/types.mjs +0 -2
  115. package/dist/types/src/types/index.d.ts +0 -2
  116. package/dist/types/src/types/index.d.ts.map +0 -1
  117. package/src/types/index.ts +0 -5
@@ -1,5 +1,5 @@
1
- import { Capability } from "@dxos/app-framework";
2
1
  import { meta } from "#meta";
2
+ import * as Capability from "@dxos/app-framework/Capability";
3
3
  //#region \0rolldown/runtime.js
4
4
  var __defProp = Object.defineProperty;
5
5
  var __exportAll = (all, no_symbols) => {
@@ -14,8 +14,8 @@ var __exportAll = (all, no_symbols) => {
14
14
  //#endregion
15
15
  //#region src/types/StorybookCapabilities.ts
16
16
  var StorybookCapabilities_exports = /* @__PURE__ */ __exportAll({ LayoutState: () => LayoutState });
17
- var LayoutState = Capability.make(`${meta.profile.key}.state`);
17
+ var LayoutState = Capability.makeSingleton()(`${meta.profile.key}.state`);
18
18
  //#endregion
19
- export { StorybookCapabilities_exports as n, LayoutState as t };
19
+ export { LayoutState, StorybookCapabilities_exports as t };
20
20
 
21
- //# sourceMappingURL=chunk-types.mjs.map
21
+ //# sourceMappingURL=StorybookCapabilities.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorybookCapabilities.mjs","names":[],"sources":["../../src/types/StorybookCapabilities.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type Atom } from '@effect-atom/atom';\n\nimport * as Capability from '@dxos/app-framework/Capability';\nimport type * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport { type Label } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\nexport type LayoutStateProps = {\n sidebarState?: 'expanded' | 'collapsed' | 'closed';\n complementarySidebarState?: 'expanded' | 'collapsed' | 'closed';\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' | 'rename';\n popoverTitle?: Label;\n popoverContent?: any;\n\n toasts: LayoutOperation.Toast[];\n\n workspace: string;\n};\n\nexport const LayoutState = Capability.makeSingleton<Atom.Writable<LayoutStateProps>>()(`${meta.profile.key}.state`);\n"],"mappings":";;;;;;;;;;;;;;;;AAwCA,IAAa,cAAc,WAAW,cAA+C,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO"}
@@ -1,19 +1,8 @@
1
- import { ActivationEvents, Capabilities, Capability, Plugin } from "@dxos/app-framework";
1
+ import * as Plugin from "@dxos/app-framework/Plugin";
2
+ import { OperationHandler, ReactContext, State } from "#capabilities";
2
3
  import { meta } from "#meta";
3
- import * as Effect from "effect/Effect";
4
- import { AppActivationEvents, AppPlugin } from "@dxos/app-toolkit";
5
- import { OperationHandler, State } from "#capabilities";
6
- import { Layout } from "#components";
7
4
  //#region src/StorybookPlugin.ts
8
- var StorybookPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({ activate: OperationHandler }), AppPlugin.addReactContextModule({ activate: () => Effect.succeed(Capability.contributes(Capabilities.ReactContext, {
9
- id: "storybook-layout",
10
- context: Layout
11
- })) }), Plugin.addModule(({ initialState }) => ({
12
- id: Capability.getModuleTag(State),
13
- activatesOn: ActivationEvents.Startup,
14
- firesAfterActivation: [AppActivationEvents.LayoutReady],
15
- activate: () => State({ initialState })
16
- })), Plugin.make);
5
+ var StorybookPlugin = Plugin.define(meta).pipe(Plugin.addModule(OperationHandler), Plugin.addModule(ReactContext), Plugin.addModule(State), Plugin.make);
17
6
  //#endregion
18
7
  export { StorybookPlugin, StorybookPlugin as default };
19
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"StorybookPlugin.mjs","names":[],"sources":["../../src/StorybookPlugin.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ActivationEvents, Capabilities, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\n\nimport { OperationHandler, State } from '#capabilities';\nimport { Layout } from '#components';\nimport { meta } from '#meta';\nimport { StorybookCapabilities } from '#types';\n\nexport type StorybookPluginOptions = {\n initialState?: Partial<StorybookCapabilities.LayoutStateProps>;\n};\n\nexport const StorybookPlugin = Plugin.define<StorybookPluginOptions>(meta).pipe(\n AppPlugin.addOperationHandlerModule({\n activate: OperationHandler,\n }),\n AppPlugin.addReactContextModule({\n activate: () =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactContext, {\n id: 'storybook-layout',\n context: Layout,\n }),\n ),\n }),\n Plugin.addModule(({ initialState }) => ({\n id: Capability.getModuleTag(State),\n activatesOn: ActivationEvents.Startup,\n firesAfterActivation: [AppActivationEvents.LayoutReady],\n activate: () => State({ initialState }),\n })),\n Plugin.make,\n);\n\nexport default StorybookPlugin;\n"],"mappings":";;;;;;;AAkBA,IAAa,kBAAkB,OAAO,OAA+B,IAAI,CAAC,CAAC,KACzE,UAAU,0BAA0B,EAClC,UAAU,iBACZ,CAAC,GACD,UAAU,sBAAsB,EAC9B,gBACE,OAAO,QACL,WAAW,YAAY,aAAa,cAAc;CAChD,IAAI;CACJ,SAAS;AACX,CAAC,CACH,EACJ,CAAC,GACD,OAAO,WAAW,EAAE,oBAAoB;CACtC,IAAI,WAAW,aAAa,KAAK;CACjC,aAAa,iBAAiB;CAC9B,sBAAsB,CAAC,oBAAoB,WAAW;CACtD,gBAAgB,MAAM,EAAE,aAAa,CAAC;AACxC,EAAE,GACF,OAAO,IACT"}
1
+ {"version":3,"file":"StorybookPlugin.mjs","names":[],"sources":["../../src/StorybookPlugin.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Plugin from '@dxos/app-framework/Plugin';\n\nimport { OperationHandler, ReactContext, State } from '#capabilities';\nimport { meta } from '#meta';\n\nimport * as StorybookCapabilities from './types/StorybookCapabilities';\n\nexport type StorybookPluginOptions = {\n initialState?: Partial<StorybookCapabilities.LayoutStateProps>;\n};\n\nexport const StorybookPlugin = Plugin.define<StorybookPluginOptions>(meta).pipe(\n Plugin.addModule(OperationHandler),\n Plugin.addModule(ReactContext),\n Plugin.addModule(State),\n Plugin.make,\n);\n\nexport default StorybookPlugin;\n"],"mappings":";;;;AAeA,IAAa,kBAAkB,OAAO,OAA+B,IAAI,CAAC,CAAC,KACzE,OAAO,UAAU,gBAAgB,GACjC,OAAO,UAAU,YAAY,GAC7B,OAAO,UAAU,KAAK,GACtB,OAAO,IACT"}
@@ -1,8 +1,16 @@
1
- import { Capability } from "@dxos/app-framework";
1
+ import { LayoutState } from "./StorybookCapabilities.mjs";
2
+ import * as Capability from "@dxos/app-framework/Capability";
3
+ import * as ActivationEvents from "@dxos/app-framework/ActivationEvents";
4
+ import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
5
+ import * as AppCapability from "@dxos/app-toolkit/AppCapability";
2
6
  //#region src/capabilities/index.ts
3
- var OperationHandler = Capability.lazy("OperationHandler", () => import("./chunk-operation-handler.mjs"));
4
- var State = Capability.lazy("State", () => import("./chunk-state.mjs"));
7
+ var OperationHandler = AppCapability.operationHandler(() => import("./chunk-operation-handler.mjs"));
8
+ var ReactContext = AppCapability.reactContext(() => import("./chunk-react-context.mjs"));
9
+ var State = Capability.lazyModule("State", {
10
+ activatesOn: ActivationEvents.Startup,
11
+ provides: [LayoutState, AppCapabilities.Layout]
12
+ }, () => import("./chunk-state.mjs"));
5
13
  //#endregion
6
- export { OperationHandler, State };
14
+ export { OperationHandler, ReactContext, State };
7
15
 
8
16
  //# sourceMappingURL=capabilities.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const State = Capability.lazy('State', () => import('./state'));\n"],"mappings":";;AAOA,IAAa,mBAAmB,WAAW,KACzC,0BACM,OAAO,gCACf;AACA,IAAa,QAAQ,WAAW,KAAK,eAAe,OAAO,oBAAU"}
1
+ {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../src/capabilities/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as ActivationEvents from '@dxos/app-framework/ActivationEvents';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as AppCapability from '@dxos/app-toolkit/AppCapability';\n\nimport * as StorybookCapabilities from '../types/StorybookCapabilities';\n\nexport const OperationHandler = AppCapability.operationHandler(() => import('./operation-handler'));\nexport const ReactContext = AppCapability.reactContext(() => import('./react-context'));\nexport const State = Capability.lazyModule(\n 'State',\n // Shell state read by `Layout` on its first render — same class as the deck's `DeckState`.\n { activatesOn: ActivationEvents.Startup, provides: [StorybookCapabilities.LayoutState, AppCapabilities.Layout] },\n () => import('./state'),\n);\n"],"mappings":";;;;;;AAWA,IAAa,mBAAmB,cAAc,uBAAuB,OAAO,gCAAsB;AAClG,IAAa,eAAe,cAAc,mBAAmB,OAAO,4BAAkB;AACtF,IAAa,QAAQ,WAAW,WAC9B,SAEA;CAAE,aAAa,iBAAiB;CAAS,UAAU,CAAC,aAAmC,gBAAgB,MAAM;AAAE,SACzG,OAAO,oBACf"}
@@ -1,7 +1,7 @@
1
1
  import { t as updateState } from "./chunk-update-state.mjs";
2
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
3
+ import * as Operation from "@dxos/compute/Operation";
2
4
  import * as Effect from "effect/Effect";
3
- import { LayoutOperation } from "@dxos/app-toolkit";
4
- import { Operation } from "@dxos/compute";
5
5
  //#region src/operations/add-toast.ts
6
6
  var handler = LayoutOperation.AddToast.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
7
7
  yield* updateState((state) => ({ toasts: [...state.toasts, input] }));
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-add-toast.mjs","names":[],"sources":["../../src/operations/add-toast.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.AddToast> = LayoutOperation.AddToast.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n yield* updateState((state) => ({\n toasts: [...state.toasts, input as LayoutOperation.Toast],\n }));\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAkE,gBAAgB,SAAS,KAC/F,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,OAAO,aAAa,WAAW,EAC7B,QAAQ,CAAC,GAAG,MAAM,QAAQ,KAA8B,EAC1D,EAAE;AACJ,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-add-toast.mjs","names":[],"sources":["../../src/operations/add-toast.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.AddToast> = LayoutOperation.AddToast.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n yield* updateState((state) => ({\n toasts: [...state.toasts, input as LayoutOperation.Toast],\n }));\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAkE,gBAAgB,SAAS,KAC/F,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,OAAO,aAAa,WAAW,EAC7B,QAAQ,CAAC,GAAG,MAAM,QAAQ,KAA8B,EAC1D,EAAE;AACJ,CAAC,CACH,CACF"}
@@ -1,6 +1,6 @@
1
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
2
+ import * as Operation from "@dxos/compute/Operation";
1
3
  import * as Effect from "effect/Effect";
2
- import { LayoutOperation } from "@dxos/app-toolkit";
3
- import { Operation } from "@dxos/compute";
4
4
  //#region src/operations/close.ts
5
5
  var handler = LayoutOperation.Close.pipe(Operation.withHandler(() => Effect.void));
6
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-close.mjs","names":[],"sources":["../../src/operations/close.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Close> = LayoutOperation.Close.pipe(\n Operation.withHandler(() => Effect.void),\n);\n\nexport default handler;\n"],"mappings":";;;;AASA,IAAM,UAA+D,gBAAgB,MAAM,KACzF,UAAU,kBAAkB,OAAO,IAAI,CACzC"}
1
+ {"version":3,"file":"chunk-close.mjs","names":[],"sources":["../../src/operations/close.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Close> = LayoutOperation.Close.pipe(\n Operation.withHandler(() => Effect.void),\n);\n\nexport default handler;\n"],"mappings":";;;;AASA,IAAM,UAA+D,gBAAgB,MAAM,KACzF,UAAU,kBAAkB,OAAO,IAAI,CACzC"}
@@ -1,4 +1,4 @@
1
- import { Plugin } from "@dxos/app-framework";
1
+ import * as Plugin from "@dxos/app-framework/Plugin";
2
2
  import { Config2 } from "@dxos/app-framework/config";
3
3
  import { trim } from "@dxos/util";
4
4
  //#region dx.config.ts
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-meta.mjs","names":[],"sources":["../../dx.config.ts","../../src/meta.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.storybookLayout',\n name: 'Storybook',\n author: 'DXOS',\n description: trim`\n Development layout optimized for Storybook component testing and documentation.\n Provides specialized views for component development and design system exploration.\n `,\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-testing',\n tags: ['labs'],\n },\n});\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n"],"mappings":";;;;AAOA,IAAA,oBAAe,QAAQ,KAAK,EAC1B,QAAQ;CACN,KAAK;CACL,MAAM;CACN,QAAQ;CACR,aAAa,IAAI;;;;CAIjB,QAAQ;CACR,MAAM,CAAC,MAAM;AACf,EACF,CAAC;;;ACXD,IAAa,OAAO,OAAO,kBAAkB,iBAAM"}
1
+ {"version":3,"file":"chunk-meta.mjs","names":[],"sources":["../../dx.config.ts","../../src/meta.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.storybookLayout',\n name: 'Storybook',\n author: 'DXOS',\n description: trim`\n Development layout optimized for Storybook component testing and documentation.\n Provides specialized views for component development and design system exploration.\n `,\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-testing',\n tags: ['labs'],\n },\n});\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Plugin from '@dxos/app-framework/Plugin';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n"],"mappings":";;;;AAOA,IAAA,oBAAe,QAAQ,KAAK,EAC1B,QAAQ;CACN,KAAK;CACL,MAAM;CACN,QAAQ;CACR,aAAa,IAAI;;;;CAIjB,QAAQ;CACR,MAAM,CAAC,MAAM;AACf,EACF,CAAC;;;ACXD,IAAa,OAAO,OAAO,kBAAkB,iBAAM"}
@@ -1,6 +1,6 @@
1
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
2
+ import * as Operation from "@dxos/compute/Operation";
1
3
  import * as Effect from "effect/Effect";
2
- import { LayoutOperation } from "@dxos/app-toolkit";
3
- import { Operation } from "@dxos/compute";
4
4
  import { log } from "@dxos/log";
5
5
  //#region src/operations/open.ts
6
6
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-testing/src/operations/open.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-open.mjs","names":[],"sources":["../../src/operations/open.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { log } from '@dxos/log';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Open> = LayoutOperation.Open.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n log('LayoutOperation.Open handler start');\n return input.subject;\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;;AAUA,IAAM,UAA8D,gBAAgB,KAAK,KACvF,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,IAAI,sCAAmC,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACxC,OAAO,MAAM;AACf,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-open.mjs","names":[],"sources":["../../src/operations/open.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\nimport { log } from '@dxos/log';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Open> = LayoutOperation.Open.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n log('LayoutOperation.Open handler start');\n return input.subject;\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;;AAUA,IAAM,UAA8D,gBAAgB,KAAK,KACvF,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,IAAI,sCAAmC,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;CAAA,CAAC;CACxC,OAAO,MAAM;AACf,CAAC,CACH,CACF"}
@@ -1,9 +1,10 @@
1
- import { Capabilities, Capability } from "@dxos/app-framework";
1
+ import * as Capability from "@dxos/app-framework/Capability";
2
2
  import * as Effect from "effect/Effect";
3
+ import * as Capabilities from "@dxos/app-framework/Capabilities";
3
4
  import { TestingOperationHandlerSet } from "#operations";
4
5
  //#region src/capabilities/operation-handler.ts
5
6
  var operation_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
6
- return Capability.contributes(Capabilities.OperationHandler, TestingOperationHandlerSet);
7
+ return Capability.contribute(Capabilities.OperationHandler, TestingOperationHandlerSet);
7
8
  }));
8
9
  //#endregion
9
10
  export { operation_handler_default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-operation-handler.mjs","names":[],"sources":["../../src/capabilities/operation-handler.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nimport { TestingOperationHandlerSet } from '#operations';\n\nexport default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Capabilities.OperationHandler, TestingOperationHandlerSet);\n }),\n);\n"],"mappings":";;;;AAWA,IAAA,4BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAAY,aAAa,kBAAkB,0BAA0B;AACzF,CAAC,CACH"}
1
+ {"version":3,"file":"chunk-operation-handler.mjs","names":[],"sources":["../../src/capabilities/operation-handler.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\n\nimport { TestingOperationHandlerSet } from '#operations';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return Capability.contribute(Capabilities.OperationHandler, TestingOperationHandlerSet);\n }),\n);\n"],"mappings":";;;;;AAWA,IAAA,4BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,WAAW,aAAa,kBAAkB,0BAA0B;AACxF,CAAC,CACH"}
@@ -0,0 +1,13 @@
1
+ import * as Capability from "@dxos/app-framework/Capability";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Capabilities from "@dxos/app-framework/Capabilities";
4
+ import { Layout } from "#components";
5
+ //#region src/capabilities/react-context.tsx
6
+ var react_context_default = Capability.makeModule(() => Effect.succeed(Capability.contribute(Capabilities.ReactContext, {
7
+ id: "storybook-layout",
8
+ context: Layout
9
+ })));
10
+ //#endregion
11
+ export { react_context_default as default };
12
+
13
+ //# sourceMappingURL=chunk-react-context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-react-context.mjs","names":[],"sources":["../../src/capabilities/react-context.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\n\nimport { Layout } from '#components';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contribute(Capabilities.ReactContext, {\n id: 'storybook-layout',\n context: Layout,\n }),\n ),\n);\n"],"mappings":";;;;;AAWA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,WAAW,aAAa,cAAc;CAC/C,IAAI;CACJ,SAAS;AACX,CAAC,CACH,CACF"}
@@ -1,6 +1,6 @@
1
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
2
+ import * as Operation from "@dxos/compute/Operation";
1
3
  import * as Effect from "effect/Effect";
2
- import { LayoutOperation } from "@dxos/app-toolkit";
3
- import { Operation } from "@dxos/compute";
4
4
  //#region src/operations/scroll-into-view.ts
5
5
  var handler = LayoutOperation.ScrollIntoView.pipe(Operation.withHandler(() => Effect.void));
6
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-scroll-into-view.mjs","names":[],"sources":["../../src/operations/scroll-into-view.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.ScrollIntoView> = LayoutOperation.ScrollIntoView.pipe(\n Operation.withHandler(() => Effect.void),\n);\n\nexport default handler;\n"],"mappings":";;;;AASA,IAAM,UAAwE,gBAAgB,eAAe,KAC3G,UAAU,kBAAkB,OAAO,IAAI,CACzC"}
1
+ {"version":3,"file":"chunk-scroll-into-view.mjs","names":[],"sources":["../../src/operations/scroll-into-view.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.ScrollIntoView> = LayoutOperation.ScrollIntoView.pipe(\n Operation.withHandler(() => Effect.void),\n);\n\nexport default handler;\n"],"mappings":";;;;AASA,IAAM,UAAwE,gBAAgB,eAAe,KAC3G,UAAU,kBAAkB,OAAO,IAAI,CACzC"}
@@ -1,7 +1,7 @@
1
- import { Capability } from "@dxos/app-framework";
1
+ import { LayoutState } from "./StorybookCapabilities.mjs";
2
+ import * as Capability from "@dxos/app-framework/Capability";
3
+ import * as AppCapabilities from "@dxos/app-toolkit/AppCapabilities";
2
4
  import * as Effect from "effect/Effect";
3
- import { AppCapabilities } from "@dxos/app-toolkit";
4
- import { StorybookCapabilities } from "#types";
5
5
  import { Atom } from "@effect-atom/atom";
6
6
  //#region src/capabilities/state.tsx
7
7
  var defaultState = {
@@ -30,7 +30,7 @@ var state_default = Capability.makeModule(Effect.fnUntraced(function* (props) {
30
30
  scrollIntoView: void 0
31
31
  };
32
32
  });
33
- return [Capability.contributes(StorybookCapabilities.LayoutState, stateAtom), Capability.contributes(AppCapabilities.Layout, layoutAtom)];
33
+ return [Capability.contribute(LayoutState, stateAtom), Capability.contribute(AppCapabilities.Layout, layoutAtom)];
34
34
  }));
35
35
  //#endregion
36
36
  export { state_default as default };
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-state.mjs","names":[],"sources":["../../src/capabilities/state.tsx"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom';\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { StorybookCapabilities } from '#types';\n\nconst defaultState: StorybookCapabilities.LayoutStateProps = {\n sidebarState: 'closed',\n complementarySidebarState: 'closed',\n dialogOpen: false,\n toasts: [],\n workspace: 'default',\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* (props?: { initialState?: Partial<StorybookCapabilities.LayoutStateProps> }) {\n const { initialState } = props ?? {};\n const stateAtom = Atom.make<StorybookCapabilities.LayoutStateProps>({ ...defaultState, ...initialState });\n\n const layoutAtom = Atom.make((get): AppCapabilities.Layout => {\n const state = get(stateAtom);\n return {\n mode: 'storybook',\n dialogOpen: state.dialogOpen,\n sidebarOpen: state.sidebarState === 'expanded',\n complementarySidebarOpen: state.complementarySidebarState === 'expanded',\n workspace: state.workspace,\n active: [],\n inactive: [],\n scrollIntoView: undefined,\n };\n });\n\n return [\n Capability.contributes(StorybookCapabilities.LayoutState, stateAtom),\n Capability.contributes(AppCapabilities.Layout, layoutAtom),\n ];\n }),\n);\n"],"mappings":";;;;;;AAYA,IAAM,eAAuD;CAC3D,cAAc;CACd,2BAA2B;CAC3B,YAAY;CACZ,QAAQ,CAAC;CACT,WAAW;AACb;AAEA,IAAA,gBAAe,WAAW,WACxB,OAAO,WAAW,WAAW,OAA4E;CACvG,MAAM,EAAE,iBAAiB,SAAS,CAAC;CACnC,MAAM,YAAY,KAAK,KAA6C;EAAE,GAAG;EAAc,GAAG;CAAa,CAAC;CAExG,MAAM,aAAa,KAAK,MAAM,QAAgC;EAC5D,MAAM,QAAQ,IAAI,SAAS;EAC3B,OAAO;GACL,MAAM;GACN,YAAY,MAAM;GAClB,aAAa,MAAM,iBAAiB;GACpC,0BAA0B,MAAM,8BAA8B;GAC9D,WAAW,MAAM;GACjB,QAAQ,CAAC;GACT,UAAU,CAAC;GACX,gBAAgB,KAAA;EAClB;CACF,CAAC;CAED,OAAO,CACL,WAAW,YAAY,sBAAsB,aAAa,SAAS,GACnE,WAAW,YAAY,gBAAgB,QAAQ,UAAU,CAC3D;AACF,CAAC,CACH"}
1
+ {"version":3,"file":"chunk-state.mjs","names":[],"sources":["../../src/capabilities/state.tsx"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom';\nimport * as Effect from 'effect/Effect';\n\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\n\nimport * as StorybookCapabilities from '../types/StorybookCapabilities';\n\nconst defaultState: StorybookCapabilities.LayoutStateProps = {\n sidebarState: 'closed',\n complementarySidebarState: 'closed',\n dialogOpen: false,\n toasts: [],\n workspace: 'default',\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* (props?: { initialState?: Partial<StorybookCapabilities.LayoutStateProps> }) {\n const { initialState } = props ?? {};\n const stateAtom = Atom.make<StorybookCapabilities.LayoutStateProps>({ ...defaultState, ...initialState });\n\n const layoutAtom = Atom.make((get): AppCapabilities.Layout => {\n const state = get(stateAtom);\n return {\n mode: 'storybook',\n dialogOpen: state.dialogOpen,\n sidebarOpen: state.sidebarState === 'expanded',\n complementarySidebarOpen: state.complementarySidebarState === 'expanded',\n workspace: state.workspace,\n active: [],\n inactive: [],\n scrollIntoView: undefined,\n };\n });\n\n return [\n Capability.contribute(StorybookCapabilities.LayoutState, stateAtom),\n Capability.contribute(AppCapabilities.Layout, layoutAtom),\n ];\n }),\n);\n"],"mappings":";;;;;;AAYA,IAAM,eAAuD;CAC3D,cAAc;CACd,2BAA2B;CAC3B,YAAY;CACZ,QAAQ,CAAC;CACT,WAAW;AACb;AAEA,IAAA,gBAAe,WAAW,WACxB,OAAO,WAAW,WAAW,OAA4E;CACvG,MAAM,EAAE,iBAAiB,SAAS,CAAC;CACnC,MAAM,YAAY,KAAK,KAA6C;EAAE,GAAG;EAAc,GAAG;CAAa,CAAC;CAExG,MAAM,aAAa,KAAK,MAAM,QAAgC;EAC5D,MAAM,QAAQ,IAAI,SAAS;EAC3B,OAAO;GACL,MAAM;GACN,YAAY,MAAM;GAClB,aAAa,MAAM,iBAAiB;GACpC,0BAA0B,MAAM,8BAA8B;GAC9D,WAAW,MAAM;GACjB,QAAQ,CAAC;GACT,UAAU,CAAC;GACX,gBAAgB,KAAA;EAClB;CACF,CAAC;CAED,OAAO,CACL,WAAW,WAAW,aAAmC,SAAS,GAClE,WAAW,WAAW,gBAAgB,QAAQ,UAAU,CAC1D;AACF,CAAC,CACH"}
@@ -1,7 +1,7 @@
1
1
  import { t as updateState } from "./chunk-update-state.mjs";
2
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
3
+ import * as Operation from "@dxos/compute/Operation";
2
4
  import * as Effect from "effect/Effect";
3
- import { LayoutOperation } from "@dxos/app-toolkit";
4
- import { Operation } from "@dxos/compute";
5
5
  //#region src/operations/switch-workspace.ts
6
6
  var handler = LayoutOperation.SwitchWorkspace.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ subject }) {
7
7
  yield* updateState(() => ({ workspace: subject }));
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-switch-workspace.mjs","names":[],"sources":["../../src/operations/switch-workspace.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.SwitchWorkspace> = LayoutOperation.SwitchWorkspace.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ subject }) {\n yield* updateState(() => ({ workspace: subject }));\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAyE,gBAAgB,gBAAgB,KAC7G,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,WAAW;CACxC,OAAO,mBAAmB,EAAE,WAAW,QAAQ,EAAE;AACnD,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-switch-workspace.mjs","names":[],"sources":["../../src/operations/switch-workspace.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.SwitchWorkspace> = LayoutOperation.SwitchWorkspace.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ subject }) {\n yield* updateState(() => ({ workspace: subject }));\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAyE,gBAAgB,gBAAgB,KAC7G,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,WAAW;CACxC,OAAO,mBAAmB,EAAE,WAAW,QAAQ,EAAE;AACnD,CAAC,CACH,CACF"}
@@ -1,7 +1,7 @@
1
1
  import { t as updateState } from "./chunk-update-state.mjs";
2
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
3
+ import * as Operation from "@dxos/compute/Operation";
2
4
  import * as Effect from "effect/Effect";
3
- import { LayoutOperation } from "@dxos/app-toolkit";
4
- import { Operation } from "@dxos/compute";
5
5
  //#region src/operations/update-complementary.ts
6
6
  var handler = LayoutOperation.UpdateComplementary.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ state }) {
7
7
  yield* updateState((layout) => {
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-update-complementary.mjs","names":[],"sources":["../../src/operations/update-complementary.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdateComplementary> =\n LayoutOperation.UpdateComplementary.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ state }) {\n yield* updateState((layout) => {\n const next = state ?? layout.complementarySidebarState;\n if (next !== layout.complementarySidebarState) {\n return { complementarySidebarState: next };\n }\n return {};\n });\n }),\n ),\n );\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UACJ,gBAAgB,oBAAoB,KAClC,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,SAAS;CACtC,OAAO,aAAa,WAAW;EAC7B,MAAM,OAAO,SAAS,OAAO;EAC7B,IAAI,SAAS,OAAO,2BAClB,OAAO,EAAE,2BAA2B,KAAK;EAE3C,OAAO,CAAC;CACV,CAAC;AACH,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-update-complementary.mjs","names":[],"sources":["../../src/operations/update-complementary.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdateComplementary> =\n LayoutOperation.UpdateComplementary.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ state }) {\n yield* updateState((layout) => {\n const next = state ?? layout.complementarySidebarState;\n if (next !== layout.complementarySidebarState) {\n return { complementarySidebarState: next };\n }\n return {};\n });\n }),\n ),\n );\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UACJ,gBAAgB,oBAAoB,KAClC,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,SAAS;CACtC,OAAO,aAAa,WAAW;EAC7B,MAAM,OAAO,SAAS,OAAO;EAC7B,IAAI,SAAS,OAAO,2BAClB,OAAO,EAAE,2BAA2B,KAAK;EAE3C,OAAO,CAAC;CACV,CAAC;AACH,CAAC,CACH,CACF"}
@@ -1,7 +1,7 @@
1
1
  import { t as updateState } from "./chunk-update-state.mjs";
2
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
3
+ import * as Operation from "@dxos/compute/Operation";
2
4
  import * as Effect from "effect/Effect";
3
- import { LayoutOperation } from "@dxos/app-toolkit";
4
- import { Operation } from "@dxos/compute";
5
5
  //#region src/operations/update-dialog.ts
6
6
  var handler = LayoutOperation.UpdateDialog.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ subject, state, type, blockAlign, overlayClasses, overlayStyle, props }) {
7
7
  yield* updateState(() => ({
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-update-dialog.mjs","names":[],"sources":["../../src/operations/update-dialog.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdateDialog> = LayoutOperation.UpdateDialog.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ subject, state, type, blockAlign, overlayClasses, overlayStyle, props }) {\n yield* updateState(() => ({\n dialogOpen: state ?? Boolean(subject),\n dialogType: type ?? 'default',\n dialogBlockAlign: blockAlign ?? 'center',\n dialogOverlayClasses: overlayClasses,\n dialogOverlayStyle: overlayStyle,\n dialogContent: subject ? { component: subject, props } : null,\n }));\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAsE,gBAAgB,aAAa,KACvG,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,SAAS,OAAO,MAAM,YAAY,gBAAgB,cAAc,SAAS;CACtG,OAAO,mBAAmB;EACxB,YAAY,SAAS,QAAQ,OAAO;EACpC,YAAY,QAAQ;EACpB,kBAAkB,cAAc;EAChC,sBAAsB;EACtB,oBAAoB;EACpB,eAAe,UAAU;GAAE,WAAW;GAAS;EAAM,IAAI;CAC3D,EAAE;AACJ,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-update-dialog.mjs","names":[],"sources":["../../src/operations/update-dialog.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdateDialog> = LayoutOperation.UpdateDialog.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ subject, state, type, blockAlign, overlayClasses, overlayStyle, props }) {\n yield* updateState(() => ({\n dialogOpen: state ?? Boolean(subject),\n dialogType: type ?? 'default',\n dialogBlockAlign: blockAlign ?? 'center',\n dialogOverlayClasses: overlayClasses,\n dialogOverlayStyle: overlayStyle,\n dialogContent: subject ? { component: subject, props } : null,\n }));\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAsE,gBAAgB,aAAa,KACvG,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,SAAS,OAAO,MAAM,YAAY,gBAAgB,cAAc,SAAS;CACtG,OAAO,mBAAmB;EACxB,YAAY,SAAS,QAAQ,OAAO;EACpC,YAAY,QAAQ;EACpB,kBAAkB,cAAc;EAChC,sBAAsB;EACtB,oBAAoB;EACpB,eAAe,UAAU;GAAE,WAAW;GAAS;EAAM,IAAI;CAC3D,EAAE;AACJ,CAAC,CACH,CACF"}
@@ -1,7 +1,7 @@
1
1
  import { t as updateState } from "./chunk-update-state.mjs";
2
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
3
+ import * as Operation from "@dxos/compute/Operation";
2
4
  import * as Effect from "effect/Effect";
3
- import { LayoutOperation } from "@dxos/app-toolkit";
4
- import { Operation } from "@dxos/compute";
5
5
  //#region src/operations/update-popover.ts
6
6
  var handler = LayoutOperation.UpdatePopover.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
7
7
  const { subject, state, side, kind, props } = input;
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-update-popover.mjs","names":[],"sources":["../../src/operations/update-popover.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nimport { StorybookCapabilities } from '../types';\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdatePopover> = LayoutOperation.UpdatePopover.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const { subject, state, side, kind, props } = input;\n yield* updateState(() => {\n const base: Partial<StorybookCapabilities.LayoutStateProps> = {\n popoverKind: kind ?? 'base',\n popoverTitle: kind === 'card' ? input.title : undefined,\n popoverContent:\n typeof subject === 'string' ? { component: subject, props } : subject ? { subject } : undefined,\n popoverOpen: state ?? Boolean(subject),\n popoverSide: side,\n };\n if ('variant' in input && input.variant === 'virtual') {\n return { ...base, popoverVariant: 'virtual', popoverAnchor: input.anchor };\n } else if ('anchorId' in input) {\n return { ...base, popoverVariant: 'react', popoverAnchorId: input.anchorId };\n }\n return base;\n });\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAYA,IAAM,UAAuE,gBAAgB,cAAc,KACzG,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,MAAM,EAAE,SAAS,OAAO,MAAM,MAAM,UAAU;CAC9C,OAAO,kBAAkB;EACvB,MAAM,OAAwD;GAC5D,aAAa,QAAQ;GACrB,cAAc,SAAS,SAAS,MAAM,QAAQ,KAAA;GAC9C,gBACE,OAAO,YAAY,WAAW;IAAE,WAAW;IAAS;GAAM,IAAI,UAAU,EAAE,QAAQ,IAAI,KAAA;GACxF,aAAa,SAAS,QAAQ,OAAO;GACrC,aAAa;EACf;EACA,IAAI,aAAa,SAAS,MAAM,YAAY,WAC1C,OAAO;GAAE,GAAG;GAAM,gBAAgB;GAAW,eAAe,MAAM;EAAO;OACpE,IAAI,cAAc,OACvB,OAAO;GAAE,GAAG;GAAM,gBAAgB;GAAS,iBAAiB,MAAM;EAAS;EAE7E,OAAO;CACT,CAAC;AACH,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-update-popover.mjs","names":[],"sources":["../../src/operations/update-popover.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nimport * as StorybookCapabilities from '../types/StorybookCapabilities';\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdatePopover> = LayoutOperation.UpdatePopover.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const { subject, state, side, kind, props } = input;\n yield* updateState(() => {\n const base: Partial<StorybookCapabilities.LayoutStateProps> = {\n popoverKind: kind ?? 'base',\n popoverTitle: kind === 'card' ? input.title : undefined,\n popoverContent:\n typeof subject === 'string' ? { component: subject, props } : subject ? { subject } : undefined,\n popoverOpen: state ?? Boolean(subject),\n popoverSide: side,\n };\n if ('variant' in input && input.variant === 'virtual') {\n return { ...base, popoverVariant: 'virtual', popoverAnchor: input.anchor };\n } else if ('anchorId' in input) {\n return { ...base, popoverVariant: 'react', popoverAnchorId: input.anchorId };\n }\n return base;\n });\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAYA,IAAM,UAAuE,gBAAgB,cAAc,KACzG,UAAU,YACR,OAAO,WAAW,WAAW,OAAO;CAClC,MAAM,EAAE,SAAS,OAAO,MAAM,MAAM,UAAU;CAC9C,OAAO,kBAAkB;EACvB,MAAM,OAAwD;GAC5D,aAAa,QAAQ;GACrB,cAAc,SAAS,SAAS,MAAM,QAAQ,KAAA;GAC9C,gBACE,OAAO,YAAY,WAAW;IAAE,WAAW;IAAS;GAAM,IAAI,UAAU,EAAE,QAAQ,IAAI,KAAA;GACxF,aAAa,SAAS,QAAQ,OAAO;GACrC,aAAa;EACf;EACA,IAAI,aAAa,SAAS,MAAM,YAAY,WAC1C,OAAO;GAAE,GAAG;GAAM,gBAAgB;GAAW,eAAe,MAAM;EAAO;OACpE,IAAI,cAAc,OACvB,OAAO;GAAE,GAAG;GAAM,gBAAgB;GAAS,iBAAiB,MAAM;EAAS;EAE7E,OAAO;CACT,CAAC;AACH,CAAC,CACH,CACF"}
@@ -1,7 +1,7 @@
1
1
  import { t as updateState } from "./chunk-update-state.mjs";
2
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
3
+ import * as Operation from "@dxos/compute/Operation";
2
4
  import * as Effect from "effect/Effect";
3
- import { LayoutOperation } from "@dxos/app-toolkit";
4
- import { Operation } from "@dxos/compute";
5
5
  //#region src/operations/update-sidebar.ts
6
6
  var handler = LayoutOperation.UpdateSidebar.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ state }) {
7
7
  yield* updateState((layout) => {
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-update-sidebar.mjs","names":[],"sources":["../../src/operations/update-sidebar.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdateSidebar> = LayoutOperation.UpdateSidebar.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ state }) {\n yield* updateState((layout) => {\n const next = state ?? layout.sidebarState;\n if (next !== layout.sidebarState) {\n return { sidebarState: next };\n }\n return {};\n });\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAuE,gBAAgB,cAAc,KACzG,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,SAAS;CACtC,OAAO,aAAa,WAAW;EAC7B,MAAM,OAAO,SAAS,OAAO;EAC7B,IAAI,SAAS,OAAO,cAClB,OAAO,EAAE,cAAc,KAAK;EAE9B,OAAO,CAAC;CACV,CAAC;AACH,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-update-sidebar.mjs","names":[],"sources":["../../src/operations/update-sidebar.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\n\nimport { updateState } from './update-state';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.UpdateSidebar> = LayoutOperation.UpdateSidebar.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ state }) {\n yield* updateState((layout) => {\n const next = state ?? layout.sidebarState;\n if (next !== layout.sidebarState) {\n return { sidebarState: next };\n }\n return {};\n });\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;AAWA,IAAM,UAAuE,gBAAgB,cAAc,KACzG,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,SAAS;CACtC,OAAO,aAAa,WAAW;EAC7B,MAAM,OAAO,SAAS,OAAO;EAC7B,IAAI,SAAS,OAAO,cAClB,OAAO,EAAE,cAAc,KAAK;EAE9B,OAAO,CAAC;CACV,CAAC;AACH,CAAC,CACH,CACF"}
@@ -1,6 +1,7 @@
1
- import { t as LayoutState } from "./chunk-types.mjs";
2
- import { Capabilities, Capability } from "@dxos/app-framework";
1
+ import { LayoutState } from "./StorybookCapabilities.mjs";
2
+ import * as Capability from "@dxos/app-framework/Capability";
3
3
  import * as Effect from "effect/Effect";
4
+ import * as Capabilities from "@dxos/app-framework/Capabilities";
4
5
  import * as Option from "effect/Option";
5
6
  //#region src/operations/update-state.ts
6
7
  var updateState = (fn) => Effect.gen(function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-update-state.mjs","names":[],"sources":["../../src/operations/update-state.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\n\nimport { StorybookCapabilities } from '../types';\n\nexport const updateState = (\n fn: (state: StorybookCapabilities.LayoutStateProps) => Partial<StorybookCapabilities.LayoutStateProps>,\n) =>\n Effect.gen(function* () {\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n // LayoutState may be absent when the plugin manager has been disposed (e.g. after a storybook test\n // completes but a background Effect fiber is still in flight). Treat this as a no-op.\n const stateAtomOption = yield* Effect.option(Capability.get(StorybookCapabilities.LayoutState));\n if (Option.isNone(stateAtomOption)) {\n return;\n }\n const stateAtom = stateAtomOption.value;\n const current = registry.get(stateAtom);\n registry.set(stateAtom, { ...current, ...fn(current) });\n });\n"],"mappings":";;;;;AAWA,IAAa,eACX,OAEA,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,OAAO,WAAW,IAAI,aAAa,YAAY;CAGhE,MAAM,kBAAkB,OAAO,OAAO,OAAO,WAAW,IAAI,WAAiC,CAAC;CAC9F,IAAI,OAAO,OAAO,eAAe,GAC/B;CAEF,MAAM,YAAY,gBAAgB;CAClC,MAAM,UAAU,SAAS,IAAI,SAAS;CACtC,SAAS,IAAI,WAAW;EAAE,GAAG;EAAS,GAAG,GAAG,OAAO;CAAE,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"chunk-update-state.mjs","names":[],"sources":["../../src/operations/update-state.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\n\nimport * as StorybookCapabilities from '../types/StorybookCapabilities';\n\nexport const updateState = (\n fn: (state: StorybookCapabilities.LayoutStateProps) => Partial<StorybookCapabilities.LayoutStateProps>,\n) =>\n Effect.gen(function* () {\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n // LayoutState may be absent when the plugin manager has been disposed (e.g. after a storybook test\n // completes but a background Effect fiber is still in flight). Treat this as a no-op.\n const stateAtomOption = yield* Effect.option(Capability.get(StorybookCapabilities.LayoutState));\n if (Option.isNone(stateAtomOption)) {\n return;\n }\n const stateAtom = stateAtomOption.value;\n const current = registry.get(stateAtom);\n registry.set(stateAtom, { ...current, ...fn(current) });\n });\n"],"mappings":";;;;;;AAYA,IAAa,eACX,OAEA,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,OAAO,WAAW,IAAI,aAAa,YAAY;CAGhE,MAAM,kBAAkB,OAAO,OAAO,OAAO,WAAW,IAAI,WAAiC,CAAC;CAC9F,IAAI,OAAO,OAAO,eAAe,GAC/B;CAEF,MAAM,YAAY,gBAAgB;CAClC,MAAM,UAAU,SAAS,IAAI,SAAS;CACtC,SAAS,IAAI,WAAW;EAAE,GAAG;EAAS,GAAG,GAAG,OAAO;CAAE,CAAC;AACxD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { LayoutState } from "./StorybookCapabilities.mjs";
1
2
  import { AlertDialog, Button, Card, Dialog, Main, Popover, Toast, toLocalizedString, useTranslation } from "@dxos/react-ui";
2
3
  import { meta } from "#meta";
3
4
  import { RegistryContext, useAtomValue } from "@effect-atom/atom-react";
@@ -6,7 +7,6 @@ import { Surface, useCapability } from "@dxos/app-framework/ui";
6
7
  import { AppSurface } from "@dxos/app-toolkit/ui";
7
8
  import { Dnd } from "@dxos/react-ui-dnd";
8
9
  import { descriptionMessage, mx } from "@dxos/ui-theme";
9
- import { StorybookCapabilities } from "#types";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
11
11
  //#region src/components/Layout/Layout.tsx
12
12
  var debounce_delay = 100;
@@ -42,7 +42,7 @@ var Layout = ({ children }) => {
42
42
  const { t } = useTranslation(meta.profile.key);
43
43
  const trigger = useRef(null);
44
44
  const registry = useContext(RegistryContext);
45
- const stateAtom = useCapability(StorybookCapabilities.LayoutState);
45
+ const stateAtom = useCapability(LayoutState);
46
46
  const layout = useAtomValue(stateAtom);
47
47
  const [iter, setIter] = useState(0);
48
48
  const [open, setOpen] = useState(false);
@@ -1 +1 @@
1
- {"version":3,"file":"components.mjs","names":[],"sources":["../../src/components/Layout/Layout.tsx"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport { RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport React, { type PropsWithChildren, useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework/ui';\nimport { type LayoutOperation } from '@dxos/app-toolkit';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport {\n AlertDialog,\n Button,\n Dialog,\n Main,\n Popover,\n type PopoverContentInteractOutsideEvent,\n Toast,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui';\nimport { Dnd } from '@dxos/react-ui-dnd';\nimport { descriptionMessage, mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\nimport { StorybookCapabilities } from '#types';\n\nconst debounce_delay = 100;\n\nconst StoryToast = ({ toast, onDismiss }: { toast: LayoutOperation.Toast; onDismiss: (id: string) => void }) => {\n const { t } = useTranslation(meta.profile.key);\n return (\n <Toast.Root\n data-testid={toast.id}\n defaultOpen\n duration={toast.duration}\n onOpenChange={(open) => {\n if (!open) {\n onDismiss(toast.id);\n }\n }}\n >\n <Toast.Title icon={toast.icon} onClose={toast.closeLabel ? () => onDismiss(toast.id) : undefined}>\n {toast.title && <span>{toLocalizedString(toast.title, t)}</span>}\n </Toast.Title>\n {toast.description && <Toast.Description>{toLocalizedString(toast.description, t)}</Toast.Description>}\n {toast.onAction && toast.actionAlt && toast.actionLabel && (\n <Toast.Actions>\n <Toast.Action altText={toLocalizedString(toast.actionAlt, t)} asChild>\n <Button variant='primary' onClick={() => toast.onAction?.()}>\n {toLocalizedString(toast.actionLabel, t)}\n </Button>\n </Toast.Action>\n </Toast.Actions>\n )}\n </Toast.Root>\n );\n};\n\nexport const Layout = ({ children }: PropsWithChildren<{}>) => {\n const { t } = useTranslation(meta.profile.key);\n const trigger = useRef<HTMLButtonElement | null>(null);\n const registry = useContext(RegistryContext);\n const stateAtom = useCapability(StorybookCapabilities.LayoutState);\n const layout = useAtomValue(stateAtom);\n const [iter, setIter] = useState(0);\n const [open, setOpen] = useState(false);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n const updateState = useCallback(\n (updates: Partial<StorybookCapabilities.LayoutStateProps>) => {\n const current = registry.get(stateAtom);\n registry.set(stateAtom, { ...current, ...updates });\n },\n [registry, stateAtom],\n );\n\n useEffect(() => {\n setOpen(false);\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = null;\n }\n trigger.current = layout.popoverAnchor ?? null;\n setIter((iter) => iter + 1);\n if (layout.popoverOpen) {\n debounceRef.current = setTimeout(() => setOpen(true), debounce_delay);\n }\n }, [layout.popoverAnchor, layout.popoverContent, layout.popoverOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n updateState({\n popoverOpen: false,\n popoverAnchor: undefined,\n popoverAnchorId: undefined,\n popoverSide: undefined,\n });\n }, [updateState]);\n\n const handleInteractOutside = useCallback(\n (event: KeyboardEvent | PopoverContentInteractOutsideEvent) => {\n if (\n // TODO(thure): CodeMirror should not focus itself when it updates.\n event.type === 'dismissableLayer.focusOutside' &&\n (event.currentTarget as HTMLElement | undefined)?.classList.contains('cm-content')\n ) {\n event.preventDefault();\n } else {\n handleClose();\n }\n },\n [handleClose],\n );\n\n const handleDismissToast = useCallback(\n (id: string) => {\n updateState({ toasts: layout.toasts.filter((toast) => toast.id !== id) });\n },\n [updateState, layout.toasts],\n );\n\n const DialogRoot = layout.dialogType === 'alert' ? AlertDialog.Root : Dialog.Root;\n const DialogOverlay = layout.dialogType === 'alert' ? AlertDialog.Overlay : Dialog.Overlay;\n\n return (\n <Toast.Provider>\n <div className='fixed inset-0 flex overflow-hidden'>\n <Dnd.Root>\n <Popover.Root open={open}>\n <Main.Root\n navigationSidebarState={layout.sidebarState}\n complementarySidebarState={layout.complementarySidebarState}\n onNavigationSidebarStateChange={(next) => updateState({ sidebarState: next })}\n onComplementarySidebarStateChange={(next) => updateState({ complementarySidebarState: next })}\n >\n {children}\n </Main.Root>\n\n <DialogRoot\n modal={layout.dialogBlockAlign !== 'end'}\n open={layout.dialogOpen}\n onOpenChange={(nextOpen) => updateState({ dialogOpen: nextOpen })}\n >\n {layout.dialogBlockAlign === 'end' ? (\n <Surface.Surface\n type={AppSurface.Dialog}\n data={layout.dialogContent}\n limit={1}\n fallback={ErrorFallback}\n placeholder={<div />}\n />\n ) : (\n <DialogOverlay\n blockAlign={layout.dialogBlockAlign}\n classNames={layout.dialogOverlayClasses}\n style={layout.dialogOverlayStyle}\n >\n <Surface.Surface\n type={AppSurface.Dialog}\n data={layout.dialogContent}\n limit={1}\n fallback={ErrorFallback}\n />\n </DialogOverlay>\n )}\n </DialogRoot>\n\n <Popover.VirtualTrigger key={iter} virtualRef={trigger} />\n <Popover.Portal>\n <Popover.Content\n side={layout.popoverSide}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onInteractOutside={handleInteractOutside}\n onEscapeKeyDown={handleInteractOutside}\n sticky='always'\n hideWhenDetached\n >\n <Popover.Viewport>\n {layout.popoverKind === 'card' && (\n <Card.Root>\n <Card.Header>\n {/* Disabled drag handle keeps the toolbar slot layout consistent with regular cards. */}\n <Card.DragHandle />\n {layout.popoverTitle ? (\n <Card.Title>{toLocalizedString(layout.popoverTitle, t)}</Card.Title>\n ) : (\n <span />\n )}\n <Card.ActionIconButton action='close' onClick={handleClose} />\n </Card.Header>\n <Surface.Surface type={AppSurface.CardContent} data={layout.popoverContent} limit={1} />\n </Card.Root>\n )}\n {(layout.popoverKind === 'base' || layout.popoverKind === 'rename') && (\n <Surface.Surface type={AppSurface.Popover} data={layout.popoverContent} limit={1} />\n )}\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Dnd.Root>\n {layout.toasts.map((toast) => (\n <StoryToast key={toast.id} toast={toast} onDismiss={handleDismissToast} />\n ))}\n <Toast.Viewport />\n </div>\n </Toast.Provider>\n );\n};\n\nexport const ErrorFallback = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(meta.profile.key);\n const errorString = error?.toString() ?? '';\n return (\n <div\n role='alert'\n data-testid='error-boundary-fallback'\n className={mx('overflow-auto p-8 dx-attention-surface grid place-items-center')}\n >\n <p className={mx(descriptionMessage, 'break-words rounded-md p-8', errorString.length < 256 && 'text-lg')}>\n {error ? errorString : t('error-fallback.message')}\n </p>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;AA4BA,IAAM,iBAAiB;AAEvB,IAAM,cAAc,EAAE,OAAO,gBAAmF;CAC9G,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,OACE,qBAAC,MAAM,MAAP;EACE,eAAa,MAAM;EACnB,aAAA;EACA,UAAU,MAAM;EAChB,eAAe,SAAS;GACtB,IAAI,CAAC,MACH,UAAU,MAAM,EAAE;EAEtB;YARF;GAUE,oBAAC,MAAM,OAAP;IAAa,MAAM,MAAM;IAAM,SAAS,MAAM,mBAAmB,UAAU,MAAM,EAAE,IAAI,KAAA;cACpF,MAAM,SAAS,oBAAC,QAAD,EAAA,UAAO,kBAAkB,MAAM,OAAO,CAAC,EAAQ,CAAA;GACpD,CAAA;GACZ,MAAM,eAAe,oBAAC,MAAM,aAAP,EAAA,UAAoB,kBAAkB,MAAM,aAAa,CAAC,EAAqB,CAAA;GACpG,MAAM,YAAY,MAAM,aAAa,MAAM,eAC1C,oBAAC,MAAM,SAAP,EAAA,UACE,oBAAC,MAAM,QAAP;IAAc,SAAS,kBAAkB,MAAM,WAAW,CAAC;IAAG,SAAA;cAC5D,oBAAC,QAAD;KAAQ,SAAQ;KAAU,eAAe,MAAM,WAAW;eACvD,kBAAkB,MAAM,aAAa,CAAC;IACjC,CAAA;GACI,CAAA,EACD,CAAA;EAEP;;AAEhB;AAEA,IAAa,UAAU,EAAE,eAAsC;CAC7D,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,UAAU,OAAiC,IAAI;CACrD,MAAM,WAAW,WAAW,eAAe;CAC3C,MAAM,YAAY,cAAc,sBAAsB,WAAW;CACjE,MAAM,SAAS,aAAa,SAAS;CACrC,MAAM,CAAC,MAAM,WAAW,SAAS,CAAC;CAClC,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,cAAc,OAA8B,IAAI;CAEtD,MAAM,cAAc,aACjB,YAA6D;EAC5D,MAAM,UAAU,SAAS,IAAI,SAAS;EACtC,SAAS,IAAI,WAAW;GAAE,GAAG;GAAS,GAAG;EAAQ,CAAC;CACpD,GACA,CAAC,UAAU,SAAS,CACtB;CAEA,gBAAgB;EACd,QAAQ,KAAK;EACb,IAAI,YAAY,SAAS;GACvB,aAAa,YAAY,OAAO;GAChC,YAAY,UAAU;EACxB;EACA,QAAQ,UAAU,OAAO,iBAAiB;EAC1C,SAAS,SAAS,OAAO,CAAC;EAC1B,IAAI,OAAO,aACT,YAAY,UAAU,iBAAiB,QAAQ,IAAI,GAAG,cAAc;CAExE,GAAG;EAAC,OAAO;EAAe,OAAO;EAAgB,OAAO;CAAW,CAAC;CAEpE,MAAM,cAAc,kBAAkB;EACpC,QAAQ,KAAK;EACb,YAAY;GACV,aAAa;GACb,eAAe,KAAA;GACf,iBAAiB,KAAA;GACjB,aAAa,KAAA;EACf,CAAC;CACH,GAAG,CAAC,WAAW,CAAC;CAEhB,MAAM,wBAAwB,aAC3B,UAA8D;EAC7D,IAEE,MAAM,SAAS,mCACd,MAAM,eAA2C,UAAU,SAAS,YAAY,GAEjF,MAAM,eAAe;OAErB,YAAY;CAEhB,GACA,CAAC,WAAW,CACd;CAEA,MAAM,qBAAqB,aACxB,OAAe;EACd,YAAY,EAAE,QAAQ,OAAO,OAAO,QAAQ,UAAU,MAAM,OAAO,EAAE,EAAE,CAAC;CAC1E,GACA,CAAC,aAAa,OAAO,MAAM,CAC7B;CAEA,MAAM,aAAa,OAAO,eAAe,UAAU,YAAY,OAAO,OAAO;CAC7E,MAAM,gBAAgB,OAAO,eAAe,UAAU,YAAY,UAAU,OAAO;CAEnF,OACE,oBAAC,MAAM,UAAP,EAAA,UACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,IAAI,MAAL,EAAA,UACE,qBAAC,QAAQ,MAAT;IAAoB;cAApB;KACE,oBAAC,KAAK,MAAN;MACE,wBAAwB,OAAO;MAC/B,2BAA2B,OAAO;MAClC,iCAAiC,SAAS,YAAY,EAAE,cAAc,KAAK,CAAC;MAC5E,oCAAoC,SAAS,YAAY,EAAE,2BAA2B,KAAK,CAAC;MAE3F;KACQ,CAAA;KAEX,oBAAC,YAAD;MACE,OAAO,OAAO,qBAAqB;MACnC,MAAM,OAAO;MACb,eAAe,aAAa,YAAY,EAAE,YAAY,SAAS,CAAC;gBAE/D,OAAO,qBAAqB,QAC3B,oBAAC,QAAQ,SAAT;OACE,MAAM,WAAW;OACjB,MAAM,OAAO;OACb,OAAO;OACP,UAAU;OACV,aAAa,oBAAC,OAAD,CAAM,CAAA;MACpB,CAAA,IAED,oBAAC,eAAD;OACE,YAAY,OAAO;OACnB,YAAY,OAAO;OACnB,OAAO,OAAO;iBAEd,oBAAC,QAAQ,SAAT;QACE,MAAM,WAAW;QACjB,MAAM,OAAO;QACb,OAAO;QACP,UAAU;OACX,CAAA;MACY,CAAA;KAEP,CAAA;KAEZ,oBAAC,QAAQ,gBAAT,EAAmC,YAAY,QAAU,GAA5B,IAA4B;KACzD,oBAAC,QAAQ,QAAT,EAAA,UACE,qBAAC,QAAQ,SAAT;MACE,MAAM,OAAO;MACb,kBAAkB,UAAU,MAAM,eAAe;MACjD,mBAAmB;MACnB,iBAAiB;MACjB,QAAO;MACP,kBAAA;gBANF,CAQE,qBAAC,QAAQ,UAAT,EAAA,UAAA,CACG,OAAO,gBAAgB,UACtB,qBAAC,KAAK,MAAN,EAAA,UAAA,CACE,qBAAC,KAAK,QAAN,EAAA,UAAA;OAEE,oBAAC,KAAK,YAAN,CAAkB,CAAA;OACjB,OAAO,eACN,oBAAC,KAAK,OAAN,EAAA,UAAa,kBAAkB,OAAO,cAAc,CAAC,EAAc,CAAA,IAEnE,oBAAC,QAAD,CAAO,CAAA;OAET,oBAAC,KAAK,kBAAN;QAAuB,QAAO;QAAQ,SAAS;OAAc,CAAA;MAClD,EAAA,CAAA,GACb,oBAAC,QAAQ,SAAT;OAAiB,MAAM,WAAW;OAAa,MAAM,OAAO;OAAgB,OAAO;MAAI,CAAA,CAC9E,EAAA,CAAA,IAEX,OAAO,gBAAgB,UAAU,OAAO,gBAAgB,aACxD,oBAAC,QAAQ,SAAT;OAAiB,MAAM,WAAW;OAAS,MAAM,OAAO;OAAgB,OAAO;MAAI,CAAA,CAErE,EAAA,CAAA,GAClB,oBAAC,QAAQ,OAAT,CAAgB,CAAA,CACD;QACH,CAAA;IACJ;MACN,CAAA;GACT,OAAO,OAAO,KAAK,UAClB,oBAAC,YAAD;IAAkC;IAAO,WAAW;GAAqB,GAAxD,MAAM,EAAkD,CAC1E;GACD,oBAAC,MAAM,UAAP,CAAiB,CAAA;EACd;IACS,CAAA;AAEpB;AAEA,IAAa,iBAAiB,EAAE,YAA+B;CAC7D,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,cAAc,OAAO,SAAS,KAAK;CACzC,OACE,oBAAC,OAAD;EACE,MAAK;EACL,eAAY;EACZ,WAAW,GAAG,gEAAgE;YAE9E,oBAAC,KAAD;GAAG,WAAW,GAAG,oBAAoB,8BAA8B,YAAY,SAAS,OAAO,SAAS;aACrG,QAAQ,cAAc,EAAE,wBAAwB;EAChD,CAAA;CACA,CAAA;AAET"}
1
+ {"version":3,"file":"components.mjs","names":[],"sources":["../../src/components/Layout/Layout.tsx"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport { RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport React, { type PropsWithChildren, useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework/ui';\nimport type * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport {\n AlertDialog,\n Button,\n Dialog,\n Main,\n Popover,\n type PopoverContentInteractOutsideEvent,\n Toast,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui';\nimport { Dnd } from '@dxos/react-ui-dnd';\nimport { descriptionMessage, mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport * as StorybookCapabilities from '../../types/StorybookCapabilities';\n\nconst debounce_delay = 100;\n\nconst StoryToast = ({ toast, onDismiss }: { toast: LayoutOperation.Toast; onDismiss: (id: string) => void }) => {\n const { t } = useTranslation(meta.profile.key);\n return (\n <Toast.Root\n data-testid={toast.id}\n defaultOpen\n duration={toast.duration}\n onOpenChange={(open) => {\n if (!open) {\n onDismiss(toast.id);\n }\n }}\n >\n <Toast.Title icon={toast.icon} onClose={toast.closeLabel ? () => onDismiss(toast.id) : undefined}>\n {toast.title && <span>{toLocalizedString(toast.title, t)}</span>}\n </Toast.Title>\n {toast.description && <Toast.Description>{toLocalizedString(toast.description, t)}</Toast.Description>}\n {toast.onAction && toast.actionAlt && toast.actionLabel && (\n <Toast.Actions>\n <Toast.Action altText={toLocalizedString(toast.actionAlt, t)} asChild>\n <Button variant='primary' onClick={() => toast.onAction?.()}>\n {toLocalizedString(toast.actionLabel, t)}\n </Button>\n </Toast.Action>\n </Toast.Actions>\n )}\n </Toast.Root>\n );\n};\n\nexport const Layout = ({ children }: PropsWithChildren<{}>) => {\n const { t } = useTranslation(meta.profile.key);\n const trigger = useRef<HTMLButtonElement | null>(null);\n const registry = useContext(RegistryContext);\n const stateAtom = useCapability(StorybookCapabilities.LayoutState);\n const layout = useAtomValue(stateAtom);\n const [iter, setIter] = useState(0);\n const [open, setOpen] = useState(false);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n const updateState = useCallback(\n (updates: Partial<StorybookCapabilities.LayoutStateProps>) => {\n const current = registry.get(stateAtom);\n registry.set(stateAtom, { ...current, ...updates });\n },\n [registry, stateAtom],\n );\n\n useEffect(() => {\n setOpen(false);\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = null;\n }\n trigger.current = layout.popoverAnchor ?? null;\n setIter((iter) => iter + 1);\n if (layout.popoverOpen) {\n debounceRef.current = setTimeout(() => setOpen(true), debounce_delay);\n }\n }, [layout.popoverAnchor, layout.popoverContent, layout.popoverOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n updateState({\n popoverOpen: false,\n popoverAnchor: undefined,\n popoverAnchorId: undefined,\n popoverSide: undefined,\n });\n }, [updateState]);\n\n const handleInteractOutside = useCallback(\n (event: KeyboardEvent | PopoverContentInteractOutsideEvent) => {\n if (\n // TODO(thure): CodeMirror should not focus itself when it updates.\n event.type === 'dismissableLayer.focusOutside' &&\n (event.currentTarget as HTMLElement | undefined)?.classList.contains('cm-content')\n ) {\n event.preventDefault();\n } else {\n handleClose();\n }\n },\n [handleClose],\n );\n\n const handleDismissToast = useCallback(\n (id: string) => {\n updateState({ toasts: layout.toasts.filter((toast) => toast.id !== id) });\n },\n [updateState, layout.toasts],\n );\n\n const DialogRoot = layout.dialogType === 'alert' ? AlertDialog.Root : Dialog.Root;\n const DialogOverlay = layout.dialogType === 'alert' ? AlertDialog.Overlay : Dialog.Overlay;\n\n return (\n <Toast.Provider>\n <div className='fixed inset-0 flex overflow-hidden'>\n <Dnd.Root>\n <Popover.Root open={open}>\n <Main.Root\n navigationSidebarState={layout.sidebarState}\n complementarySidebarState={layout.complementarySidebarState}\n onNavigationSidebarStateChange={(next) => updateState({ sidebarState: next })}\n onComplementarySidebarStateChange={(next) => updateState({ complementarySidebarState: next })}\n >\n {children}\n </Main.Root>\n\n <DialogRoot\n modal={layout.dialogBlockAlign !== 'end'}\n open={layout.dialogOpen}\n onOpenChange={(nextOpen) => updateState({ dialogOpen: nextOpen })}\n >\n {layout.dialogBlockAlign === 'end' ? (\n <Surface.Surface\n type={AppSurface.Dialog}\n data={layout.dialogContent}\n limit={1}\n fallback={ErrorFallback}\n placeholder={<div />}\n />\n ) : (\n <DialogOverlay\n blockAlign={layout.dialogBlockAlign}\n classNames={layout.dialogOverlayClasses}\n style={layout.dialogOverlayStyle}\n >\n <Surface.Surface\n type={AppSurface.Dialog}\n data={layout.dialogContent}\n limit={1}\n fallback={ErrorFallback}\n />\n </DialogOverlay>\n )}\n </DialogRoot>\n\n <Popover.VirtualTrigger key={iter} virtualRef={trigger} />\n <Popover.Portal>\n <Popover.Content\n side={layout.popoverSide}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onInteractOutside={handleInteractOutside}\n onEscapeKeyDown={handleInteractOutside}\n sticky='always'\n hideWhenDetached\n >\n <Popover.Viewport>\n {layout.popoverKind === 'card' && (\n <Card.Root>\n <Card.Header>\n {/* Disabled drag handle keeps the toolbar slot layout consistent with regular cards. */}\n <Card.DragHandle />\n {layout.popoverTitle ? (\n <Card.Title>{toLocalizedString(layout.popoverTitle, t)}</Card.Title>\n ) : (\n <span />\n )}\n <Card.ActionIconButton action='close' onClick={handleClose} />\n </Card.Header>\n <Surface.Surface type={AppSurface.CardContent} data={layout.popoverContent} limit={1} />\n </Card.Root>\n )}\n {(layout.popoverKind === 'base' || layout.popoverKind === 'rename') && (\n <Surface.Surface type={AppSurface.Popover} data={layout.popoverContent} limit={1} />\n )}\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </Dnd.Root>\n {layout.toasts.map((toast) => (\n <StoryToast key={toast.id} toast={toast} onDismiss={handleDismissToast} />\n ))}\n <Toast.Viewport />\n </div>\n </Toast.Provider>\n );\n};\n\nexport const ErrorFallback = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(meta.profile.key);\n const errorString = error?.toString() ?? '';\n return (\n <div\n role='alert'\n data-testid='error-boundary-fallback'\n className={mx('overflow-auto p-8 dx-attention-surface grid place-items-center')}\n >\n <p className={mx(descriptionMessage, 'break-words rounded-md p-8', errorString.length < 256 && 'text-lg')}>\n {error ? errorString : t('error-fallback.message')}\n </p>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;AA6BA,IAAM,iBAAiB;AAEvB,IAAM,cAAc,EAAE,OAAO,gBAAmF;CAC9G,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,OACE,qBAAC,MAAM,MAAP;EACE,eAAa,MAAM;EACnB,aAAA;EACA,UAAU,MAAM;EAChB,eAAe,SAAS;GACtB,IAAI,CAAC,MACH,UAAU,MAAM,EAAE;EAEtB;YARF;GAUE,oBAAC,MAAM,OAAP;IAAa,MAAM,MAAM;IAAM,SAAS,MAAM,mBAAmB,UAAU,MAAM,EAAE,IAAI,KAAA;cACpF,MAAM,SAAS,oBAAC,QAAD,EAAA,UAAO,kBAAkB,MAAM,OAAO,CAAC,EAAQ,CAAA;GACpD,CAAA;GACZ,MAAM,eAAe,oBAAC,MAAM,aAAP,EAAA,UAAoB,kBAAkB,MAAM,aAAa,CAAC,EAAqB,CAAA;GACpG,MAAM,YAAY,MAAM,aAAa,MAAM,eAC1C,oBAAC,MAAM,SAAP,EAAA,UACE,oBAAC,MAAM,QAAP;IAAc,SAAS,kBAAkB,MAAM,WAAW,CAAC;IAAG,SAAA;cAC5D,oBAAC,QAAD;KAAQ,SAAQ;KAAU,eAAe,MAAM,WAAW;eACvD,kBAAkB,MAAM,aAAa,CAAC;IACjC,CAAA;GACI,CAAA,EACD,CAAA;EAEP;;AAEhB;AAEA,IAAa,UAAU,EAAE,eAAsC;CAC7D,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,UAAU,OAAiC,IAAI;CACrD,MAAM,WAAW,WAAW,eAAe;CAC3C,MAAM,YAAY,cAAc,WAAiC;CACjE,MAAM,SAAS,aAAa,SAAS;CACrC,MAAM,CAAC,MAAM,WAAW,SAAS,CAAC;CAClC,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,cAAc,OAA8B,IAAI;CAEtD,MAAM,cAAc,aACjB,YAA6D;EAC5D,MAAM,UAAU,SAAS,IAAI,SAAS;EACtC,SAAS,IAAI,WAAW;GAAE,GAAG;GAAS,GAAG;EAAQ,CAAC;CACpD,GACA,CAAC,UAAU,SAAS,CACtB;CAEA,gBAAgB;EACd,QAAQ,KAAK;EACb,IAAI,YAAY,SAAS;GACvB,aAAa,YAAY,OAAO;GAChC,YAAY,UAAU;EACxB;EACA,QAAQ,UAAU,OAAO,iBAAiB;EAC1C,SAAS,SAAS,OAAO,CAAC;EAC1B,IAAI,OAAO,aACT,YAAY,UAAU,iBAAiB,QAAQ,IAAI,GAAG,cAAc;CAExE,GAAG;EAAC,OAAO;EAAe,OAAO;EAAgB,OAAO;CAAW,CAAC;CAEpE,MAAM,cAAc,kBAAkB;EACpC,QAAQ,KAAK;EACb,YAAY;GACV,aAAa;GACb,eAAe,KAAA;GACf,iBAAiB,KAAA;GACjB,aAAa,KAAA;EACf,CAAC;CACH,GAAG,CAAC,WAAW,CAAC;CAEhB,MAAM,wBAAwB,aAC3B,UAA8D;EAC7D,IAEE,MAAM,SAAS,mCACd,MAAM,eAA2C,UAAU,SAAS,YAAY,GAEjF,MAAM,eAAe;OAErB,YAAY;CAEhB,GACA,CAAC,WAAW,CACd;CAEA,MAAM,qBAAqB,aACxB,OAAe;EACd,YAAY,EAAE,QAAQ,OAAO,OAAO,QAAQ,UAAU,MAAM,OAAO,EAAE,EAAE,CAAC;CAC1E,GACA,CAAC,aAAa,OAAO,MAAM,CAC7B;CAEA,MAAM,aAAa,OAAO,eAAe,UAAU,YAAY,OAAO,OAAO;CAC7E,MAAM,gBAAgB,OAAO,eAAe,UAAU,YAAY,UAAU,OAAO;CAEnF,OACE,oBAAC,MAAM,UAAP,EAAA,UACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,IAAI,MAAL,EAAA,UACE,qBAAC,QAAQ,MAAT;IAAoB;cAApB;KACE,oBAAC,KAAK,MAAN;MACE,wBAAwB,OAAO;MAC/B,2BAA2B,OAAO;MAClC,iCAAiC,SAAS,YAAY,EAAE,cAAc,KAAK,CAAC;MAC5E,oCAAoC,SAAS,YAAY,EAAE,2BAA2B,KAAK,CAAC;MAE3F;KACQ,CAAA;KAEX,oBAAC,YAAD;MACE,OAAO,OAAO,qBAAqB;MACnC,MAAM,OAAO;MACb,eAAe,aAAa,YAAY,EAAE,YAAY,SAAS,CAAC;gBAE/D,OAAO,qBAAqB,QAC3B,oBAAC,QAAQ,SAAT;OACE,MAAM,WAAW;OACjB,MAAM,OAAO;OACb,OAAO;OACP,UAAU;OACV,aAAa,oBAAC,OAAD,CAAM,CAAA;MACpB,CAAA,IAED,oBAAC,eAAD;OACE,YAAY,OAAO;OACnB,YAAY,OAAO;OACnB,OAAO,OAAO;iBAEd,oBAAC,QAAQ,SAAT;QACE,MAAM,WAAW;QACjB,MAAM,OAAO;QACb,OAAO;QACP,UAAU;OACX,CAAA;MACY,CAAA;KAEP,CAAA;KAEZ,oBAAC,QAAQ,gBAAT,EAAmC,YAAY,QAAU,GAA5B,IAA4B;KACzD,oBAAC,QAAQ,QAAT,EAAA,UACE,qBAAC,QAAQ,SAAT;MACE,MAAM,OAAO;MACb,kBAAkB,UAAU,MAAM,eAAe;MACjD,mBAAmB;MACnB,iBAAiB;MACjB,QAAO;MACP,kBAAA;gBANF,CAQE,qBAAC,QAAQ,UAAT,EAAA,UAAA,CACG,OAAO,gBAAgB,UACtB,qBAAC,KAAK,MAAN,EAAA,UAAA,CACE,qBAAC,KAAK,QAAN,EAAA,UAAA;OAEE,oBAAC,KAAK,YAAN,CAAkB,CAAA;OACjB,OAAO,eACN,oBAAC,KAAK,OAAN,EAAA,UAAa,kBAAkB,OAAO,cAAc,CAAC,EAAc,CAAA,IAEnE,oBAAC,QAAD,CAAO,CAAA;OAET,oBAAC,KAAK,kBAAN;QAAuB,QAAO;QAAQ,SAAS;OAAc,CAAA;MAClD,EAAA,CAAA,GACb,oBAAC,QAAQ,SAAT;OAAiB,MAAM,WAAW;OAAa,MAAM,OAAO;OAAgB,OAAO;MAAI,CAAA,CAC9E,EAAA,CAAA,IAEX,OAAO,gBAAgB,UAAU,OAAO,gBAAgB,aACxD,oBAAC,QAAQ,SAAT;OAAiB,MAAM,WAAW;OAAS,MAAM,OAAO;OAAgB,OAAO;MAAI,CAAA,CAErE,EAAA,CAAA,GAClB,oBAAC,QAAQ,OAAT,CAAgB,CAAA,CACD;QACH,CAAA;IACJ;MACN,CAAA;GACT,OAAO,OAAO,KAAK,UAClB,oBAAC,YAAD;IAAkC;IAAO,WAAW;GAAqB,GAAxD,MAAM,EAAkD,CAC1E;GACD,oBAAC,MAAM,UAAP,CAAiB,CAAA;EACd;IACS,CAAA;AAEpB;AAEA,IAAa,iBAAiB,EAAE,YAA+B;CAC7D,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,cAAc,OAAO,SAAS,KAAK;CACzC,OACE,oBAAC,OAAD;EACE,MAAK;EACL,eAAY;EACZ,WAAW,GAAG,gEAAgE;YAE9E,oBAAC,KAAD;GAAG,WAAW,GAAG,oBAAoB,8BAA8B,YAAY,SAAS,OAAO,SAAS;aACrG,QAAQ,cAAc,EAAE,wBAAwB;EAChD,CAAA;CACA,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.mjs","names":[],"sources":["../../src/core.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Plugin, ProcessManagerPlugin } from '@dxos/app-framework';\n// `/testing` entrypoints re-export the plugin eagerly (without `Plugin.lazy`).\n// The default `.` and `/plugin` exports wrap each plugin in a lazy stub\n// (`() => import('./XPlugin')`), which webkit cannot reliably resolve under\n// vite-dev: the dynamic-import promise can settle with a partially-evaluated\n// namespace, throwing `ReferenceError: Cannot access 'default' before\n// initialization` from the loader's `mod.default` access. Storybook runs\n// inside `storybook dev` (vite-dev) and is currently the only host that hits\n// this. Production hosts (composer-app via `vite preview`) keep using the\n// lazy `.` exports and their associated code splitting.\n//\n// Use these `/testing` entrypoints from any storybook `withPluginManager`\n// setup. The single-line `export * from './XPlugin'` re-exports avoid the\n// dynamic-import path entirely — see e.g. `plugin-attention/src/testing.ts`.\nimport { AttentionPlugin } from '@dxos/plugin-attention/testing';\nimport { GraphPlugin } from '@dxos/plugin-graph/testing';\nimport { SettingsPlugin } from '@dxos/plugin-settings/testing';\nimport { ThemePlugin } from '@dxos/plugin-theme/testing';\nimport { defaultTx } from '@dxos/react-ui';\n\n/**\n * Core plugins for testing/storybook environments.\n * NOTE: Does not include SpacePlugin to avoid circular dependencies.\n * Import SpacePlugin directly in your stories if needed.\n */\nexport const corePlugins = (): Plugin.Plugin[] => [\n AttentionPlugin(),\n GraphPlugin(),\n ProcessManagerPlugin(),\n SettingsPlugin(),\n ThemePlugin({ tx: defaultTx }),\n];\n"],"mappings":";;;;;;;;;;;;AA6BA,IAAa,oBAAqC;CAChD,gBAAgB;CAChB,YAAY;CACZ,qBAAqB;CACrB,eAAe;CACf,YAAY,EAAE,IAAI,UAAU,CAAC;AAC/B"}
1
+ {"version":3,"file":"core.mjs","names":[],"sources":["../../src/core.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ProcessManagerPlugin } from '@dxos/app-framework';\nimport type * as Plugin from '@dxos/app-framework/Plugin';\n// `/testing` entrypoints re-export the plugin eagerly (without `Plugin.lazy`).\n// The default `.` and `/plugin` exports wrap each plugin in a lazy stub\n// (`() => import('./XPlugin')`), which webkit cannot reliably resolve under\n// vite-dev: the dynamic-import promise can settle with a partially-evaluated\n// namespace, throwing `ReferenceError: Cannot access 'default' before\n// initialization` from the loader's `mod.default` access. Storybook runs\n// inside `storybook dev` (vite-dev) and is currently the only host that hits\n// this. Production hosts (composer-app via `vite preview`) keep using the\n// lazy `.` exports and their associated code splitting.\n//\n// Use these `/testing` entrypoints from any storybook `withPluginManager`\n// setup. The single-line `export * from './XPlugin'` re-exports avoid the\n// dynamic-import path entirely — see e.g. `plugin-attention/src/testing.ts`.\nimport { AttentionPlugin } from '@dxos/plugin-attention/testing';\nimport { GraphPlugin } from '@dxos/plugin-graph/testing';\nimport { SettingsPlugin } from '@dxos/plugin-settings/testing';\nimport { ThemePlugin } from '@dxos/plugin-theme/testing';\nimport { defaultTx } from '@dxos/react-ui';\n\n/**\n * Core plugins for testing/storybook environments.\n * NOTE: Does not include SpacePlugin to avoid circular dependencies.\n * Import SpacePlugin directly in your stories if needed.\n */\nexport const corePlugins = (): Plugin.Plugin[] => [\n AttentionPlugin(),\n GraphPlugin(),\n ProcessManagerPlugin(),\n SettingsPlugin(),\n ThemePlugin({ tx: defaultTx }),\n];\n"],"mappings":";;;;;;;;;;;;AA8BA,IAAa,oBAAqC;CAChD,gBAAgB;CAChB,YAAY;CACZ,qBAAqB;CACrB,eAAe;CACf,YAAY,EAAE,IAAI,UAAU,CAAC;AAC/B"}
@@ -2,7 +2,6 @@ import { ProcessManagerPlugin } from "@dxos/app-framework";
2
2
  import { AttentionPlugin } from "@dxos/plugin-attention/testing";
3
3
  import { GraphPlugin } from "@dxos/plugin-graph/testing";
4
4
  import { SettingsPlugin } from "@dxos/plugin-settings/testing";
5
- import { AppActivationEvents } from "@dxos/app-toolkit";
6
5
  import { createTestApp } from "@dxos/app-framework/testing";
7
6
  //#region src/harness.ts
8
7
  /**
@@ -36,7 +35,6 @@ var createComposerTestApp = async (opts = {}) => {
36
35
  core.push(ThemePlugin({ tx: defaultTx }));
37
36
  }
38
37
  return createTestApp({
39
- setupEvents: [AppActivationEvents.SetupSettings],
40
38
  ...rest,
41
39
  plugins: [...core, ...plugins]
42
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"harness.mjs","names":[],"sources":["../../src/harness.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { type Plugin, ProcessManagerPlugin } from '@dxos/app-framework';\nimport { type TestAppOptions, type TestHarness, createTestApp } from '@dxos/app-framework/testing';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\nimport { AttentionPlugin } from '@dxos/plugin-attention/testing';\nimport { GraphPlugin } from '@dxos/plugin-graph/testing';\nimport { SettingsPlugin } from '@dxos/plugin-settings/testing';\n\nexport type ComposerTestAppOptions = Omit<TestAppOptions, 'plugins'> & {\n /** Plugins to register in addition to the Composer core plugins. */\n plugins?: Plugin.Plugin[];\n /**\n * Whether to include `ThemePlugin` in the core plugin set.\n * Defaults to `false` — `ThemePlugin` requires a browser DOM and breaks Node-only tests.\n * Set to `true` (with jsdom/happy-dom) when rendering React surfaces.\n */\n theme?: boolean;\n};\n\n/**\n * Headless core plugins for the test harness — the subset of `corePlugins()`\n * that can be activated without a browser DOM.\n */\nconst headlessCorePlugins = (): Plugin.Plugin[] => [\n AttentionPlugin(),\n GraphPlugin(),\n ProcessManagerPlugin(),\n SettingsPlugin(),\n];\n\n/**\n * Creates a TestHarness pre-loaded with the Composer core plugins\n * (Attention, Graph, ProcessManager, Settings, optionally Theme).\n *\n * For a ClientPlugin-backed harness, pass `ClientPlugin({ ... })` via `plugins`.\n *\n * @idiom org.dxos.plugin-testing.pluginModuleActivation\n * applies: Writing a basic activation smoke-test for any Composer plugin\n * instead-of: Manually inspecting PluginManager internals or relying on e2e tests for activation checks\n * uses: {@link createComposerTestApp}, {@link AppActivationEvents}\n * related: org.dxos.app-framework.testing.operationCapture\n */\nexport const createComposerTestApp = async (opts: ComposerTestAppOptions = {}): Promise<TestHarness> => {\n const { plugins = [], theme = false, ...rest } = opts;\n const core = headlessCorePlugins();\n if (theme) {\n const { ThemePlugin } = await import('@dxos/plugin-theme/testing');\n const { defaultTx } = await import('@dxos/react-ui');\n core.push(ThemePlugin({ tx: defaultTx }));\n }\n return createTestApp({\n // Composer always fires SetupSettings before Startup so that settings modules\n // activate before graph builders (which use allOf(SetupSettings, SetupAppGraph)).\n setupEvents: [AppActivationEvents.SetupSettings],\n ...rest,\n plugins: [...core, ...plugins],\n });\n};\n"],"mappings":";;;;;;;;;;;AA0BA,IAAM,4BAA6C;CACjD,gBAAgB;CAChB,YAAY;CACZ,qBAAqB;CACrB,eAAe;AACjB;;;;;;;;;;;;;AAcA,IAAa,wBAAwB,OAAO,OAA+B,CAAC,MAA4B;CACtG,MAAM,EAAE,UAAU,CAAC,GAAG,QAAQ,OAAO,GAAG,SAAS;CACjD,MAAM,OAAO,oBAAoB;CACjC,IAAI,OAAO;EACT,MAAM,EAAE,gBAAgB,MAAM,OAAO;EACrC,MAAM,EAAE,cAAc,MAAM,OAAO;EACnC,KAAK,KAAK,YAAY,EAAE,IAAI,UAAU,CAAC,CAAC;CAC1C;CACA,OAAO,cAAc;EAGnB,aAAa,CAAC,oBAAoB,aAAa;EAC/C,GAAG;EACH,SAAS,CAAC,GAAG,MAAM,GAAG,OAAO;CAC/B,CAAC;AACH"}
1
+ {"version":3,"file":"harness.mjs","names":[],"sources":["../../src/harness.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { ProcessManagerPlugin } from '@dxos/app-framework';\nimport type * as Plugin from '@dxos/app-framework/Plugin';\nimport { type TestAppOptions, type TestHarness, createTestApp } from '@dxos/app-framework/testing';\nimport { AttentionPlugin } from '@dxos/plugin-attention/testing';\nimport { GraphPlugin } from '@dxos/plugin-graph/testing';\nimport { SettingsPlugin } from '@dxos/plugin-settings/testing';\n\nexport type ComposerTestAppOptions = Omit<TestAppOptions, 'plugins'> & {\n /** Plugins to register in addition to the Composer core plugins. */\n plugins?: Plugin.Plugin[];\n /**\n * Whether to include `ThemePlugin` in the core plugin set.\n * Defaults to `false` — `ThemePlugin` requires a browser DOM and breaks Node-only tests.\n * Set to `true` (with jsdom/happy-dom) when rendering React surfaces.\n */\n theme?: boolean;\n};\n\n/**\n * Headless core plugins for the test harness — the subset of `corePlugins()`\n * that can be activated without a browser DOM.\n */\nconst headlessCorePlugins = (): Plugin.Plugin[] => [\n AttentionPlugin(),\n GraphPlugin(),\n ProcessManagerPlugin(),\n SettingsPlugin(),\n];\n\n/**\n * Creates a TestHarness pre-loaded with the Composer core plugins\n * (Attention, Graph, ProcessManager, Settings, optionally Theme).\n *\n * For a ClientPlugin-backed harness, pass `ClientPlugin({ ... })` via `plugins`.\n *\n * @idiom org.dxos.plugin-testing.pluginModuleActivation\n * applies: Writing a basic activation smoke-test for any Composer plugin\n * instead-of: Manually inspecting PluginManager internals or relying on e2e tests for activation checks\n * uses: {@link createComposerTestApp}, {@link AppActivationEvents}\n * related: org.dxos.app-framework.testing.operationCapture\n */\nexport const createComposerTestApp = async (opts: ComposerTestAppOptions = {}): Promise<TestHarness> => {\n const { plugins = [], theme = false, ...rest } = opts;\n const core = headlessCorePlugins();\n if (theme) {\n const { ThemePlugin } = await import('@dxos/plugin-theme/testing');\n const { defaultTx } = await import('@dxos/react-ui');\n core.push(ThemePlugin({ tx: defaultTx }));\n }\n return createTestApp({\n ...rest,\n plugins: [...core, ...plugins],\n });\n};\n"],"mappings":";;;;;;;;;;AA0BA,IAAM,4BAA6C;CACjD,gBAAgB;CAChB,YAAY;CACZ,qBAAqB;CACrB,eAAe;AACjB;;;;;;;;;;;;;AAcA,IAAa,wBAAwB,OAAO,OAA+B,CAAC,MAA4B;CACtG,MAAM,EAAE,UAAU,CAAC,GAAG,QAAQ,OAAO,GAAG,SAAS;CACjD,MAAM,OAAO,oBAAoB;CACjC,IAAI,OAAO;EACT,MAAM,EAAE,gBAAgB,MAAM,OAAO;EACrC,MAAM,EAAE,cAAc,MAAM,OAAO;EACnC,KAAK,KAAK,YAAY,EAAE,IAAI,UAAU,CAAC,CAAC;CAC1C;CACA,OAAO,cAAc;EACnB,GAAG;EACH,SAAS,CAAC,GAAG,MAAM,GAAG,OAAO;CAC/B,CAAC;AACH"}
@@ -1,7 +1,7 @@
1
- import { n as StorybookCapabilities_exports } from "./chunk-types.mjs";
2
1
  import { corePlugins } from "./core.mjs";
3
2
  import { t as meta } from "./chunk-meta.mjs";
4
3
  import { StorybookPlugin } from "./StorybookPlugin.mjs";
4
+ import { t as StorybookCapabilities_exports } from "./StorybookCapabilities.mjs";
5
5
  //#region src/corpus/sample-messages.ts
6
6
  /**
7
7
  * ~18 realistic sample messages spread across five topics (project, finance,
@@ -1,6 +1,18 @@
1
- import { OperationHandlerSet } from "@dxos/compute";
1
+ import * as LayoutOperation from "@dxos/app-toolkit/LayoutOperation";
2
+ import * as Operation from "@dxos/compute/Operation";
3
+ import * as OperationHandlerSet from "@dxos/compute/OperationHandlerSet";
2
4
  //#region src/operations/index.ts
3
- var TestingOperationHandlerSet = OperationHandlerSet.lazy(() => import("./chunk-add-toast.mjs"), () => import("./chunk-close.mjs"), () => import("./chunk-open.mjs"), () => import("./chunk-scroll-into-view.mjs"), () => import("./chunk-switch-workspace.mjs"), () => import("./chunk-update-complementary.mjs"), () => import("./chunk-update-dialog.mjs"), () => import("./chunk-update-popover.mjs"), () => import("./chunk-update-sidebar.mjs"));
5
+ var TestingOperationHandlerSet = OperationHandlerSet.lazy([
6
+ LayoutOperation.AddToast.pipe(Operation.lazyHandler(() => import("./chunk-add-toast.mjs"))),
7
+ LayoutOperation.Close.pipe(Operation.lazyHandler(() => import("./chunk-close.mjs"))),
8
+ LayoutOperation.Open.pipe(Operation.lazyHandler(() => import("./chunk-open.mjs"))),
9
+ LayoutOperation.ScrollIntoView.pipe(Operation.lazyHandler(() => import("./chunk-scroll-into-view.mjs"))),
10
+ LayoutOperation.SwitchWorkspace.pipe(Operation.lazyHandler(() => import("./chunk-switch-workspace.mjs"))),
11
+ LayoutOperation.UpdateComplementary.pipe(Operation.lazyHandler(() => import("./chunk-update-complementary.mjs"))),
12
+ LayoutOperation.UpdateDialog.pipe(Operation.lazyHandler(() => import("./chunk-update-dialog.mjs"))),
13
+ LayoutOperation.UpdatePopover.pipe(Operation.lazyHandler(() => import("./chunk-update-popover.mjs"))),
14
+ LayoutOperation.UpdateSidebar.pipe(Operation.lazyHandler(() => import("./chunk-update-sidebar.mjs")))
15
+ ]);
4
16
  //#endregion
5
17
  export { TestingOperationHandlerSet };
6
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"operations.mjs","names":[],"sources":["../../src/operations/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const TestingOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./add-toast'),\n () => import('./close'),\n () => import('./open'),\n () => import('./scroll-into-view'),\n () => import('./switch-workspace'),\n () => import('./update-complementary'),\n () => import('./update-dialog'),\n () => import('./update-popover'),\n () => import('./update-sidebar'),\n);\n"],"mappings":";;AAMA,IAAa,6BAA6B,oBAAoB,WACtD,OAAO,gCACP,OAAO,4BACP,OAAO,2BACP,OAAO,uCACP,OAAO,uCACP,OAAO,2CACP,OAAO,oCACP,OAAO,qCACP,OAAO,6BACf"}
1
+ {"version":3,"file":"operations.mjs","names":[],"sources":["../../src/operations/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as LayoutOperation from '@dxos/app-toolkit/LayoutOperation';\nimport * as Operation from '@dxos/compute/Operation';\nimport * as OperationHandlerSet from '@dxos/compute/OperationHandlerSet';\n\nexport const TestingOperationHandlerSet = OperationHandlerSet.lazy([\n LayoutOperation.AddToast.pipe(Operation.lazyHandler(() => import('./add-toast'))),\n LayoutOperation.Close.pipe(Operation.lazyHandler(() => import('./close'))),\n LayoutOperation.Open.pipe(Operation.lazyHandler(() => import('./open'))),\n LayoutOperation.ScrollIntoView.pipe(Operation.lazyHandler(() => import('./scroll-into-view'))),\n LayoutOperation.SwitchWorkspace.pipe(Operation.lazyHandler(() => import('./switch-workspace'))),\n LayoutOperation.UpdateComplementary.pipe(Operation.lazyHandler(() => import('./update-complementary'))),\n LayoutOperation.UpdateDialog.pipe(Operation.lazyHandler(() => import('./update-dialog'))),\n LayoutOperation.UpdatePopover.pipe(Operation.lazyHandler(() => import('./update-popover'))),\n LayoutOperation.UpdateSidebar.pipe(Operation.lazyHandler(() => import('./update-sidebar'))),\n]);\n"],"mappings":";;;;AAQA,IAAa,6BAA6B,oBAAoB,KAAK;CACjE,gBAAgB,SAAS,KAAK,UAAU,kBAAkB,OAAO,wBAAc,CAAC;CAChF,gBAAgB,MAAM,KAAK,UAAU,kBAAkB,OAAO,oBAAU,CAAC;CACzE,gBAAgB,KAAK,KAAK,UAAU,kBAAkB,OAAO,mBAAS,CAAC;CACvE,gBAAgB,eAAe,KAAK,UAAU,kBAAkB,OAAO,+BAAqB,CAAC;CAC7F,gBAAgB,gBAAgB,KAAK,UAAU,kBAAkB,OAAO,+BAAqB,CAAC;CAC9F,gBAAgB,oBAAoB,KAAK,UAAU,kBAAkB,OAAO,mCAAyB,CAAC;CACtG,gBAAgB,aAAa,KAAK,UAAU,kBAAkB,OAAO,4BAAkB,CAAC;CACxF,gBAAgB,cAAc,KAAK,UAAU,kBAAkB,OAAO,6BAAmB,CAAC;CAC1F,gBAAgB,cAAc,KAAK,UAAU,kBAAkB,OAAO,6BAAmB,CAAC;AAC5F,CAAC"}