@pstdio/workbench 0.7.1 → 0.9.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 (44) hide show
  1. package/README.md +39 -317
  2. package/dist/extensions.d.ts +1492 -698
  3. package/dist/extensions.js +1679 -1776
  4. package/dist/extensions.js.map +1 -1
  5. package/dist/file-renderer-view-kfJRY3yR.js +515 -0
  6. package/dist/file-renderer-view-kfJRY3yR.js.map +1 -0
  7. package/dist/index.d.ts +724 -599
  8. package/dist/index.js +5151 -2369
  9. package/dist/index.js.map +1 -1
  10. package/dist/react.d.ts +673 -550
  11. package/dist/react.js +3585 -3335
  12. package/dist/react.js.map +1 -1
  13. package/dist/storage.d.ts +120 -155
  14. package/dist/storage.js +135 -149
  15. package/dist/storage.js.map +1 -1
  16. package/dist/webview-runtime.d.ts +2 -5
  17. package/dist/webview-runtime.js +3 -3
  18. package/dist/webview-runtime.js.map +1 -1
  19. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  20. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  21. package/dist/workbench-renderers-DmsrBGC7.js +960 -0
  22. package/dist/workbench-renderers-DmsrBGC7.js.map +1 -0
  23. package/dist/workspaces-DJwFj8uq.js +1872 -0
  24. package/dist/workspaces-DJwFj8uq.js.map +1 -0
  25. package/package.json +6 -41
  26. package/dist/composition-resolver-types-CWykPyEK.js +0 -241
  27. package/dist/composition-resolver-types-CWykPyEK.js.map +0 -1
  28. package/dist/file-renderer-view-B6_iR4EN.js +0 -496
  29. package/dist/file-renderer-view-B6_iR4EN.js.map +0 -1
  30. package/dist/file-section-navigation-CfYqVObc.js +0 -30
  31. package/dist/file-section-navigation-CfYqVObc.js.map +0 -1
  32. package/dist/icon-B9XolQG8.js +0 -35
  33. package/dist/icon-B9XolQG8.js.map +0 -1
  34. package/dist/layout-types-DMoZz38-.js +0 -100
  35. package/dist/layout-types-DMoZz38-.js.map +0 -1
  36. package/dist/surface-map-C1pOTUmF.js +0 -52
  37. package/dist/surface-map-C1pOTUmF.js.map +0 -1
  38. package/dist/testing.d.ts +0 -2284
  39. package/dist/testing.js +0 -58
  40. package/dist/testing.js.map +0 -1
  41. package/dist/workbench-built-ins-BncLJfQA.js +0 -1175
  42. package/dist/workbench-built-ins-BncLJfQA.js.map +0 -1
  43. package/dist/workbench-menu-paths-Bb0ICxeG.js +0 -20
  44. package/dist/workbench-menu-paths-Bb0ICxeG.js.map +0 -1
package/dist/react.d.ts CHANGED
@@ -1,24 +1,43 @@
1
1
  import { BoxProps } from '@chakra-ui/react';
2
2
  import { ComponentType } from 'react';
3
- import { Context } from 'react';
3
+ import { ControlsQueryResult } from '@pstdio/sdk/extensions';
4
+ import { ControlValue } from '@pstdio/sdk/extensions';
5
+ import { ControlValueMap } from '@pstdio/sdk/extensions';
6
+ import { DockedWorkbenchRegion } from '@pstdio/sdk/extensions';
4
7
  import { FileIconThemePreferenceOption as FileIconThemePreferenceOption_2 } from '@pstdio/ui';
8
+ import { FileRendererSectionTarget } from '@pstdio/sdk/extensions';
5
9
  import { FileUploadValue } from '@pstdio/ui';
6
10
  import { IconProps } from '@chakra-ui/react';
7
11
  import { JSX } from 'react/jsx-runtime';
8
12
  import { JSXElementConstructor } from 'react';
13
+ import { KanbanRendererAttributeDisplay } from '@pstdio/sdk/extensions';
9
14
  import { ListRowActionMenuItem } from '@pstdio/ui';
15
+ import { Localizable } from '@pstdio/sdk/extensions';
16
+ import { ModeRegionSettings } from '@pstdio/sdk/extensions';
17
+ import { NavigationTargetPage as NavigationTargetPage_2 } from '@pstdio/sdk/extensions';
18
+ import { NavigationTargetPanel as NavigationTargetPanel_2 } from '@pstdio/sdk/extensions';
19
+ import { PageLocation } from '@pstdio/sdk/extensions';
20
+ import { PageMain } from '@pstdio/sdk/extensions';
21
+ import { PageOpenIntent } from '@pstdio/sdk/extensions';
22
+ import { PageRef } from '@pstdio/sdk/extensions';
23
+ import { PageSlot } from '@pstdio/sdk/extensions';
10
24
  import { Param } from '@pstdio/ui';
11
25
  import { ParamEditorProps } from '@pstdio/ui';
12
26
  import { ParamValue } from '@pstdio/ui';
27
+ import { PlacementIdentity } from '@pstdio/sdk/extensions';
28
+ import { PlacementItem } from '@pstdio/sdk/extensions';
29
+ import { PlacementRef } from '@pstdio/sdk/extensions';
13
30
  import { ReactElement } from 'react';
14
31
  import { ReactNode } from 'react';
15
32
  import { ReactPortal } from 'react';
33
+ import { ResourceConstraint } from '@pstdio/sdk/extensions';
16
34
  import { ResourceContextAction as ResourceContextAction_2 } from '@pstdio/ui';
35
+ import { ResourceRef } from '@pstdio/sdk/extensions';
17
36
  import { TerminalBridge } from '@pstdio/ui/terminal';
18
- import { ThemePreference as ThemePreference_3 } from '@pstdio/ui';
19
- import { ThemePreferenceOption as ThemePreferenceOption_3 } from '@pstdio/ui';
37
+ import { ThemePreference as ThemePreference_2 } from '@pstdio/ui';
38
+ import { ThemePreferenceOption as ThemePreferenceOption_2 } from '@pstdio/ui';
20
39
 
