@pstdio/workbench 0.2.1 → 0.3.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 (39) hide show
  1. package/README.md +100 -88
  2. package/dist/context-key-service-W4QEfVdN.js +1031 -0
  3. package/dist/context-key-service-W4QEfVdN.js.map +1 -0
  4. package/dist/extensions.d.ts +739 -275
  5. package/dist/extensions.js +891 -699
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-DrrhYnb_.js.map +1 -1
  8. package/dist/index.d.ts +746 -448
  9. package/dist/index.js +2974 -60
  10. package/dist/index.js.map +1 -1
  11. package/dist/layout-types-DMoZz38-.js +100 -0
  12. package/dist/layout-types-DMoZz38-.js.map +1 -0
  13. package/dist/react.d.ts +735 -231
  14. package/dist/react.js +3562 -2584
  15. package/dist/react.js.map +1 -1
  16. package/dist/storage.d.ts +109 -14
  17. package/dist/storage.js +142 -47
  18. package/dist/storage.js.map +1 -1
  19. package/dist/surface-map-C1pOTUmF.js +52 -0
  20. package/dist/surface-map-C1pOTUmF.js.map +1 -0
  21. package/dist/testing.d.ts +685 -198
  22. package/dist/testing.js +46 -34
  23. package/dist/testing.js.map +1 -1
  24. package/dist/webview-runtime.js +5 -1
  25. package/dist/webview-runtime.js.map +1 -1
  26. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  27. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  28. package/package.json +6 -7
  29. package/dist/context-key-service-C--cHa0B.js +0 -447
  30. package/dist/context-key-service-C--cHa0B.js.map +0 -1
  31. package/dist/core.d.ts +0 -1885
  32. package/dist/core.js +0 -64
  33. package/dist/core.js.map +0 -1
  34. package/dist/surface-reconcile-DkRf01ro.js +0 -260
  35. package/dist/surface-reconcile-DkRf01ro.js.map +0 -1
  36. package/dist/workbench-core-DFpwi8Lo.js +0 -2264
  37. package/dist/workbench-core-DFpwi8Lo.js.map +0 -1
  38. package/dist/workbench-menu-paths-CQVH6z4_.js +0 -11
  39. package/dist/workbench-menu-paths-CQVH6z4_.js.map +0 -1
package/dist/react.d.ts CHANGED
@@ -11,6 +11,7 @@ import { ParamEditorProps } from '@pstdio/ui';
11
11
  import { ReactElement } from 'react';
12
12
  import { ReactNode } from 'react';
13
13
  import { ReactPortal } from 'react';
14
+ import { ResourceContextAction as ResourceContextAction_2 } from '@pstdio/ui';
14
15
  import { TerminalBridge } from '@pstdio/ui/terminal';
15
16
  import { ThemePreference as ThemePreference_3 } from '@pstdio/ui';
16
17
  import { ThemePreferenceOption as ThemePreferenceOption_3 } from '@pstdio/ui';
@@ -25,7 +26,7 @@ declare interface AttributeDescriptor {
25
26
  displayable?: boolean;
26
27
  editable?: boolean;
27
28
  display?: AttributeDisplayDescriptor;
28
- render?: (value: unknown, row: DataRendererRow) => ReactNode;
29
+ render?: (value: unknown, row: KanbanRendererRow) => ReactNode;
29
30
  compare?: (a: unknown, b: unknown) => number;
30
31
  }
31
32
 
@@ -95,7 +96,7 @@ declare interface CollectionSettingsPanel<TItem = unknown> extends SettingsPanel
95
96
  itemLabel(item: TItem): string;
96
97
  itemIcon?(item: TItem): string | undefined;
97
98
  groupBy?: SettingsCollectionGroupBy<TItem>;
98
- renderItem(item: TItem, input: WorkbenchWidgetRenderInput): unknown;
99
+ renderItem(item: TItem, input: WorkbenchPanelRenderInput): unknown;
99
100
  actions?: SettingsAction[];
100
101
  }
101
102
 
@@ -271,8 +272,6 @@ declare interface ControlsQueryResult {
271
272
  readOnly?: boolean;
272
273
  }
273
274
 
