@pstdio/workbench 0.2.1 → 0.4.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 +749 -256
  5. package/dist/extensions.js +900 -694
  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 +756 -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 +745 -231
  14. package/dist/react.js +3494 -2493
  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 +695 -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,123 @@ 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
+ selectionMode?: "none" | "multiple";
438
+ selectionActions?: DataTableRendererSelectionAction[];
439
+ rowActions?: DataTableRendererRowAction[];
440
+ initialPageSize?: number;
441
+ pageSizeOptions?: number[];
410
442
  emptyTitle?: string;
411
443
  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[];
444
+ executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
421
445
  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;
446
+ onRowClick?: (row: DataTableRendererRow) => void;
436
447
  }
437
448
 
438
- declare type DataRendererFilterState = Record<string, string[]>;
439
-
440
- declare type DataRendererImplementation = (input: WorkbenchWidgetRenderInput & {
441
- dataRendererId: string;
449
+ declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
450
+ dataTableRendererId: string;
442
451
  }) => unknown;
443
452
 
444
- declare interface DataRendererOrdering {
445
- attributeId: string | typeof MANUAL_ORDERING;
446
- direction: SortDirection;
453
+ declare interface DataTableRendererQueryContext {
454
+ resource?: ResourceRef;
455
+ modeId?: string;
447
456
  }
448
457
 
449
- declare interface DataRendererQueryState {
450
- settings: DataRendererSettings;
451
- filters: DataRendererFilterState;
458
+ declare interface DataTableRendererQueryResult {
459
+ rows: DataTableRendererRow[];
460
+ columns?: DataTableRendererColumn[];
452
461
  }
453
462
 
454
- declare interface DataRendererRefreshEvent {
455
- dataRendererId: string;
463
+ declare interface DataTableRendererRefreshEvent {
464
+ dataTableRendererId: string;
456
465
  }
457
466
 
458
- declare type DataRendererRefreshListener = (event: DataRendererRefreshEvent) => void;
467
+ declare interface DataTableRendererRegistry {
468
+ dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
469
+ registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
470
+ setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
471
+ getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
472
+ listDataTableRenderers(): RegisteredDataTableRendererContribution[];
473
+ refreshDataTableRenderer(id: string): void;
474
+ onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
475
+ }
459
476
 
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;
477
+ declare interface DataTableRendererRow {
478
+ id: string;
479
+ values: Record<string, unknown>;
480
+ resource?: ResourceRef;
468
481
  }
469
482
 
470
- declare interface DataRendererRow {
483
+ declare interface DataTableRendererRowAction {
471
484
  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>;
485
+ label: string;
486
+ icon?: unknown;
487
+ destructive?: boolean;
488
+ run(row: DataTableRendererRow): Promise<void> | void;
480
489
  }
481
490
 
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[];
491
+ declare interface DataTableRendererSelectionAction {
492
+ id: string;
493
+ label: string;
494
+ icon?: unknown;
495
+ destructive?: boolean;
496
+ run(rows: DataTableRendererRow[]): Promise<void> | void;
488
497
  }
489
498
 
490
- declare interface DataRendererStoreState {
491
- renderers: Record<string, RegisteredDataRendererContribution>;
499
+ declare interface DataTableRendererStoreState {
500
+ renderers: Record<string, RegisteredDataTableRendererContribution>;
501
+ }
502
+
503
+ declare interface DataTableRendererThemeColor {
504
+ light: string;
505
+ dark: string;
506
+ foreground?: {
507
+ light: string;
508
+ dark: string;
509
+ };
492
510
  }
493
511
 
494
512
  declare interface Disposable_2 {
@@ -568,7 +586,7 @@ declare interface FileRendererContribution {
568
586
  save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
569
587
  }
570
588
 
571
- declare type FileRendererImplementation = (input: WorkbenchWidgetRenderInput & {
589
+ declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
572
590
  fileRendererId: string;
573
591
  }) => unknown;
574
592
 
@@ -599,28 +617,177 @@ declare interface HistoryController {
599
617
  goPrevious(): HistoryEntry | undefined;
600
618
  recentlyClosed(): readonly HistoryEntry[];
601
619
  reopenLastClosed(): HistoryEntry | undefined;
620
+ setPersistenceScope(scope: string | undefined): void;
621
+ getPersistenceScope(): string | undefined;
622
+ restore(): HistoryEntry | undefined;
623
+ flush(): void;
602
624
  clear(): void;
603
625
  }
604
626
 
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
- }
627
+ declare type HistoryEntry = WorkbenchNavigationEntry;
615
628
 
616
629
  declare interface HistoryStoreState {
617
- entries: readonly HistoryEntry[];
630
+ entries: readonly WorkbenchNavigationEntry[];
618
631
  cursor: number;
619
- recentlyClosed: readonly HistoryEntry[];
632
+ recentlyClosed: readonly WorkbenchNavigationEntry[];
633
+ hydrating: boolean;
620
634
  }
621
635
 
622
636
  export declare const isSettingsScopeVisible: (scope: SettingsScope | undefined, hasProjectScope: boolean) => boolean;
623
637
 
638
+ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
639
+ id: string;
640
+ title: string;
641
+ resourceKind?: string;
642
+ /**
643
+ * Declarative attribute schema. The renderer dispatches filter / group /
644
+ * sort / display / inline-edit behavior on each descriptor's `type.kind`.
645
+ *
646
+ * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
647
+ * static array to let the contribution mutate its schema at runtime —
648
+ * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
649
+ * propagate live without re-registering the renderer.
650
+ */
651
+ attributes: AttributeDescriptor[] | AttributesSource;
652
+ /** Per-board-column overrides (color, drag/create rules, custom actions). */
653
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
654
+ hideToolbar?: boolean;
655
+ emptyTitle?: string;
656
+ emptyDescription?: string;
657
+ /** Initial settings/filters applied when the kanban renderer mounts. */
658
+ defaultSettings?: Partial<KanbanRendererSettings>;
659
+ defaultFilters?: KanbanRendererFilterState;
660
+ defaultViews?: KanbanRendererSavedView[];
661
+ defaultActiveViewId?: string;
662
+ /**
663
+ * Data source. Receives the current display state so backends can paginate
664
+ * / filter / sort. The renderer re-applies filter / sort / group locally,
665
+ * so this can return unfiltered rows in simple cases.
666
+ */
667
+ executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
668
+ subscribe?: (listener: () => void) => Disposable_2 | (() => void);
669
+ /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
670
+ onRowClick?: (row: TRow) => void;
671
+ /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
672
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
673
+ /**
674
+ * Fires for inline attribute edits AND for cross-column drag-to-reorder on
675
+ * the board (the renderer passes the grouping attribute id + the target
676
+ * column value).
677
+ */
678
+ onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
679
+ /** Manual within-column reorder (only fires when ordering is manual). */
680
+ onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
681
+ createRow?: KanbanRendererCreateRowConfig;
682
+ onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;
683
+ onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
684
+ }
685
+
686
+ declare interface KanbanRendererCreateField {
687
+ id: string;
688
+ label: string;
689
+ description?: string;
690
+ placeholder?: string;
691
+ type: KanbanRendererCreateFieldType;
692
+ required?: boolean;
693
+ defaultValue?: unknown;
694
+ options?: EnumOption[];
695
+ /** `files` fields only. */
696
+ multiple?: boolean;
697
+ accept?: string;
698
+ }
699
+
700
+ declare type KanbanRendererCreateFieldType = "text" | "longtext" | "markdown" | "number" | "boolean" | "select" | "multi-select" | "files";
701
+
702
+ /** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */
703
+ declare interface KanbanRendererCreateLabels {
704
+ cancel: string;
705
+ properties: string;
706
+ submitError: string;
707
+ removeFile: string;
708
+ }
709
+
710
+ declare interface KanbanRendererCreateRowConfig {
711
+ title: string;
712
+ submitLabel: string;
713
+ fields: KanbanRendererCreateField[];
714
+ labels: KanbanRendererCreateLabels;
715
+ }
716
+
717
+ declare interface KanbanRendererCreateSubmission {
718
+ columnId: string;
719
+ columnAttributeId?: string;
720
+ /** Declared field values, excluding `files` fields — those arrive as `files`. */
721
+ values: Record<string, unknown>;
722
+ /** Every editable attribute the user set, keyed by attribute id. */
723
+ attributeValues: Record<string, unknown>;
724
+ files: File[];
725
+ }
726
+
727
+ declare type KanbanRendererFilterState = Record<string, string[]>;
728
+
729
+ declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
730
+ kanbanRendererId: string;
731
+ }) => unknown;
732
+
733
+ declare interface KanbanRendererOrdering {
734
+ attributeId: string | typeof MANUAL_ORDERING;
735
+ direction: SortDirection;
736
+ }
737
+
738
+ declare interface KanbanRendererQueryState {
739
+ settings: KanbanRendererSettings;
740
+ filters: KanbanRendererFilterState;
741
+ }
742
+
743
+ declare interface KanbanRendererRefreshEvent {
744
+ kanbanRendererId: string;
745
+ }
746
+
747
+ declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
748
+
749
+ declare interface KanbanRendererRegistry {
750
+ dataStore: WorkbenchStore<KanbanRendererStoreState>;
751
+ registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
752
+ setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
753
+ getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
754
+ listKanbanRenderers(): RegisteredKanbanRendererContribution[];
755
+ refreshKanbanRenderer(id: string): void;
756
+ onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
757
+ }
758
+
759
+ declare interface KanbanRendererRow {
760
+ id: string;
761
+ title: string;
762
+ /**
763
+ * Optional navigation handle. When set, the renderer's default click handler
764
+ * routes through the contribution's onRowClick (which typically opens the
765
+ * resource via the workbench).
766
+ */
767
+ resource?: unknown;
768
+ attributes: Record<string, unknown>;
769
+ }
770
+
771
+ declare interface KanbanRendererSavedView {
772
+ id: string;
773
+ title: string;
774
+ settings: KanbanRendererSettings;
775
+ filters: KanbanRendererFilterState;
776
+ isDefault?: boolean;
777
+ }
778
+
779
+ declare interface KanbanRendererSettings {
780
+ viewMode: ViewMode;
781
+ columnGrouping: string | typeof NO_GROUPING;
782
+ rowGrouping: string | typeof NO_GROUPING;
783
+ ordering: KanbanRendererOrdering;
784
+ displayProperties: string[];
785
+ }
786
+
787
+ declare interface KanbanRendererStoreState {
788
+ renderers: Record<string, RegisteredKanbanRendererContribution>;
789
+ }
790
+
624
791
  declare interface Keybinding {
625
792
  commandId: string;
626
793
  keybinding: KeybindingSequence;
@@ -646,33 +813,62 @@ declare interface LayoutModel {
646
813
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
647
814
  dispose(): void;
648
815
  };
816
+ registerPanel(panel: WorkbenchPanelContribution, metadata?: ContributionMetadata): {
817
+ dispose(): void;
818
+ };
649
819
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
650
820
  dispose(): void;
651
821
  };
822
+ registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
823
+ dispose(): void;
824
+ };
825
+ registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
826
+ dispose(): void;
827
+ };
828
+ registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
829
+ dispose(): void;
830
+ };
652
831
  unregisterWidget(id: string, options?: {
653
832
  removePlacements?: boolean;
654
833
  persist?: boolean;
655
834
  }): void;
