@cyann/dash-lab 0.0.0-stage → 0.1.0

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 (96) hide show
  1. package/AGENTS.md +138 -0
  2. package/CHANGELOG.md +48 -0
  3. package/CONTRIBUTING.md +94 -0
  4. package/LICENSE +21 -0
  5. package/README.md +154 -2
  6. package/THIRD_PARTY_NOTICES.md +31 -0
  7. package/dist/commands/CommandContext.d.ts +19 -0
  8. package/dist/commands/CommandContext.d.ts.map +1 -0
  9. package/dist/commands/CommandPalette.d.ts +10 -0
  10. package/dist/commands/CommandPalette.d.ts.map +1 -0
  11. package/dist/commands/CommandProvider.d.ts +12 -0
  12. package/dist/commands/CommandProvider.d.ts.map +1 -0
  13. package/dist/commands/CommandRegistry.d.ts +40 -0
  14. package/dist/commands/CommandRegistry.d.ts.map +1 -0
  15. package/dist/commands/searchCommands.d.ts +3 -0
  16. package/dist/commands/searchCommands.d.ts.map +1 -0
  17. package/dist/commands/shortcuts.d.ts +7 -0
  18. package/dist/commands/shortcuts.d.ts.map +1 -0
  19. package/dist/dash-lab.css +2 -0
  20. package/dist/i18n/I18nProvider.d.ts +20 -0
  21. package/dist/i18n/I18nProvider.d.ts.map +1 -0
  22. package/dist/i18n/i18nStore.d.ts +31 -0
  23. package/dist/i18n/i18nStore.d.ts.map +1 -0
  24. package/dist/i18n/messages.d.ts +3 -0
  25. package/dist/i18n/messages.d.ts.map +1 -0
  26. package/dist/index.d.ts +32 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +2561 -0
  29. package/dist/layout/DockWorkspace.d.ts +7 -0
  30. package/dist/layout/DockWorkspace.d.ts.map +1 -0
  31. package/dist/layout/LayoutControls.d.ts +5 -0
  32. package/dist/layout/LayoutControls.d.ts.map +1 -0
  33. package/dist/layout/Workbench.d.ts +40 -0
  34. package/dist/layout/Workbench.d.ts.map +1 -0
  35. package/dist/layout/layoutPersistence.d.ts +22 -0
  36. package/dist/layout/layoutPersistence.d.ts.map +1 -0
  37. package/dist/layout/layoutStore.d.ts +13 -0
  38. package/dist/layout/layoutStore.d.ts.map +1 -0
  39. package/dist/layout/panels.d.ts +21 -0
  40. package/dist/layout/panels.d.ts.map +1 -0
  41. package/dist/layout/useLayoutManagement.d.ts +21 -0
  42. package/dist/layout/useLayoutManagement.d.ts.map +1 -0
  43. package/dist/layout/useWorkbenchCommands.d.ts +14 -0
  44. package/dist/layout/useWorkbenchCommands.d.ts.map +1 -0
  45. package/dist/library.d.ts +3 -0
  46. package/dist/library.d.ts.map +1 -0
  47. package/dist/notifications/NotificationButton.d.ts +3 -0
  48. package/dist/notifications/NotificationButton.d.ts.map +1 -0
  49. package/dist/notifications/NotificationContext.d.ts +5 -0
  50. package/dist/notifications/NotificationContext.d.ts.map +1 -0
  51. package/dist/notifications/NotificationProvider.d.ts +11 -0
  52. package/dist/notifications/NotificationProvider.d.ts.map +1 -0
  53. package/dist/notifications/NotificationToasts.d.ts +2 -0
  54. package/dist/notifications/NotificationToasts.d.ts.map +1 -0
  55. package/dist/notifications/NotificationViewport.d.ts +2 -0
  56. package/dist/notifications/NotificationViewport.d.ts.map +1 -0
  57. package/dist/notifications/notificationStore.d.ts +56 -0
  58. package/dist/notifications/notificationStore.d.ts.map +1 -0
  59. package/dist/notifications/preferences.d.ts +10 -0
  60. package/dist/notifications/preferences.d.ts.map +1 -0
  61. package/dist/overlays/dialogMotion.d.ts +3 -0
  62. package/dist/overlays/dialogMotion.d.ts.map +1 -0
  63. package/dist/overlays/useDialogDismiss.d.ts +9 -0
  64. package/dist/overlays/useDialogDismiss.d.ts.map +1 -0
  65. package/dist/plugins/PluginContext.d.ts +5 -0
  66. package/dist/plugins/PluginContext.d.ts.map +1 -0
  67. package/dist/plugins/PluginRegistry.d.ts +98 -0
  68. package/dist/plugins/PluginRegistry.d.ts.map +1 -0
  69. package/dist/plugins/pluginState.d.ts +19 -0
  70. package/dist/plugins/pluginState.d.ts.map +1 -0
  71. package/dist/settings/ApplicationMenu.d.ts +2 -0
  72. package/dist/settings/ApplicationMenu.d.ts.map +1 -0
  73. package/dist/settings/SettingsDialog.d.ts +12 -0
  74. package/dist/settings/SettingsDialog.d.ts.map +1 -0
  75. package/dist/settings/configuration.d.ts +36 -0
  76. package/dist/settings/configuration.d.ts.map +1 -0
  77. package/dist/settings/useWorkbenchConfiguration.d.ts +15 -0
  78. package/dist/settings/useWorkbenchConfiguration.d.ts.map +1 -0
  79. package/dist/theme/ThemeProvider.d.ts +17 -0
  80. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  81. package/dist/theme/ThemeToggle.d.ts +3 -0
  82. package/dist/theme/ThemeToggle.d.ts.map +1 -0
  83. package/dist/theme/palettes.d.ts +153 -0
  84. package/dist/theme/palettes.d.ts.map +1 -0
  85. package/dist/theme/themeStore.d.ts +31 -0
  86. package/dist/theme/themeStore.d.ts.map +1 -0
  87. package/docs/api.md +171 -0
  88. package/docs/application-guide.md +332 -0
  89. package/docs/architecture.md +59 -0
  90. package/docs/decisions/001-library-and-demo.md +9 -0
  91. package/docs/decisions/002-local-plugins-and-languages.md +17 -0
  92. package/docs/decisions/003-plugin-state-checkpoints.md +11 -0
  93. package/docs/dependencies.md +33 -0
  94. package/docs/validation.md +126 -0
  95. package/package.json +97 -4
  96. package/scripts/install-hooks.mjs +17 -0