21
- declare interface AttributeDescriptor {
40
+ declare interface AttributeDescriptor<TNode = unknown> {
22
41
  id: string;
23
42
  label: string;
24
43
  type: AttributeType;
@@ -28,22 +47,19 @@ declare interface AttributeDescriptor {
28
47
  displayable?: boolean;
29
48
  editable?: boolean;
30
49
  display?: AttributeDisplayDescriptor;
31
- render?: (value: unknown, row: KanbanRendererRow) => ReactNode;
50
+ render?: (value: unknown, row: KanbanRendererRow) => TNode;
32
51
  compare?: (a: unknown, b: unknown) => number;
33
52
  }
34
53
 
35
- declare type AttributeDisplayDescriptor = {
36
- kind: "workspace-badge";
37
- itemsAttributeId: string;
38
- };
54
+ declare type AttributeDisplayDescriptor = KanbanRendererAttributeDisplay;
39
55
 
40
56
  /**
41
57
  * Reactive source for an entire attribute schema. Lets a contribution
42
58
  * add/remove/edit attributes at runtime without re-registering.
43
59
  */
44
- declare interface AttributesSource {
60
+ declare interface AttributesSource<TNode = unknown> {
45
61
  subscribe: (listener: () => void) => () => void;
46
- getSnapshot: () => AttributeDescriptor[];
62
+ getSnapshot: () => AttributeDescriptor<TNode>[];
47
63
  }
48
64
 
49
65
  declare type AttributeType = {
@@ -62,29 +78,20 @@ declare type AttributeType = {
62
78
  kind: "user";
63
79
  };
64
80
 
65
- declare interface BoardColumnAction {
81
+ declare interface BoardColumnAction<TIcon = unknown> {
66
82
  id: string;
67
83
  label: string;
68
- icon: ComponentType<{
69
- size?: number | string;
70
- }>;
84
+ icon: TIcon;
71
85
  }
72
86
 
73
87
  /** Board-column behavior and menu configuration for a resolved column group. */
74
- declare interface BoardColumnConfig {
88
+ declare interface BoardColumnConfig<TIcon = unknown> {
75
89
  /** Color palette token used for the column header and group badges. */
76
90
  color?: string;
77
91
  canDragIn?: boolean;
78
92
  canDragOut?: boolean;
79
93
  canCreate?: boolean;
80
- actions?: BoardColumnAction[];
81
- }
82
-
83
- export declare const buildSettingsTreeBody: (input: BuildSettingsTreeInput) => Promise<TreeViewSection[]>;
84
-
85
- export declare interface BuildSettingsTreeInput {
86
- settings: SettingsRegistry;
87
- hasProjectScope: boolean;
94
+ actions?: BoardColumnAction<TIcon>[];
88
95
  }
89
96
 
90
97
  /**
@@ -93,12 +100,12 @@ export declare interface BuildSettingsTreeInput {
93
100
  */
94
101
  declare interface CollectionSettingsPanel<TItem = unknown> extends SettingsPanelBase {
95
102
  kind: "collection";
103
+ viewId: string;
96
104
  items(): TItem[] | Promise<TItem[]>;
97
105
  itemId(item: TItem): string;
98
106
  itemLabel(item: TItem): string;
99
107
  itemIcon?(item: TItem): string | undefined;
100
108
  groupBy?: SettingsCollectionGroupBy<TItem>;
101
- renderItem(item: TItem, input: WorkbenchPanelRenderInput): unknown;
102
109
  actions?: SettingsAction[];
103
110
  }
104
111
 
@@ -178,6 +185,7 @@ declare interface CommandParamDescriptor {
178
185
  accept?: string;
179
186
  multiple?: boolean;
180
187
  metadata?: Record<string, unknown>;
188
+ resolvedFrom?: "resource";
181
189
  }
182
190
 
183
191
  export declare interface CommandParamEntry extends CommandParamDescriptor {
@@ -268,25 +276,17 @@ declare interface ContributionMetadata {
268
276
 
269
277
  declare type ContributionSource = "module" | "extension";
270
278
 
271
- declare type ContributionSource_2 = "module" | "extension";
272
-
273
279
  declare interface ControllerTerminalBridgeOptions {
280
+ getBindingId?: () => string | undefined;
274
281
  getResource?: () => ResourceRef | undefined;
275
282
  getTitle?: () => string | undefined;
276
283
  }
277
284
 
278
285
  declare interface ControlsApplyInput {
279
- values: Record<string, unknown>;
286
+ values: ControlValueMap;
280
287
  resource?: ResourceRef;
281
288
  }
282
289
 
283
- declare interface ControlsQueryResult {
284
- params?: unknown[];
285
- groups?: unknown[];
286
- values?: Record<string, unknown>;
287
- readOnly?: boolean;
288
- }
289
-
290
290
  declare interface ControlsRendererContribution {
291
291
  id: string;
292
292
  title: string;
@@ -294,7 +294,7 @@ declare interface ControlsRendererContribution {
294
294
  emptyTitle?: string;
295
295
  emptyDescription?: string;
296
296
  layout?: ControlsRendererLayout;
297
- defaultValues?: Record<string, unknown>;
297
+ defaultValues?: ControlValueMap;
298
298
  /** Load the control declarations + current values for the active resource. */
299
299
  executeQuery(resource?: ResourceRef): Promise<ControlsQueryResult> | ControlsQueryResult;
300
300
  /** Live-save a single control edit. Omit for explicit-apply or read-only panels. */
@@ -306,10 +306,6 @@ declare interface ControlsRendererContribution {
306
306
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
307
307
  }
308
308
 
309
- declare type ControlsRendererImplementation = (input: WorkbenchPanelRenderInput & {
310
- controlsRendererId: string;
311
- }) => unknown;
312
-
313
309
  declare interface ControlsRendererLayout {
314
310
  region?: ControlsRendererRegion;
315
311
  defaultPx?: number;
@@ -317,28 +313,8 @@ declare interface ControlsRendererLayout {
317
313
  maxPx?: number;
318
314
  }
319
315
 
320
- declare interface ControlsRendererRefreshEvent {
321
- controlsRendererId: string;
322
- }
323
-
324
- declare type ControlsRendererRefreshListener = (event: ControlsRendererRefreshEvent) => void;
325
-
326
316
  declare type ControlsRendererRegion = "main-right-menu" | "secondary" | "overlay";
327
317
 
328
- declare interface ControlsRendererRegistry {
329
- controlsStore: WorkbenchStore<ControlsRendererStoreState>;
330
- registerControlsRenderer(contribution: ControlsRendererContribution, metadata?: ContributionMetadata): Disposable_2;
331
- setControlsRendererImplementation(impl: ControlsRendererImplementation): void;
332
- getControlsRenderer(id: string): RegisteredControlsRendererContribution | undefined;
333
- listControlsRenderers(): RegisteredControlsRendererContribution[];
334
- refreshControlsRenderer(id: string): void;
335
- onDidRefreshControlsRenderer(listener: ControlsRendererRefreshListener): Disposable_2;
336
- }
337
-
338
- declare interface ControlsRendererStoreState {
339
- renderers: Record<string, RegisteredControlsRendererContribution>;
340
- }
341
-
342
318
  declare interface ControlsResetInput {
343
319
  controlIds?: string[];
344
320
  resource?: ResourceRef;
@@ -346,8 +322,8 @@ declare interface ControlsResetInput {
346
322
 
347
323
  declare interface ControlsUpdateValueInput {
348
324
  controlId: string;
349
- value: unknown;
350
- values: Record<string, unknown>;
325
+ value: ControlValue;
326
+ values: ControlValueMap;
351
327
  resource?: ResourceRef;
352
328
  }
353
329
 
@@ -367,11 +343,11 @@ declare interface CreateTreeContextMenuItemsInput {
367
343
  }
368
344
 
369
345
  export declare const createWorkbenchHotkeyRegistrations: (input: CreateWorkbenchHotkeyRegistrationsInput) => {
370
- commandId: string;
346
+ id: string;
371
347
  hotkey: KeybindingSequence;
372
348
  enabled: boolean;
373
349
  ignoreInputs: true;
374
- execute: () => Promise<unknown>;
350
+ execute: () => Promise<readonly unknown[]>;
375
351
  }[];
376
352
 
377
353
  declare interface CreateWorkbenchHotkeyRegistrationsInput {
@@ -380,13 +356,6 @@ declare interface CreateWorkbenchHotkeyRegistrationsInput {
380
356
  commandIds?: readonly string[];
381
357
  }
382
358
 
383
- export declare const createWorkbenchRendererRegistry: (input?: CreateWorkbenchRendererRegistryInput) => WorkbenchRendererRegistry;
384
-
385
- declare interface CreateWorkbenchRendererRegistryInput {
386
- initialRenderers?: WorkbenchRendererRegistration[];
387
- createHost?: () => HTMLElement;
388
- }
389
-
390
359
  export declare const createWorkbenchResourceActions: (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) => ResourceContextAction_2[];
391
360
 
392
361
  export declare const createWorkbenchSettingsModule: (options?: WorkbenchSettingsModuleOptions) => WorkbenchModuleContribution;
@@ -401,15 +370,6 @@ export declare const createWorkbenchSettingsModule: (options?: WorkbenchSettings
401
370
  */
402
371
  export declare const createWorkbenchTerminalModule: () => WorkbenchModuleContribution;
403
372
 
404
- /**
405
- * Renders its own page. `render` returns `unknown` so core stays React-free — the
406
- * React layer treats the result as a node, exactly like WorkbenchRendererRegistration.
407
- */
408
- declare interface CustomSettingsPanel extends SettingsPanelBase {
409
- kind: "custom";
410
- render(input: WorkbenchPanelRenderInput): unknown;
411
- }
412
-
413
373
  declare interface DataTableRendererColumn {
414
374
  id: string;
415
375
  label?: string;
@@ -463,10 +423,6 @@ declare interface DataTableRendererContribution {
463
423
  onRowActivate?: (row: DataTableRendererRow) => Promise<void> | void;
464
424
  }
465
425
 
466
- declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
467
- dataTableRendererId: string;
468
- }) => unknown;
469
-
470
426
  declare interface DataTableRendererQueryContext {
471
427
  resource?: ResourceRef;
472
428
  modeId?: string;
@@ -477,20 +433,6 @@ declare interface DataTableRendererQueryResult {
477
433
  columns?: DataTableRendererColumn[];
478
434
  }
479
435
 
480
- declare interface DataTableRendererRefreshEvent {
481
- dataTableRendererId: string;
482
- }
483
-
484
- declare interface DataTableRendererRegistry {
485
- dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
486
- registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
487
- setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
488
- getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
489
- listDataTableRenderers(): RegisteredDataTableRendererContribution[];
490
- refreshDataTableRenderer(id: string): void;
491
- onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
492
- }
493
-
494
436
  declare interface DataTableRendererRow {
495
437
  id: string;
496
438
  values: Record<string, unknown>;
@@ -513,10 +455,6 @@ declare interface DataTableRendererSelectionAction {
513
455
  run(rows: DataTableRendererRow[]): Promise<void> | void;
514
456
  }
515
457
 
516
- declare interface DataTableRendererStoreState {
517
- renderers: Record<string, RegisteredDataTableRendererContribution>;
518
- }
519
-
520
458
  declare interface DataTableRendererThemeColor {
521
459
  light: string;
522
460
  dark: string;
@@ -532,6 +470,8 @@ declare interface Disposable_2 {
532
470
 
533
471
  export declare const disposeWorkbenchModuleHostRegistrations: (registrations: Map<string, WorkbenchModuleHostRegistration>) => void;
534
472
 
473
+ declare type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
474
+
535
475
  declare interface EnumOption {
536
476
  value: string;
537
477
  label: string;
@@ -616,76 +556,19 @@ declare interface FileRendererContribution {
616
556
  save?(resource: ResourceRef | undefined, content: string, origin?: FileRendererRefreshOrigin): Promise<FileRendererSaveResult | undefined> | FileRendererSaveResult | void;
617
557
  }
618
558
 
619
- declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
620
- fileRendererId: string;
621
- }) => unknown;
622
-
623
- declare interface FileRendererRefreshEnvelope {
624
- resourceUri?: string;
625
- origin?: FileRendererRefreshOrigin;
626
- revision?: string;
627
- }
628
-
629
- declare interface FileRendererRefreshEvent extends FileRendererRefreshEnvelope {
630
- fileRendererId: string;
631
- }
632
-
633
- declare type FileRendererRefreshListener = (event: FileRendererRefreshEvent) => void;
634
-
635
559
  declare interface FileRendererRefreshOrigin {
636
560
  rendererId: string;
637
561
  instanceId: string;
638
562
  operationId: string;
639
563
  }
640
564
 
641
- declare interface FileRendererRegistry {
642
- fileRendererStore: WorkbenchStore<FileRendererStoreState>;
643
- registerFileRenderer(contribution: FileRendererContribution, metadata?: ContributionMetadata): Disposable_2;
644
- setFileRendererImplementation(impl: FileRendererImplementation): void;
645
- getFileRenderer(id: string): RegisteredFileRendererContribution | undefined;
646
- listFileRenderers(): RegisteredFileRendererContribution[];
647
- refreshFileRenderer(id: string, event?: FileRendererRefreshEnvelope): void;
648
- onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
649
- }
650
-
651
565
  declare interface FileRendererSaveResult {
652
566
  revision?: string;
653
567
  }
654
568
 
655
- declare interface FileRendererStoreState {
656
- renderers: Record<string, RegisteredFileRendererContribution>;
657
- }
658
-
659
- declare interface HistoryController {
660
- store: WorkbenchStore<HistoryStoreState>;
661
- /** Snapshot the history for a compound navigation; the returned function restores it. */
662
- createCheckpoint(): () => void;
663
- goBack(): HistoryEntry | undefined;
664
- goForward(): HistoryEntry | undefined;
665
- goPrevious(): HistoryEntry | undefined;
666
- recentlyClosed(): readonly HistoryEntry[];
667
- reopenLastClosed(): HistoryEntry | undefined;
668
- setPersistenceScope(scope: string | undefined): void;
669
- getPersistenceScope(): string | undefined;
670
- restore(): HistoryEntry | undefined;
671
- flush(): void;
672
- clear(): void;
673
- }
674
-
675
- declare type HistoryEntry = WorkbenchNavigationEntry;
676
-
677
- declare interface HistoryStoreState {
678
- entries: readonly WorkbenchNavigationEntry[];
679
- cursor: number;
680
- recentlyClosed: readonly WorkbenchNavigationEntry[];
681
- hydrating: boolean;
682
- }
683
-
684
569
  export declare const isCommandFilesParamValue: (value: unknown) => value is CommandFilesParamValue;
685
570
 
686
- export declare const isSettingsScopeVisible: (scope: SettingsScope | undefined, hasProjectScope: boolean) => boolean;
687
-
688
- declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
571
+ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow, TNode = unknown, TIcon = unknown> {
689
572
  id: string;
690
573
  title: string;
691
574
  resourceKind?: string;
@@ -700,9 +583,9 @@ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = Ka
700
583
  * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
701
584
  * propagate live without re-registering the renderer.
702
585
  */
703
- attributes: AttributeDescriptor[] | AttributesSource;
586
+ attributes: AttributeDescriptor<TNode>[] | AttributesSource<TNode>;
704
587
  /** Per-board-column overrides (color, drag/create rules, custom actions). */
705
- getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
588
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig<TIcon>;
706
589
  hideToolbar?: boolean;
707
590
  emptyTitle?: string;
708
591
  emptyDescription?: string;
@@ -721,7 +604,7 @@ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = Ka
721
604
  /** Row activation surfaced by the renderer (mirrored from <KanbanRenderer>). */
722
605
  onRowActivate?: (row: TRow) => Promise<void> | void;
723
606
  /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
724
- getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
607
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction<TNode>[];
725
608
  /**
726
609
  * Fires for inline attribute edits AND for cross-column drag-to-reorder on
727
610
  * the board (the renderer passes the grouping attribute id + the target
@@ -778,10 +661,6 @@ declare interface KanbanRendererCreateSubmission {
778
661
 
779
662
  declare type KanbanRendererFilterState = Record<string, string[]>;
780
663
 
781
- declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
782
- kanbanRendererId: string;
783
- }) => unknown;
784
-
785
664
  declare interface KanbanRendererOrdering {
786
665
  attributeId: string | typeof MANUAL_ORDERING;
787
666
  direction: SortDirection;
@@ -792,22 +671,6 @@ declare interface KanbanRendererQueryState {
792
671
  filters: KanbanRendererFilterState;
793
672
  }
794
673
 
795
- declare interface KanbanRendererRefreshEvent {
796
- kanbanRendererId: string;
797
- }
798
-
799
- declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
800
-
801
- declare interface KanbanRendererRegistry {
802
- dataStore: WorkbenchStore<KanbanRendererStoreState>;
803
- registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
804
- setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
805
- getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
806
- listKanbanRenderers(): RegisteredKanbanRendererContribution[];
807
- refreshKanbanRenderer(id: string): void;
808
- onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
809
- }
810
-
811
674
  declare interface KanbanRendererRow {
812
675
  id: string;
813
676
  title: string;
@@ -836,15 +699,11 @@ declare interface KanbanRendererSettings {
836
699
  displayProperties: string[];
837
700
  }
838
701
 
839
- declare interface KanbanRendererStoreState {
840
- renderers: Record<string, RegisteredKanbanRendererContribution>;
841
- }
842
-
843
702
  declare interface Keybinding {
844
- commandId: string;
703
+ /** Action the chord executes through the shared navigation executor. */
704
+ action: NavigationTarget;
845
705
  keybinding: KeybindingSequence;
846
706
  when?: string;
847
- args?: unknown;
848
707
  }
849
708
 
850
709
  declare interface KeybindingRegistry {
@@ -852,6 +711,11 @@ declare interface KeybindingRegistry {
852
711
  registerKeybinding(keybinding: Keybinding, metadata?: ContributionMetadata): Disposable_2;
853
712
  listKeybindings(): RegisteredKeybinding[];
854
713
  listActiveKeybindings(): RegisteredKeybinding[];
714
+ /** Chords bound to plain command actions, for rendering shortcut hints beside commands. */
715
+ listCommandKeybindings(): {
716
+ commandId: string;
717
+ keybinding: KeybindingSequence;
718
+ }[];
855
719
  }
856
720
 
857
721
  declare interface KeybindingRegistryStoreState {
@@ -871,12 +735,6 @@ declare interface LayoutModel {
871
735
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
872
736
  dispose(): void;
873
737
  };
874
- registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
875
- dispose(): void;
876
- };
877
- registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
878
- dispose(): void;
879
- };
880
738
  registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
881
739
  dispose(): void;
882
740
  };
@@ -888,6 +746,7 @@ declare interface LayoutModel {
888
746
  getWidget(id: string): RegisteredWidgetContribution | undefined;
889
747
  getPanel(id: string): WorkbenchPanelContribution | undefined;
890
748
  getRegionSize(regionId: WorkbenchRegion_2): WorkbenchRegionSize | undefined;
749
+ getRegionSettings(regionId: WorkbenchRegion_2): WorkbenchRegionSettings | undefined;
891
750
  getRegionCollapsible(regionId: WorkbenchRegion_2): boolean;
892
751
  getRegionHeaderBorderBottom(regionId: WorkbenchRegion_2): boolean;
893
752
  setRegionVisible(regionId: WorkbenchRegion_2, visible: boolean): void;
@@ -905,7 +764,7 @@ declare interface LayoutModel {
905
764
  closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
906
765
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
907
766
  reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
908
- expirePreviewTabs(ownerResourceUri?: string): void;
767
+ expirePreviewTabs(ownerResourceKey?: string): void;
909
768
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
910
769
  setRegionActiveWidget(regionId: WorkbenchRegion_2, widgetId: string | undefined): void;
911
770
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
@@ -971,6 +830,10 @@ declare interface MenuRegistryStoreState {
971
830
  itemsByPath: Record<string, RegisteredMenuItem[]>;
972
831
  }
973
832
 
833
+ declare type NativeViewBody<Kind extends string, Contribution> = {
834
+ kind: Kind;
835
+ } & Omit<Contribution, "id" | "title" | "icon">;
836
+
974
837
  declare interface NavigationParser {
975
838
  id: string;
976
839
  priority?: number;
@@ -984,16 +847,15 @@ declare interface NavigationRegistry {
984
847
  listParsers(): RegisteredNavigationParser[];
985
848
  resolveLocation(location: string): NavigationTarget;
986
849
  openTarget(target: NavigationTarget): Promise<readonly unknown[]>;
850
+ /** Opens a page location through the shared executor. */
851
+ openPage(target: Omit<NavigationTargetPage, "kind">): Promise<readonly unknown[]>;
852
+ /** Opens or activates an owned panel through the shared executor. */
853
+ openPanel(target: DistributiveOmit<NavigationTargetPanel, "kind">): Promise<readonly unknown[]>;
987
854
  navigate(location: string): Promise<readonly unknown[]>;
988
- registerNavigator(navigator: ResourceNavigator, metadata?: ContributionMetadata): Disposable_2;
989
- listNavigators(): RegisteredResourceNavigator[];
990
- createHref(resource: ResourceRef): string;
991
- navigateResource(resource: ResourceRef): Promise<unknown>;
992
855
  }
993
856
 
994
857
  declare interface NavigationRegistryStoreState {
995
858
  parsers: Record<string, RegisteredNavigationParser>;
996
- navigators: Record<string, RegisteredResourceNavigator>;
997
859
  }
998
860
 
999
861
  declare type NavigationTarget = NavigationTargetItem | NavigationTargetCompound;
@@ -1006,23 +868,63 @@ declare interface NavigationTargetCommand {
1006
868
 
1007
869
  declare interface NavigationTargetCompound {
1008
870
  kind: "compound";
1009
- targets: readonly NavigationTargetItem[];
871
+ targets: readonly (NavigationTargetPage | NavigationTargetPanel)[];
1010
872
  }
1011
873
 
1012
- declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
874
+ declare interface NavigationTargetHref {
875
+ kind: "href";
876
+ href: string;
877
+ }
878
+
879
+ declare type NavigationTargetItem = NavigationTargetPage | NavigationTargetPanel | NavigationTargetCommand | NavigationTargetHref;
880
+
881
+ declare type NavigationTargetPage = NavigationTargetPage_2;
882
+
883
+ declare type NavigationTargetPanel = NavigationTargetPanel_2 | NavigationTargetShellPanel;
1013
884
 
1014
- declare interface NavigationTargetPanel {
885
+ declare interface NavigationTargetShellPanel {
1015
886
  kind: "panel";
1016
- panelId: string;
1017
- input?: OpenWorkbenchPanelInput;
887
+ panel: ShellPlacementRef;
888
+ resource?: NavigationTargetPanel_2["resource"];
889
+ open?: NavigationTargetPanel_2["open"];
890
+ title?: string;
1018
891
  }
1019
892
 
1020
- declare interface NavigationTargetResource {
1021
- kind: "resource";
1022
- resource: ResourceRef;
1023
- input?: OpenResourceInput;
893
+ declare interface NavigationTreeContext {
894
+ resource?: ResourceRef;
895
+ }
896
+
897
+ declare interface NavigationTreeContribution {
898
+ id: string;
899
+ /** Prefix projected section and node ids when they come from an independent tree renderer. */
900
+ idScope?: string;
901
+ owner: NavigationTreeOwner;
902
+ sourceExtensionId: string;
903
+ declarationIndex: number;
904
+ slot?: NavigationTreeSlot;
905
+ viewId?: string;
906
+ defaultExpandedSectionIds?: string[];
907
+ getSections?(context: NavigationTreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
908
+ getChildren?(node: TreeNode, context: NavigationTreeContext): Promise<TreeNode[]> | TreeNode[];
909
+ }
910
+
911
+ declare interface NavigationTreeOwner {
912
+ kind: "mode" | "page";
913
+ id: string;
914
+ extensionId: string;
1024
915
  }
1025
916
 
917
+ declare interface NavigationTreeRegistry {
918
+ registerContribution(contribution: NavigationTreeContribution): Disposable_2;
919
+ resolveOwner(kind: NavigationTreeOwner["kind"], id: string): NavigationTreeOwner | undefined;
920
+ getSections(owner: NavigationTreeOwner, slot?: NavigationTreeSlot, context?: NavigationTreeContext): Promise<TreeViewSection[]>;
921
+ getChildren(node: TreeNode, context?: NavigationTreeContext): Promise<TreeNode[]>;
922
+ getDefaultExpandedSectionIds(owner: NavigationTreeOwner): string[];
923
+ onDidChange(listener: () => void): Disposable_2;
924
+ }
925
+
926
+ declare type NavigationTreeSlot = "header" | "content" | "footer";
927
+
1026
928
  declare const NO_GROUPING = "none";
1027
929
 
1028
930
  export declare const normalizeWorkbenchKeybinding: (keybinding: KeybindingSequence) => KeybindingSequence;
@@ -1036,12 +938,15 @@ declare interface NotificationRegistry {
1036
938
  subscribe(listener: WorkbenchNotificationListener): Disposable_2;
1037
939
  }
1038
940
 
1039
- declare interface OpenResourceInput {
1040
- replaceActive?: boolean;
941
+ declare interface OpenModePlacementTarget {
942
+ panel: PlacementRef;
943
+ resource?: ResourceRef;
944
+ open?: PageOpenIntent;
1041
945
  }
1042
946
 
1043
947
  declare interface OpenWidgetInput {
1044
- resource?: ResourceRef;
948
+ viewId?: string | null;
949
+ resource?: ResourceRef | null;
1045
950
  title?: string;
1046
951
  region?: WorkbenchRegion_2;
1047
952
  role?: WorkbenchWidgetRole;
@@ -1058,9 +963,17 @@ declare interface OpenWidgetInput {
1058
963
  replaceWidgetId?: string;
1059
964
  }
1060
965
 
1061
- declare interface OpenWorkbenchPanelInput {
966
+ declare interface OpenWorkbenchOverlayInput {
1062
967
  resource?: ResourceRef;
1063
968
  title?: string;
969
+ }
970
+
971
+ declare interface OpenWorkbenchPanelInput {
972
+ /** Set by the view registry. Low-level layout callers should leave this undefined. */
973
+ viewId?: string | null;
974
+ /** `null` explicitly clears an existing singleton placement's resource binding. */
975
+ resource?: ResourceRef | null;
976
+ title?: string;
1064
977
  region?: WorkbenchRegion_2;
1065
978
  role?: WorkbenchWidgetRole;
1066
979
  pinned?: boolean;
@@ -1071,13 +984,39 @@ declare interface OpenWorkbenchPanelInput {
1071
984
  strategy?: WorkbenchPanelOpenStrategy;
1072
985
  }
1073
986
 
1074
- export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalOptions) => WorkbenchPanelInstance_2;
987
+ declare interface OpenWorkbenchShellPlacementInput {
988
+ placementId: string;
989
+ resource?: ResourceRef;
990
+ open?: PageOpenIntent;
991
+ title?: string;
992
+ }
1075
993
 
1076
- declare type OpenWorkbenchTerminalInput = NonNullable<Parameters<WorkbenchCoreContributionContext["layout"]["openWidget"]>[1]>;
994
+ export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalOptions) => WorkbenchPanelInstance;
1077
995
 
1078
- declare type OpenWorkbenchTerminalOptions = OpenWorkbenchTerminalInput & {
996
+ declare interface OpenWorkbenchTerminalOptions {
997
+ resource?: ResourceRef;
1079
998
  reveal?: boolean;
1080
- };
999
+ }
1000
+
1001
+ declare interface OwnedPlacementLocationContext {
1002
+ modeId: string;
1003
+ pageId?: string;
1004
+ projectId?: string;
1005
+ location?: PageLocation;
1006
+ }
1007
+
1008
+ declare interface OwnedPlacementReconciliation<Value> {
1009
+ add: readonly ResolvedOwnedPlacement<Value>[];
1010
+ retain: readonly ResolvedOwnedPlacement<Value>[];
1011
+ update: readonly OwnedPlacementUpdate<Value>[];
1012
+ activate: readonly ResolvedOwnedPlacement<Value>[];
1013
+ remove: readonly ResolvedOwnedPlacement<Value>[];
1014
+ }
1015
+
1016
+ declare interface OwnedPlacementUpdate<Value> {
1017
+ current: ResolvedOwnedPlacement<Value>;
1018
+ desired: ResolvedOwnedPlacement<Value>;
1019
+ }
1081
1020
 
1082
1021
  declare type ParamValue_2 = Parameters<NonNullable<ParamEditorProps["onChange"]>>[1];
1083
1022
 
@@ -1137,6 +1076,20 @@ declare interface PreferenceScopeRef {
1137
1076
 
1138
1077
  declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
1139
1078
 
1079
+ export declare type ReactAttributeDescriptor = AttributeDescriptor<ReactNode>;
1080
+
1081
+ export declare type ReactAttributesSource = AttributesSource<ReactNode>;
1082
+
1083
+ export declare type ReactBoardColumnConfig = BoardColumnConfig<ReactColumnIcon>;
1084
+
1085
+ declare type ReactColumnIcon = ComponentType<{
1086
+ size?: number | string;
1087
+ }>;
1088
+
1089
+ export declare type ReactKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> = KanbanRendererContribution<TRow, ReactNode, ReactColumnIcon>;
1090
+
1091
+ export declare type ReactResourceContextAction = ResourceContextAction<ReactNode>;
1092
+
1140
1093
  /** Narrows an editor value back to what a command param can carry. */
1141
1094
  export declare const readCommandParamValue: (value: ParamValue, entry?: CommandParamEntry) => CommandParamValue;
1142
1095
 
@@ -1151,24 +1104,9 @@ declare interface RegisteredContributionMetadata {
1151
1104
  priority: number;
1152
1105
  }
1153
1106
 
1154
- declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
1155
- }
1156
-
1157
1107
  declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
1158
1108
  }
1159
1109
 
1160
- declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
1161
- }
1162
-
1163
- declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1164
- }
1165
-
1166
- declare interface RegisteredKeepAliveHost {
1167
- rendererId: string;
1168
- host: HTMLElement;
1169
- attachedTo?: HTMLElement;
1170
- }
1171
-
1172
1110
  declare interface RegisteredKeybinding extends Keybinding, RegisteredContributionMetadata {
1173
1111
  }
1174
1112
 
@@ -1188,8 +1126,6 @@ declare type RegisteredPreferenceSchema = PreferencePropertySchema & {
1188
1126
  declare interface RegisteredResourceKind extends ResourceKindContribution, RegisteredContributionMetadata {
1189
1127
  }
1190
1128
 
1191
- declare type RegisteredResourceNavigator = Omit<ResourceNavigator, "priority"> & RegisteredContributionMetadata;
1192
-
1193
1129
  declare type RegisteredSettingsPanel = SettingsPanelContribution & RegisteredContributionMetadata;
1194
1130
 
1195
1131
  declare type RegisteredSettingsSection = SettingsSectionContribution & RegisteredContributionMetadata;
@@ -1214,11 +1150,18 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
1214
1150
  metadata?: Record<string, unknown>;
1215
1151
  }
1216
1152
 
1217
- declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1153
+ declare type RegisteredWorkbenchStatusSet = WorkbenchStatusSetContribution & RegisteredContributionMetadata;
1218
1154
 
1219
- declare type ResolvedResourcePresenter = Omit<ResourcePresenter, "priority"> & {
1220
- priority: number;
1221
- };
1155
+ declare type RegisteredWorkbenchView = WorkbenchViewContribution & RegisteredContributionMetadata;
1156
+
1157
+ declare interface ResolvedOwnedPlacement<Value = unknown> {
1158
+ identity: PlacementIdentity;
1159
+ region: WorkbenchRegion_2;
1160
+ order: number;
1161
+ value: Value;
1162
+ }
1163
+
1164
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1222
1165
 
1223
1166
  declare interface ResourceBrowseEntry {
1224
1167
  resource: ResourceRef;
@@ -1230,19 +1173,19 @@ declare interface ResourceBrowseEntry {
1230
1173
  }
1231
1174
 
1232
1175
  /** Row-level context menu action surfaced by the renderer. */
1233
- declare interface ResourceContextAction {
1176
+ declare interface ResourceContextAction<TNode = unknown> {
1234
1177
  key: string;
1235
1178
  label: string;
1236
1179
  onClick: () => Promise<void> | void;
1237
1180
  isDisabled?: boolean;
1238
- icon?: ReactNode;
1239
- endContent?: ReactNode;
1181
+ icon?: TNode;
1182
+ endContent?: TNode;
1240
1183
  separatorBefore?: boolean;
1241
1184
  }
1242
1185
 
1243
1186
  declare interface ResourceHierarchyCycle {
1244
1187
  code: typeof resourceHierarchyCycleCode;
1245
- path: ResourceRef[];
1188
+ path: WorkbenchHierarchyNode[];
1246
1189
  repeatedUri: string;
1247
1190
  }
1248
1191
 
@@ -1252,90 +1195,45 @@ declare interface ResourceHierarchyProvider {
1252
1195
  id: string;
1253
1196
  priority?: number;
1254
1197
  canResolve(resource: ResourceRef): boolean;
1255
- getParent(resource: ResourceRef): ResourceRef | undefined;
1198
+ getParent(resource: ResourceRef): WorkbenchHierarchyNode | undefined;
1256
1199
  }
1257
1200
 
1258
1201
  declare interface ResourceKindContribution {
1259
1202
  kind: string;
1260
1203
  label: string;
1261
1204
  icon?: string;
1262
- surface?: ResourceSurface;
1263
- paletteOpenInput?: OpenResourceInput;
1264
1205
  }
1265
1206
 
1266
1207
  declare interface ResourceListContext {
1267
1208
  primary?: ResourceRef;
1268
1209
  }
1269
1210
 
1270
- declare interface ResourceNavigator<TResult = unknown> {
1271
- id: string;
1272
- priority?: number;
1273
- canNavigate(resource: ResourceRef): boolean;
1274
- createHref?(resource: ResourceRef): string;
1275
- navigate(resource: ResourceRef): TResult | Promise<TResult>;
1276
- }
1277
-
1278
- declare interface ResourcePresenter {
1279
- id: string;
1280
- priority?: number;
1281
- canOpen(resource: ResourceRef): boolean;
1282
- open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1283
- afterOpen?(resource: ResourceRef, instance: WorkbenchPanelInstance, input: OpenResourceInput): void;
1284
- }
1285
-
1286
1211
  declare interface ResourceProvider {
1287
1212
  id: string;
1288
1213
  kind: string;
1289
1214
  list(query: string, context: ResourceListContext): readonly ResourceBrowseEntry[];
1290
1215
  }
1291
1216
 
1292
- declare interface ResourceRef {
1293
- kind: string;
1294
- uri: string;
1295
- id?: string;
1296
- label?: string;
1297
- icon?: string;
1298
- metadata?: Record<string, unknown>;
1299
- }
1300
-
1301
- declare interface ResourceRef_2 {
1302
- kind: string;
1303
- uri: string;
1304
- id?: string;
1305
- label?: string;
1306
- icon?: string;
1307
- metadata?: Record<string, unknown>;
1308
- }
1309
-
1310
1217
  declare interface ResourceRegistry {
1311
1218
  store: WorkbenchStore<ResourceRegistryStoreState>;
1312
1219
  registerKind(kind: ResourceKindContribution, metadata?: ContributionMetadata): Disposable_2;
1313
1220
  getKind(kind: string): RegisteredResourceKind | undefined;
1314
- getSurface(resource: ResourceRef): ResourceSurface | undefined;
1315
1221
  listKinds(): RegisteredResourceKind[];
1316
- registerPresenter(presenter: ResourcePresenter): Disposable_2;
1317
- listPresenters(): ResolvedResourcePresenter[];
1318
1222
  registerProvider(provider: ResourceProvider): Disposable_2;
1319
1223
  listProviders(): ResourceProvider[];
1320
1224
  listResources(query: string): readonly ResourceBrowseEntry[];
1321
1225
  registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1322
1226
  listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1323
- walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1227
+ walkHierarchy(resource: ResourceRef | undefined): WorkbenchHierarchyNode[];
1324
1228
  onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
1325
- isOpeningResource(): boolean;
1326
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1327
- onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1328
1229
  }
1329
1230
 
1330
1231
  declare interface ResourceRegistryStoreState {
1331
1232
  kinds: Record<string, RegisteredResourceKind>;
1332
- presenters: Record<string, ResolvedResourcePresenter>;
1333
1233
  providers: Record<string, ResourceProvider>;
1334
1234
  hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1335
1235
  }
1336
1236
 
1337
- declare type ResourceSurface = "primary" | "secondary" | "attached";
1338
-
1339
1237
  /** Auto-rendered as a param editor from the registered preference schema. */
1340
1238
  declare interface SchemaSettingsPanel extends SettingsPanelBase {
1341
1239
  kind: "schema";
@@ -1344,8 +1242,6 @@ declare interface SchemaSettingsPanel extends SettingsPanelBase {
1344
1242
  save?: "live" | "apply";
1345
1243
  }
1346
1244
 
1347
- export declare const SETTINGS_RESOURCE_KIND = "workbench-settings";
1348
-
1349
1245
  /** A "+ create"-style action surfaced on a section or a collection's parent node. */
1350
1246
  declare interface SettingsAction {
1351
1247
  id: string;
@@ -1361,12 +1257,6 @@ declare interface SettingsCollectionGroupBy<TItem> {
1361
1257
  icon?(key: string): string | undefined;
1362
1258
  }
1363
1259
 
1364
- export declare const settingsItemResource: (panelId: string, item: {
1365
- id: string;
1366
- label: string;
1367
- icon?: string;
1368
- }) => ResourceRef;
1369
-
1370
1260
  declare interface SettingsPanelBase {
1371
1261
  id: string;
1372
1262
  title: string;
@@ -1380,7 +1270,7 @@ declare interface SettingsPanelBase {
1380
1270
  when?: string;
1381
1271
  }
1382
1272
 
1383
- declare type SettingsPanelContribution = SchemaSettingsPanel | CustomSettingsPanel | CollectionSettingsPanel;
1273
+ declare type SettingsPanelContribution = SchemaSettingsPanel | ViewSettingsPanel | CollectionSettingsPanel;
1384
1274
 
1385
1275
  /** A preference this panel edits; a bare string uses the preference name as its label. */
1386
1276
  declare type SettingsPanelPreference = string | {
@@ -1388,20 +1278,16 @@ declare type SettingsPanelPreference = string | {
1388
1278
  label?: string;
1389
1279
  };
1390
1280
 
1391
- export declare const settingsPanelResource: (panel: {
1392
- id: string;
1393
- title: string;
1394
- icon?: string;
1395
- }) => ResourceRef;
1396
-
1397
1281
  declare interface SettingsRegistry {
1398
1282
  store: WorkbenchStore<SettingsRegistryStoreState>;
1399
1283
  registerSection(section: SettingsSectionContribution, metadata?: ContributionMetadata): Disposable_2;
1400
- registerPanel<TItem = unknown>(panel: SchemaSettingsPanel | CustomSettingsPanel | CollectionSettingsPanel<TItem>, metadata?: ContributionMetadata): Disposable_2;
1284
+ registerPanel<TItem = unknown>(panel: SchemaSettingsPanel | ViewSettingsPanel | CollectionSettingsPanel<TItem>, metadata?: ContributionMetadata): Disposable_2;
1401
1285
  getSection(id: string): RegisteredSettingsSection | undefined;
1402
1286
  getPanel(id: string): RegisteredSettingsPanel | undefined;
1403
1287
  listSections(): RegisteredSettingsSection[];
1404
1288
  listPanels(): RegisteredSettingsPanel[];
1289
+ resolveCollectionItem(panelId: string, itemId: string): Promise<unknown | undefined>;
1290
+ getCollectionItem(panelId: string, itemId: string): unknown | undefined;
1405
1291
  /** Signal that a collection's backing data changed so the surface refreshes. */
1406
1292
  refresh(): void;
1407
1293
  }
@@ -1425,6 +1311,12 @@ declare interface SettingsSectionContribution {
1425
1311
  actions?: SettingsAction[];
1426
1312
  }
1427
1313
 
1314
+ /** Core-only panel ref for host-owned shell placements. Extensions cannot address them. */
1315
+ declare interface ShellPlacementRef {
1316
+ kind: "shell-placement";
1317
+ id: string;
1318
+ }
1319
+
1428
1320
  declare type SortDirection = "asc" | "desc";
1429
1321
 
1430
1322
  export declare const syncWorkbenchModuleHostRegistrations: (workbench: WorkbenchCore, registrations: Map<string, WorkbenchModuleHostRegistration>, modules: readonly WorkbenchModuleContribution[]) => void;
@@ -1436,17 +1328,8 @@ export declare const syncWorkbenchModuleHostRegistrations: (workbench: Workbench
1436
1328
  */
1437
1329
  declare type ThemePreference = string;
1438
1330
 
1439
- /**
1440
- * Core-owned contract for theme registrations. Structurally identical to
1441
- * @pstdio/ui's ThemePreferenceOption; the React layer bridges the two so core
1442
- * does not depend on UI package ownership.
1443
- */
1444
- declare type ThemePreference_2 = string;
1445
-
1446
1331
  declare type ThemePreferenceMode = "light" | "dark";
1447
1332
 
1448
- declare type ThemePreferenceMode_2 = "light" | "dark";
1449
-
1450
1333
  declare interface ThemePreferenceOption {
1451
1334
  id: ThemePreference;
1452
1335
  title?: string;
@@ -1455,18 +1338,8 @@ declare interface ThemePreferenceOption {
1455
1338
  monacoTheme?: unknown;
1456
1339
  }
1457
1340
 
1458
- declare interface ThemePreferenceOption_2 {
1459
- id: ThemePreference_2;
1460
- title?: string;
1461
- mode: ThemePreferenceMode_2;
1462
- tokens?: ThemePreferenceTokens_2;
1463
- monacoTheme?: unknown;
1464
- }
1465
-
1466
1341
  declare type ThemePreferenceTokens = Record<string, string>;
1467
1342
 
1468
- declare type ThemePreferenceTokens_2 = Record<string, string>;
1469
-
1470
1343
  declare interface ThemeRegistry {
1471
1344
  store: WorkbenchStore<WorkbenchThemeStoreState>;
1472
1345
  register(themes: readonly ThemePreferenceOption[]): Disposable_2;
@@ -1491,15 +1364,29 @@ export declare interface TreeActionParamsRequest {
1491
1364
  run: (args: unknown) => Promise<void>;
1492
1365
  }
1493
1366
 
1494
- declare interface TreeContext {
1495
- filter?: string;
1496
- resource?: ResourceRef;
1497
- /** Widget/view contribution id for trees rendered through a view-backed widget. */
1498
- viewId?: string;
1367
+ declare interface TreeContext extends TreeQueryContext {
1368
+ state: Readonly<TreeRendererState>;
1369
+ refresh(): void;
1370
+ setSelectedNode(nodeId: string | undefined): void;
1499
1371
  }
1500
1372
 
1373
+ declare interface TreeMoveEndpoint {
1374
+ kind: "section" | "node";
1375
+ sectionId: string;
1376
+ id: string;
1377
+ moveScope?: string;
1378
+ }
1379
+
1380
+ declare type TreeMovePolicy = (move: {
1381
+ source: TreeMoveEndpoint;
1382
+ destination: TreeMoveEndpoint;
1383
+ }) => boolean;
1384
+
1501
1385
  declare interface TreeNode {
1502
1386
  id: string;
1387
+ selected?: boolean;
1388
+ /** Host-owned customization boundary. Extension callbacks cannot set it. */
1389
+ moveScope?: string;
1503
1390
  label: string;
1504
1391
  icon?: string;
1505
1392
  iconElement?: unknown;
@@ -1544,6 +1431,13 @@ declare interface TreeNodeInlineInput {
1544
1431
 
1545
1432
  declare type TreeNodeRowVariant = "empty-state";
1546
1433
 
1434
+ declare interface TreeQueryContext {
1435
+ filter?: string;
1436
+ resource?: ResourceRef;
1437
+ /** Widget/view contribution id for trees rendered through a view-backed widget. */
1438
+ viewId?: string;
1439
+ }
1440
+
1547
1441
  declare interface TreeRendererContribution {
1548
1442
  id: string;
1549
1443
  title: string;
@@ -1554,9 +1448,10 @@ declare interface TreeRendererContribution {
1554
1448
  defaultExpandedSectionIds?: string[];
1555
1449
  defaultExpandedNodeIds?: string[];
1556
1450
  getBody(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
1557
- getHeader?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1558
- getFooter?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1451
+ getHeader?(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
1452
+ getFooter?(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
1559
1453
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1454
+ canMove?: TreeMovePolicy;
1560
1455
  moveNode?(source: TreeNode, target: TreeNode | undefined, ctx: TreeContext): Promise<void> | void;
1561
1456
  }
1562
1457
 
@@ -1576,10 +1471,10 @@ declare interface TreeRendererRegistry {
1576
1471
  setTreeRendererImplementation(impl: TreeRendererImplementation): void;
1577
1472
  getTreeRenderer(id: string): RegisteredTreeRendererContribution | undefined;
1578
1473
  listTreeRenderers(): RegisteredTreeRendererContribution[];
1579
- getBody(id: string, ctx?: TreeContext): Promise<TreeViewSection[]>;
1580
- getHeader(id: string, ctx?: TreeContext): Promise<TreeNode[]>;
1581
- getFooter(id: string, ctx?: TreeContext): Promise<TreeNode[]>;
1582
- getChildren(id: string, node: TreeNode, ctx?: TreeContext): Promise<TreeNode[]>;
1474
+ getBody(id: string, ctx?: TreeQueryContext): Promise<TreeViewSection[]>;
1475
+ getHeader(id: string, ctx?: TreeQueryContext): Promise<TreeViewSection[]>;
1476
+ getFooter(id: string, ctx?: TreeQueryContext): Promise<TreeViewSection[]>;
1477
+ getChildren(id: string, node: TreeNode, ctx?: TreeQueryContext): Promise<TreeNode[]>;
1583
1478
  getTreeState(id: string): TreeRendererState;
1584
1479
  setNodeExpanded(id: string, nodeId: string, expanded: boolean): void;
1585
1480
  setSectionExpanded(id: string, sectionId: string, expanded: boolean): void;
@@ -1610,6 +1505,8 @@ declare interface TreeSectionEmptyState {
1610
1505
 
1611
1506
  declare interface TreeViewSection {
1612
1507
  id: string;
1508
+ /** Host-owned customization boundary. Extension callbacks cannot set it. */
1509
+ moveScope?: string;
1613
1510
  label?: string;
1614
1511
  actions?: TreeAction[];
1615
1512
  collapsible?: boolean;
@@ -1622,13 +1519,11 @@ declare interface TreeViewSection {
1622
1519
  canReorder?: boolean;
1623
1520
  }
1624
1521
 
1625
- export declare const useWorkbenchClaim: () => WorkbenchPanelRenderInput | undefined;
1626
-
1627
1522
  export declare const useWorkbenchResourceActionResolver: (workbench: WorkbenchCoreContributionContext) => (resource: ResourceRef) => ResourceContextAction_2[];
1628
1523
 
1629
1524
  export declare const useWorkbenchStore: <TState, TSlice>(store: WorkbenchStore<TState>, selector: (state: TState) => TSlice) => TSlice;
1630
1525
 
1631
- export declare const useWorkbenchThemePreferences: (workbench: WorkbenchCore) => (ThemePreferenceOption_2 | {
1526
+ export declare const useWorkbenchThemePreferences: (workbench: WorkbenchCore) => (ThemePreferenceOption | {
1632
1527
  id: string;
1633
1528
  mode: "light";
1634
1529
  } | {
@@ -1644,6 +1539,11 @@ export declare const useWorkbenchThemePreferences: (workbench: WorkbenchCore) =>
1644
1539
  */
1645
1540
  declare type ViewMode = "board" | "list";
1646
1541
 
1542
+ declare interface ViewSettingsPanel extends SettingsPanelBase {
1543
+ kind: "view";
1544
+ viewId: string;
1545
+ }
1546
+
1647
1547
  declare interface WidgetContribution {
1648
1548
  id: string;
1649
1549
  title: string;
@@ -1655,15 +1555,13 @@ declare interface WidgetContribution {
1655
1555
  mountStrategy?: WidgetMountStrategy;
1656
1556
  closable?: boolean;
1657
1557
  hiddenByDefault?: boolean;
1658
- subPanelsOnly?: boolean;
1659
1558
  regionSize?: WorkbenchRegionSize;
1660
1559
  regionCollapsible?: boolean;
1661
1560
  headerBorderBottom?: boolean;
1662
- floatingPanels?: WorkbenchFloatingPanelVisibility;
1663
1561
  resourceKinds?: string[];
1664
1562
  priority?: number;
1665
1563
  rendererId: string;
1666
- openCommandId?: string;
1564
+ openCommand?: WorkbenchCommandTarget;
1667
1565
  eligibleLocations?: WorkbenchLocationEligibility;
1668
1566
  panelMenuOwner?: WorkbenchPanelMenuOwner;
1669
1567
  tab?: WorkbenchWidgetTab;
@@ -1673,8 +1571,6 @@ declare interface WidgetContribution {
1673
1571
 
1674
1572
  declare type WidgetMountStrategy = "active" | "keep-mounted";
1675
1573
 
1676
- declare type WidgetMountStrategy_2 = "active" | "keep-mounted";
1677
-
1678
1574
  declare type WidgetReusePolicy = "resource" | "none";
1679
1575
 
1680
1576
  export declare const Workbench: (props: WorkbenchProps) => JSX.Element;
@@ -1687,10 +1583,14 @@ export declare const WORKBENCH_SETTINGS_PANEL_WIDGET_ID = "workbench.settings.pa
1687
1583
 
1688
1584
  export declare const WORKBENCH_SETTINGS_WIDGET_ID = "workbench.settings";
1689
1585
 
1690
- export declare const WORKBENCH_TERMINAL_LAUNCHER_WIDGET_ID = "workbench.terminal.launcher";
1691
-
1692
1586
  export declare const WORKBENCH_TERMINAL_OPEN_COMMAND_ID = "workbench.terminal.open";
1693
1587
 
1588
+ /** Suggested secondary-region size for hosts that mount the terminal (createWorkbench regionSettings). */
1589
+ export declare const WORKBENCH_TERMINAL_PANEL_SIZE: {
1590
+ defaultPx: number;
1591
+ minPx: number;
1592
+ };
1593
+
1694
1594
  export declare const WORKBENCH_TERMINAL_WIDGET_ID = "workbench.terminal";
1695
1595
 
1696
1596
  export declare const WorkbenchAttachedSidePanel: (props: WorkbenchSidePanelProps) => JSX.Element;
@@ -1724,15 +1624,6 @@ declare interface WorkbenchBreadcrumbViewProps {
1724
1624
  workbench: WorkbenchCore;
1725
1625
  }
1726
1626
 
1727
- export declare const WorkbenchClaimContext: Context<WorkbenchPanelRenderInput | undefined>;
1728
-
1729
- declare interface WorkbenchClosedSubPanel {
1730
- region: WorkbenchPanelRegion;
1731
- reference: WorkbenchSubPanelRef;
1732
- resource?: ResourceRef;
1733
- title?: string;
1734
- }
1735
-
1736
1627
  declare interface WorkbenchCommandExecutionContext {
1737
1628
  resource?: ResourceRef;
1738
1629
  source?: "panel-add";
@@ -1785,7 +1676,7 @@ declare interface WorkbenchCommandPaletteState {
1785
1676
  paramsRequest: WorkbenchCommandParamsRequest | null;
1786
1677
  }
1787
1678
 
1788
- declare type WorkbenchCommandPaletteView = "main" | "theme" | "mode";
1679
+ declare type WorkbenchCommandPaletteView = "main" | "theme";
1789
1680
 
1790
1681
  declare interface WorkbenchCommandParamsRequest {
1791
1682
  record: {
@@ -1800,8 +1691,14 @@ declare interface WorkbenchCommandParamsRequest {
1800
1691
  context?: WorkbenchCommandExecutionContext;
1801
1692
  }
1802
1693
 
1694
+ declare interface WorkbenchCommandTarget {
1695
+ commandId: string;
1696
+ args?: unknown;
1697
+ }
1698
+
1803
1699
  declare interface WorkbenchCompositionAddablePanel extends WorkbenchModeAddablePanel {
1804
1700
  contribution: RegisteredWidgetContribution;
1701
+ open?(resource?: ResourceRef): void;
1805
1702
  }
1806
1703
 
1807
1704
  declare interface WorkbenchCompositionController {
@@ -1816,11 +1713,14 @@ declare interface WorkbenchCompositionRegionPanels {
1816
1713
 
1817
1714
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1818
1715
  host: WorkbenchHost;
1716
+ layout: WorkbenchLayoutModel;
1819
1717
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1820
1718
  unregisterModule(moduleId: string): void;
1821
1719
  }
1822
1720
 
1823
1721
  declare interface WorkbenchCoreContributionContext {
1722
+ pinPlacement(identity: PlacementIdentity): void;
1723
+ closePlacement(identity: PlacementIdentity): void;
1824
1724
  breadcrumbs: WorkbenchBreadcrumbController;
1825
1725
  commandPalette: WorkbenchCommandPaletteController;
1826
1726
  commandPaletteResources: CommandPaletteResourceRegistry;
@@ -1828,19 +1728,27 @@ declare interface WorkbenchCoreContributionContext {
1828
1728
  composition: WorkbenchCompositionController;
1829
1729
  context: ContextKeyService;
1830
1730
  focus: WorkbenchFocusController;
1831
- history: HistoryController;
1832
1731
  keybindings: KeybindingRegistry;
1833
- lastResource: WorkbenchLastResourceController;
1834
- layout: WorkbenchLayoutModel;
1732
+ layout: WorkbenchModuleLayoutModel;
1835
1733
  modes: WorkbenchModeRegistry;
1734
+ modePlacements: WorkbenchModePlacementRegistry;
1735
+ shellPlacements: WorkbenchShellPlacementRegistry;
1836
1736
  navigation: NavigationRegistry;
1837
- navigator: WorkbenchNavigator;
1737
+ navigationTrees: NavigationTreeRegistry;
1838
1738
  notifications: NotificationRegistry;
1839
- panels: WorkbenchPanelsController;
1739
+ overlays: WorkbenchOverlayRegistry;
1740
+ placeholders: WorkbenchPlaceholderRegistry;
1741
+ pageLocations: WorkbenchPageLocationController;
1742
+ pages: WorkbenchPageRegistry<WorkbenchWidgetPlacement>;
1743
+ panelMenuState: WorkbenchPanelMenuStateController;
1840
1744
  preferences: PreferenceRegistry;
1841
- renderers: WorkbenchRenderers;
1745
+ treeViews: WorkbenchTreeViews;
1842
1746
  resources: ResourceRegistry;
1747
+ views: WorkbenchViewRegistry;
1748
+ viewMenus: WorkbenchViewMenuRegistry;
1843
1749
  settings: SettingsRegistry;
1750
+ statusBar: WorkbenchStatusBarRegistry;
1751
+ statuses: WorkbenchStatusRegistry;
1844
1752
  shell: WorkbenchShellController;
1845
1753
  sidePanel: WorkbenchSidePanelController;
1846
1754
  terminal: WorkbenchTerminalController;
@@ -1850,6 +1758,7 @@ declare interface WorkbenchCoreContributionContext {
1850
1758
  onDidChangePrimaryResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1851
1759
  getActiveResource(): ResourceRef | undefined;
1852
1760
  onDidChangeActiveResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1761
+ registerChildModule(module: WorkbenchModuleContribution): Disposable_2;
1853
1762
  }
1854
1763
 
1855
1764
  export declare const WorkbenchDataTableView: (props: WorkbenchDataTableViewProps) => JSX.Element;
@@ -1864,8 +1773,6 @@ declare interface WorkbenchFileIconThemeStoreState {
1864
1773
  themes: readonly FileIconThemePreferenceOption[];
1865
1774
  }
1866
1775
 
1867
- declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1868
-
1869
1776
  export declare const WorkbenchFloatingSidePanel: (props: WorkbenchSidePanelProps) => JSX.Element | null;
1870
1777
 
1871
1778
  declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
@@ -1902,6 +1809,8 @@ declare interface WorkbenchHeaderActionsProps {
1902
1809
  controlSize?: "2xs" | "xs";
1903
1810
  }
1904
1811
 
1812
+ declare type WorkbenchHierarchyNode = ResourceRef | WorkbenchViewHierarchyNode;
1813
+
1905
1814
  declare interface WorkbenchHost {
1906
1815
  getSnapshot(): WorkbenchSnapshot;
1907
1816
  restoreSnapshot(snapshot: WorkbenchSnapshot): void;
@@ -1912,7 +1821,7 @@ declare interface WorkbenchHost {
1912
1821
  }
1913
1822
 
1914
1823
  export declare interface WorkbenchHotkeyRegistration {
1915
- commandId: string;
1824
+ id: string;
1916
1825
  hotkey: KeybindingSequence;
1917
1826
  enabled: boolean;
1918
1827
  ignoreInputs: boolean;
@@ -1926,12 +1835,6 @@ declare interface WorkbenchIconProps extends Omit<IconProps, "as" | "size"> {
1926
1835
  size?: number | string;
1927
1836
  }
1928
1837
 
1929
- export declare const WorkbenchKeepAliveLayer: (props: WorkbenchKeepAliveLayerProps) => JSX.Element;
1930
-
1931
- declare interface WorkbenchKeepAliveLayerProps {
1932
- workbench: WorkbenchCore;
1933
- }
1934
-
1935
1838
  export declare const WorkbenchKeybindingDispatcher: (props: WorkbenchKeybindingDispatcherProps) => null;
1936
1839
 
1937
1840
  declare interface WorkbenchKeybindingDispatcherProps {
@@ -1940,18 +1843,12 @@ declare interface WorkbenchKeybindingDispatcherProps {
1940
1843
  commandIds?: readonly string[];
1941
1844
  }
1942
1845
 
1943
- declare interface WorkbenchLastResourceController {
1944
- get(): ResourceRef | undefined;
1945
- set(resource: ResourceRef | undefined): void;
1946
- restore(): Promise<boolean>;
1947
- }
1948
-
1949
1846
  declare interface WorkbenchLayout {
1950
1847
  regions: Record<WorkbenchRegion_2, WorkbenchRegionState>;
1951
1848
  locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1952
1849
  activeWidgetId?: string;
1953
1850
  activeLocationWidgetId?: string;
1954
- activeResourceUri?: string;
1851
+ activeResourceKey?: string;
1955
1852
  }
1956
1853
 
1957
1854
  declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
@@ -1962,22 +1859,15 @@ declare interface WorkbenchLayoutStoreState {
1962
1859
  placeholders: Partial<Record<WorkbenchRegion_2, RegisteredPlaceholderContribution>>;
1963
1860
  }
1964
1861
 
1965
- declare type WorkbenchLocationContribution = WidgetContribution & WorkbenchPanelMenusContribution;
1966
-
1967
1862
  declare interface WorkbenchLocationEligibility {
1968
1863
  modeIds?: string[];
1969
1864
  resourceKinds?: string[];
1970
1865
  resourceIds?: string[];
1971
1866
  canOpen?(resource: ResourceRef): boolean;
1972
- }
1973
-
1974
- declare interface WorkbenchLocationRef {
1975
- key: string;
1976
- modeId?: string;
1977
- resource?: ResourceRef;
1978
- contributionId?: string;
1979
- instanceKey?: string;
1980
- title?: string;
1867
+ canOpenLocation?(location: {
1868
+ resource?: ResourceRef;
1869
+ viewId?: string;
1870
+ }): boolean;
1981
1871
  }
1982
1872
 
1983
1873
  export declare interface WorkbenchMenuItem {
@@ -2020,7 +1910,12 @@ declare type WorkbenchModeChangeListener = () => void;
2020
1910
  declare interface WorkbenchModeContribution {
2021
1911
  id: string;
2022
1912
  label?: string;
1913
+ defaultTheme?: string;
1914
+ floatingPanels?: "visible" | "hidden";
1915
+ chrome?: Partial<Record<"nav" | "sidenav" | "activity" | "status", string | false>>;
2023
1916
  panels?: readonly WorkbenchPanelRegion[];
1917
+ /** Region-level layout policy while this mode is active. */
1918
+ regionSettings?: Partial<Record<WorkbenchRegion_2, WorkbenchRegionSettings>>;
2024
1919
  resourceKinds?: readonly string[];
2025
1920
  defaultResource?: ResourceRef | (() => Promise<ResourceRef | undefined> | ResourceRef | undefined);
2026
1921
  listAddablePanels?(context: WorkbenchModeAddablePanelContext): readonly WorkbenchModeAddablePanel[];
@@ -2030,6 +1925,31 @@ declare interface WorkbenchModeContribution {
2030
1925
  reconcile?(ctx: WorkbenchModeActivationContext): void;
2031
1926
  }
2032
1927
 
1928
+ declare interface WorkbenchModePlacementContribution extends WorkbenchPlacementPresentation {
1929
+ readonly id: string;
1930
+ readonly ref: PlacementRef;
1931
+ readonly modeId: string;
1932
+ readonly item: WorkbenchOwnedPlacementItem;
1933
+ readonly region: DockedWorkbenchRegion;
1934
+ readonly order?: number;
1935
+ readonly movableTo?: readonly DockedWorkbenchRegion[];
1936
+ }
1937
+
1938
+ declare interface WorkbenchModePlacementRegistry {
1939
+ registerPlacement(placement: WorkbenchModePlacementContribution): Disposable_2;
1940
+ getPlacement(ref: PlacementRef): WorkbenchModePlacementContribution | undefined;
1941
+ listPlacements(modeId?: string): WorkbenchModePlacementContribution[];
1942
+ openPlacement(input: OpenModePlacementTarget): PlacementIdentity;
1943
+ updatePlacement(identity: PlacementIdentity, input: {
1944
+ resource?: ResourceRef;
1945
+ title?: string;
1946
+ open?: PageOpenIntent;
1947
+ }): void;
1948
+ closePlacement(identity: PlacementIdentity): void;
1949
+ resolvePlacements(modeId: string, context?: OwnedPlacementLocationContext): readonly ResolvedOwnedPlacement<WorkbenchWidgetPlacement>[];
1950
+ onDidChange(listener: () => void): Disposable_2;
1951
+ }
1952
+
2033
1953
  declare interface WorkbenchModeRegistry {
2034
1954
  store: WorkbenchStore<WorkbenchModeStoreState>;
2035
1955
  dispose(): void;
@@ -2074,74 +1994,7 @@ export declare interface WorkbenchModuleHostRegistration {
2074
1994
  disposable: Disposable_2;
2075
1995
  }
2076
1996
 
2077
- declare interface WorkbenchNavigationCommit {
2078
- modeId: string | undefined;
2079
- resource: ResourceRef | undefined;
2080
- replaceActive: boolean;
2081
- }
2082
-
2083
- declare type WorkbenchNavigationDiagnosticCode = "navigation_mode_missing" | "navigation_resource_missing" | "navigation_resource_incompatible" | "navigation_default_missing" | "navigation_target_stale";
2084
-
2085
- declare interface WorkbenchNavigationEntry {
2086
- entryId: string;
2087
- recordedAt: number;
2088
- location: WorkbenchLocationRef;
2089
- selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
2090
- kind: "resource" | "widget" | "mode";
2091
- modeId?: string;
2092
- resource?: ResourceRef;
2093
- widgetId?: string;
2094
- contributionId?: string;
2095
- title?: string;
2096
- closedSubPanel?: WorkbenchClosedSubPanel;
2097
- }
2098
-
2099
- declare type WorkbenchNavigationResult = {
2100
- ok: true;
2101
- modeId: string | undefined;
2102
- resource: ResourceRef | undefined;
2103
- } | {
2104
- ok: false;
2105
- code: WorkbenchNavigationDiagnosticCode;
2106
- message: string;
2107
- };
2108
-
2109
- declare interface WorkbenchNavigationTarget {
2110
- modeId?: string;
2111
- resource?: ResourceRef;
2112
- replaceActive?: boolean;
2113
- }
2114
-
2115
- declare interface WorkbenchNavigator {
2116
- configure(hooks: WorkbenchNavigatorHostHooks): void;
2117
- getSelectedResource(): ResourceRef | undefined;
2118
- open(target: WorkbenchNavigationTarget): Promise<WorkbenchNavigationResult>;
2119
- commitContext(input: WorkbenchNavigatorCommitInput): WorkbenchNavigationResult;
2120
- getLastResource(projectId: string | undefined, modeId: string): ResourceRef | undefined;
2121
- forgetResource(uri: string): void;
2122
- onDidCommit(listener: (commit: WorkbenchNavigationCommit) => void): {
2123
- dispose(): void;
2124
- };
2125
- }
2126
-
2127
- declare interface WorkbenchNavigatorCommitInput {
2128
- modeId?: string | null;
2129
- resource?: ResourceRef | null;
2130
- replaceActive?: boolean;
2131
- present?: boolean;
2132
- }
2133
-
2134
- declare interface WorkbenchNavigatorHostHooks {
2135
- getProjectId?(): string | undefined;
2136
- getSelectedResource?(): ResourceRef | undefined;
2137
- interpretSelection?(resource: ResourceRef): ResourceRef | undefined;
2138
- applySelection?(resource: ResourceRef | undefined): void;
2139
- applyScope?(commit: WorkbenchNavigationCommit): void;
2140
- applyBreadcrumb?(resource: ResourceRef | undefined): void;
2141
- presentResource?(resource: ResourceRef, input: {
2142
- replaceActive: boolean;
2143
- }): Promise<unknown> | unknown;
2144
- }
1997
+ declare type WorkbenchModuleLayoutModel = Omit<WorkbenchLayoutModel, "registerPanel" | "registerWidget" | "openPanel" | "openWidget" | "registerPlaceholder" | "registerPanelMenu">;
2145
1998
 
2146
1999
  declare interface WorkbenchNotification {
2147
2000
  id?: string;
@@ -2183,12 +2036,26 @@ declare interface WorkbenchNotificationStoreState {
2183
2036
  notifications: Record<string, RegisteredWorkbenchNotification>;
2184
2037
  }
2185
2038
 
2039
+ declare interface WorkbenchOverlayContribution extends Omit<WorkbenchPlacementPresentation, "mountStrategy"> {
2040
+ id: string;
2041
+ viewId: string;
2042
+ closable?: boolean;
2043
+ }
2044
+
2186
2045
  export declare const WorkbenchOverlayLayer: (props: WorkbenchOverlayLayerProps) => JSX.Element | null;
2187
2046
 
2188
2047
  declare interface WorkbenchOverlayLayerProps {
2189
2048
  workbench: WorkbenchCore;
2190
2049
  }
2191
2050
 
2051
+ declare interface WorkbenchOverlayRegistry {
2052
+ registerOverlay(overlay: WorkbenchOverlayContribution): Disposable_2;
2053
+ getOverlay(id: string): WorkbenchOverlayContribution | undefined;
2054
+ listOverlays(): WorkbenchOverlayContribution[];
2055
+ openOverlay(id: string, input?: OpenWorkbenchOverlayInput): string;
2056
+ closeOverlay(instanceId: string): void;
2057
+ }
2058
+
2192
2059
  export declare interface WorkbenchOverlayWidgetConfig {
2193
2060
  size?: "xs" | "sm" | "md" | "lg" | "xl" | "cover" | "full";
2194
2061
  placement?: "center" | "top" | "bottom";
@@ -2209,6 +2076,107 @@ export declare interface WorkbenchOverlayWidgetConfig {
2209
2076
  closeTriggerTop?: string;
2210
2077
  }
2211
2078
 
2079
+ declare type WorkbenchOwnedPlacementItem = PlacementItem;
2080
+
2081
+ declare interface WorkbenchPageContribution {
2082
+ id: string;
2083
+ ref: PageRef;
2084
+ title?: Localizable<string>;
2085
+ icon?: string;
2086
+ path: string;
2087
+ modeId: string;
2088
+ parentId?: string;
2089
+ resource?: ResourceConstraint;
2090
+ main: WorkbenchPageMain;
2091
+ slots: readonly WorkbenchPageSlot[];
2092
+ }
2093
+
2094
+ declare interface WorkbenchPageLocationController {
2095
+ historyStore: WorkbenchStore<WorkbenchPageLocationHistoryState>;
2096
+ setProject(projectId: string): void;
2097
+ clearProject(): void;
2098
+ isCurrentProjectUrl(projectId: string): boolean;
2099
+ hasCurrentPageUrl(projectId: string): boolean;
2100
+ boot(projectId: string): WorkbenchPageNavigationResult;
2101
+ switchProject(projectId: string): WorkbenchPageNavigationResult;
2102
+ navigate(target: NavigationTargetPage_2): WorkbenchPageNavigationResult;
2103
+ replay(location: PageLocation): WorkbenchPageNavigationResult;
2104
+ navigateToParent(): WorkbenchPageNavigationResult;
2105
+ closePlacement(identity: PlacementIdentity): WorkbenchPageNavigationResult;
2106
+ goBack(): void;
2107
+ goForward(): void;
2108
+ dispose(): void;
2109
+ }
2110
+
2111
+ declare interface WorkbenchPageLocationDiagnostic {
2112
+ code: "page-location-unresolved";
2113
+ source: "boot" | "history" | "navigation" | "project-switch";
2114
+ message: string;
2115
+ }
2116
+
2117
+ declare interface WorkbenchPageLocationHistoryState {
2118
+ canGoBack: boolean;
2119
+ canGoForward: boolean;
2120
+ }
2121
+
2122
+ declare type WorkbenchPageMain = PageMain extends infer Main ? Main extends PageMain ? Omit<Main, "tab"> & {
2123
+ readonly tab?: WorkbenchPlacementPresentation["tab"];
2124
+ } : never : never;
2125
+
2126
+ declare type WorkbenchPageNavigationResult = {
2127
+ ok: true;
2128
+ location: PageLocation;
2129
+ } | {
2130
+ ok: false;
2131
+ diagnostic: WorkbenchPageLocationDiagnostic;
2132
+ };
2133
+
2134
+ declare interface WorkbenchPageRegistry<Value> {
2135
+ store: WorkbenchStore<WorkbenchPageRegistryStoreState<Value>>;
2136
+ registerPage(page: WorkbenchPageContribution): {
2137
+ dispose(): void;
2138
+ };
2139
+ getPage(pageId: string): WorkbenchPageContribution | undefined;
2140
+ listPages(): WorkbenchPageContribution[];
2141
+ pinPlacement(identity: PlacementIdentity): void;
2142
+ openSlot(input: WorkbenchPageSlotOpenInput): void;
2143
+ }
2144
+
2145
+ declare interface WorkbenchPageRegistryStoreState<Value> {
2146
+ pages: Readonly<Record<string, WorkbenchPageContribution>>;
2147
+ pageStates: Readonly<Record<string, WorkbenchPageRuntimeState>>;
2148
+ projectId?: string;
2149
+ location?: PageLocation;
2150
+ activeModeId?: string;
2151
+ activePageId?: string;
2152
+ placements: readonly ResolvedOwnedPlacement<Value>[];
2153
+ reconciliation: OwnedPlacementReconciliation<Value>;
2154
+ }
2155
+
2156
+ declare interface WorkbenchPageRuntimeState {
2157
+ openStaticSlotIds: readonly string[];
2158
+ resourceInstances: Readonly<Record<string, readonly WorkbenchPageSlotInstance[]>>;
2159
+ activePrimaryInstanceKey?: string;
2160
+ }
2161
+
2162
+ declare interface WorkbenchPageSlot extends Omit<PageSlot, "tab"> {
2163
+ readonly tab?: WorkbenchPlacementPresentation["tab"];
2164
+ }
2165
+
2166
+ declare interface WorkbenchPageSlotInstance {
2167
+ instanceKey: string;
2168
+ resource: ResourceRef;
2169
+ section?: FileRendererSectionTarget;
2170
+ open?: PageOpenIntent;
2171
+ }
2172
+
2173
+ declare interface WorkbenchPageSlotOpenInput {
2174
+ pageId: string;
2175
+ slotId: string;
2176
+ resource?: ResourceRef;
2177
+ open?: PageOpenIntent;
2178
+ }
2179
+
2212
2180
  declare interface WorkbenchPanelContribution {
2213
2181
  id: string;
2214
2182
  title: string;
@@ -2219,16 +2187,15 @@ declare interface WorkbenchPanelContribution {
2219
2187
  singleton?: boolean;
2220
2188
  reuse?: WorkbenchPanelReusePolicy;
2221
2189
  mountStrategy?: WorkbenchPanelMountStrategy;
2190
+ closable?: boolean;
2222
2191
  hiddenByDefault?: boolean;
2223
- subPanelsOnly?: boolean;
2224
2192
  regionSize?: WorkbenchRegionSize;
2225
2193
  regionCollapsible?: boolean;
2226
2194
  headerBorderBottom?: boolean;
2227
- floatingPanels?: WorkbenchFloatingPanelVisibility;
2228
2195
  resourceKinds?: string[];
2229
2196
  eligibleLocations?: WorkbenchLocationEligibility;
2230
2197
  priority?: number;
2231
- openCommandId?: string;
2198
+ openCommand?: WorkbenchCommandTarget;
2232
2199
  tab?: WorkbenchPanelTab;
2233
2200
  config?: unknown;
2234
2201
  canOpen?(resource: ResourceRef): boolean;
@@ -2240,11 +2207,14 @@ declare interface WorkbenchPanelContribution {
2240
2207
  declare interface WorkbenchPanelInstance {
2241
2208
  instanceId: string;
2242
2209
  panelId: string;
2210
+ placementIdentity?: PlacementIdentity;
2211
+ viewId?: string;
2243
2212
  ownerId?: string;
2244
2213
  source?: ContributionSource;
2245
2214
  resource?: ResourceRef;
2246
- resourceUri?: string;
2247
- ownerResourceUri?: string;
2215
+ section?: FileRendererSectionTarget;
2216
+ resourceKey?: string;
2217
+ ownerResourceKey?: string;
2248
2218
  title?: string;
2249
2219
  pinned?: boolean;
2250
2220
  closable: boolean;
@@ -2254,23 +2224,6 @@ declare interface WorkbenchPanelInstance {
2254
2224
  tab?: WorkbenchPanelTab;
2255
2225
  }
2256
2226
 
2257
- declare interface WorkbenchPanelInstance_2 {
2258
- instanceId: string;
2259
- panelId: string;
2260
- ownerId?: string;
2261
- source?: ContributionSource_2;
2262
- resource?: ResourceRef_2;
2263
- resourceUri?: string;
2264
- ownerResourceUri?: string;
2265
- title?: string;
2266
- pinned?: boolean;
2267
- closable: boolean;
2268
- mountStrategy?: WorkbenchPanelMountStrategy_2;
2269
- hiddenByDefault?: boolean;
2270
- tabRetention?: WorkbenchTabRetention_2;
2271
- tab?: WorkbenchPanelTab_2;
2272
- }
2273
-
2274
2227
  declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2275
2228
  region: WorkbenchPanelMenuRegion;
2276
2229
  fallbackRegion?: WorkbenchPanelMenuRegion;
@@ -2318,15 +2271,25 @@ declare const workbenchPanelMenuRegions: {
2318
2271
  };
2319
2272
  };
2320
2273
 
2321
- declare interface WorkbenchPanelMenusContribution {
2322
- panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2274
+ declare type WorkbenchPanelMenuSide = "left" | "right";
2275
+
2276
+ declare interface WorkbenchPanelMenuState {
2277
+ openByMenuId: Record<string, boolean>;
2323
2278
  }
2324
2279
 
2325
- declare type WorkbenchPanelMenuSide = "left" | "right";
2280
+ declare type WorkbenchPanelMenuStateChangeListener = (state: WorkbenchPanelMenuState) => void;
2326
2281
 
2327
- declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2282
+ declare interface WorkbenchPanelMenuStateController {
2283
+ store: WorkbenchStore<WorkbenchPanelMenuState>;
2284
+ isOpen(menuId: string): boolean;
2285
+ setOpen(menuId: string, open: boolean): void;
2286
+ toggle(menuId: string): void;
2287
+ setPersistenceScope(scope: string | undefined): void;
2288
+ getPersistenceScope(): string | undefined;
2289
+ onDidChange(listener: WorkbenchPanelMenuStateChangeListener): Disposable_2;
2290
+ }
2328
2291
 
2329
- declare type WorkbenchPanelMountStrategy_2 = WidgetMountStrategy_2;
2292
+ declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2330
2293
 
2331
2294
  declare type WorkbenchPanelOpenStrategy = {
2332
2295
  kind: "persistent";
@@ -2355,25 +2318,29 @@ export declare interface WorkbenchPanelRenderInput {
2355
2318
 
2356
2319
  declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
2357
2320
 
2358
- declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
2321
+ declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2359
2322
 
2360
- declare interface WorkbenchPanelsController {
2361
- store: WorkbenchStore<WorkbenchPanelsState>;
2362
- isOpen(regionId: string): boolean;
2363
- setOpen(regionId: string, open: boolean): void;
2364
- toggle(regionId: string): void;
2365
- setPersistenceScope(scope: string | undefined): void;
2366
- getPersistenceScope(): string | undefined;
2367
- onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
2323
+ declare interface WorkbenchPlaceholderContribution {
2324
+ id: string;
2325
+ viewId: string;
2326
+ title?: string;
2327
+ region: WorkbenchRegion_2;
2328
+ regionSize?: WorkbenchRegionSize;
2329
+ regionCollapsible?: boolean;
2330
+ config?: unknown;
2368
2331
  }
2369
2332
 
2370
- declare interface WorkbenchPanelsState {
2371
- openByRegionId: Record<string, boolean>;
2333
+ declare interface WorkbenchPlaceholderRegistry {
2334
+ registerPlaceholder(placeholder: WorkbenchPlaceholderContribution, metadata?: ContributionMetadata): Disposable_2;
2372
2335
  }
2373
2336
 
2374
- declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2375
-
2376
- declare type WorkbenchPanelTab_2 = WorkbenchWidgetTab_2;
2337
+ declare interface WorkbenchPlacementPresentation {
2338
+ mountStrategy?: WidgetMountStrategy;
2339
+ hiddenByDefault?: boolean;
2340
+ headerBorderBottom?: boolean;
2341
+ tab?: WorkbenchPanelTab;
2342
+ config?: unknown;
2343
+ }
2377
2344
 
2378
2345
  export declare const WorkbenchPreferencesForm: (props: WorkbenchPreferencesFormProps) => JSX.Element;
2379
2346
 
@@ -2393,6 +2360,15 @@ export declare interface WorkbenchPreferencesFormProps {
2393
2360
  declare interface WorkbenchProps {
2394
2361
  workbench: WorkbenchCore;
2395
2362
  renderParamField?: CommandParamFieldRenderer;
2363
+ /** Icon shown in the closed Side Panel's bubble launcher. */
2364
+ sidePanelBubbleIcon?: ReactNode;
2365
+ /** Host action for opening the closed Side Panel from its bubble launcher. */
2366
+ onOpenSidePanel?: () => void;
2367
+ }
2368
+
2369
+ declare interface WorkbenchReactViewBody {
2370
+ kind: "react";
2371
+ render: WorkbenchRendererRegistration["render"];
2396
2372
  }
2397
2373
 
2398
2374
  export declare const WorkbenchRegion: (props: WorkbenchRegionProps) => JSX.Element | null;
@@ -2407,7 +2383,10 @@ declare interface WorkbenchRegionProps {
2407
2383
  transparent?: boolean;
2408
2384
  }
2409
2385
 
2410
- declare const workbenchRegions: readonly ["nav", "activity", "sidenav-header", "sidenav", "main-header", "main-left-menu", "main", "main-right-menu", "secondary-header", "secondary-left-menu", "secondary", "secondary-right-menu", "side-header", "side-left-menu", "side", "side-right-menu", "status", "overlay"];
2386
+ declare const workbenchRegions: readonly ["nav", "activity", "sidenav", "main-header", "main-left-menu", "main", "main-right-menu", "secondary-header", "secondary-left-menu", "secondary", "secondary-right-menu", "side-header", "side-left-menu", "side", "side-right-menu", "status", "overlay"];
2387
+
2388
+ /** Region-level layout policy owned by the active mode or the host, never by a placement. */
2389
+ declare type WorkbenchRegionSettings = ModeRegionSettings;
2411
2390
 
2412
2391
  declare interface WorkbenchRegionSize {
2413
2392
  defaultPx?: number;
@@ -2431,35 +2410,9 @@ declare interface WorkbenchRegionTabsProps {
2431
2410
  visibilityStorageKey?: string;
2432
2411
  }
2433
2412
 
2434
- declare type WorkbenchRendererChangeListener = () => void;
2435
-
2436
- export declare type WorkbenchRendererRegistration = {
2413
+ declare interface WorkbenchRendererRegistration {
2437
2414
  id: string;
2438
- keepAlive?: false;
2439
2415
  render: (input: WorkbenchPanelRenderInput) => unknown;
2440
- } | {
2441
- id: string;
2442
- keepAlive: true;
2443
- render: () => unknown;
2444
- };
2445
-
2446
- export declare interface WorkbenchRendererRegistry {
2447
- store: WorkbenchStore<WorkbenchRendererStoreState>;
2448
- registerRenderer(renderer: WorkbenchRendererRegistration): Disposable_2;
2449
- getRenderer(id: string): WorkbenchRendererRegistration | undefined;
2450
- listRenderers(): WorkbenchRendererRegistration[];
2451
- onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
2452
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
2453
- getHost(rendererId: string): HTMLElement | undefined;
2454
- getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
2455
- }
2456
-
2457
- declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
2458
-
2459
- declare interface WorkbenchRendererStoreState {
2460
- renderers: Record<string, WorkbenchRendererRegistration>;
2461
- hosts: Record<string, RegisteredKeepAliveHost>;
2462
- claims: Record<string, WorkbenchPanelRenderInput>;
2463
2416
  }
2464
2417
 
2465
2418
  export declare interface WorkbenchSettingsModuleOptions {
@@ -2478,7 +2431,29 @@ declare interface WorkbenchShellController {
2478
2431
  onDidChange(listener: () => void): Disposable_2;
2479
2432
  }
2480
2433
 
2481
- declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
2434
+ declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | "side";
2435
+
2436
+ declare interface WorkbenchShellPlacementContribution extends WorkbenchPlacementPresentation {
2437
+ readonly id: string;
2438
+ readonly item: WorkbenchOwnedPlacementItem;
2439
+ readonly region: WorkbenchRegion_2;
2440
+ readonly order?: number;
2441
+ }
2442
+
2443
+ declare interface WorkbenchShellPlacementRegistry {
2444
+ registerPlacement(placement: WorkbenchShellPlacementContribution): Disposable_2;
2445
+ getPlacement(placementId: string): WorkbenchShellPlacementContribution | undefined;
2446
+ listPlacements(): WorkbenchShellPlacementContribution[];
2447
+ openPlacement(input: OpenWorkbenchShellPlacementInput): PlacementIdentity;
2448
+ updatePlacement(identity: PlacementIdentity, input: {
2449
+ resource?: ResourceRef;
2450
+ title?: string;
2451
+ open?: PageOpenIntent;
2452
+ }): void;
2453
+ closePlacement(identity: PlacementIdentity): void;
2454
+ resolvePlacements(context?: OwnedPlacementLocationContext): readonly ResolvedOwnedPlacement<WorkbenchWidgetPlacement>[];
2455
+ onDidChange(listener: () => void): Disposable_2;
2456
+ }
2482
2457
 
2483
2458
  declare interface WorkbenchShellRegionState {
2484
2459
  open: boolean;
@@ -2488,6 +2463,7 @@ declare interface WorkbenchShellRegionState {
2488
2463
  declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
2489
2464
 
2490
2465
  declare interface WorkbenchSidePanelController {
2466
+ canFloat(): boolean;
2491
2467
  store: WorkbenchStore<WorkbenchSidePanelState>;
2492
2468
  getMode(): WorkbenchSidePanelMode;
2493
2469
  setMode(mode: WorkbenchSidePanelMode): void;
@@ -2503,6 +2479,8 @@ declare interface WorkbenchSidePanelProps {
2503
2479
  contentSlotRef: (node: HTMLDivElement | null) => void;
2504
2480
  bottomOffset?: string;
2505
2481
  header?: ReactNode;
2482
+ bubbleIcon?: ReactNode;
2483
+ onOpen?: () => void;
2506
2484
  }
2507
2485
 
2508
2486
  declare interface WorkbenchSidePanelState {
@@ -2513,6 +2491,52 @@ declare interface WorkbenchSnapshot {
2513
2491
  layout: WorkbenchLayout;
2514
2492
  }
2515
2493
 
2494
+ declare interface WorkbenchStatusBarItem {
2495
+ id: string;
2496
+ viewId: string;
2497
+ slot: WorkbenchStatusBarSlot;
2498
+ order?: number;
2499
+ isVisible?(): boolean;
2500
+ }
2501
+
2502
+ declare interface WorkbenchStatusBarRegistry {
2503
+ store: WorkbenchStore<WorkbenchStatusBarRegistryState>;
2504
+ registerItem(item: WorkbenchStatusBarItem): Disposable_2;
2505
+ getItem(id: string): WorkbenchStatusBarItem | undefined;
2506
+ listItems(): WorkbenchStatusBarItem[];
2507
+ listVisibleItems(slot?: WorkbenchStatusBarSlot): WorkbenchStatusBarItem[];
2508
+ }
2509
+
2510
+ declare interface WorkbenchStatusBarRegistryState {
2511
+ items: Record<string, WorkbenchStatusBarItem>;
2512
+ }
2513
+
2514
+ declare type WorkbenchStatusBarSlot = "leading" | "trailing";
2515
+
2516
+ declare interface WorkbenchStatusRegistry {
2517
+ store: WorkbenchStore<WorkbenchStatusRegistryState>;
2518
+ registerStatusSet(contribution: WorkbenchStatusSetContribution, metadata?: ContributionMetadata): Disposable_2;
2519
+ getStatusSet(id: string): RegisteredWorkbenchStatusSet | undefined;
2520
+ listStatusSets(): RegisteredWorkbenchStatusSet[];
2521
+ getStatuses(id: string): readonly WorkflowStatus[] | undefined;
2522
+ load(id: string): Promise<readonly WorkflowStatus[]>;
2523
+ query(id: string): Promise<readonly WorkflowStatus[]>;
2524
+ save(id: string, statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]>;
2525
+ }
2526
+
2527
+ declare interface WorkbenchStatusRegistryState {
2528
+ statusSets: Record<string, RegisteredWorkbenchStatusSet>;
2529
+ values: Record<string, readonly WorkflowStatus[]>;
2530
+ }
2531
+
2532
+ declare interface WorkbenchStatusSetContribution {
2533
+ id: string;
2534
+ title: string;
2535
+ actions?: readonly WorkflowStatusAction[];
2536
+ query(): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2537
+ save?(statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2538
+ }
2539
+
2516
2540
  declare interface WorkbenchStore<TState> {
2517
2541
  getState(): TState;
2518
2542
  getInitialState(): TState;
@@ -2529,15 +2553,26 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2529
2553
 
2530
2554
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2531
2555
 
2532
- declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2533
- region: WorkbenchPanelRegion;
2534
- fallbackRegion?: WorkbenchPanelRegion;
2535
- } & WorkbenchPanelMenusContribution;
2556
+ declare type WorkbenchTabAction = ({
2557
+ kind: "command";
2558
+ } & WorkbenchCommandTarget) | {
2559
+ kind: "navigation";
2560
+ target: NavigationTarget;
2561
+ };
2536
2562
 
2537
- declare interface WorkbenchSubPanelRef {
2538
- contributionId: string;
2539
- resourceUri?: string;
2540
- instanceKey?: string;
2563
+ declare interface WorkbenchTabMenuGroup {
2564
+ id: string;
2565
+ rows: readonly WorkbenchTabMenuRow[];
2566
+ }
2567
+
2568
+ declare interface WorkbenchTabMenuRow {
2569
+ id: string;
2570
+ label: string;
2571
+ icon?: string;
2572
+ iconColor?: string;
2573
+ selected?: boolean;
2574
+ disabled?: boolean;
2575
+ action?: WorkbenchTabAction;
2541
2576
  }
2542
2577
 
2543
2578
  declare type WorkbenchTabPosition = "start" | "end" | {
@@ -2548,7 +2583,16 @@ declare type WorkbenchTabPosition = "start" | "end" | {
2548
2583
 
2549
2584
  declare type WorkbenchTabRetention = "preview" | "persistent";
2550
2585
 
2551
- declare type WorkbenchTabRetention_2 = "preview" | "persistent";
2586
+ declare interface WorkbenchTabSnapshot {
2587
+ label?: string;
2588
+ icon?: string;
2589
+ indicator?: {
2590
+ icon: string;
2591
+ color?: string;
2592
+ label?: string;
2593
+ };
2594
+ menu?: readonly WorkbenchTabMenuGroup[];
2595
+ }
2552
2596
 
2553
2597
  declare interface WorkbenchTerminalController {
2554
2598
  store: WorkbenchStore<WorkbenchTerminalState>;
@@ -2557,6 +2601,7 @@ declare interface WorkbenchTerminalController {
2557
2601
  setSessionOpener(opener: WorkbenchTerminalSessionOpener | null): void;
2558
2602
  /** Opens a session; the live adapter stays host-side and only the id is returned. */
2559
2603
  open(input: {
2604
+ bindingId?: string;
2560
2605
  request: WorkbenchTerminalSessionRequest;
2561
2606
  title?: string;
2562
2607
  }): Promise<{
@@ -2575,6 +2620,7 @@ declare interface WorkbenchTerminalController {
2575
2620
  sessionId: string;
2576
2621
  signal?: string;
2577
2622
  }): Promise<void>;
2623
+ killBinding(bindingId: string): Promise<void>;
2578
2624
  subscribe(sessionId: string, sink: WorkbenchTerminalSessionSink): () => void;
2579
2625
  getSession(sessionId: string): WorkbenchTerminalSessionModel | undefined;
2580
2626
  listSessions(): WorkbenchTerminalSessionModel[];
@@ -2586,8 +2632,8 @@ declare interface WorkbenchTerminalController {
2586
2632
  * Body of the host-owned terminal panel. Chrome (tab, title, close action,
2587
2633
  * resize) comes from the workbench `secondary` region; this component only mounts
2588
2634
  * the terminal bound to the workbench terminal controller. Collapsing the panel
2589
- * keeps the terminal mounted. Closing its tab unmounts the terminal and kills
2590
- * its session (close = kill).
2635
+ * keeps the terminal mounted. Scope changes keep the session alive; the terminal
2636
+ * module ends it when its tab is explicitly closed.
2591
2637
  */
2592
2638
  export declare const WorkbenchTerminalPanel: (props: WorkbenchTerminalPanelProps) => JSX.Element;
2593
2639
 
@@ -2646,12 +2692,14 @@ declare interface WorkbenchTerminalState {
2646
2692
  sessionsById: Record<string, WorkbenchTerminalSessionModel>;
2647
2693
  }
2648
2694
 
2649
- export declare const WorkbenchThemeProvider: (props: WorkbenchThemeProviderProps) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | ReactPortal | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | JSX.Element | null | undefined;
2695
+ export declare const WorkbenchThemeProvider: (props: WorkbenchThemeProviderProps) => string | number | bigint | boolean | JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | ReactPortal | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
2650
2696
 
2651
2697
  declare interface WorkbenchThemeProviderProps {
2652
2698
  children: ReactNode;
2653
- initialThemePreference?: ThemePreference_3;
2654
- themePreferences?: readonly ThemePreferenceOption_3[];
2699
+ initialThemePreference?: ThemePreference_2;
2700
+ defaultThemePreference?: ThemePreference_2;
2701
+ preferenceScope?: string;
2702
+ themePreferences?: readonly ThemePreferenceOption_2[];
2655
2703
  fileIconThemePreferences?: readonly FileIconThemePreferenceOption_2[];
2656
2704
  }
2657
2705
 
@@ -2678,22 +2726,77 @@ declare interface WorkbenchTreeViewProps {
2678
2726
  onSidenavContextActionsChange?: (actions: ResourceContextAction_2[]) => void;
2679
2727
  }
2680
2728
 
2729
+ declare type WorkbenchTreeViews = Pick<TreeRendererRegistry, "getTreeState" | "setNodeExpanded" | "setSectionExpanded" | "setSelectedNode">;
2730
+
2731
+ declare type WorkbenchViewBody = WorkbenchReactViewBody | NativeViewBody<"tree", TreeRendererContribution> | NativeViewBody<"file", FileRendererContribution> | NativeViewBody<"controls", ControlsRendererContribution> | NativeViewBody<"kanban", KanbanRendererContribution> | NativeViewBody<"dataTable", DataTableRendererContribution>;
2732
+
2733
+ declare interface WorkbenchViewContribution {
2734
+ id: string;
2735
+ title: string;
2736
+ icon?: string;
2737
+ body: WorkbenchViewBody;
2738
+ }
2739
+
2740
+ declare interface WorkbenchViewHierarchyNode {
2741
+ type: "view";
2742
+ viewId: string;
2743
+ label?: string;
2744
+ icon?: string;
2745
+ }
2746
+
2747
+ declare interface WorkbenchViewMenuContribution {
2748
+ id: string;
2749
+ ownerViewId: string;
2750
+ viewId: string;
2751
+ side: "left" | "right";
2752
+ priority?: number;
2753
+ mountStrategy?: "active" | "keep-mounted";
2754
+ hiddenByDefault?: boolean;
2755
+ regionSize?: WorkbenchRegionSize;
2756
+ regionCollapsible?: boolean;
2757
+ headerBorderBottom?: boolean;
2758
+ config?: unknown;
2759
+ }
2760
+
2761
+ declare interface WorkbenchViewMenuRegistry {
2762
+ registerViewMenu(menu: WorkbenchViewMenuContribution): Disposable_2;
2763
+ getViewMenu(id: string): WorkbenchViewMenuContribution | undefined;
2764
+ listViewMenus(ownerViewId?: string): WorkbenchViewMenuContribution[];
2765
+ definitionsFor(ownerViewId: string, placementId: string): readonly WorkbenchPanelMenuDefinition[];
2766
+ }
2767
+
2768
+ declare interface WorkbenchViewRegistry {
2769
+ store: WorkbenchStore<WorkbenchViewRegistryStoreState>;
2770
+ registerView(view: WorkbenchViewContribution, metadata?: ContributionMetadata): Disposable_2;
2771
+ getView(viewId: string): RegisteredWorkbenchView | undefined;
2772
+ listViews(): RegisteredWorkbenchView[];
2773
+ refreshView(viewId: string, input?: unknown): void;
2774
+ }
2775
+
2776
+ declare interface WorkbenchViewRegistryStoreState {
2777
+ views: Record<string, RegisteredWorkbenchView>;
2778
+ }
2779
+
2681
2780
  export declare const WorkbenchWidgetHost: (props: WorkbenchWidgetHostProps) => JSX.Element;
2682
2781
 
2683
2782
  declare interface WorkbenchWidgetHostProps {
2684
2783
  workbench: WorkbenchCore;
2685
2784
  placement: WorkbenchWidgetPlacement;
2686
2785
  widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
2786
+ region?: WorkbenchRegion_2;
2687
2787
  }
2688
2788
 
2689
2789
  declare interface WorkbenchWidgetPlacement {
2690
2790
  widgetId: string;
2691
2791
  contributionId: string;
2792
+ placementIdentity?: PlacementIdentity;
2793
+ viewId?: string;
2692
2794
  ownerId?: string;
2693
2795
  source?: ContributionSource;
2694
2796
  resource?: ResourceRef;
2695
- resourceUri?: string;
2696
- ownerResourceUri?: string;
2797
+ section?: FileRendererSectionTarget;
2798
+ resourceKey?: string;
2799
+ ownerResourceKey?: string;
2697
2800
  title?: string;
2698
2801
  pinned?: boolean;
2699
2802
  closable?: boolean;
@@ -2707,15 +2810,35 @@ declare interface WorkbenchWidgetPlacement {
2707
2810
  declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2708
2811
 
2709
2812
  declare interface WorkbenchWidgetTab {
2710
- contentRendererId?: string;
2711
- /** Custom actions shown when the user activates an already-active tab. */
2712
- customMenuRendererId?: string;
2813
+ getSnapshot(instance: WorkbenchPanelInstance): WorkbenchTabSnapshot;
2814
+ subscribe?(listener: () => void): {
2815
+ dispose(): void;
2816
+ } | (() => void);
2817
+ refreshEvents?: readonly string[];
2713
2818
  }
2714
2819
 
2715
- declare interface WorkbenchWidgetTab_2 {
2716
- contentRendererId?: string;
2717
- /** Custom actions shown when the user activates an already-active tab. */
2718
- customMenuRendererId?: string;
2820
+ declare interface WorkflowStatus {
2821
+ id: string;
2822
+ label: string;
2823
+ color: string;
2824
+ icon?: string | null;
2825
+ sortOrder: number;
2826
+ isDefault?: boolean;
2827
+ actions?: readonly string[];
2828
+ }
2829
+
2830
+ declare interface WorkflowStatusAction {
2831
+ id: string;
2832
+ label: string;
2833
+ icon?: string;
2834
+ }
2835
+
2836
+ export declare const WorkflowStatusSettings: (props: WorkflowStatusSettingsProps) => JSX.Element;
2837
+
2838
+ declare interface WorkflowStatusSettingsProps {
2839
+ workbench: {
2840
+ statuses: WorkbenchStatusRegistry;
2841
+ };
2719
2842
  }
2720
2843
 
2721
2844
  export { }