656
- getPlaceholder(areaId: WorkbenchArea_2): RegisteredPlaceholderContribution | undefined;
835
+ getPlaceholder(regionId: WorkbenchRegion_2): RegisteredPlaceholderContribution | undefined;
657
836
  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;
837
+ getPanel(id: string): WorkbenchPanelContribution | undefined;
838
+ getRegionSize(regionId: WorkbenchRegion_2): WorkbenchRegionSize | undefined;
839
+ getRegionCollapsible(regionId: WorkbenchRegion_2): boolean;
840
+ getRegionHeaderBorderBottom(regionId: WorkbenchRegion_2): boolean;
841
+ setRegionVisible(regionId: WorkbenchRegion_2, visible: boolean): void;
842
+ setRegionSize(regionId: WorkbenchRegion_2, size: number): void;
663
843
  listPlaceholders(): RegisteredPlaceholderContribution[];
664
844
  listWidgets(): RegisteredWidgetContribution[];
845
+ listPanels(): WorkbenchPanelContribution[];
846
+ listPanelInstances(region?: WorkbenchRegion_2): WorkbenchPanelInstance[];
847
+ getActivePanel(region?: WorkbenchRegion_2): WorkbenchPanelInstance | undefined;
665
848
  openWidget(id: string, input?: OpenWidgetInput): WorkbenchWidgetPlacement;
849
+ openPanel(id: string, input?: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
850
+ updatePanel(instanceId: string, input: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
851
+ reorderPanel(instanceId: string, position: WorkbenchTabPosition): void;
852
+ activatePanel(instanceId: string): WorkbenchPanelInstance;
853
+ closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
666
854
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
855
+ reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
856
+ expirePreviewTabs(ownerResourceUri?: string): void;
667
857
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
858
+ setRegionActiveWidget(regionId: WorkbenchRegion_2, widgetId: string | undefined): void;
668
859
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
669
860
  removeWidgetPlacement(widgetId: string): WorkbenchWidgetPlacement | undefined;
670
- clearArea(areaId: WorkbenchArea_2): void;
671
- resetAreas(): void;
861
+ clearRegion(regionId: WorkbenchRegion_2): void;
862
+ resetRegions(): void;
672
863
  getLayout(): WorkbenchLayout;
673
864
  restoreLayout(layout: WorkbenchLayout): void;
674
- setPersistenceScope(scope: LayoutScope | undefined): void;
865
+ setPersistenceScope(scope: LayoutScope | undefined, input?: {
866
+ carryRegionState?: readonly WorkbenchRegion_2[];
867
+ }): void;
675
868
  getPersistenceScope(): LayoutScope | undefined;
869
+ onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
870
+ dispose(): void;
871
+ };
676
872
  onDidChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
677
873
  dispose(): void;
678
874
  };