@@ -0,0 +1,7 @@
1
+ import type { DockviewApi } from 'dockview-react';
2
+ import type { WorkbenchPanel } from './panels.js';
3
+ export declare function DockWorkspace({ panels, onReady }: {
4
+ panels: readonly WorkbenchPanel[];
5
+ onReady?: ((api: DockviewApi) => void) | undefined;
6
+ }): import("react").JSX.Element;
7
+ //# sourceMappingURL=DockWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockWorkspace.d.ts","sourceRoot":"","sources":["../../src/layout/DockWorkspace.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAiD,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CAAE,+BAmD3I"}
@@ -0,0 +1,5 @@
1
+ import type { useLayoutManagement } from './useLayoutManagement.js';
2
+ export declare function LayoutControls({ layout }: {
3
+ layout: ReturnType<typeof useLayoutManagement>;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=LayoutControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutControls.d.ts","sourceRoot":"","sources":["../../src/layout/LayoutControls.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAmBpE,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA;CAAE,+BAmC5F"}
@@ -0,0 +1,40 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { DockviewApi } from 'dockview-react';
3
+ import type { WorkbenchPanel } from './panels.js';
4
+ import type { PluginRegistry } from '../plugins/PluginRegistry.js';
5
+ /** Properties of the reusable application workbench. */
6
+ export interface WorkbenchProps {
7
+ /** Accessible name of this application. */
8
+ title: string;
9
+ /** Optional text shown next to the application title. */
10
+ subtitle?: string;
11
+ /** Optional application mark displayed before the title. */
12
+ logo?: ReactNode;
13
+ /** Application actions displayed in the header. */
14
+ headerActions?: ReactNode;
15
+ /** Application controls displayed before the workbench controls. */
16
+ controlBar?: ReactNode;
17
+ /** Application monitoring information displayed below the controls. */
18
+ monitoringBar?: ReactNode;
19
+ /** Application footer content. */
20
+ footer?: ReactNode;
21
+ /** Initial panel definitions; keep this collection stable for the lifetime of the workbench. */
22
+ panels?: readonly WorkbenchPanel[];
23
+ /** Startup plugin registry; contributions are sealed on mount. Keep stable until the workbench is unmounted. */
24
+ plugins?: PluginRegistry;
25
+ /** Called once after the initial panels and any compatible saved layout are ready. */
26
+ onWorkspaceReady?: (api: DockviewApi) => void;
27
+ /** Whether the header is shown on first mount. Defaults to true. */
28
+ initialHeaderVisible?: boolean;
29
+ /** Whether the footer is shown on first mount. Defaults to true. */
30
+ initialFooterVisible?: boolean;
31
+ /** Browser storage key for the automatically saved custom layout. Defaults to a title-based key; false keeps it in memory. Keep stable while mounted. */
32
+ layoutStorageKey?: string | false;
33
+ /** Storage key for automatically saved preferences. Defaults to a title-based key; false keeps preferences in memory. Keep stable while mounted. */
34
+ preferencesStorageKey?: string | false;
35
+ /** Fallback content displayed when no panels are supplied. */
36
+ children?: ReactNode;
37
+ }
38
+ /** Composes application chrome and a dockable workspace without owning application content. */
39
+ export declare function Workbench(props: WorkbenchProps): import("react").JSX.Element;
40
+ //# sourceMappingURL=Workbench.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Workbench.d.ts","sourceRoot":"","sources":["../../src/layout/Workbench.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAiBlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mDAAmD;IACnD,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,oEAAoE;IACpE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,uEAAuE;IACvE,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,kCAAkC;IAClC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,gGAAgG;IAChG,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,gHAAgH;IAChH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yJAAyJ;IACzJ,gBAAgB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC,oJAAoJ;IACpJ,qBAAqB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAmBD,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAU9C"}
@@ -0,0 +1,22 @@
1
+ import type { SerializedDockview } from 'dockview-react';
2
+ import type { WorkbenchPanel } from './panels.js';
3
+ import type { PluginStateSnapshot } from '../plugins/pluginState.js';
4
+ /** Built-in arrangements for the application's initial panels. */
5
+ export type LayoutPreset = 'default' | 'columns' | 'rows';
6
+ /** Versioned native workspace checkpoint, including explicitly registered plugin state. */
7
+ export interface SavedLayout {
8
+ /** Checkpoint schema version. */
9
+ version: 1;
10
+ /** Dockview's serialized arrangement. */
11
+ layout: SerializedDockview;
12
+ /** Header visibility outside Focus mode. */
13
+ headerVisible: boolean;
14
+ /** Footer visibility outside Focus mode. */
15
+ footerVisible: boolean;
16
+ /** Opted-in plugin state; absent in legacy layout checkpoints. */
17
+ plugins?: PluginStateSnapshot;
18
+ }
19
+ export declare function validateLayout(value: unknown, panels: readonly WorkbenchPanel[]): asserts value is SerializedDockview;
20
+ export declare function decodeLayout(text: string, panels: readonly WorkbenchPanel[]): SavedLayout;
21
+ export declare function presetLayout(baseline: SerializedDockview, preset: LayoutPreset, panels: readonly WorkbenchPanel[]): SerializedDockview;
22
+ //# sourceMappingURL=layoutPersistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutPersistence.d.ts","sourceRoot":"","sources":["../../src/layout/layoutPersistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,yCAAyC;IACzC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,4CAA4C;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,4CAA4C;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,kEAAkE;IAClE,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAMD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAwErH;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,WAAW,CAkBzF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,kBAAkB,CAsBtI"}
@@ -0,0 +1,13 @@
1
+ interface LayoutState {
2
+ headerVisible: boolean;
3
+ footerVisible: boolean;
4
+ focusMode: boolean;
5
+ toggleHeader: () => void;
6
+ toggleFooter: () => void;
7
+ toggleView: () => void;
8
+ toggleFocus: () => void;
9
+ setVisibility: (headerVisible: boolean, footerVisible: boolean) => void;
10
+ }
11
+ export declare function createLayoutStore(headerVisible?: boolean, footerVisible?: boolean): import("zustand").StoreApi<LayoutState>;
12
+ export {};
13
+ //# sourceMappingURL=layoutStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutStore.d.ts","sourceRoot":"","sources":["../../src/layout/layoutStore.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;CACzE;AAED,wBAAgB,iBAAiB,CAAC,aAAa,UAAO,EAAE,aAAa,UAAO,2CAY3E"}
@@ -0,0 +1,21 @@
1
+ import type { ComponentType } from 'react';
2
+ /** A panel supplied by an application; list reference panels before their dependants. */
3
+ export interface WorkbenchPanel {
4
+ /** Unique, nonempty identifier within this workbench. */
5
+ id: string;
6
+ /** Human-readable tab title. */
7
+ title: string;
8
+ /** React content rendered inside the docked panel. */
9
+ component: ComponentType;
10
+ /** Initial position relative to an earlier panel. */
11
+ position?: {
12
+ referencePanel: string;
13
+ direction: 'left' | 'right' | 'above' | 'below' | 'within';
14
+ };
15
+ /** Preferred initial panel width in pixels. */
16
+ initialWidth?: number;
17
+ /** Preferred initial panel height in pixels. */
18
+ initialHeight?: number;
19
+ }
20
+ export declare function validatePanels(panels: readonly WorkbenchPanel[]): void;
21
+ //# sourceMappingURL=panels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panels.d.ts","sourceRoot":"","sources":["../../src/layout/panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,SAAS,EAAE,aAAa,CAAC;IACzB,qDAAqD;IACrD,QAAQ,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;KAAE,CAAC;IAClG,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,QAa/D"}
@@ -0,0 +1,21 @@
1
+ import type { DockviewApi } from 'dockview-react';
2
+ import type { WorkbenchPanel } from './panels.js';
3
+ import type { createLayoutStore } from './layoutStore.js';
4
+ import type { LayoutPreset, SavedLayout } from './layoutPersistence.js';
5
+ import type { PluginStateHandler } from '../plugins/pluginState.js';
6
+ export interface LayoutFeedback {
7
+ message: string;
8
+ error: boolean;
9
+ }
10
+ export declare function useLayoutManagement(api: DockviewApi | null, panels: readonly WorkbenchPanel[], store: ReturnType<typeof createLayoutStore>, storageKey: string | false, onReady: ((api: DockviewApi) => void) | undefined, stateHandlers: Readonly<Record<string, PluginStateHandler>>): {
11
+ save: (silent?: boolean) => boolean;
12
+ restore: () => boolean;
13
+ reset: () => boolean;
14
+ selectPreset: (preset: LayoutPreset) => boolean;
15
+ capture: () => SavedLayout | null;
16
+ apply: (snapshot: SavedLayout) => boolean;
17
+ hasSaved: boolean;
18
+ feedback: LayoutFeedback | null;
19
+ ready: boolean;
20
+ };
21
+ //# sourceMappingURL=useLayoutManagement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLayoutManagement.d.ts","sourceRoot":"","sources":["../../src/layout/useLayoutManagement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,GAAG,IAAI,EACvB,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,KAAK,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,EAC3C,UAAU,EAAE,MAAM,GAAG,KAAK,EAC1B,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,EACjD,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;;;;2BAgOhD,YAAY;mBA1JS,WAAW,GAAG,IAAI;sBArDrC,WAAW;;;;EAiPzB"}
@@ -0,0 +1,14 @@
1
+ import type { KeyboardEvent as ReactKeyboardEvent } from 'react';
2
+ import type { createLayoutStore } from './layoutStore.js';
3
+ import type { useLayoutManagement } from './useLayoutManagement.js';
4
+ interface ConfigurationActions {
5
+ openSettings: () => void;
6
+ openPreferences: () => void;
7
+ importConfiguration: () => void;
8
+ exportConfiguration: () => void;
9
+ ready: boolean;
10
+ busy: boolean;
11
+ }
12
+ export declare function useWorkbenchCommands(store: ReturnType<typeof createLayoutStore>, layout: ReturnType<typeof useLayoutManagement>, openPalette: () => void, configuration: ConfigurationActions): (event: ReactKeyboardEvent<HTMLElement>) => void;
13
+ export {};
14
+ //# sourceMappingURL=useWorkbenchCommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWorkbenchCommands.d.ts","sourceRoot":"","sources":["../../src/layout/useWorkbenchCommands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAKjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,oBAAoB;IAC5B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AACD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,EAC3C,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC9C,WAAW,EAAE,MAAM,IAAI,EACvB,aAAa,EAAE,oBAAoB,WAoGzB,kBAAkB,CAAC,WAAW,CAAC,UAuB1C"}
@@ -0,0 +1,3 @@
1
+ import './styles.css';
2
+ export * from './index.js';
3
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Opens the nearest notification history and displays its unread count. */
2
+ export declare function NotificationButton(): import("react").JSX.Element;
3
+ //# sourceMappingURL=NotificationButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationButton.d.ts","sourceRoot":"","sources":["../../src/notifications/NotificationButton.tsx"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,wBAAgB,kBAAkB,gCAuBjC"}
@@ -0,0 +1,5 @@
1
+ import type { NotificationCenterState } from './notificationStore.js';
2
+ export declare const NotificationContext: import("react").Context<import("zustand").StoreApi<NotificationCenterState> | null>;
3
+ /** Reads the nearest center; requires NotificationProvider or a Workbench ancestor. */
4
+ export declare function useNotifications(): NotificationCenterState;
5
+ //# sourceMappingURL=NotificationContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationContext.d.ts","sourceRoot":"","sources":["../../src/notifications/NotificationContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA2B,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAE/F,eAAO,MAAM,mBAAmB,qFAAyE,CAAC;AAE1G,uFAAuF;AACvF,wBAAgB,gBAAgB,IAAI,uBAAuB,CAM1D"}
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from 'react';
2
+ /** Options for a session notification center. */
3
+ export interface NotificationProviderProps {
4
+ /** Application content that can publish and inspect notifications. */
5
+ children: ReactNode;
6
+ /** Maximum retained entries. Defaults to 100; keep stable while mounted. */
7
+ historyLimit?: number;
8
+ }
9
+ /** Provides an isolated center, toast stack, and accessible history dialog. */
10
+ export declare function NotificationProvider({ children, historyLimit }: NotificationProviderProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=NotificationProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationProvider.d.ts","sourceRoot":"","sources":["../../src/notifications/NotificationProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,iDAAiD;AACjD,MAAM,WAAW,yBAAyB;IACxC,sEAAsE;IACtE,QAAQ,EAAE,SAAS,CAAC;IACpB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,YAAkB,EAAE,EAAE,yBAAyB,+BAS/F"}
@@ -0,0 +1,2 @@
1
+ export declare function NotificationToasts(): import("react").JSX.Element;
2
+ //# sourceMappingURL=NotificationToasts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationToasts.d.ts","sourceRoot":"","sources":["../../src/notifications/NotificationToasts.tsx"],"names":[],"mappings":"AAiEA,wBAAgB,kBAAkB,gCAqBjC"}
@@ -0,0 +1,2 @@
1
+ export declare function NotificationViewport(): import("react").JSX.Element;
2
+ //# sourceMappingURL=NotificationViewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationViewport.d.ts","sourceRoot":"","sources":["../../src/notifications/NotificationViewport.tsx"],"names":[],"mappings":"AAOA,wBAAgB,oBAAoB,gCA4EnC"}
@@ -0,0 +1,56 @@
1
+ import type { NotificationPreferences } from './preferences.js';
2
+ /** Severity used by notifications and their accessible presentation. */
3
+ export type NotificationLevel = 'info' | 'success' | 'warning' | 'error';
4
+ /** Content of a new notification. */
5
+ export interface NotificationInput {
6
+ /** Short, nonempty message. */
7
+ title: string;
8
+ /** Optional supporting text, rendered as plain text. */
9
+ description?: string;
10
+ /** Defaults to info. */
11
+ level?: NotificationLevel;
12
+ /** Toast duration in milliseconds; zero keeps it visible. Errors default to zero, other levels use the popup preference (initially 5000). */
13
+ durationMs?: number;
14
+ }
15
+ /** A notification retained in the session history. */
16
+ export interface NotificationItem extends NotificationInput {
17
+ /** Identifier unique within this notification center. */
18
+ readonly id: string;
19
+ /** Creation time as milliseconds since the Unix epoch. */
20
+ readonly createdAt: number;
21
+ /** Whether the user has acknowledged this notification. */
22
+ readonly read: boolean;
23
+ /** Resolved severity. */
24
+ readonly level: NotificationLevel;
25
+ /** Resolved toast duration. */
26
+ readonly durationMs: number;
27
+ }
28
+ /** State and operations returned by useNotifications. */
29
+ export interface NotificationCenterState {
30
+ /** Preferences for new notifications. */
31
+ preferences: NotificationPreferences;
32
+ /** Validate and replace popup preferences; disabling popups also dismisses active toasts. */
33
+ setPreferences: (preferences: NotificationPreferences) => void;
34
+ /** Bounded session history, newest first. */
35
+ items: readonly NotificationItem[];
36
+ /** IDs of visible toasts, newest first. */
37
+ toasts: readonly string[];
38
+ /** Whether the history dialog is open. */
39
+ open: boolean;
40
+ /** Add a notification and return its ID. */
41
+ notify: (input: NotificationInput) => string;
42
+ /** Hide a toast while retaining its history and unread state. */
43
+ dismiss: (id: string) => void;
44
+ /** Acknowledge an entry. */
45
+ markRead: (id: string) => void;
46
+ /** Acknowledge all current entries. */
47
+ markAllRead: () => void;
48
+ /** Remove an entry and its toast. */
49
+ remove: (id: string) => void;
50
+ /** Remove all entries and toasts. */
51
+ clearHistory: () => void;
52
+ /** Open or close history. */
53
+ setOpen: (open: boolean) => void;
54
+ }
55
+ export declare function createNotificationStore(historyLimit?: number): import("zustand").StoreApi<NotificationCenterState>;
56
+ //# sourceMappingURL=notificationStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notificationStore.d.ts","sourceRoot":"","sources":["../../src/notifications/notificationStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzE,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,6IAA6I;IAC7I,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,yDAAyD;IACzD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,WAAW,EAAE,uBAAuB,CAAC;IACrC,6FAA6F;IAC7F,cAAc,EAAE,CAAC,WAAW,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC/D,6CAA6C;IAC7C,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,2CAA2C;IAC3C,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,4CAA4C;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC;IAC7C,iEAAiE;IACjE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,4BAA4B;IAC5B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,uCAAuC;IACvC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,qCAAqC;IACrC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,qCAAqC;IACrC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,6BAA6B;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,uBAAuB,CAAC,YAAY,SAAM,uDAyCzD"}
@@ -0,0 +1,10 @@
1
+ /** User choices for notification popups; history is always retained. */
2
+ export interface NotificationPreferences {
3
+ /** Whether new notifications display a toast. */
4
+ toastsEnabled: boolean;
5
+ /** Default non-error duration: whole seconds between 1000 and 30000 milliseconds. */
6
+ toastDurationMs: number;
7
+ }
8
+ export declare const defaultNotificationPreferences: NotificationPreferences;
9
+ export declare function validateNotificationPreferences(value: unknown): asserts value is NotificationPreferences;
10
+ //# sourceMappingURL=preferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/notifications/preferences.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,MAAM,WAAW,uBAAuB;IACtC,iDAAiD;IACjD,aAAa,EAAE,OAAO,CAAC;IACvB,qFAAqF;IACrF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,8BAA8B,EAAE,uBAAwE,CAAC;AAEtH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,uBAAuB,CAYxG"}
@@ -0,0 +1,3 @@
1
+ export declare function openDialog(dialog: HTMLDialogElement | null): void;
2
+ export declare function closeDialog(dialog: HTMLDialogElement | null): Promise<void>;
3
+ //# sourceMappingURL=dialogMotion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialogMotion.d.ts","sourceRoot":"","sources":["../../src/overlays/dialogMotion.ts"],"names":[],"mappings":"AA2BA,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAUjE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD3E"}
@@ -0,0 +1,9 @@
1
+ import type { KeyboardEvent, MouseEvent, PointerEvent, SyntheticEvent } from 'react';
2
+ export declare function useDialogDismiss(onDismiss: () => void): {
3
+ onCancel: (event: SyntheticEvent<HTMLDialogElement>) => void;
4
+ onKeyDown: (event: KeyboardEvent<HTMLDialogElement>) => void;
5
+ onPointerDown: (event: PointerEvent<HTMLDialogElement>) => void;
6
+ onPointerCancel: () => void;
7
+ onClick: (event: MouseEvent<HTMLDialogElement>) => void;
8
+ };
9
+ //# sourceMappingURL=useDialogDismiss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDialogDismiss.d.ts","sourceRoot":"","sources":["../../src/overlays/useDialogDismiss.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAQrF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,IAAI;sBAIhC,cAAc,CAAC,iBAAiB,CAAC;uBAIhC,aAAa,CAAC,iBAAiB,CAAC;2BAO5B,YAAY,CAAC,iBAAiB,CAAC;;qBAMrC,UAAU,CAAC,iBAAiB,CAAC;EAQjD"}
@@ -0,0 +1,5 @@
1
+ import type { PluginContributions } from './PluginRegistry.js';
2
+ export declare const emptyContributions: PluginContributions;
3
+ export declare const PluginContext: import("react").Context<PluginContributions>;
4
+ export declare function usePluginCommands(contributions: PluginContributions): void;
5
+ //# sourceMappingURL=PluginContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginContext.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginContext.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,kBAAkB,qBAA8B,CAAC;AAC9D,eAAO,MAAM,aAAa,8CAAyD,CAAC;AACpF,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,mBAAmB,QAyBnE"}
@@ -0,0 +1,98 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { CommandDefinition } from '../commands/CommandRegistry.js';
3
+ import type { WorkbenchPanel } from '../layout/panels.js';
4
+ import type { NotificationInput } from '../notifications/notificationStore.js';
5
+ import type { PluginStateHandler } from './pluginState.js';
6
+ /** Removes a startup registration or plugin. Unloading after mounting is unsupported. */
7
+ export type PluginDisposer = () => void;
8
+ /** Services available when a plugin command runs inside a workbench. */
9
+ export interface PluginCommandContext {
10
+ /** Publish a notification into the workbench's center. */
11
+ notify: (notification: NotificationInput) => string;
12
+ /** Run another registered command through normal availability and error handling. */
13
+ executeCommand: (id: string) => Promise<boolean>;
14
+ }
15
+ /** A command contributed at startup, receiving live workbench services when executed. */
16
+ export interface PluginCommand extends Omit<CommandDefinition, 'execute'> {
17
+ /** Run the action synchronously or asynchronously. */
18
+ execute: (context: PluginCommandContext) => void | Promise<void>;
19
+ }
20
+ /** An action displayed under the application's Plugins menu. */
21
+ export interface PluginMenu {
22
+ /** Unique menu contribution ID. */
23
+ id: string;
24
+ /** Visible label. */
25
+ title: string;
26
+ /** Command invoked when selected; may reference a built-in command. */
27
+ commandId: string;
28
+ }
29
+ /** A React component rendered in the footer or monitoring bar. */
30
+ export interface PluginItem {
31
+ /** Unique identifier within this contribution kind. */
32
+ id: string;
33
+ /** Component rendered inside the workbench's providers. */
34
+ component: ComponentType;
35
+ }
36
+ /** Scoped startup registration API. Each method returns an idempotent disposer. */
37
+ export interface PluginAPI {
38
+ /** Add a docked panel; plugin panels precede application panels. */
39
+ registerPanel: (panel: WorkbenchPanel) => PluginDisposer;
40
+ /** Add a command; workbench.* IDs are reserved. */
41
+ registerCommand: (command: PluginCommand) => PluginDisposer;
42
+ /** Add a command-backed menu action. */
43
+ registerMenu: (menu: PluginMenu) => PluginDisposer;
44
+ /** Add a footer component. */
45
+ registerStatusItem: (item: PluginItem) => PluginDisposer;
46
+ /** Add a monitoring-bar component. */
47
+ registerMonitoringItem: (item: PluginItem) => PluginDisposer;
48
+ /** Register one synchronous JSON state handler for this plugin; participates in layout checkpoints and configuration files. */
49
+ registerState: (handler: PluginStateHandler) => PluginDisposer;
50
+ }
51
+ /** A trusted plugin bundled from a local application directory. */
52
+ export interface WorkbenchPlugin {
53
+ /** Unique, nonempty plugin identifier. */
54
+ id: string;
55
+ /** Register contributions synchronously; optionally return resource cleanup for startup disposal. */
56
+ activate: (api: PluginAPI) => void | PluginDisposer;
57
+ }
58
+ /** Immutable contributions captured when a workbench mounts. */
59
+ export interface PluginContributions {
60
+ /** Registered plugin IDs in startup order. */
61
+ readonly pluginIds: readonly string[];
62
+ /** Docked panels in registration order. */
63
+ readonly panels: readonly WorkbenchPanel[];
64
+ /** Registered commands. */
65
+ readonly commands: readonly PluginCommand[];
66
+ /** Menu actions. */
67
+ readonly menus: readonly PluginMenu[];
68
+ /** Footer components. */
69
+ readonly statusItems: readonly PluginItem[];
70
+ /** Monitoring components. */
71
+ readonly monitoringItems: readonly PluginItem[];
72
+ /** Optional state participants keyed by plugin ID; callbacks remain live after sealing. */
73
+ readonly stateHandlers: Readonly<Record<string, PluginStateHandler>>;
74
+ }
75
+ /** Collects startup contributions transactionally, then freezes them for the mounted workbench. */
76
+ export declare class PluginRegistry {
77
+ private readonly plugins;
78
+ private readonly panels;
79
+ private readonly commands;
80
+ private readonly menus;
81
+ private readonly statusItems;
82
+ private readonly monitoringItems;
83
+ private readonly stateHandlers;
84
+ private readonly commandValidator;
85
+ private snapshot;
86
+ private activating;
87
+ private assertMutable;
88
+ private add;
89
+ /** Activate a local plugin; failures roll back every contribution from that activation. */
90
+ registerPlugin(plugin: WorkbenchPlugin): PluginDisposer;
91
+ /** Freeze contributions once; called automatically by Workbench. Later calls return the same snapshot. */
92
+ seal(): PluginContributions;
93
+ }
94
+ /** Register Vite's eager local-plugin modules in deterministic path order. No filesystem or network access occurs. */
95
+ export declare function registerLocalPlugins(modules: Record<string, {
96
+ default: WorkbenchPlugin;
97
+ }>): PluginRegistry;
98
+ //# sourceMappingURL=PluginRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginRegistry.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** JSON data accepted in a plugin checkpoint or configuration file. */
2
+ export type PluginStateValue = null | boolean | number | string | PluginStateValue[] | {
3
+ [key: string]: PluginStateValue;
4
+ };
5
+ /** Plugin-owned JSON data, keyed by the plugin's stable ID. */
6
+ export type PluginStateSnapshot = Record<string, PluginStateValue>;
7
+ /** Synchronous callbacks registered at startup; import must validate before updating the plugin's store. */
8
+ export interface PluginStateHandler {
9
+ /** Return JSON data. Include a plugin-specific version when the data format may evolve. */
10
+ exportState: () => unknown;
11
+ /** Validate untrusted JSON and replace live state without remounting panels. Return void; asynchronous imports are unsupported. */
12
+ importState: (state: unknown) => void;
13
+ }
14
+ type StateHandlers = Readonly<Record<string, PluginStateHandler>>;
15
+ export declare function copyPluginStates(value: unknown): PluginStateSnapshot;
16
+ export declare function capturePluginStates(handlers: StateHandlers): PluginStateSnapshot;
17
+ export declare function restorePluginStates(handlers: StateHandlers, snapshot: PluginStateSnapshot, apply: () => void): void;
18
+ export {};
19
+ //# sourceMappingURL=pluginState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginState.d.ts","sourceRoot":"","sources":["../../src/plugins/pluginState.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAE3H,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEnE,4GAA4G;AAC5G,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,mIAAmI;IACnI,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,KAAK,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAqBlE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAQpE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,mBAAmB,CAUhF;AAQD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,IAAI,QA+B5G"}
@@ -0,0 +1,2 @@
1
+ export declare function ApplicationMenu(): import("react").JSX.Element;
2
+ //# sourceMappingURL=ApplicationMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationMenu.d.ts","sourceRoot":"","sources":["../../src/settings/ApplicationMenu.tsx"],"names":[],"mappings":"AASA,wBAAgB,eAAe,gCAkG9B"}
@@ -0,0 +1,12 @@
1
+ import type { useWorkbenchConfiguration } from './useWorkbenchConfiguration.js';
2
+ import type { useLayoutManagement } from '../layout/useLayoutManagement.js';
3
+ import type { createLayoutStore } from '../layout/layoutStore.js';
4
+ export type SettingsPage = 'settings' | 'preferences';
5
+ export declare function SettingsDialog({ page, onClose, configuration, layout, store, }: {
6
+ page: SettingsPage | null;
7
+ onClose: () => void;
8
+ configuration: ReturnType<typeof useWorkbenchConfiguration>;
9
+ layout: ReturnType<typeof useLayoutManagement>;
10
+ store: ReturnType<typeof createLayoutStore>;
11
+ }): import("react").JSX.Element;
12
+ //# sourceMappingURL=SettingsDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsDialog.d.ts","sourceRoot":"","sources":["../../src/settings/SettingsDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,aAAa,CAAC;AACtD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,MAAM,EACN,KAAK,GACN,EAAE;IACD,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAC5D,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAC/C,KAAK,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;CAC7C,+BAmLA"}
@@ -0,0 +1,36 @@
1
+ import type { ThemeFamily, ThemeMode, MotionPreference } from '../theme/themeStore.js';
2
+ import type { NotificationPreferences } from '../notifications/preferences.js';
3
+ import type { SavedLayout } from '../layout/layoutPersistence.js';
4
+ import type { WorkbenchPanel } from '../layout/panels.js';
5
+ import type { PluginStateSnapshot } from '../plugins/pluginState.js';
6
+ /** Preferences persisted independently from custom layout checkpoints. */
7
+ export interface WorkbenchPreferences {
8
+ /** Registered language ID; absent in older version-1 files, which default to English. */
9
+ locale?: string;
10
+ /** Active color scheme. */
11
+ theme: ThemeMode;
12
+ /** Palette; absent in older version-1 files, which use azure. */
13
+ themeFamily?: ThemeFamily;
14
+ /** Animation preference. */
15
+ motion: MotionPreference;
16
+ /** Popup visibility and default duration. */
17
+ notifications: NotificationPreferences;
18
+ }
19
+ /** Portable configuration; includes opted-in plugin data and excludes notification history. */
20
+ export interface WorkbenchConfiguration {
21
+ /** Identifies a dash-lab configuration file. */
22
+ format: 'dash-lab';
23
+ /** Supported configuration schema version. */
24
+ version: 1;
25
+ /** Current native layout and chrome visibility; null for a workbench without panels. */
26
+ workspace: SavedLayout | null;
27
+ /** Application preferences. */
28
+ preferences: WorkbenchPreferences;
29
+ /** JSON state keyed by plugin ID; absent in legacy version-1 files. */
30
+ plugins?: PluginStateSnapshot;
31
+ }
32
+ export declare const configurationSizeLimit = 1000000;
33
+ export declare function validatePreferences(value: unknown): WorkbenchPreferences;
34
+ /** Validate a JSON configuration against the current application's panels before applying any changes. */
35
+ export declare function decodeConfiguration(text: string, panels: readonly WorkbenchPanel[]): WorkbenchConfiguration;
36
+ //# sourceMappingURL=configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/settings/configuration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,iEAAiE;IACjE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4BAA4B;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,6CAA6C;IAC7C,aAAa,EAAE,uBAAuB,CAAC;CACxC;AAED,+FAA+F;AAC/F,MAAM,WAAW,sBAAsB;IACrC,gDAAgD;IAChD,MAAM,EAAE,UAAU,CAAC;IACnB,8CAA8C;IAC9C,OAAO,EAAE,CAAC,CAAC;IACX,wFAAwF;IACxF,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B,+BAA+B;IAC/B,WAAW,EAAE,oBAAoB,CAAC;IAClC,uEAAuE;IACvE,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,eAAO,MAAM,sBAAsB,UAAY,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAsBxE;AAED,0GAA0G;AAC1G,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,sBAAsB,CAkB3G"}
@@ -0,0 +1,15 @@
1
+ import type { WorkbenchPanel } from '../layout/panels.js';
2
+ import type { useLayoutManagement } from '../layout/useLayoutManagement.js';
3
+ import type { WorkbenchPreferences } from './configuration.js';
4
+ import type { PluginStateHandler } from '../plugins/pluginState.js';
5
+ export declare function useWorkbenchConfiguration(layout: ReturnType<typeof useLayoutManagement>, panels: readonly WorkbenchPanel[], storageKey: string | false, stateHandlers: Readonly<Record<string, PluginStateHandler>>): {
6
+ preferences: WorkbenchPreferences;
7
+ savePreferences: (value: WorkbenchPreferences) => void;
8
+ importFile: (file: File) => Promise<void>;
9
+ chooseImport: () => void | undefined;
10
+ exportConfiguration: () => void;
11
+ input: import("react").RefObject<HTMLInputElement | null>;
12
+ busy: boolean;
13
+ ready: boolean;
14
+ };
15
+ //# sourceMappingURL=useWorkbenchConfiguration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWorkbenchConfiguration.d.ts","sourceRoot":"","sources":["../../src/settings/useWorkbenchConfiguration.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC9C,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,UAAU,EAAE,MAAM,GAAG,KAAK,EAC1B,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;;6BA0FjD,oBAAoB;uBAaf,IAAI;;;;;;EA2EpB"}
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ThemeControls, ThemeMode, ThemeFamily } from './themeStore.js';
3
+ export declare const ThemeContext: import("react").Context<import("zustand").StoreApi<ThemeControls> | null>;
4
+ /** Options for an independently themed application subtree. */
5
+ export interface ThemeProviderProps {
6
+ /** Content receiving CSS tokens and the matching Ant Design theme. */
7
+ children: ReactNode;
8
+ /** Color scheme used on first mount. Defaults to light. */
9
+ initialMode?: ThemeMode;
10
+ /** Palette used on first mount. Defaults to azure. */
11
+ initialFamily?: ThemeFamily;
12
+ }
13
+ /** Provides scoped CSS tokens, isolated theme state, and Ant Design configuration. */
14
+ export declare function ThemeProvider({ children, initialMode, initialFamily }: ThemeProviderProps): import("react").JSX.Element;
15
+ /** Reads and changes the nearest provider's theme; requires a ThemeProvider ancestor. */
16
+ export declare function useTheme(): ThemeControls;
17
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG7E,eAAO,MAAM,YAAY,2EAAkE,CAAC;AAE5F,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,QAAQ,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,sDAAsD;IACtD,aAAa,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,WAAqB,EAAE,aAAuB,EAAE,EAAE,kBAAkB,+BAoE7G;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,IAAI,aAAa,CAMxC"}