274
- declare type ControlsRendererArea = "main-right" | "secondary" | "overlay";
275
-
276
275
  declare interface ControlsRendererContribution {
277
276
  id: string;
278
277
  title: string;
@@ -292,12 +291,12 @@ declare interface ControlsRendererContribution {
292
291
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
293
292
  }
294
293
 
295
- declare type ControlsRendererImplementation = (input: WorkbenchWidgetRenderInput & {
294
+ declare type ControlsRendererImplementation = (input: WorkbenchPanelRenderInput & {
296
295
  controlsRendererId: string;
297
296
  }) => unknown;
298
297
 
299
298
  declare interface ControlsRendererLayout {
300
- area?: ControlsRendererArea;
299
+ region?: ControlsRendererRegion;
301
300
  defaultPx?: number;
302
301
  minPx?: number;
303
302
  maxPx?: number;
@@ -309,6 +308,8 @@ declare interface ControlsRendererRefreshEvent {
309
308
 
310
309
  declare type ControlsRendererRefreshListener = (event: ControlsRendererRefreshEvent) => void;
311
310
 
311
+ declare type ControlsRendererRegion = "main-right-menu" | "secondary" | "overlay";
312
+
312
313
  declare interface ControlsRendererRegistry {
313
314
  controlsStore: WorkbenchStore<ControlsRendererStoreState>;
314
315
  registerControlsRenderer(contribution: ControlsRendererContribution, metadata?: ContributionMetadata): Disposable_2;
@@ -369,10 +370,12 @@ declare interface CreateWorkbenchRendererRegistryInput {
369
370
  createHost?: () => HTMLElement;
370
371
  }
371
372
 
373
+ export declare const createWorkbenchResourceActions: (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) => ResourceContextAction_2[];
374
+
372
375
  export declare const createWorkbenchSettingsModule: (options?: WorkbenchSettingsModuleOptions) => WorkbenchModuleContribution;
373
376
 
374
377
  /**
375
- * Host-owned terminal surface: tabbed placements in the `secondary` area whose
378
+ * Host-owned terminal surface: tabbed placements in the `secondary` region whose
376
379
  * chrome, focus, lifecycle, and styling belong to the workbench. Sessions are
377
380
  * owned by `workbench.terminal` (the same registry the `terminal.session`
378
381
  * webview capability uses); the host injects a session opener via
@@ -387,108 +390,113 @@ export declare const createWorkbenchTerminalModule: () => WorkbenchModuleContrib
387
390
  */
388
391
  declare interface CustomSettingsPanel extends SettingsPanelBase {
389
392
  kind: "custom";
390
- render(input: WorkbenchWidgetRenderInput): unknown;
393
+ render(input: WorkbenchPanelRenderInput): unknown;
391
394
  }
392
395
 
393
- declare interface DataRendererContribution<TRow extends DataRendererRow = DataRendererRow> {
396
+ declare interface DataTableRendererColumn {
397
+ id: string;
398
+ label?: string;
399
+ description?: string;
400
+ icon?: unknown;
401
+ hidden?: boolean;
402
+ stat?: DataTableRendererColumnStat;
403
+ renderer?: DataTableRendererColumnRenderer;
404
+ }
405
+
406
+ declare type DataTableRendererColumnRenderer = {
407
+ type: "json";
408
+ } | {
409
+ type: "color-scale";
410
+ stops: Array<{
411
+ value: number;
412
+ color: DataTableRendererThemeColor;
413
+ }>;
414
+ } | {
415
+ type: "categorical-color";
416
+ categories: Array<{
417
+ value: string | number | boolean | null;
418
+ color: DataTableRendererThemeColor;
419
+ }>;
420
+ };
421
+
422
+ declare type DataTableRendererColumnStat = {
423
+ type: "unique";
424
+ } | {
425
+ type: "histogram";
426
+ bins?: number;
427
+ } | {
428
+ type: "top-values";
429
+ limit?: number;
430
+ };
431
+
432
+ declare interface DataTableRendererContribution {
394
433
  id: string;
395
434
  title: string;
396
435
  resourceKind?: string;
397
- /**
398
- * Declarative attribute schema. The renderer dispatches filter / group /
399
- * sort / display / inline-edit behavior on each descriptor's `type.kind`.
400
- *
401
- * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
402
- * static array to let the contribution mutate its schema at runtime —
403
- * `WorkbenchDataView` subscribes so additions / removals / kind changes
404
- * propagate live without re-registering the renderer.
405
- */
406
- attributes: AttributeDescriptor[] | AttributesSource;
407
- /** Per-board-column overrides (color, drag/create rules, custom actions). */
408
- getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
409
- hideToolbar?: boolean;
436
+ columns?: DataTableRendererColumn[];
437
+ rowActions?: DataTableRendererRowAction[];
438
+ initialPageSize?: number;
439
+ pageSizeOptions?: number[];
410
440
  emptyTitle?: string;
411
441
  emptyDescription?: string;
412
- /** Initial settings/filters applied when the data renderer mounts. */
413
- defaultSettings?: Partial<DataRendererSettings>;
414
- defaultFilters?: DataRendererFilterState;
415
- /**
416
- * Data source. Receives the current display state so backends can paginate
417
- * / filter / sort. The renderer re-applies filter / sort / group locally,
418
- * so this can return unfiltered rows in simple cases.
419
- */
420
- executeQuery(state: DataRendererQueryState): Promise<TRow[]> | TRow[];
442
+ executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
421
443
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
422
- /** Row interactions surfaced by the renderer (mirrored from <DataRenderer>). */
423
- onRowClick?: (row: TRow) => void;
424
- /** Per-row right-click context menu actions (mirrored from <DataRenderer>). */
425
- getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
426
- /**
427
- * Fires for inline attribute edits AND for cross-column drag-to-reorder on
428
- * the board (the renderer passes the grouping attribute id + the target
429
- * column value).
430
- */
431
- onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
432
- /** Manual within-column reorder (only fires when ordering is manual). */
433
- onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
434
- onCreateRow?: (columnId: string) => void;
435
- onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
444
+ onRowClick?: (row: DataTableRendererRow) => void;
436
445
  }
437
446
 
438
- declare type DataRendererFilterState = Record<string, string[]>;
439
-
440
- declare type DataRendererImplementation = (input: WorkbenchWidgetRenderInput & {
441
- dataRendererId: string;
447
+ declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
448
+ dataTableRendererId: string;
442
449
  }) => unknown;
443
450
 
444
- declare interface DataRendererOrdering {
445
- attributeId: string | typeof MANUAL_ORDERING;
446
- direction: SortDirection;
451
+ declare interface DataTableRendererQueryContext {
452
+ resource?: ResourceRef;
453
+ modeId?: string;
447
454
  }
448
455
 
449
- declare interface DataRendererQueryState {
450
- settings: DataRendererSettings;
451
- filters: DataRendererFilterState;
456
+ declare interface DataTableRendererQueryResult {
457
+ rows: DataTableRendererRow[];
458
+ columns?: DataTableRendererColumn[];
452
459
  }
453
460
 
454
- declare interface DataRendererRefreshEvent {
455
- dataRendererId: string;
461
+ declare interface DataTableRendererRefreshEvent {
462
+ dataTableRendererId: string;
456
463
  }
457
464
 
458
- declare type DataRendererRefreshListener = (event: DataRendererRefreshEvent) => void;
465
+ declare interface DataTableRendererRegistry {
466
+ dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
467
+ registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
468
+ setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
469
+ getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
470
+ listDataTableRenderers(): RegisteredDataTableRendererContribution[];
471
+ refreshDataTableRenderer(id: string): void;
472
+ onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
473
+ }
459
474
 
460
- declare interface DataRendererRegistry {
461
- dataStore: WorkbenchStore<DataRendererStoreState>;
462
- registerDataRenderer<TRow extends DataRendererRow = DataRendererRow>(contribution: DataRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
463
- setDataRendererImplementation(impl: DataRendererImplementation): void;
464
- getDataRenderer(id: string): RegisteredDataRendererContribution | undefined;
465
- listDataRenderers(): RegisteredDataRendererContribution[];
466
- refreshDataRenderer(id: string): void;
467
- onDidRefreshDataRenderer(listener: DataRendererRefreshListener): Disposable_2;
475
+ declare interface DataTableRendererRow {
476
+ id: string;
477
+ values: Record<string, unknown>;
478
+ resource?: ResourceRef;
468
479
  }
469
480
 
470
- declare interface DataRendererRow {
481
+ declare interface DataTableRendererRowAction {
471
482
  id: string;
472
- title: string;
473
- /**
474
- * Optional navigation handle. When set, the renderer's default click handler
475
- * routes through the contribution's onRowClick (which typically opens the
476
- * resource via the workbench).
477
- */
478
- resource?: unknown;
479
- attributes: Record<string, unknown>;
483
+ label: string;
484
+ icon?: unknown;
485
+ destructive?: boolean;
486
+ run(row: DataTableRendererRow): Promise<void> | void;
480
487
  }
481
488
 
482
- declare interface DataRendererSettings {
483
- viewMode: ViewMode;
484
- columnGrouping: string | typeof NO_GROUPING;
485
- rowGrouping: string | typeof NO_GROUPING;
486
- ordering: DataRendererOrdering;
487
- displayProperties: string[];
489
+ declare interface DataTableRendererStoreState {
490
+ renderers: Record<string, RegisteredDataTableRendererContribution>;
488
491
  }
489
492
 
490
- declare interface DataRendererStoreState {
491
- renderers: Record<string, RegisteredDataRendererContribution>;
493
+ declare interface DataTableRendererThemeColor {
494
+ light: string;
495
+ dark: string;
496
+ foreground?: {
497
+ light: string;
498
+ dark: string;
499
+ };
492
500
  }
493
501
 
494
502
  declare interface Disposable_2 {
@@ -568,7 +576,7 @@ declare interface FileRendererContribution {
568
576
  save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
569
577
  }
570
578
 
571
- declare type FileRendererImplementation = (input: WorkbenchWidgetRenderInput & {
579
+ declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
572
580
  fileRendererId: string;
573
581
  }) => unknown;
574
582
 
@@ -599,28 +607,177 @@ declare interface HistoryController {
599
607
  goPrevious(): HistoryEntry | undefined;
600
608
  recentlyClosed(): readonly HistoryEntry[];
601
609
  reopenLastClosed(): HistoryEntry | undefined;
610
+ setPersistenceScope(scope: string | undefined): void;
611
+ getPersistenceScope(): string | undefined;
612
+ restore(): HistoryEntry | undefined;
613
+ flush(): void;
602
614
  clear(): void;
603
615
  }
604
616
 
605
- declare interface HistoryEntry {
606
- entryId: string;
607
- recordedAt: number;
608
- kind: "resource" | "widget" | "mode";
609
- modeId?: string;
610
- resource?: ResourceRef;
611
- widgetId?: string;
612
- contributionId?: string;
613
- title?: string;
614
- }
617
+ declare type HistoryEntry = WorkbenchNavigationEntry;
615
618
 
616
619
  declare interface HistoryStoreState {
617
- entries: readonly HistoryEntry[];
620
+ entries: readonly WorkbenchNavigationEntry[];
618
621
  cursor: number;
619
- recentlyClosed: readonly HistoryEntry[];
622
+ recentlyClosed: readonly WorkbenchNavigationEntry[];
623
+ hydrating: boolean;
620
624
  }
621
625
 
622
626
  export declare const isSettingsScopeVisible: (scope: SettingsScope | undefined, hasProjectScope: boolean) => boolean;
623
627
 
628
+ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
629
+ id: string;
630
+ title: string;
631
+ resourceKind?: string;
632
+ /**
633
+ * Declarative attribute schema. The renderer dispatches filter / group /
634
+ * sort / display / inline-edit behavior on each descriptor's `type.kind`.
635
+ *
636
+ * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
637
+ * static array to let the contribution mutate its schema at runtime —
638
+ * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
639
+ * propagate live without re-registering the renderer.
640
+ */
641
+ attributes: AttributeDescriptor[] | AttributesSource;
642
+ /** Per-board-column overrides (color, drag/create rules, custom actions). */
643
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
644
+ hideToolbar?: boolean;
645
+ emptyTitle?: string;
646
+ emptyDescription?: string;
647
+ /** Initial settings/filters applied when the kanban renderer mounts. */
648
+ defaultSettings?: Partial<KanbanRendererSettings>;
649
+ defaultFilters?: KanbanRendererFilterState;
650
+ defaultViews?: KanbanRendererSavedView[];
651
+ defaultActiveViewId?: string;
652
+ /**
653
+ * Data source. Receives the current display state so backends can paginate
654
+ * / filter / sort. The renderer re-applies filter / sort / group locally,
655
+ * so this can return unfiltered rows in simple cases.
656
+ */
657
+ executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
658
+ subscribe?: (listener: () => void) => Disposable_2 | (() => void);
659
+ /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
660
+ onRowClick?: (row: TRow) => void;
661
+ /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
662
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
663
+ /**
664
+ * Fires for inline attribute edits AND for cross-column drag-to-reorder on
665
+ * the board (the renderer passes the grouping attribute id + the target
666
+ * column value).
667
+ */
668
+ onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
669
+ /** Manual within-column reorder (only fires when ordering is manual). */
670
+ onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
671
+ createRow?: KanbanRendererCreateRowConfig;
672
+ onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;
673
+ onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
674
+ }
675
+
676
+ declare interface KanbanRendererCreateField {
677
+ id: string;
678
+ label: string;
679
+ description?: string;
680
+ placeholder?: string;
681
+ type: KanbanRendererCreateFieldType;
682
+ required?: boolean;
683
+ defaultValue?: unknown;
684
+ options?: EnumOption[];
685
+ /** `files` fields only. */
686
+ multiple?: boolean;
687
+ accept?: string;
688
+ }
689
+
690
+ declare type KanbanRendererCreateFieldType = "text" | "longtext" | "markdown" | "number" | "boolean" | "select" | "multi-select" | "files";
691
+
692
+ /** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */
693
+ declare interface KanbanRendererCreateLabels {
694
+ cancel: string;
695
+ properties: string;
696
+ submitError: string;
697
+ removeFile: string;
698
+ }
699
+
700
+ declare interface KanbanRendererCreateRowConfig {
701
+ title: string;
702
+ submitLabel: string;
703
+ fields: KanbanRendererCreateField[];
704
+ labels: KanbanRendererCreateLabels;
705
+ }
706
+
707
+ declare interface KanbanRendererCreateSubmission {
708
+ columnId: string;
709
+ columnAttributeId?: string;
710
+ /** Declared field values, excluding `files` fields — those arrive as `files`. */
711
+ values: Record<string, unknown>;
712
+ /** Every editable attribute the user set, keyed by attribute id. */
713
+ attributeValues: Record<string, unknown>;
714
+ files: File[];
715
+ }
716
+
717
+ declare type KanbanRendererFilterState = Record<string, string[]>;
718
+
719
+ declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
720
+ kanbanRendererId: string;
721
+ }) => unknown;
722
+
723
+ declare interface KanbanRendererOrdering {
724
+ attributeId: string | typeof MANUAL_ORDERING;
725
+ direction: SortDirection;
726
+ }
727
+
728
+ declare interface KanbanRendererQueryState {
729
+ settings: KanbanRendererSettings;
730
+ filters: KanbanRendererFilterState;
731
+ }
732
+
733
+ declare interface KanbanRendererRefreshEvent {
734
+ kanbanRendererId: string;
735
+ }
736
+
737
+ declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
738
+
739
+ declare interface KanbanRendererRegistry {
740
+ dataStore: WorkbenchStore<KanbanRendererStoreState>;
741
+ registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
742
+ setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
743
+ getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
744
+ listKanbanRenderers(): RegisteredKanbanRendererContribution[];
745
+ refreshKanbanRenderer(id: string): void;
746
+ onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
747
+ }
748
+
749
+ declare interface KanbanRendererRow {
750
+ id: string;
751
+ title: string;
752
+ /**
753
+ * Optional navigation handle. When set, the renderer's default click handler
754
+ * routes through the contribution's onRowClick (which typically opens the
755
+ * resource via the workbench).
756
+ */
757
+ resource?: unknown;
758
+ attributes: Record<string, unknown>;
759
+ }
760
+
761
+ declare interface KanbanRendererSavedView {
762
+ id: string;
763
+ title: string;
764
+ settings: KanbanRendererSettings;
765
+ filters: KanbanRendererFilterState;
766
+ isDefault?: boolean;
767
+ }
768
+
769
+ declare interface KanbanRendererSettings {
770
+ viewMode: ViewMode;
771
+ columnGrouping: string | typeof NO_GROUPING;
772
+ rowGrouping: string | typeof NO_GROUPING;
773
+ ordering: KanbanRendererOrdering;
774
+ displayProperties: string[];
775
+ }
776
+
777
+ declare interface KanbanRendererStoreState {
778
+ renderers: Record<string, RegisteredKanbanRendererContribution>;
779
+ }
780
+
624
781
  declare interface Keybinding {
625
782
  commandId: string;
626
783
  keybinding: KeybindingSequence;
@@ -646,33 +803,62 @@ declare interface LayoutModel {
646
803
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
647
804
  dispose(): void;
648
805
  };
806
+ registerPanel(panel: WorkbenchPanelContribution, metadata?: ContributionMetadata): {
807
+ dispose(): void;
808
+ };
649
809
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
650
810
  dispose(): void;
651
811
  };
812
+ registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
813
+ dispose(): void;
814
+ };
815
+ registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
816
+ dispose(): void;
817
+ };
818
+ registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
819
+ dispose(): void;
820
+ };
652
821
  unregisterWidget(id: string, options?: {
653
822
  removePlacements?: boolean;
654
823
  persist?: boolean;
655
824
  }): void;
656
- getPlaceholder(areaId: WorkbenchArea_2): RegisteredPlaceholderContribution | undefined;
825
+ getPlaceholder(regionId: WorkbenchRegion_2): RegisteredPlaceholderContribution | undefined;
657
826
  getWidget(id: string): RegisteredWidgetContribution | undefined;
658
- getAreaSize(areaId: WorkbenchArea_2): WorkbenchAreaSize | undefined;
659
- getAreaCollapsible(areaId: WorkbenchArea_2): boolean;
660
- getAreaHeaderBorderBottom(areaId: WorkbenchArea_2): boolean;
661
- setAreaVisible(areaId: WorkbenchArea_2, visible: boolean): void;
662
- setAreaSize(areaId: WorkbenchArea_2, size: number): void;
827
+ getPanel(id: string): WorkbenchPanelContribution | undefined;
828
+ getRegionSize(regionId: WorkbenchRegion_2): WorkbenchRegionSize | undefined;
829
+ getRegionCollapsible(regionId: WorkbenchRegion_2): boolean;
830
+ getRegionHeaderBorderBottom(regionId: WorkbenchRegion_2): boolean;
831
+ setRegionVisible(regionId: WorkbenchRegion_2, visible: boolean): void;
832
+ setRegionSize(regionId: WorkbenchRegion_2, size: number): void;
663
833
  listPlaceholders(): RegisteredPlaceholderContribution[];
664
834
  listWidgets(): RegisteredWidgetContribution[];
835
+ listPanels(): WorkbenchPanelContribution[];
836
+ listPanelInstances(region?: WorkbenchRegion_2): WorkbenchPanelInstance[];
837
+ getActivePanel(region?: WorkbenchRegion_2): WorkbenchPanelInstance | undefined;
665
838
  openWidget(id: string, input?: OpenWidgetInput): WorkbenchWidgetPlacement;
839
+ openPanel(id: string, input?: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
840
+ updatePanel(instanceId: string, input: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
841
+ reorderPanel(instanceId: string, position: WorkbenchTabPosition): void;
842
+ activatePanel(instanceId: string): WorkbenchPanelInstance;
843
+ closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
666
844
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
845
+ reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
846
+ expirePreviewTabs(ownerResourceUri?: string): void;
667
847
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
848
+ setRegionActiveWidget(regionId: WorkbenchRegion_2, widgetId: string | undefined): void;
668
849
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
669
850
  removeWidgetPlacement(widgetId: string): WorkbenchWidgetPlacement | undefined;
670
- clearArea(areaId: WorkbenchArea_2): void;
671
- resetAreas(): void;
851
+ clearRegion(regionId: WorkbenchRegion_2): void;
852
+ resetRegions(): void;
672
853
  getLayout(): WorkbenchLayout;
673
854
  restoreLayout(layout: WorkbenchLayout): void;
674
- setPersistenceScope(scope: LayoutScope | undefined): void;
855
+ setPersistenceScope(scope: LayoutScope | undefined, input?: {
856
+ carryRegionState?: readonly WorkbenchRegion_2[];
857
+ }): void;
675
858
  getPersistenceScope(): LayoutScope | undefined;
859
+ onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
860
+ dispose(): void;
861
+ };
676
862
  onDidChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
677
863
  dispose(): void;
678
864
  };
@@ -686,6 +872,7 @@ declare const MANUAL_ORDERING = "manual";
686
872
 
687
873
  declare interface MenuItem {
688
874
  commandId: string;
875
+ sourceCommandId?: string;
689
876
  label?: string;
690
877
  description?: string;
691
878
  icon?: string;
@@ -750,7 +937,13 @@ declare interface NavigationTargetCompound {
750
937
  targets: readonly NavigationTargetItem[];
751
938
  }
752
939
 
753
- declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetCommand;
940
+ declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
941
+
942
+ declare interface NavigationTargetPanel {
943
+ kind: "panel";
944
+ panelId: string;
945
+ input?: OpenWorkbenchPanelInput;
946
+ }
754
947
 
755
948
  declare interface NavigationTargetResource {
756
949
  kind: "resource";
@@ -758,12 +951,6 @@ declare interface NavigationTargetResource {
758
951
  input?: OpenResourceInput;
759
952
  }
760
953
 
761
- declare interface NavigationTargetView {
762
- kind: "view";
763
- widgetId: string;
764
- input?: OpenWidgetInput;
765
- }
766
-
767
954
  declare const NO_GROUPING = "none";
768
955
 
769
956
  export declare const normalizeWorkbenchKeybinding: (keybinding: KeybindingSequence) => KeybindingSequence;
@@ -784,20 +971,39 @@ declare interface OpenResourceInput {
784
971
  declare interface OpenWidgetInput {
785
972
  resource?: ResourceRef;
786
973
  title?: string;
787
- area?: WorkbenchArea_2;
974
+ region?: WorkbenchRegion_2;
788
975
  ownerId?: string;
789
976
  source?: ContributionSource;
790
977
  pinned?: boolean;
791
978
  closable?: boolean;
792
979
  mountStrategy?: WidgetMountStrategy;
793
980
  hiddenByDefault?: boolean;
981
+ tabRetention?: WorkbenchTabRetention;
982
+ tabPosition?: WorkbenchTabPosition;
983
+ tab?: WorkbenchWidgetTab;
794
984
  replaceActive?: boolean;
985
+ replaceWidgetId?: string;
795
986
  }
796
987
 
797
- export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalInput) => WorkbenchWidgetPlacement_2;
988
+ declare interface OpenWorkbenchPanelInput {
989
+ resource?: ResourceRef;
990
+ title?: string;
991
+ region?: WorkbenchRegion_2;
992
+ pinned?: boolean;
993
+ mountStrategy?: WorkbenchPanelMountStrategy;
994
+ hiddenByDefault?: boolean;
995
+ tab?: WorkbenchPanelTab;
996
+ strategy?: WorkbenchPanelOpenStrategy;
997
+ }
998
+
999
+ export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalOptions) => WorkbenchPanelInstance_2;
798
1000
 
799
1001
  declare type OpenWorkbenchTerminalInput = NonNullable<Parameters<WorkbenchCoreContributionContext["layout"]["openWidget"]>[1]>;
800
1002
 
1003
+ declare type OpenWorkbenchTerminalOptions = OpenWorkbenchTerminalInput & {
1004
+ reveal?: boolean;
1005
+ };
1006
+
801
1007
  declare type ParamValue = Parameters<NonNullable<ParamEditorProps["onChange"]>>[1];
802
1008
 
803
1009
  export declare const paramValueToPreference: (schema: PreferencePropertySchema, value: ParamValue) => PreferenceValue;
@@ -805,10 +1011,10 @@ export declare const paramValueToPreference: (schema: PreferencePropertySchema,
805
1011
  declare interface PlaceholderContribution {
806
1012
  id: string;
807
1013
  title: string;
808
- area: WorkbenchArea_2;
1014
+ region: WorkbenchRegion_2;
809
1015
  rendererId: string;
810
- areaSize?: WorkbenchAreaSize;
811
- areaCollapsible?: boolean;
1016
+ regionSize?: WorkbenchRegionSize;
1017
+ regionCollapsible?: boolean;
812
1018
  config?: unknown;
813
1019
  priority?: number;
814
1020
  }
@@ -870,12 +1076,15 @@ declare interface RegisteredContributionMetadata {
870
1076
  declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
871
1077
  }
872
1078
 
873
- declare interface RegisteredDataRendererContribution<TRow extends DataRendererRow = DataRendererRow> extends DataRendererContribution<TRow>, RegisteredContributionMetadata {
1079
+ declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
874
1080
  }
875
1081
 
876
1082
  declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
877
1083
  }
878
1084
 
1085
+ declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1086
+ }
1087
+
879
1088
  declare interface RegisteredKeepAliveHost {
880
1089
  rendererId: string;
881
1090
  host: HTMLElement;
@@ -911,8 +1120,10 @@ declare interface RegisteredTreeRendererContribution extends TreeRendererContrib
911
1120
  }
912
1121
 
913
1122
  declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1123
+ ownedPanelMenuIds?: readonly string[];
914
1124
  singleton: boolean;
915
1125
  reuse: WidgetReusePolicy;
1126
+ role: WorkbenchWidgetRole;
916
1127
  } & RegisteredContributionMetadata;
917
1128
 
918
1129
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -926,7 +1137,9 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
926
1137
  metadata?: Record<string, unknown>;
927
1138
  }
928
1139
 
929
- declare type ResolvedResourceOpener = Required<ResourceOpener>;
1140
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1141
+
1142
+ declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
930
1143
 
931
1144
  declare interface ResourceBrowseEntry {
932
1145
  resource: ResourceRef;
@@ -948,6 +1161,13 @@ declare interface ResourceContextAction {
948
1161
  separatorBefore?: boolean;
949
1162
  }
950
1163
 
1164
+ declare interface ResourceHierarchyProvider {
1165
+ id: string;
1166
+ priority?: number;
1167
+ canResolve(resource: ResourceRef): boolean;
1168
+ getParent(resource: ResourceRef): ResourceRef | undefined;
1169
+ }
1170
+
951
1171
  declare interface ResourceKindContribution {
952
1172
  kind: string;
953
1173
  label: string;
@@ -968,11 +1188,11 @@ declare interface ResourceNavigator<TResult = unknown> {
968
1188
  navigate(resource: ResourceRef): TResult | Promise<TResult>;
969
1189
  }
970
1190
 
971
- declare interface ResourceOpener<TResult = unknown> {
1191
+ declare interface ResourcePresenter {
972
1192
  id: string;
973
1193
  priority?: number;
974
1194
  canOpen(resource: ResourceRef): boolean;
975
- open(resource: ResourceRef, input: OpenResourceInput): TResult | Promise<TResult>;
1195
+ open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
976
1196
  }
977
1197
 
978
1198
  declare interface ResourceProvider {
@@ -1005,19 +1225,24 @@ declare interface ResourceRegistry {
1005
1225
  getKind(kind: string): RegisteredResourceKind | undefined;
1006
1226
  getSurface(resource: ResourceRef): ResourceSurface | undefined;
1007
1227
  listKinds(): RegisteredResourceKind[];
1008
- registerOpener(opener: ResourceOpener): Disposable_2;
1009
- listOpeners(): ResolvedResourceOpener[];
1228
+ registerPresenter(presenter: ResourcePresenter): Disposable_2;
1229
+ listPresenters(): ResolvedResourcePresenter[];
1010
1230
  registerProvider(provider: ResourceProvider): Disposable_2;
1011
1231
  listProviders(): ResourceProvider[];
1012
1232
  listResources(query: string): readonly ResourceBrowseEntry[];
1013
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
1233
+ registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1234
+ listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1235
+ walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1236
+ isOpeningResource(): boolean;
1237
+ openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1014
1238
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1015
1239
  }
1016
1240
 
1017
1241
  declare interface ResourceRegistryStoreState {
1018
1242
  kinds: Record<string, RegisteredResourceKind>;
1019
- openers: Record<string, ResolvedResourceOpener>;
1243
+ presenters: Record<string, ResolvedResourcePresenter>;
1020
1244
  providers: Record<string, ResourceProvider>;
1245
+ hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1021
1246
  }
1022
1247
 
1023
1248
  declare type ResourceSurface = "primary" | "secondary" | "attached";
@@ -1102,7 +1327,7 @@ declare interface SettingsRegistryStoreState {
1102
1327
  /** Settings are stored either per-user (global) or per-project. Projectless surfaces show only global entries. */
1103
1328
  declare type SettingsScope = "global" | "project";
1104
1329
 
1105
- /** An ordered sidebar container. Headerless when `title` is omitted. */
1330
+ /** An ordered sidenav container. Headerless when `title` is omitted. */
1106
1331
  declare interface SettingsSectionContribution {
1107
1332
  id: string;
1108
1333
  title?: string;
@@ -1210,6 +1435,8 @@ declare interface TreeNode {
1210
1435
  hiddenByDefault?: boolean;
1211
1436
  /** When true, the node (e.g. a header/footer row) opts in to the tree's hide/show customization menu. */
1212
1437
  canHide?: boolean;
1438
+ /** When false, the node stays fixed within its Sidenav group. */
1439
+ canReorder?: boolean;
1213
1440
  }
1214
1441
 
1215
1442
  declare type TreeNodeRowVariant = "empty-state";
@@ -1227,7 +1454,7 @@ declare interface TreeRendererContribution {
1227
1454
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1228
1455
  }
1229
1456
 
1230
- declare type TreeRendererImplementation = (input: WorkbenchWidgetRenderInput & {
1457
+ declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1231
1458
  treeId: string;
1232
1459
  }) => unknown;
1233
1460
 
@@ -1285,9 +1512,13 @@ declare interface TreeViewSection {
1285
1512
  hiddenByDefault?: boolean;
1286
1513
  /** When true, the section (category) opts in to the tree's hide/show customization menu. */
1287
1514
  canHide?: boolean;
1515
+ /** When false, the section stays fixed within the Sidenav main region. */
1516
+ canReorder?: boolean;
1288
1517
  }
1289
1518
 
1290
- export declare const useWorkbenchClaim: () => WorkbenchWidgetRenderInput | undefined;
1519
+ export declare const useWorkbenchClaim: () => WorkbenchPanelRenderInput | undefined;
1520
+
1521
+ export declare const useWorkbenchResourceActionResolver: (workbench: WorkbenchCoreContributionContext) => (resource: ResourceRef) => ResourceContextAction_2[];
1291
1522
 
1292
1523
  export declare const useWorkbenchStore: <TState, TSlice>(store: WorkbenchStore<TState>, selector: (state: TState) => TSlice) => TSlice;
1293
1524
 
@@ -1300,8 +1531,8 @@ export declare const useWorkbenchThemePreferences: (workbench: WorkbenchCore) =>
1300
1531
  })[];
1301
1532
 
1302
1533
  /**
1303
- * Core-owned contracts for data renderer contributions. @pstdio/ui's
1304
- * DataRenderer props are structurally identical; the React layer bridges the
1534
+ * Core-owned contracts for kanban renderer contributions. @pstdio/ui's
1535
+ * KanbanRenderer props are structurally identical; the React layer bridges the
1305
1536
  * two, so drift surfaces as a compile error there instead of coupling core's
1306
1537
  * API shape to UI package ownership.
1307
1538
  */
@@ -1310,19 +1541,26 @@ declare type ViewMode = "board" | "list";
1310
1541
  declare interface WidgetContribution {
1311
1542
  id: string;
1312
1543
  title: string;
1313
- area: WorkbenchArea_2;
1314
- fallbackArea?: WorkbenchArea_2;
1544
+ icon?: string;
1545
+ region: WorkbenchRegion_2;
1546
+ fallbackRegion?: WorkbenchRegion_2;
1315
1547
  singleton?: boolean;
1316
1548
  reuse?: WidgetReusePolicy;
1317
1549
  mountStrategy?: WidgetMountStrategy;
1318
1550
  closable?: boolean;
1319
1551
  hiddenByDefault?: boolean;
1320
- areaSize?: WorkbenchAreaSize;
1321
- areaCollapsible?: boolean;
1552
+ regionSize?: WorkbenchRegionSize;
1553
+ regionCollapsible?: boolean;
1322
1554
  headerBorderBottom?: boolean;
1555
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1323
1556
  resourceKinds?: string[];
1324
1557
  priority?: number;
1325
1558
  rendererId: string;
1559
+ openCommandId?: string;
1560
+ role?: WorkbenchWidgetRole;
1561
+ eligibleLocations?: WorkbenchLocationEligibility;
1562
+ panelMenuOwner?: WorkbenchPanelMenuOwner;
1563
+ tab?: WorkbenchWidgetTab;
1326
1564
  config?: unknown;
1327
1565
  canOpen?(resource: ResourceRef): boolean;
1328
1566
  }
@@ -1349,43 +1587,7 @@ export declare const WORKBENCH_TERMINAL_OPEN_COMMAND_ID = "workbench.terminal.op
1349
1587
 
1350
1588
  export declare const WORKBENCH_TERMINAL_WIDGET_ID = "workbench.terminal";
1351
1589
 
1352
- export declare const WorkbenchArea: (props: WorkbenchAreaProps) => JSX.Element | null;
1353
-
1354
- declare type WorkbenchArea_2 = (typeof workbenchAreas)[number];
1355
-
1356
- declare interface WorkbenchAreaProps {
1357
- workbench: WorkbenchCore;
1358
- area: WorkbenchArea_2;
1359
- title?: string;
1360
- showHeader?: boolean;
1361
- hideSingleTabHeader?: boolean;
1362
- pointerEvents?: "auto" | "none";
1363
- transparent?: boolean;
1364
- }
1365
-
1366
- declare const workbenchAreas: readonly ["nav", "activity", "left-header", "left", "main-header", "main-left", "main", "main-right", "secondary-header", "secondary", "status", "overlay", "floating-header", "floating"];
1367
-
1368
- declare interface WorkbenchAreaSize {
1369
- defaultPx?: number;
1370
- minPx?: number;
1371
- maxPx?: number;
1372
- }
1373
-
1374
- declare interface WorkbenchAreaState {
1375
- id: WorkbenchArea_2;
1376
- visible: boolean;
1377
- size?: number;
1378
- widgets: WorkbenchWidgetPlacement[];
1379
- activeWidgetId?: string;
1380
- }
1381
-
1382
- export declare const WorkbenchAreaTabs: (props: WorkbenchAreaTabsProps) => JSX.Element | null;
1383
-
1384
- declare interface WorkbenchAreaTabsProps {
1385
- workbench: WorkbenchCore;
1386
- area: WorkbenchArea_2;
1387
- visibilityStorageKey?: string;
1388
- }
1590
+ export declare const WorkbenchAttachedSidePanel: (props: WorkbenchSidePanelProps) => JSX.Element;
1389
1591
 
1390
1592
  declare type WorkbenchBreadcrumbChangeListener = () => void;
1391
1593
 
@@ -1400,6 +1602,7 @@ declare interface WorkbenchBreadcrumbController {
1400
1602
  declare interface WorkbenchBreadcrumbItem {
1401
1603
  title: unknown;
1402
1604
  icon?: string;
1605
+ indicator?: "session-status";
1403
1606
  url?: string;
1404
1607
  onClick?: () => void;
1405
1608
  resource?: ResourceRef;
@@ -1415,10 +1618,18 @@ declare interface WorkbenchBreadcrumbViewProps {
1415
1618
  workbench: WorkbenchCore;
1416
1619
  }
1417
1620
 
1418
- export declare const WorkbenchClaimContext: Context<WorkbenchWidgetRenderInput | undefined>;
1621
+ export declare const WorkbenchClaimContext: Context<WorkbenchPanelRenderInput | undefined>;
1622
+
1623
+ declare interface WorkbenchClosedSubPanel {
1624
+ region: WorkbenchPanelRegion;
1625
+ reference: WorkbenchSubPanelRef;
1626
+ resource?: ResourceRef;
1627
+ title?: string;
1628
+ }
1419
1629
 
1420
1630
  declare interface WorkbenchCommandExecutionContext {
1421
1631
  resource?: ResourceRef;
1632
+ source?: "panel-add";
1422
1633
  }
1423
1634
 
1424
1635
  declare interface WorkbenchCommandExecutionError {
@@ -1484,6 +1695,7 @@ declare interface WorkbenchCommandParamsRequest {
1484
1695
  }
1485
1696
 
1486
1697
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1698
+ host: WorkbenchHost;
1487
1699
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1488
1700
  unregisterModule(moduleId: string): void;
1489
1701
  }
@@ -1507,7 +1719,8 @@ declare interface WorkbenchCoreContributionContext {
1507
1719
  renderers: WorkbenchRenderers;
1508
1720
  resources: ResourceRegistry;
1509
1721
  settings: SettingsRegistry;
1510
- sessionPanel: WorkbenchSessionPanelController;
1722
+ shell: WorkbenchShellController;
1723
+ sidePanel: WorkbenchSidePanelController;
1511
1724
  terminal: WorkbenchTerminalController;
1512
1725
  themes: ThemeRegistry;
1513
1726
  fileIconThemes: FileIconThemeRegistry;
@@ -1517,34 +1730,46 @@ declare interface WorkbenchCoreContributionContext {
1517
1730
  onDidChangeActiveResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1518
1731
  }
1519
1732
 
1733
+ export declare const WorkbenchDataTableView: (props: WorkbenchDataTableViewProps) => JSX.Element;
1734
+
1735
+ declare interface WorkbenchDataTableViewProps {
1736
+ workbench: WorkbenchCore;
1737
+ contribution: RegisteredDataTableRendererContribution;
1738
+ placement: WorkbenchPanelInstance;
1739
+ }
1740
+
1520
1741
  declare interface WorkbenchFileIconThemeStoreState {
1521
1742
  themes: readonly FileIconThemePreferenceOption[];
1522
1743
  }
1523
1744
 
1524
- declare type WorkbenchFocusArea = (typeof workbenchFocusAreas)[number];
1745
+ declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1525
1746
 
1526
- declare const workbenchFocusAreas: readonly ["activityBar", "sideBar", "main", "panel", "statusBar"];
1747
+ export declare const WorkbenchFloatingSidePanel: (props: WorkbenchSidePanelProps) => JSX.Element | null;
1527
1748
 
1528
- declare type WorkbenchFocusChangeListener = (area: WorkbenchFocusArea | undefined) => void;
1749
+ declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1529
1750
 
1530
1751
  declare interface WorkbenchFocusController {
1531
1752
  store: WorkbenchStore<WorkbenchFocusState>;
1532
- setActiveArea(area: WorkbenchFocusArea): void;
1753
+ setActiveRegion(region: WorkbenchFocusRegionId): void;
1533
1754
  clearFocus(): void;
1534
- getActiveArea(): WorkbenchFocusArea | undefined;
1755
+ getActiveRegion(): WorkbenchFocusRegionId | undefined;
1535
1756
  onDidChange(listener: WorkbenchFocusChangeListener): Disposable_2;
1536
1757
  }
1537
1758
 
1538
1759
  export declare const WorkbenchFocusRegion: (props: WorkbenchFocusRegionProps) => JSX.Element;
1539
1760
 
1761
+ declare type WorkbenchFocusRegionId = (typeof workbenchFocusRegions)[number];
1762
+
1540
1763
  declare interface WorkbenchFocusRegionProps extends BoxProps {
1541
1764
  workbench: WorkbenchCore;
1542
- area: WorkbenchFocusArea;
1765
+ region: WorkbenchFocusRegionId;
1543
1766
  children: ReactNode;
1544
1767
  }
1545
1768
 
1769
+ declare const workbenchFocusRegions: readonly ["activity", "sidenav", "main", "secondary", "side", "status"];
1770
+
1546
1771
  declare interface WorkbenchFocusState {
1547
- activeArea: WorkbenchFocusArea | undefined;
1772
+ activeRegion: WorkbenchFocusRegionId | undefined;
1548
1773
  }
1549
1774
 
1550
1775
  export declare const WorkbenchHeaderActions: (props: WorkbenchHeaderActionsProps) => JSX.Element | null;
@@ -1552,6 +1777,16 @@ export declare const WorkbenchHeaderActions: (props: WorkbenchHeaderActionsProps
1552
1777
  declare interface WorkbenchHeaderActionsProps {
1553
1778
  workbench: WorkbenchCore;
1554
1779
  menuPath: MenuPath;
1780
+ controlSize?: "2xs" | "xs";
1781
+ }
1782
+
1783
+ declare interface WorkbenchHost {
1784
+ getSnapshot(): WorkbenchSnapshot;
1785
+ restoreSnapshot(snapshot: WorkbenchSnapshot): void;
1786
+ setPersistenceScope(scope: string | undefined, input?: {
1787
+ carryRegions?: readonly WorkbenchRegion_2[];
1788
+ }): void;
1789
+ getPersistenceScope(): string | undefined;
1555
1790
  }
1556
1791
 
1557
1792
  export declare interface WorkbenchHotkeyRegistration {
@@ -1590,8 +1825,10 @@ declare interface WorkbenchLastResourceController {
1590
1825
  }
1591
1826
 
1592
1827
  declare interface WorkbenchLayout {
1593
- areas: Record<WorkbenchArea_2, WorkbenchAreaState>;
1828
+ regions: Record<WorkbenchRegion_2, WorkbenchRegionState>;
1829
+ locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1594
1830
  activeWidgetId?: string;
1831
+ activeLocationWidgetId?: string;
1595
1832
  activeResourceUri?: string;
1596
1833
  }
1597
1834
 
@@ -1600,7 +1837,25 @@ declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1600
1837
  declare interface WorkbenchLayoutStoreState {
1601
1838
  layout: WorkbenchLayout;
1602
1839
  widgets: Record<string, RegisteredWidgetContribution>;
1603
- placeholders: Partial<Record<WorkbenchArea_2, RegisteredPlaceholderContribution>>;
1840
+ placeholders: Partial<Record<WorkbenchRegion_2, RegisteredPlaceholderContribution>>;
1841
+ }
1842
+
1843
+ declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1844
+
1845
+ declare interface WorkbenchLocationEligibility {
1846
+ modeIds?: string[];
1847
+ resourceKinds?: string[];
1848
+ resourceIds?: string[];
1849
+ canOpen?(resource: ResourceRef): boolean;
1850
+ }
1851
+
1852
+ declare interface WorkbenchLocationRef {
1853
+ key: string;
1854
+ modeId?: string;
1855
+ resource?: ResourceRef;
1856
+ contributionId?: string;
1857
+ instanceKey?: string;
1858
+ title?: string;
1604
1859
  }
1605
1860
 
1606
1861
  export declare interface WorkbenchMenuItem {
@@ -1631,16 +1886,24 @@ declare type WorkbenchModeChangeListener = () => void;
1631
1886
  declare interface WorkbenchModeContribution {
1632
1887
  id: string;
1633
1888
  label?: string;
1889
+ panels?: readonly WorkbenchPanelRegion[];
1634
1890
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1891
+ seed?(ctx: WorkbenchModeActivationContext): void;
1892
+ enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1635
1893
  }
1636
1894
 
1637
1895
  declare interface WorkbenchModeRegistry {
1638
1896
  store: WorkbenchStore<WorkbenchModeStoreState>;
1897
+ dispose(): void;
1639
1898
  registerMode(mode: WorkbenchModeContribution): Disposable_2;
1640
1899
  getMode(id: string): WorkbenchModeContribution | undefined;
1641
1900
  listModes(): WorkbenchModeContribution[];
1642
1901
  getActiveModeId(): string | undefined;
1643
- setActiveMode(id: string | undefined): void;
1902
+ isTransitioning(): boolean;
1903
+ setActiveMode(id: string | undefined, input?: {
1904
+ deferSeed?: boolean;
1905
+ }): void;
1906
+ seedActiveMode(): void;
1644
1907
  onDidChangeActive(listener: WorkbenchModeChangeListener): Disposable_2;
1645
1908
  }
1646
1909
 
@@ -1651,6 +1914,8 @@ declare interface WorkbenchModeStoreState {
1651
1914
 
1652
1915
  declare type WorkbenchModuleActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1653
1916
 
1917
+ declare type WorkbenchModuleContext = WorkbenchCoreContributionContext;
1918
+
1654
1919
  declare interface WorkbenchModuleContribution {
1655
1920
  id: string;
1656
1921
  source?: ContributionSource;
@@ -1658,7 +1923,7 @@ declare interface WorkbenchModuleContribution {
1658
1923
  activate(ctx: WorkbenchModuleContributionContext): WorkbenchModuleActivationResult;
1659
1924
  }
1660
1925
 
1661
- declare type WorkbenchModuleContributionContext = WorkbenchCoreContributionContext;
1926
+ declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1662
1927
 
1663
1928
  export declare const WorkbenchModuleHost: (props: WorkbenchModuleHostProps) => null;
1664
1929
 
@@ -1671,6 +1936,20 @@ export declare interface WorkbenchModuleHostRegistration {
1671
1936
  disposable: Disposable_2;
1672
1937
  }
1673
1938
 
1939
+ declare interface WorkbenchNavigationEntry {
1940
+ entryId: string;
1941
+ recordedAt: number;
1942
+ location: WorkbenchLocationRef;
1943
+ selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1944
+ kind: "resource" | "widget" | "mode";
1945
+ modeId?: string;
1946
+ resource?: ResourceRef;
1947
+ widgetId?: string;
1948
+ contributionId?: string;
1949
+ title?: string;
1950
+ closedSubPanel?: WorkbenchClosedSubPanel;
1951
+ }
1952
+
1674
1953
  declare interface WorkbenchNotification {
1675
1954
  id?: string;
1676
1955
  level: WorkbenchNotificationLevel;
@@ -1734,20 +2013,171 @@ export declare interface WorkbenchOverlayWidgetConfig {
1734
2013
  closeTriggerTop?: string;
1735
2014
  }
1736
2015
 
2016
+ declare interface WorkbenchPanelContribution {
2017
+ id: string;
2018
+ title: string;
2019
+ icon?: string;
2020
+ region: WorkbenchRegion_2;
2021
+ fallbackRegion?: WorkbenchRegion_2;
2022
+ rendererId: string;
2023
+ closable: boolean;
2024
+ singleton?: boolean;
2025
+ reuse?: WorkbenchPanelReusePolicy;
2026
+ mountStrategy?: WorkbenchPanelMountStrategy;
2027
+ hiddenByDefault?: boolean;
2028
+ regionSize?: WorkbenchRegionSize;
2029
+ regionCollapsible?: boolean;
2030
+ headerBorderBottom?: boolean;
2031
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
2032
+ resourceKinds?: string[];
2033
+ eligibleLocations?: WorkbenchLocationEligibility;
2034
+ priority?: number;
2035
+ openCommandId?: string;
2036
+ tab?: WorkbenchPanelTab;
2037
+ config?: unknown;
2038
+ canOpen?(resource: ResourceRef): boolean;
2039
+ ownerId?: string;
2040
+ source?: ContributionSource;
2041
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2042
+ }
2043
+
2044
+ declare interface WorkbenchPanelInstance {
2045
+ instanceId: string;
2046
+ panelId: string;
2047
+ ownerId?: string;
2048
+ source?: ContributionSource;
2049
+ resource?: ResourceRef;
2050
+ resourceUri?: string;
2051
+ ownerResourceUri?: string;
2052
+ title?: string;
2053
+ pinned?: boolean;
2054
+ closable: boolean;
2055
+ mountStrategy?: WorkbenchPanelMountStrategy;
2056
+ hiddenByDefault?: boolean;
2057
+ tabRetention?: WorkbenchTabRetention;
2058
+ tab?: WorkbenchPanelTab;
2059
+ }
2060
+
2061
+ declare interface WorkbenchPanelInstance_2 {
2062
+ instanceId: string;
2063
+ panelId: string;
2064
+ ownerId?: string;
2065
+ source?: ContributionSource_2;
2066
+ resource?: ResourceRef_2;
2067
+ resourceUri?: string;
2068
+ ownerResourceUri?: string;
2069
+ title?: string;
2070
+ pinned?: boolean;
2071
+ closable: boolean;
2072
+ mountStrategy?: WorkbenchPanelMountStrategy_2;
2073
+ hiddenByDefault?: boolean;
2074
+ tabRetention?: WorkbenchTabRetention_2;
2075
+ tab?: WorkbenchPanelTab_2;
2076
+ }
2077
+
2078
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2079
+ region: WorkbenchPanelMenuRegion;
2080
+ fallbackRegion?: WorkbenchPanelMenuRegion;
2081
+ };
2082
+
2083
+ declare interface WorkbenchPanelMenuDefinition {
2084
+ id: string;
2085
+ title: string;
2086
+ icon?: string;
2087
+ side: WorkbenchPanelMenuSide;
2088
+ singleton?: boolean;
2089
+ reuse?: WorkbenchPanelReusePolicy;
2090
+ mountStrategy?: WorkbenchPanelMountStrategy;
2091
+ hiddenByDefault?: boolean;
2092
+ regionSize?: WorkbenchRegionSize;
2093
+ regionCollapsible?: boolean;
2094
+ headerBorderBottom?: boolean;
2095
+ rendererId: string;
2096
+ priority?: number;
2097
+ config?: unknown;
2098
+ }
2099
+
2100
+ declare type WorkbenchPanelMenuOwner = {
2101
+ level: "panel";
2102
+ contributionId?: string;
2103
+ } | {
2104
+ level: "sub-panel";
2105
+ contributionId: string;
2106
+ };
2107
+
2108
+ declare type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];
2109
+
2110
+ declare const workbenchPanelMenuRegions: {
2111
+ readonly main: {
2112
+ readonly left: "main-left-menu";
2113
+ readonly right: "main-right-menu";
2114
+ };
2115
+ readonly secondary: {
2116
+ readonly left: "secondary-left-menu";
2117
+ readonly right: "secondary-right-menu";
2118
+ };
2119
+ readonly side: {
2120
+ readonly left: "side-left-menu";
2121
+ readonly right: "side-right-menu";
2122
+ };
2123
+ };
2124
+
2125
+ declare interface WorkbenchPanelMenusContribution {
2126
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2127
+ }
2128
+
2129
+ declare type WorkbenchPanelMenuSide = "left" | "right";
2130
+
2131
+ declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2132
+
2133
+ declare type WorkbenchPanelMountStrategy_2 = WidgetMountStrategy_2;
2134
+
2135
+ declare type WorkbenchPanelOpenStrategy = {
2136
+ kind: "activate-or-open";
2137
+ position?: WorkbenchTabPosition;
2138
+ } | {
2139
+ kind: "replace-active";
2140
+ } | {
2141
+ kind: "replace-panel";
2142
+ instanceId: string;
2143
+ } | {
2144
+ kind: "preview";
2145
+ position?: WorkbenchTabPosition;
2146
+ };
2147
+
2148
+ declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
2149
+
2150
+ declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
2151
+
2152
+ export declare interface WorkbenchPanelRenderInput {
2153
+ workbench: WorkbenchCore;
2154
+ panel: WorkbenchPanelContribution | PlaceholderContribution | RegisteredPlaceholderContribution;
2155
+ instance: WorkbenchPanelInstance;
2156
+ refresh: () => void;
2157
+ }
2158
+
2159
+ declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
2160
+
1737
2161
  declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1738
2162
 
1739
2163
  declare interface WorkbenchPanelsController {
1740
2164
  store: WorkbenchStore<WorkbenchPanelsState>;
1741
- isOpen(areaId: string): boolean;
1742
- setOpen(areaId: string, open: boolean): void;
1743
- toggle(areaId: string): void;
2165
+ isOpen(regionId: string): boolean;
2166
+ setOpen(regionId: string, open: boolean): void;
2167
+ toggle(regionId: string): void;
2168
+ setPersistenceScope(scope: string | undefined): void;
2169
+ getPersistenceScope(): string | undefined;
1744
2170
  onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
1745
2171
  }
1746
2172
 
1747
2173
  declare interface WorkbenchPanelsState {
1748
- openByAreaId: Record<string, boolean>;
2174
+ openByRegionId: Record<string, boolean>;
1749
2175
  }
1750
2176
 
2177
+ declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2178
+
2179
+ declare type WorkbenchPanelTab_2 = WorkbenchWidgetTab_2;
2180
+
1751
2181
  export declare const WorkbenchPreferencesForm: (props: WorkbenchPreferencesFormProps) => JSX.Element;
1752
2182
 
1753
2183
  export declare interface WorkbenchPreferencesFormProps {
@@ -1768,12 +2198,48 @@ declare interface WorkbenchProps {
1768
2198
  renderParamField?: CommandParamFieldRenderer;
1769
2199
  }
1770
2200
 
2201
+ export declare const WorkbenchRegion: (props: WorkbenchRegionProps) => JSX.Element | null;
2202
+
2203
+ declare type WorkbenchRegion_2 = (typeof workbenchRegions)[number];
2204
+
2205
+ declare interface WorkbenchRegionProps {
2206
+ workbench: WorkbenchCore;
2207
+ region: WorkbenchRegion_2;
2208
+ title?: string;
2209
+ pointerEvents?: "auto" | "none";
2210
+ transparent?: boolean;
2211
+ }
2212
+
2213
+ 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"];
2214
+
2215
+ declare interface WorkbenchRegionSize {
2216
+ defaultPx?: number;
2217
+ minPx?: number;
2218
+ maxPx?: number;
2219
+ }
2220
+
2221
+ declare interface WorkbenchRegionState {
2222
+ id: WorkbenchRegion_2;
2223
+ visible: boolean;
2224
+ size?: number;
2225
+ widgets: WorkbenchWidgetPlacement[];
2226
+ activeWidgetId?: string;
2227
+ }
2228
+
2229
+ export declare const WorkbenchRegionTabs: (props: WorkbenchRegionTabsProps) => JSX.Element | null;
2230
+
2231
+ declare interface WorkbenchRegionTabsProps {
2232
+ workbench: WorkbenchCore;
2233
+ region: WorkbenchRegion_2;
2234
+ visibilityStorageKey?: string;
2235
+ }
2236
+
1771
2237
  declare type WorkbenchRendererChangeListener = () => void;
1772
2238
 
1773
2239
  export declare type WorkbenchRendererRegistration = {
1774
2240
  id: string;
1775
2241
  keepAlive?: false;
1776
- render: (input: WorkbenchWidgetRenderInput) => unknown;
2242
+ render: (input: WorkbenchPanelRenderInput) => unknown;
1777
2243
  } | {
1778
2244
  id: string;
1779
2245
  keepAlive: true;
@@ -1786,50 +2252,68 @@ export declare interface WorkbenchRendererRegistry {
1786
2252
  getRenderer(id: string): WorkbenchRendererRegistration | undefined;
1787
2253
  listRenderers(): WorkbenchRendererRegistration[];
1788
2254
  onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
1789
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchWidgetRenderInput): Disposable_2;
2255
+ claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
1790
2256
  getHost(rendererId: string): HTMLElement | undefined;
1791
- getClaim(rendererId: string): WorkbenchWidgetRenderInput | undefined;
2257
+ getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
1792
2258
  }
1793
2259
 
1794
- declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & DataRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
2260
+ declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1795
2261
 
1796
2262
  declare interface WorkbenchRendererStoreState {
1797
2263
  renderers: Record<string, WorkbenchRendererRegistration>;
1798
2264
  hosts: Record<string, RegisteredKeepAliveHost>;
1799
- claims: Record<string, WorkbenchWidgetRenderInput>;
2265
+ claims: Record<string, WorkbenchPanelRenderInput>;
2266
+ }
2267
+
2268
+ export declare interface WorkbenchSettingsModuleOptions {
2269
+ /** Maps a preference scope (e.g. "project") to its scope id; project entries hide until this resolves. */
2270
+ resolveScopeId?: (scope: PreferenceScope) => string | undefined;
2271
+ /** Heading shown at the top of the settings overlay. */
2272
+ title?: string;
1800
2273
  }
1801
2274
 
1802
- export declare const WorkbenchSessionAttachedPanel: (props: WorkbenchSessionPanelProps) => JSX.Element;
2275
+ declare interface WorkbenchShellController {
2276
+ getRegionState(region: WorkbenchRegion_2): WorkbenchShellRegionState;
2277
+ setRegionOpen(region: WorkbenchShellOpenRegion, open: boolean): void;
2278
+ setRegionSize(region: WorkbenchRegion_2, size: number): void;
2279
+ getSidePanelPresentation(): WorkbenchSidePanelPresentation;
2280
+ setSidePanelPresentation(presentation: WorkbenchSidePanelPresentation): void;
2281
+ onDidChange(listener: () => void): Disposable_2;
2282
+ }
1803
2283
 
1804
- export declare const WorkbenchSessionBubbleContainer: (props: WorkbenchSessionPanelProps) => JSX.Element | null;
2284
+ declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
1805
2285
 
1806
- declare type WorkbenchSessionPanelChangeListener = (mode: WorkbenchSessionPanelMode) => void;
2286
+ declare interface WorkbenchShellRegionState {
2287
+ open: boolean;
2288
+ size?: number;
2289
+ }
2290
+
2291
+ declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
1807
2292
 
1808
- declare interface WorkbenchSessionPanelController {
1809
- store: WorkbenchStore<WorkbenchSessionPanelState>;
1810
- getMode(): WorkbenchSessionPanelMode;
1811
- setMode(mode: WorkbenchSessionPanelMode): void;
1812
- onDidChange(listener: WorkbenchSessionPanelChangeListener): Disposable_2;
2293
+ declare interface WorkbenchSidePanelController {
2294
+ store: WorkbenchStore<WorkbenchSidePanelState>;
2295
+ getMode(): WorkbenchSidePanelMode;
2296
+ setMode(mode: WorkbenchSidePanelMode): void;
2297
+ onDidChange(listener: WorkbenchSidePanelChangeListener): Disposable_2;
1813
2298
  }
1814
2299
 
1815
- declare type WorkbenchSessionPanelMode = "bubble" | "closed" | "attached";
2300
+ declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2301
+
2302
+ declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
1816
2303
 
1817
- declare interface WorkbenchSessionPanelProps {
2304
+ declare interface WorkbenchSidePanelProps {
1818
2305
  workbench: WorkbenchCore;
1819
2306
  contentSlotRef: (node: HTMLDivElement | null) => void;
1820
2307
  bottomOffset?: string;
1821
2308
  header?: ReactNode;
1822
2309
  }
1823
2310
 
1824
- declare interface WorkbenchSessionPanelState {
1825
- mode: WorkbenchSessionPanelMode;
2311
+ declare interface WorkbenchSidePanelState {
2312
+ mode: WorkbenchSidePanelMode;
1826
2313
  }
1827
2314
 
1828
- export declare interface WorkbenchSettingsModuleOptions {
1829
- /** Maps a preference scope (e.g. "project") to its scope id; project entries hide until this resolves. */
1830
- resolveScopeId?: (scope: PreferenceScope) => string | undefined;
1831
- /** Heading shown at the top of the settings overlay. */
1832
- title?: string;
2315
+ declare interface WorkbenchSnapshot {
2316
+ layout: WorkbenchLayout;
1833
2317
  }
1834
2318
 
1835
2319
  declare interface WorkbenchStore<TState> {
@@ -1848,6 +2332,27 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
1848
2332
 
1849
2333
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
1850
2334
 
2335
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2336
+ region: WorkbenchPanelRegion;
2337
+ fallbackRegion?: WorkbenchPanelRegion;
2338
+ } & WorkbenchPanelMenusContribution;
2339
+
2340
+ declare interface WorkbenchSubPanelRef {
2341
+ contributionId: string;
2342
+ resourceUri?: string;
2343
+ instanceKey?: string;
2344
+ }
2345
+
2346
+ declare type WorkbenchTabPosition = "start" | "end" | {
2347
+ beforeWidgetId: string;
2348
+ } | {
2349
+ afterWidgetId: string;
2350
+ };
2351
+
2352
+ declare type WorkbenchTabRetention = "preview" | "persistent";
2353
+
2354
+ declare type WorkbenchTabRetention_2 = "preview" | "persistent";
2355
+
1851
2356
  declare interface WorkbenchTerminalController {
1852
2357
  store: WorkbenchStore<WorkbenchTerminalState>;
1853
2358
  /** True once the host injected a session opener. */
@@ -1882,14 +2387,15 @@ declare interface WorkbenchTerminalController {
1882
2387
 
1883
2388
  /**
1884
2389
  * Body of the host-owned terminal panel. Chrome (tab, title, close action,
1885
- * resize) comes from the workbench `secondary` area; this component only mounts
1886
- * the terminal bound to the workbench terminal controller. Closing the panel
1887
- * unmounts the terminal, which kills its session (close = kill).
2390
+ * resize) comes from the workbench `secondary` region; this component only mounts
2391
+ * the terminal bound to the workbench terminal controller. Collapsing the panel
2392
+ * keeps the terminal mounted. Closing its tab unmounts the terminal and kills
2393
+ * its session (close = kill).
1888
2394
  */
1889
2395
  export declare const WorkbenchTerminalPanel: (props: WorkbenchTerminalPanelProps) => JSX.Element;
1890
2396
 
1891
2397
  declare interface WorkbenchTerminalPanelProps {
1892
- placement: WorkbenchWidgetPlacement;
2398
+ placement: WorkbenchPanelInstance;
1893
2399
  workbench: WorkbenchCore;
1894
2400
  }
1895
2401
 
@@ -1972,6 +2478,7 @@ declare interface WorkbenchTreeViewProps {
1972
2478
  viewId?: string;
1973
2479
  renderParamField?: CommandParamFieldRenderer;
1974
2480
  onOpenResourceError?: (error: unknown) => void;
2481
+ onSidenavContextActionsChange?: (actions: ResourceContextAction_2[]) => void;
1975
2482
  }
1976
2483
 
1977
2484
  export declare const WorkbenchWidgetHost: (props: WorkbenchWidgetHostProps) => JSX.Element;
@@ -1989,32 +2496,29 @@ declare interface WorkbenchWidgetPlacement {
1989
2496
  source?: ContributionSource;
1990
2497
  resource?: ResourceRef;
1991
2498
  resourceUri?: string;
2499
+ ownerResourceUri?: string;
1992
2500
  title?: string;
1993
2501
  pinned?: boolean;
1994
2502
  closable?: boolean;
1995
2503
  mountStrategy?: WidgetMountStrategy;
1996
2504
  hiddenByDefault?: boolean;
2505
+ tabRetention?: WorkbenchTabRetention;
2506
+ tab?: WorkbenchWidgetTab;
2507
+ role?: WorkbenchWidgetRole;
1997
2508
  }
1998
2509
 
1999
- declare interface WorkbenchWidgetPlacement_2 {
2000
- widgetId: string;
2001
- contributionId: string;
2002
- ownerId?: string;
2003
- source?: ContributionSource_2;
2004
- resource?: ResourceRef_2;
2005
- resourceUri?: string;
2006
- title?: string;
2007
- pinned?: boolean;
2008
- closable?: boolean;
2009
- mountStrategy?: WidgetMountStrategy_2;
2010
- hiddenByDefault?: boolean;
2510
+ declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2511
+
2512
+ declare interface WorkbenchWidgetTab {
2513
+ contentRendererId?: string;
2514
+ /** Custom actions shown when the user activates an already-active tab. */
2515
+ customMenuRendererId?: string;
2011
2516
  }
2012
2517
 
2013
- export declare interface WorkbenchWidgetRenderInput {
2014
- workbench: WorkbenchCore;
2015
- widget: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
2016
- placement: WorkbenchWidgetPlacement;
2017
- refresh: () => void;
2518
+ declare interface WorkbenchWidgetTab_2 {
2519
+ contentRendererId?: string;
2520
+ /** Custom actions shown when the user activates an already-active tab. */
2521
+ customMenuRendererId?: string;
2018
2522
  }
2019
2523
 
2020
2524
  export { }