@@ -686,6 +882,7 @@ declare const MANUAL_ORDERING = "manual";
686
882
 
687
883
  declare interface MenuItem {
688
884
  commandId: string;
885
+ sourceCommandId?: string;
689
886
  label?: string;
690
887
  description?: string;
691
888
  icon?: string;
@@ -750,7 +947,13 @@ declare interface NavigationTargetCompound {
750
947
  targets: readonly NavigationTargetItem[];
751
948
  }
752
949
 
753
- declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetCommand;
950
+ declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
951
+
952
+ declare interface NavigationTargetPanel {
953
+ kind: "panel";
954
+ panelId: string;
955
+ input?: OpenWorkbenchPanelInput;
956
+ }
754
957
 
755
958
  declare interface NavigationTargetResource {
756
959
  kind: "resource";
@@ -758,12 +961,6 @@ declare interface NavigationTargetResource {
758
961
  input?: OpenResourceInput;
759
962
  }
760
963
 
761
- declare interface NavigationTargetView {
762
- kind: "view";
763
- widgetId: string;
764
- input?: OpenWidgetInput;
765
- }
766
-
767
964
  declare const NO_GROUPING = "none";
768
965
 
769
966
  export declare const normalizeWorkbenchKeybinding: (keybinding: KeybindingSequence) => KeybindingSequence;
@@ -784,20 +981,39 @@ declare interface OpenResourceInput {
784
981
  declare interface OpenWidgetInput {
785
982
  resource?: ResourceRef;
786
983
  title?: string;
787
- area?: WorkbenchArea_2;
984
+ region?: WorkbenchRegion_2;
788
985
  ownerId?: string;
789
986
  source?: ContributionSource;
790
987
  pinned?: boolean;
791
988
  closable?: boolean;
792
989
  mountStrategy?: WidgetMountStrategy;
793
990
  hiddenByDefault?: boolean;
991
+ tabRetention?: WorkbenchTabRetention;
992
+ tabPosition?: WorkbenchTabPosition;
993
+ tab?: WorkbenchWidgetTab;
794
994
  replaceActive?: boolean;
995
+ replaceWidgetId?: string;
996
+ }
997
+
998
+ declare interface OpenWorkbenchPanelInput {
999
+ resource?: ResourceRef;
1000
+ title?: string;
1001
+ region?: WorkbenchRegion_2;
1002
+ pinned?: boolean;
1003
+ mountStrategy?: WorkbenchPanelMountStrategy;
1004
+ hiddenByDefault?: boolean;
1005
+ tab?: WorkbenchPanelTab;
1006
+ strategy?: WorkbenchPanelOpenStrategy;
795
1007
  }
796
1008
 
797
- export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalInput) => WorkbenchWidgetPlacement_2;
1009
+ export declare const openWorkbenchTerminal: (ctx: WorkbenchCoreContributionContext, input?: OpenWorkbenchTerminalOptions) => WorkbenchPanelInstance_2;
798
1010
 
799
1011
  declare type OpenWorkbenchTerminalInput = NonNullable<Parameters<WorkbenchCoreContributionContext["layout"]["openWidget"]>[1]>;
800
1012
 
1013
+ declare type OpenWorkbenchTerminalOptions = OpenWorkbenchTerminalInput & {
1014
+ reveal?: boolean;
1015
+ };
1016
+
801
1017
  declare type ParamValue = Parameters<NonNullable<ParamEditorProps["onChange"]>>[1];
802
1018
 
803
1019
  export declare const paramValueToPreference: (schema: PreferencePropertySchema, value: ParamValue) => PreferenceValue;
@@ -805,10 +1021,10 @@ export declare const paramValueToPreference: (schema: PreferencePropertySchema,
805
1021
  declare interface PlaceholderContribution {
806
1022
  id: string;
807
1023
  title: string;
808
- area: WorkbenchArea_2;
1024
+ region: WorkbenchRegion_2;
809
1025
  rendererId: string;
810
- areaSize?: WorkbenchAreaSize;
811
- areaCollapsible?: boolean;
1026
+ regionSize?: WorkbenchRegionSize;
1027
+ regionCollapsible?: boolean;
812
1028
  config?: unknown;
813
1029
  priority?: number;
814
1030
  }
@@ -870,12 +1086,15 @@ declare interface RegisteredContributionMetadata {
870
1086
  declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
871
1087
  }
872
1088
 
873
- declare interface RegisteredDataRendererContribution<TRow extends DataRendererRow = DataRendererRow> extends DataRendererContribution<TRow>, RegisteredContributionMetadata {
1089
+ declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
874
1090
  }
875
1091
 
876
1092
  declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
877
1093
  }
878
1094
 
1095
+ declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1096
+ }
1097
+
879
1098
  declare interface RegisteredKeepAliveHost {
880
1099
  rendererId: string;
881
1100
  host: HTMLElement;
@@ -911,8 +1130,10 @@ declare interface RegisteredTreeRendererContribution extends TreeRendererContrib
911
1130
  }
912
1131
 
913
1132
  declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1133
+ ownedPanelMenuIds?: readonly string[];
914
1134
  singleton: boolean;
915
1135
  reuse: WidgetReusePolicy;
1136
+ role: WorkbenchWidgetRole;
916
1137
  } & RegisteredContributionMetadata;
917
1138
 
918
1139
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -926,7 +1147,9 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
926
1147
  metadata?: Record<string, unknown>;
927
1148
  }
928
1149
 
929
- declare type ResolvedResourceOpener = Required<ResourceOpener>;
1150
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1151
+
1152
+ declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
930
1153
 
931
1154
  declare interface ResourceBrowseEntry {
932
1155
  resource: ResourceRef;
@@ -948,6 +1171,13 @@ declare interface ResourceContextAction {
948
1171
  separatorBefore?: boolean;
949
1172
  }
950
1173
 
1174
+ declare interface ResourceHierarchyProvider {
1175
+ id: string;
1176
+ priority?: number;
1177
+ canResolve(resource: ResourceRef): boolean;
1178
+ getParent(resource: ResourceRef): ResourceRef | undefined;
1179
+ }
1180
+
951
1181
  declare interface ResourceKindContribution {
952
1182
  kind: string;
953
1183
  label: string;
@@ -968,11 +1198,11 @@ declare interface ResourceNavigator<TResult = unknown> {
968
1198
  navigate(resource: ResourceRef): TResult | Promise<TResult>;
969
1199
  }
970
1200
 
971
- declare interface ResourceOpener<TResult = unknown> {
1201
+ declare interface ResourcePresenter {
972
1202
  id: string;
973
1203
  priority?: number;
974
1204
  canOpen(resource: ResourceRef): boolean;
975
- open(resource: ResourceRef, input: OpenResourceInput): TResult | Promise<TResult>;
1205
+ open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
976
1206
  }
977
1207
 
978
1208
  declare interface ResourceProvider {
@@ -1005,19 +1235,24 @@ declare interface ResourceRegistry {
1005
1235
  getKind(kind: string): RegisteredResourceKind | undefined;
1006
1236
  getSurface(resource: ResourceRef): ResourceSurface | undefined;
1007
1237
  listKinds(): RegisteredResourceKind[];
1008
- registerOpener(opener: ResourceOpener): Disposable_2;
1009
- listOpeners(): ResolvedResourceOpener[];
1238
+ registerPresenter(presenter: ResourcePresenter): Disposable_2;
1239
+ listPresenters(): ResolvedResourcePresenter[];
1010
1240
  registerProvider(provider: ResourceProvider): Disposable_2;
1011
1241
  listProviders(): ResourceProvider[];
1012
1242
  listResources(query: string): readonly ResourceBrowseEntry[];
1013
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
1243
+ registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1244
+ listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1245
+ walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1246
+ isOpeningResource(): boolean;
1247
+ openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1014
1248
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1015
1249
  }
1016
1250
 
1017
1251
  declare interface ResourceRegistryStoreState {
1018
1252
  kinds: Record<string, RegisteredResourceKind>;
1019
- openers: Record<string, ResolvedResourceOpener>;
1253
+ presenters: Record<string, ResolvedResourcePresenter>;
1020
1254
  providers: Record<string, ResourceProvider>;
1255
+ hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1021
1256
  }
1022
1257
 
1023
1258
  declare type ResourceSurface = "primary" | "secondary" | "attached";
@@ -1102,7 +1337,7 @@ declare interface SettingsRegistryStoreState {
1102
1337
  /** Settings are stored either per-user (global) or per-project. Projectless surfaces show only global entries. */
1103
1338
  declare type SettingsScope = "global" | "project";
1104
1339
 
1105
- /** An ordered sidebar container. Headerless when `title` is omitted. */
1340
+ /** An ordered sidenav container. Headerless when `title` is omitted. */
1106
1341
  declare interface SettingsSectionContribution {
1107
1342
  id: string;
1108
1343
  title?: string;
@@ -1210,6 +1445,8 @@ declare interface TreeNode {
1210
1445
  hiddenByDefault?: boolean;
1211
1446
  /** When true, the node (e.g. a header/footer row) opts in to the tree's hide/show customization menu. */
1212
1447
  canHide?: boolean;
1448
+ /** When false, the node stays fixed within its Sidenav group. */
1449
+ canReorder?: boolean;
1213
1450
  }
1214
1451
 
1215
1452
  declare type TreeNodeRowVariant = "empty-state";
@@ -1227,7 +1464,7 @@ declare interface TreeRendererContribution {
1227
1464
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1228
1465
  }
1229
1466
 
1230
- declare type TreeRendererImplementation = (input: WorkbenchWidgetRenderInput & {
1467
+ declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1231
1468
  treeId: string;
1232
1469
  }) => unknown;
1233
1470
 
@@ -1285,9 +1522,13 @@ declare interface TreeViewSection {
1285
1522
  hiddenByDefault?: boolean;
1286
1523
  /** When true, the section (category) opts in to the tree's hide/show customization menu. */
1287
1524
  canHide?: boolean;
1525
+ /** When false, the section stays fixed within the Sidenav main region. */
1526
+ canReorder?: boolean;
1288
1527
  }
1289
1528
 
1290
- export declare const useWorkbenchClaim: () => WorkbenchWidgetRenderInput | undefined;
1529
+ export declare const useWorkbenchClaim: () => WorkbenchPanelRenderInput | undefined;
1530
+
1531
+ export declare const useWorkbenchResourceActionResolver: (workbench: WorkbenchCoreContributionContext) => (resource: ResourceRef) => ResourceContextAction_2[];
1291
1532
 
1292
1533
  export declare const useWorkbenchStore: <TState, TSlice>(store: WorkbenchStore<TState>, selector: (state: TState) => TSlice) => TSlice;
1293
1534
 
@@ -1300,8 +1541,8 @@ export declare const useWorkbenchThemePreferences: (workbench: WorkbenchCore) =>
1300
1541
  })[];
1301
1542
 
1302
1543
  /**
1303
- * Core-owned contracts for data renderer contributions. @pstdio/ui's
1304
- * DataRenderer props are structurally identical; the React layer bridges the
1544
+ * Core-owned contracts for kanban renderer contributions. @pstdio/ui's
1545
+ * KanbanRenderer props are structurally identical; the React layer bridges the
1305
1546
  * two, so drift surfaces as a compile error there instead of coupling core's
1306
1547
  * API shape to UI package ownership.
1307
1548
  */
@@ -1310,19 +1551,26 @@ declare type ViewMode = "board" | "list";
1310
1551
  declare interface WidgetContribution {
1311
1552
  id: string;
1312
1553
  title: string;
1313
- area: WorkbenchArea_2;
1314
- fallbackArea?: WorkbenchArea_2;
1554
+ icon?: string;
1555
+ region: WorkbenchRegion_2;
1556
+ fallbackRegion?: WorkbenchRegion_2;
1315
1557
  singleton?: boolean;
1316
1558
  reuse?: WidgetReusePolicy;
1317
1559
  mountStrategy?: WidgetMountStrategy;
1318
1560
  closable?: boolean;
1319
1561
  hiddenByDefault?: boolean;
1320
- areaSize?: WorkbenchAreaSize;
1321
- areaCollapsible?: boolean;
1562
+ regionSize?: WorkbenchRegionSize;
1563
+ regionCollapsible?: boolean;
1322
1564
  headerBorderBottom?: boolean;
1565
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1323
1566
  resourceKinds?: string[];
1324
1567
  priority?: number;
1325
1568
  rendererId: string;
1569
+ openCommandId?: string;
1570
+ role?: WorkbenchWidgetRole;
1571
+ eligibleLocations?: WorkbenchLocationEligibility;
1572
+ panelMenuOwner?: WorkbenchPanelMenuOwner;
1573
+ tab?: WorkbenchWidgetTab;
1326
1574
  config?: unknown;
1327
1575
  canOpen?(resource: ResourceRef): boolean;
1328
1576
  }
@@ -1349,43 +1597,7 @@ export declare const WORKBENCH_TERMINAL_OPEN_COMMAND_ID = "workbench.terminal.op
1349
1597
 
1350
1598
  export declare const WORKBENCH_TERMINAL_WIDGET_ID = "workbench.terminal";
1351
1599
 
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
- }
1600
+ export declare const WorkbenchAttachedSidePanel: (props: WorkbenchSidePanelProps) => JSX.Element;
1389
1601
 
1390
1602
  declare type WorkbenchBreadcrumbChangeListener = () => void;
1391
1603
 
@@ -1400,6 +1612,7 @@ declare interface WorkbenchBreadcrumbController {
1400
1612
  declare interface WorkbenchBreadcrumbItem {
1401
1613
  title: unknown;
1402
1614
  icon?: string;
1615
+ indicator?: "session-status";
1403
1616
  url?: string;
1404
1617
  onClick?: () => void;
1405
1618
  resource?: ResourceRef;
@@ -1415,10 +1628,18 @@ declare interface WorkbenchBreadcrumbViewProps {
1415
1628
  workbench: WorkbenchCore;
1416
1629
  }
1417
1630
 
1418
- export declare const WorkbenchClaimContext: Context<WorkbenchWidgetRenderInput | undefined>;
1631
+ export declare const WorkbenchClaimContext: Context<WorkbenchPanelRenderInput | undefined>;
1632
+
1633
+ declare interface WorkbenchClosedSubPanel {
1634
+ region: WorkbenchPanelRegion;
1635
+ reference: WorkbenchSubPanelRef;
1636
+ resource?: ResourceRef;
1637
+ title?: string;
1638
+ }
1419
1639
 
1420
1640
  declare interface WorkbenchCommandExecutionContext {
1421
1641
  resource?: ResourceRef;
1642
+ source?: "panel-add";
1422
1643
  }
1423
1644
 
1424
1645
  declare interface WorkbenchCommandExecutionError {
@@ -1484,6 +1705,7 @@ declare interface WorkbenchCommandParamsRequest {
1484
1705
  }
1485
1706
 
1486
1707
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1708
+ host: WorkbenchHost;
1487
1709
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1488
1710
  unregisterModule(moduleId: string): void;
1489
1711
  }
@@ -1507,7 +1729,8 @@ declare interface WorkbenchCoreContributionContext {
1507
1729
  renderers: WorkbenchRenderers;
1508
1730
  resources: ResourceRegistry;
1509
1731
  settings: SettingsRegistry;
1510
- sessionPanel: WorkbenchSessionPanelController;
1732
+ shell: WorkbenchShellController;
1733
+ sidePanel: WorkbenchSidePanelController;
1511
1734
  terminal: WorkbenchTerminalController;
1512
1735
  themes: ThemeRegistry;
1513
1736
  fileIconThemes: FileIconThemeRegistry;
@@ -1517,34 +1740,46 @@ declare interface WorkbenchCoreContributionContext {
1517
1740
  onDidChangeActiveResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1518
1741
  }
1519
1742
 
1743
+ export declare const WorkbenchDataTableView: (props: WorkbenchDataTableViewProps) => JSX.Element;
1744
+
1745
+ declare interface WorkbenchDataTableViewProps {
1746
+ workbench: WorkbenchCore;
1747
+ contribution: RegisteredDataTableRendererContribution;
1748
+ placement: WorkbenchPanelInstance;
1749
+ }
1750
+
1520
1751
  declare interface WorkbenchFileIconThemeStoreState {
1521
1752
  themes: readonly FileIconThemePreferenceOption[];
1522
1753
  }
1523
1754
 
1524
- declare type WorkbenchFocusArea = (typeof workbenchFocusAreas)[number];
1755
+ declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1525
1756
 
1526
- declare const workbenchFocusAreas: readonly ["activityBar", "sideBar", "main", "panel", "statusBar"];
1757
+ export declare const WorkbenchFloatingSidePanel: (props: WorkbenchSidePanelProps) => JSX.Element | null;
1527
1758
 
1528
- declare type WorkbenchFocusChangeListener = (area: WorkbenchFocusArea | undefined) => void;
1759
+ declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1529
1760
 
1530
1761
  declare interface WorkbenchFocusController {
1531
1762
  store: WorkbenchStore<WorkbenchFocusState>;
1532
- setActiveArea(area: WorkbenchFocusArea): void;
1763
+ setActiveRegion(region: WorkbenchFocusRegionId): void;
1533
1764
  clearFocus(): void;
1534
- getActiveArea(): WorkbenchFocusArea | undefined;
1765
+ getActiveRegion(): WorkbenchFocusRegionId | undefined;
1535
1766
  onDidChange(listener: WorkbenchFocusChangeListener): Disposable_2;
1536
1767
  }
1537
1768
 
1538
1769
  export declare const WorkbenchFocusRegion: (props: WorkbenchFocusRegionProps) => JSX.Element;
1539
1770
 
1771
+ declare type WorkbenchFocusRegionId = (typeof workbenchFocusRegions)[number];
1772
+
1540
1773
  declare interface WorkbenchFocusRegionProps extends BoxProps {
1541
1774
  workbench: WorkbenchCore;
1542
- area: WorkbenchFocusArea;
1775
+ region: WorkbenchFocusRegionId;
1543
1776
  children: ReactNode;
1544
1777
  }
1545
1778
 
1779
+ declare const workbenchFocusRegions: readonly ["activity", "sidenav", "main", "secondary", "side", "status"];
1780
+
1546
1781
  declare interface WorkbenchFocusState {
1547
- activeArea: WorkbenchFocusArea | undefined;
1782
+ activeRegion: WorkbenchFocusRegionId | undefined;
1548
1783
  }
1549
1784
 
1550
1785
  export declare const WorkbenchHeaderActions: (props: WorkbenchHeaderActionsProps) => JSX.Element | null;
@@ -1552,6 +1787,16 @@ export declare const WorkbenchHeaderActions: (props: WorkbenchHeaderActionsProps
1552
1787
  declare interface WorkbenchHeaderActionsProps {
1553
1788
  workbench: WorkbenchCore;
1554
1789
  menuPath: MenuPath;
1790
+ controlSize?: "2xs" | "xs";
1791
+ }
1792
+
1793
+ declare interface WorkbenchHost {
1794
+ getSnapshot(): WorkbenchSnapshot;
1795
+ restoreSnapshot(snapshot: WorkbenchSnapshot): void;
1796
+ setPersistenceScope(scope: string | undefined, input?: {
1797
+ carryRegions?: readonly WorkbenchRegion_2[];
1798
+ }): void;
1799
+ getPersistenceScope(): string | undefined;
1555
1800
  }
1556
1801
 
1557
1802
  export declare interface WorkbenchHotkeyRegistration {
@@ -1590,8 +1835,10 @@ declare interface WorkbenchLastResourceController {
1590
1835
  }
1591
1836
 
1592
1837
  declare interface WorkbenchLayout {
1593
- areas: Record<WorkbenchArea_2, WorkbenchAreaState>;
1838
+ regions: Record<WorkbenchRegion_2, WorkbenchRegionState>;
1839
+ locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1594
1840
  activeWidgetId?: string;
1841
+ activeLocationWidgetId?: string;
1595
1842
  activeResourceUri?: string;
1596
1843
  }
1597
1844
 
@@ -1600,7 +1847,25 @@ declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1600
1847
  declare interface WorkbenchLayoutStoreState {
1601
1848
  layout: WorkbenchLayout;
1602
1849
  widgets: Record<string, RegisteredWidgetContribution>;
1603
- placeholders: Partial<Record<WorkbenchArea_2, RegisteredPlaceholderContribution>>;
1850
+ placeholders: Partial<Record<WorkbenchRegion_2, RegisteredPlaceholderContribution>>;
1851
+ }
1852
+
1853
+ declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1854
+
1855
+ declare interface WorkbenchLocationEligibility {
1856
+ modeIds?: string[];
1857
+ resourceKinds?: string[];
1858
+ resourceIds?: string[];
1859
+ canOpen?(resource: ResourceRef): boolean;
1860
+ }
1861
+
1862
+ declare interface WorkbenchLocationRef {
1863
+ key: string;
1864
+ modeId?: string;
1865
+ resource?: ResourceRef;
1866
+ contributionId?: string;
1867
+ instanceKey?: string;
1868
+ title?: string;
1604
1869
  }
1605
1870
 
1606
1871
  export declare interface WorkbenchMenuItem {
@@ -1631,16 +1896,24 @@ declare type WorkbenchModeChangeListener = () => void;
1631
1896
  declare interface WorkbenchModeContribution {
1632
1897
  id: string;
1633
1898
  label?: string;
1899
+ panels?: readonly WorkbenchPanelRegion[];
1634
1900
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1901
+ seed?(ctx: WorkbenchModeActivationContext): void;
1902
+ enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1635
1903
  }
1636
1904
 
1637
1905
  declare interface WorkbenchModeRegistry {
1638
1906
  store: WorkbenchStore<WorkbenchModeStoreState>;
1907
+ dispose(): void;
1639
1908
  registerMode(mode: WorkbenchModeContribution): Disposable_2;
1640
1909
  getMode(id: string): WorkbenchModeContribution | undefined;
1641
1910
  listModes(): WorkbenchModeContribution[];
1642
1911
  getActiveModeId(): string | undefined;
1643
- setActiveMode(id: string | undefined): void;
1912
+ isTransitioning(): boolean;
1913
+ setActiveMode(id: string | undefined, input?: {
1914
+ deferSeed?: boolean;
1915
+ }): void;
1916
+ seedActiveMode(): void;
1644
1917
  onDidChangeActive(listener: WorkbenchModeChangeListener): Disposable_2;
1645
1918
  }
1646
1919
 
@@ -1651,6 +1924,8 @@ declare interface WorkbenchModeStoreState {
1651
1924
 
1652
1925
  declare type WorkbenchModuleActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1653
1926
 
1927
+ declare type WorkbenchModuleContext = WorkbenchCoreContributionContext;
1928
+
1654
1929
  declare interface WorkbenchModuleContribution {
1655
1930
  id: string;
1656
1931
  source?: ContributionSource;
@@ -1658,7 +1933,7 @@ declare interface WorkbenchModuleContribution {
1658
1933
  activate(ctx: WorkbenchModuleContributionContext): WorkbenchModuleActivationResult;
1659
1934
  }
1660
1935
 
1661
- declare type WorkbenchModuleContributionContext = WorkbenchCoreContributionContext;
1936
+ declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1662
1937
 
1663
1938
  export declare const WorkbenchModuleHost: (props: WorkbenchModuleHostProps) => null;
1664
1939
 
@@ -1671,6 +1946,20 @@ export declare interface WorkbenchModuleHostRegistration {
1671
1946
  disposable: Disposable_2;
1672
1947
  }
1673
1948
 
1949
+ declare interface WorkbenchNavigationEntry {
1950
+ entryId: string;
1951
+ recordedAt: number;
1952
+ location: WorkbenchLocationRef;
1953
+ selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1954
+ kind: "resource" | "widget" | "mode";
1955
+ modeId?: string;
1956
+ resource?: ResourceRef;
1957
+ widgetId?: string;
1958
+ contributionId?: string;
1959
+ title?: string;
1960
+ closedSubPanel?: WorkbenchClosedSubPanel;
1961
+ }
1962
+
1674
1963
  declare interface WorkbenchNotification {
1675
1964
  id?: string;
1676
1965
  level: WorkbenchNotificationLevel;
@@ -1734,20 +2023,171 @@ export declare interface WorkbenchOverlayWidgetConfig {
1734
2023
  closeTriggerTop?: string;
1735
2024
  }
1736
2025
 
2026
+ declare interface WorkbenchPanelContribution {
2027
+ id: string;
2028
+ title: string;
2029
+ icon?: string;
2030
+ region: WorkbenchRegion_2;
2031
+ fallbackRegion?: WorkbenchRegion_2;
2032
+ rendererId: string;
2033
+ closable: boolean;
2034
+ singleton?: boolean;
2035
+ reuse?: WorkbenchPanelReusePolicy;
2036
+ mountStrategy?: WorkbenchPanelMountStrategy;
2037
+ hiddenByDefault?: boolean;
2038
+ regionSize?: WorkbenchRegionSize;
2039
+ regionCollapsible?: boolean;
2040
+ headerBorderBottom?: boolean;
2041
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
2042
+ resourceKinds?: string[];
2043
+ eligibleLocations?: WorkbenchLocationEligibility;
2044
+ priority?: number;
2045
+ openCommandId?: string;
2046
+ tab?: WorkbenchPanelTab;
2047
+ config?: unknown;
2048
+ canOpen?(resource: ResourceRef): boolean;
2049
+ ownerId?: string;
2050
+ source?: ContributionSource;
2051
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2052
+ }
2053
+
2054
+ declare interface WorkbenchPanelInstance {
2055
+ instanceId: string;
2056
+ panelId: string;
2057
+ ownerId?: string;
2058
+ source?: ContributionSource;
2059
+ resource?: ResourceRef;
2060
+ resourceUri?: string;
2061
+ ownerResourceUri?: string;
2062
+ title?: string;
2063
+ pinned?: boolean;
2064
+ closable: boolean;
2065
+ mountStrategy?: WorkbenchPanelMountStrategy;
2066
+ hiddenByDefault?: boolean;
2067
+ tabRetention?: WorkbenchTabRetention;
2068
+ tab?: WorkbenchPanelTab;
2069
+ }
2070
+
2071
+ declare interface WorkbenchPanelInstance_2 {
2072
+ instanceId: string;
2073
+ panelId: string;
2074
+ ownerId?: string;
2075
+ source?: ContributionSource_2;
2076
+ resource?: ResourceRef_2;
2077
+ resourceUri?: string;
2078
+ ownerResourceUri?: string;
2079
+ title?: string;
2080
+ pinned?: boolean;
2081
+ closable: boolean;
2082
+ mountStrategy?: WorkbenchPanelMountStrategy_2;
2083
+ hiddenByDefault?: boolean;
2084
+ tabRetention?: WorkbenchTabRetention_2;
2085
+ tab?: WorkbenchPanelTab_2;
2086
+ }
2087
+
2088
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2089
+ region: WorkbenchPanelMenuRegion;
2090
+ fallbackRegion?: WorkbenchPanelMenuRegion;
2091
+ };
2092
+
2093
+ declare interface WorkbenchPanelMenuDefinition {
2094
+ id: string;
2095
+ title: string;
2096
+ icon?: string;
2097
+ side: WorkbenchPanelMenuSide;
2098
+ singleton?: boolean;
2099
+ reuse?: WorkbenchPanelReusePolicy;
2100
+ mountStrategy?: WorkbenchPanelMountStrategy;
2101
+ hiddenByDefault?: boolean;
2102
+ regionSize?: WorkbenchRegionSize;
2103
+ regionCollapsible?: boolean;
2104
+ headerBorderBottom?: boolean;
2105
+ rendererId: string;
2106
+ priority?: number;
2107
+ config?: unknown;
2108
+ }
2109
+
2110
+ declare type WorkbenchPanelMenuOwner = {
2111
+ level: "panel";
2112
+ contributionId?: string;
2113
+ } | {
2114
+ level: "sub-panel";
2115
+ contributionId: string;
2116
+ };
2117
+
2118
+ declare type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];
2119
+
2120
+ declare const workbenchPanelMenuRegions: {
2121
+ readonly main: {
2122
+ readonly left: "main-left-menu";
2123
+ readonly right: "main-right-menu";
2124
+ };
2125
+ readonly secondary: {
2126
+ readonly left: "secondary-left-menu";
2127
+ readonly right: "secondary-right-menu";
2128
+ };
2129
+ readonly side: {
2130
+ readonly left: "side-left-menu";
2131
+ readonly right: "side-right-menu";
2132
+ };
2133
+ };
2134
+
2135
+ declare interface WorkbenchPanelMenusContribution {
2136
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2137
+ }
2138
+
2139
+ declare type WorkbenchPanelMenuSide = "left" | "right";
2140
+
2141
+ declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2142
+
2143
+ declare type WorkbenchPanelMountStrategy_2 = WidgetMountStrategy_2;
2144
+
2145
+ declare type WorkbenchPanelOpenStrategy = {
2146
+ kind: "activate-or-open";
2147
+ position?: WorkbenchTabPosition;
2148
+ } | {
2149
+ kind: "replace-active";
2150
+ } | {
2151
+ kind: "replace-panel";
2152
+ instanceId: string;
2153
+ } | {
2154
+ kind: "preview";
2155
+ position?: WorkbenchTabPosition;
2156
+ };
2157
+
2158
+ declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
2159
+
2160
+ declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
2161
+
2162
+ export declare interface WorkbenchPanelRenderInput {
2163
+ workbench: WorkbenchCore;
2164
+ panel: WorkbenchPanelContribution | PlaceholderContribution | RegisteredPlaceholderContribution;
2165
+ instance: WorkbenchPanelInstance;
2166
+ refresh: () => void;
2167
+ }
2168
+
2169
+ declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
2170
+
1737
2171
  declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1738
2172
 
1739
2173
  declare interface WorkbenchPanelsController {
1740
2174
  store: WorkbenchStore<WorkbenchPanelsState>;
1741
- isOpen(areaId: string): boolean;
1742
- setOpen(areaId: string, open: boolean): void;
1743
- toggle(areaId: string): void;
2175
+ isOpen(regionId: string): boolean;
2176
+ setOpen(regionId: string, open: boolean): void;
2177
+ toggle(regionId: string): void;
2178
+ setPersistenceScope(scope: string | undefined): void;
2179
+ getPersistenceScope(): string | undefined;
1744
2180
  onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
1745
2181
  }
1746
2182
 
1747
2183
  declare interface WorkbenchPanelsState {
1748
- openByAreaId: Record<string, boolean>;
2184
+ openByRegionId: Record<string, boolean>;
1749
2185
  }
1750
2186
 
2187
+ declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2188
+
2189
+ declare type WorkbenchPanelTab_2 = WorkbenchWidgetTab_2;
2190
+
1751
2191
  export declare const WorkbenchPreferencesForm: (props: WorkbenchPreferencesFormProps) => JSX.Element;
1752
2192
 
1753
2193
  export declare interface WorkbenchPreferencesFormProps {
@@ -1768,12 +2208,48 @@ declare interface WorkbenchProps {
1768
2208
  renderParamField?: CommandParamFieldRenderer;
1769
2209
  }
1770
2210
 
2211
+ export declare const WorkbenchRegion: (props: WorkbenchRegionProps) => JSX.Element | null;
2212
+
2213
+ declare type WorkbenchRegion_2 = (typeof workbenchRegions)[number];
2214
+
2215
+ declare interface WorkbenchRegionProps {
2216
+ workbench: WorkbenchCore;
2217
+ region: WorkbenchRegion_2;
2218
+ title?: string;
2219
+ pointerEvents?: "auto" | "none";
2220
+ transparent?: boolean;
2221
+ }
2222
+
2223
+ 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"];
2224
+
2225
+ declare interface WorkbenchRegionSize {
2226
+ defaultPx?: number;
2227
+ minPx?: number;
2228
+ maxPx?: number;
2229
+ }
2230
+
2231
+ declare interface WorkbenchRegionState {
2232
+ id: WorkbenchRegion_2;
2233
+ visible: boolean;
2234
+ size?: number;
2235
+ widgets: WorkbenchWidgetPlacement[];
2236
+ activeWidgetId?: string;
2237
+ }
2238
+
2239
+ export declare const WorkbenchRegionTabs: (props: WorkbenchRegionTabsProps) => JSX.Element | null;
2240
+
2241
+ declare interface WorkbenchRegionTabsProps {
2242
+ workbench: WorkbenchCore;
2243
+ region: WorkbenchRegion_2;
2244
+ visibilityStorageKey?: string;
2245
+ }
2246
+
1771
2247
  declare type WorkbenchRendererChangeListener = () => void;
1772
2248
 
1773
2249
  export declare type WorkbenchRendererRegistration = {
1774
2250
  id: string;
1775
2251
  keepAlive?: false;
1776
- render: (input: WorkbenchWidgetRenderInput) => unknown;
2252
+ render: (input: WorkbenchPanelRenderInput) => unknown;
1777
2253
  } | {
1778
2254
  id: string;
1779
2255
  keepAlive: true;
@@ -1786,50 +2262,68 @@ export declare interface WorkbenchRendererRegistry {
1786
2262
  getRenderer(id: string): WorkbenchRendererRegistration | undefined;
1787
2263
  listRenderers(): WorkbenchRendererRegistration[];
1788
2264
  onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
1789
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchWidgetRenderInput): Disposable_2;
2265
+ claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
1790
2266
  getHost(rendererId: string): HTMLElement | undefined;
1791
- getClaim(rendererId: string): WorkbenchWidgetRenderInput | undefined;
2267
+ getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
1792
2268
  }
1793
2269
 
1794
- declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & DataRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
2270
+ declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1795
2271
 
1796
2272
  declare interface WorkbenchRendererStoreState {
1797
2273
  renderers: Record<string, WorkbenchRendererRegistration>;
1798
2274
  hosts: Record<string, RegisteredKeepAliveHost>;
1799
- claims: Record<string, WorkbenchWidgetRenderInput>;
2275
+ claims: Record<string, WorkbenchPanelRenderInput>;
2276
+ }
2277
+
2278
+ export declare interface WorkbenchSettingsModuleOptions {
2279
+ /** Maps a preference scope (e.g. "project") to its scope id; project entries hide until this resolves. */
2280
+ resolveScopeId?: (scope: PreferenceScope) => string | undefined;
2281
+ /** Heading shown at the top of the settings overlay. */
2282
+ title?: string;
1800
2283
  }
1801
2284
 
1802
- export declare const WorkbenchSessionAttachedPanel: (props: WorkbenchSessionPanelProps) => JSX.Element;
2285
+ declare interface WorkbenchShellController {
2286
+ getRegionState(region: WorkbenchRegion_2): WorkbenchShellRegionState;
2287
+ setRegionOpen(region: WorkbenchShellOpenRegion, open: boolean): void;
2288
+ setRegionSize(region: WorkbenchRegion_2, size: number): void;
2289
+ getSidePanelPresentation(): WorkbenchSidePanelPresentation;
2290
+ setSidePanelPresentation(presentation: WorkbenchSidePanelPresentation): void;
2291
+ onDidChange(listener: () => void): Disposable_2;
2292
+ }
1803
2293
 
1804
- export declare const WorkbenchSessionBubbleContainer: (props: WorkbenchSessionPanelProps) => JSX.Element | null;
2294
+ declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
1805
2295
 
1806
- declare type WorkbenchSessionPanelChangeListener = (mode: WorkbenchSessionPanelMode) => void;
2296
+ declare interface WorkbenchShellRegionState {
2297
+ open: boolean;
2298
+ size?: number;
2299
+ }
2300
+
2301
+ declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
1807
2302
 
1808
- declare interface WorkbenchSessionPanelController {
1809
- store: WorkbenchStore<WorkbenchSessionPanelState>;
1810
- getMode(): WorkbenchSessionPanelMode;
1811
- setMode(mode: WorkbenchSessionPanelMode): void;
1812
- onDidChange(listener: WorkbenchSessionPanelChangeListener): Disposable_2;
2303
+ declare interface WorkbenchSidePanelController {
2304
+ store: WorkbenchStore<WorkbenchSidePanelState>;
2305
+ getMode(): WorkbenchSidePanelMode;
2306
+ setMode(mode: WorkbenchSidePanelMode): void;
2307
+ onDidChange(listener: WorkbenchSidePanelChangeListener): Disposable_2;
1813
2308
  }
1814
2309
 
1815
- declare type WorkbenchSessionPanelMode = "bubble" | "closed" | "attached";
2310
+ declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2311
+
2312
+ declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
1816
2313
 
1817
- declare interface WorkbenchSessionPanelProps {
2314
+ declare interface WorkbenchSidePanelProps {
1818
2315
  workbench: WorkbenchCore;
1819
2316
  contentSlotRef: (node: HTMLDivElement | null) => void;
1820
2317
  bottomOffset?: string;
1821
2318
  header?: ReactNode;
1822
2319
  }
1823
2320
 
1824
- declare interface WorkbenchSessionPanelState {
1825
- mode: WorkbenchSessionPanelMode;
2321
+ declare interface WorkbenchSidePanelState {
2322
+ mode: WorkbenchSidePanelMode;
1826
2323
  }
1827
2324
 
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;
2325
+ declare interface WorkbenchSnapshot {
2326
+ layout: WorkbenchLayout;
1833
2327
  }
1834
2328
 
1835
2329
  declare interface WorkbenchStore<TState> {
@@ -1848,6 +2342,27 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
1848
2342
 
1849
2343
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
1850
2344
 
2345
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2346
+ region: WorkbenchPanelRegion;
2347
+ fallbackRegion?: WorkbenchPanelRegion;
2348
+ } & WorkbenchPanelMenusContribution;
2349
+
2350
+ declare interface WorkbenchSubPanelRef {
2351
+ contributionId: string;
2352
+ resourceUri?: string;
2353
+ instanceKey?: string;
2354
+ }
2355
+
2356
+ declare type WorkbenchTabPosition = "start" | "end" | {
2357
+ beforeWidgetId: string;
2358
+ } | {
2359
+ afterWidgetId: string;
2360
+ };
2361
+
2362
+ declare type WorkbenchTabRetention = "preview" | "persistent";
2363
+
2364
+ declare type WorkbenchTabRetention_2 = "preview" | "persistent";
2365
+
1851
2366
  declare interface WorkbenchTerminalController {
1852
2367
  store: WorkbenchStore<WorkbenchTerminalState>;
1853
2368
  /** True once the host injected a session opener. */
@@ -1882,14 +2397,15 @@ declare interface WorkbenchTerminalController {
1882
2397
 
1883
2398
  /**
1884
2399
  * 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).
2400
+ * resize) comes from the workbench `secondary` region; this component only mounts
2401
+ * the terminal bound to the workbench terminal controller. Collapsing the panel
2402
+ * keeps the terminal mounted. Closing its tab unmounts the terminal and kills
2403
+ * its session (close = kill).
1888
2404
  */
1889
2405
  export declare const WorkbenchTerminalPanel: (props: WorkbenchTerminalPanelProps) => JSX.Element;
1890
2406
 
1891
2407
  declare interface WorkbenchTerminalPanelProps {
1892
- placement: WorkbenchWidgetPlacement;
2408
+ placement: WorkbenchPanelInstance;
1893
2409
  workbench: WorkbenchCore;
1894
2410
  }
1895
2411
 
@@ -1972,6 +2488,7 @@ declare interface WorkbenchTreeViewProps {
1972
2488
  viewId?: string;
1973
2489
  renderParamField?: CommandParamFieldRenderer;
1974
2490
  onOpenResourceError?: (error: unknown) => void;
2491
+ onSidenavContextActionsChange?: (actions: ResourceContextAction_2[]) => void;
1975
2492
  }
1976
2493
 
1977
2494
  export declare const WorkbenchWidgetHost: (props: WorkbenchWidgetHostProps) => JSX.Element;
@@ -1989,32 +2506,29 @@ declare interface WorkbenchWidgetPlacement {
1989
2506
  source?: ContributionSource;
1990
2507
  resource?: ResourceRef;
1991
2508
  resourceUri?: string;
2509
+ ownerResourceUri?: string;
1992
2510
  title?: string;
1993
2511
  pinned?: boolean;
1994
2512
  closable?: boolean;
1995
2513
  mountStrategy?: WidgetMountStrategy;
1996
2514
  hiddenByDefault?: boolean;
2515
+ tabRetention?: WorkbenchTabRetention;
2516
+ tab?: WorkbenchWidgetTab;
2517
+ role?: WorkbenchWidgetRole;
1997
2518
  }
1998
2519
 
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;
2520
+ declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2521
+
2522
+ declare interface WorkbenchWidgetTab {
2523
+ contentRendererId?: string;
2524
+ /** Custom actions shown when the user activates an already-active tab. */
2525
+ customMenuRendererId?: string;
2011
2526
  }
2012
2527
 
2013
- export declare interface WorkbenchWidgetRenderInput {
2014
- workbench: WorkbenchCore;
2015
- widget: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
2016
- placement: WorkbenchWidgetPlacement;
2017
- refresh: () => void;
2528
+ declare interface WorkbenchWidgetTab_2 {
2529
+ contentRendererId?: string;
2530
+ /** Custom actions shown when the user activates an already-active tab. */
2531
+ customMenuRendererId?: string;
2018
2532
  }
2019
2533
 
2020
2534
  export { }