@pstdio/workbench 0.2.0 → 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 +737 -255
  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
@@ -11,7 +11,8 @@ import { ReactNode } from 'react';
11
11
  import { ThemePreference as ThemePreference_2 } from 'pstdio-extensions/bridge/contract';
12
12
  import { WorkbenchExtensionCommandPaletteResourceRecord } from '@pstdio/sdk/api';
13
13
  import { WorkbenchExtensionControlsRendererRecord } from '@pstdio/sdk/api';
14
- import { WorkbenchExtensionDataRendererRecord } from '@pstdio/sdk/api';
14
+ import { WorkbenchExtensionDataTableRendererRecord } from 'pstdio-api-contracts';
15
+ import { WorkbenchExtensionKanbanRendererRecord } from '@pstdio/sdk/api';
15
16
  import { WorkbenchExtensionMetadata } from '@pstdio/sdk/api';
16
17
 
17
18
  declare interface AttributeDescriptor {
@@ -24,7 +25,7 @@ declare interface AttributeDescriptor {
24
25
  displayable?: boolean;
25
26
  editable?: boolean;
26
27
  display?: AttributeDisplayDescriptor;
27
- render?: (value: unknown, row: DataRendererRow) => ReactNode;
28
+ render?: (value: unknown, row: KanbanRendererRow) => ReactNode;
28
29
  compare?: (a: unknown, b: unknown) => number;
29
30
  }
30
31
 
@@ -89,7 +90,7 @@ export declare interface BridgeWebviewConfig {
89
90
  export declare interface BridgeWebviewRenderContext {
90
91
  workbench: WorkbenchCore;
91
92
  webviewId: string;
92
- placement: WorkbenchWidgetPlacement;
93
+ placement: WorkbenchPanelInstance;
93
94
  /** Channel for pushing host events (e.g. terminal output) into this webview. */
94
95
  hostEvents: HostEventPublisher;
95
96
  }
@@ -125,7 +126,7 @@ declare interface CollectionSettingsPanel<TItem = unknown> extends SettingsPanel
125
126
  itemLabel(item: TItem): string;
126
127
  itemIcon?(item: TItem): string | undefined;
127
128
  groupBy?: SettingsCollectionGroupBy<TItem>;
128
- renderItem(item: TItem, input: WorkbenchWidgetRenderInput): unknown;
129
+ renderItem(item: TItem, input: WorkbenchPanelRenderInput): unknown;
129
130
  actions?: SettingsAction[];
130
131
  }
131
132
 
@@ -268,8 +269,6 @@ declare interface ControlsQueryResult {
268
269
  readOnly?: boolean;
269
270
  }
270
271
 
271
- declare type ControlsRendererArea = "main-right" | "secondary" | "overlay";
272
-
273
272
  declare interface ControlsRendererContribution {
274
273
  id: string;
275
274
  title: string;
@@ -289,12 +288,12 @@ declare interface ControlsRendererContribution {
289
288
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
290
289
  }
291
290
 
292
- declare type ControlsRendererImplementation = (input: WorkbenchWidgetRenderInput & {
291
+ declare type ControlsRendererImplementation = (input: WorkbenchPanelRenderInput & {
293
292
  controlsRendererId: string;
294
293
  }) => unknown;
295
294
 
296
295
  declare interface ControlsRendererLayout {
297
- area?: ControlsRendererArea;
296
+ region?: ControlsRendererRegion;
298
297
  defaultPx?: number;
299
298
  minPx?: number;
300
299
  maxPx?: number;
@@ -306,6 +305,8 @@ declare interface ControlsRendererRefreshEvent {
306
305
 
307
306
  declare type ControlsRendererRefreshListener = (event: ControlsRendererRefreshEvent) => void;
308
307
 
308
+ declare type ControlsRendererRegion = "main-right-menu" | "secondary" | "overlay";
309
+
309
310
  declare interface ControlsRendererRegistry {
310
311
  controlsStore: WorkbenchStore<ControlsRendererStoreState>;
311
312
  registerControlsRenderer(contribution: ControlsRendererContribution, metadata?: ContributionMetadata): Disposable_2;
@@ -332,7 +333,7 @@ declare interface ControlsUpdateValueInput {
332
333
  resource?: ResourceRef;
333
334
  }
334
335
 
335
- declare type ControlsViewRecord = WorkbenchExtensionMetadata["views"][number];
336
+ declare type ControlsViewRecord = WorkbenchExtensionMetadata["panels"][number];
336
337
 
337
338
  export declare type CreateBridgeWebviewHostCapabilities = (context: BridgeWebviewRenderContext) => HostCapabilityRegistry;
338
339
 
@@ -340,7 +341,7 @@ export declare type CreateBridgeWebviewProps = (context: BridgeWebviewRenderCont
340
341
 
341
342
  export declare const createBridgeWebviewRenderer: (input?: CreateBridgeWebviewRendererInput) => {
342
343
  id: string;
343
- render: (renderInput: WorkbenchWidgetRenderInput) => JSX.Element | null;
344
+ render: (renderInput: WorkbenchPanelRenderInput) => JSX.Element | null;
344
345
  };
345
346
 
346
347
  declare interface CreateBridgeWebviewRendererInput {
@@ -367,8 +368,8 @@ declare interface CreateTerminalSessionCapabilityInput {
367
368
  export declare const createWorkbenchWebviewHostCapabilities: (input: CreateWorkbenchWebviewHostCapabilitiesInput) => {
368
369
  "terminal.session"?: HostCapability | undefined;
369
370
  "commands.execute": (params: unknown) => Promise<unknown>;
370
- "resource.open": (params: unknown) => Promise<unknown>;
371
- "notification.show": (params: unknown) => RegisteredWorkbenchNotification_2;
371
+ "resource.open": (params: unknown) => Promise<WorkbenchPanelInstance_2>;
372
+ "notification.show": (params: unknown) => RegisteredWorkbenchNotification;
372
373
  "preferences.get": (params: unknown) => PreferenceValue | undefined;
373
374
  "preferences.set": (params: unknown) => {
374
375
  name: string;
@@ -390,112 +391,117 @@ declare interface CreateWorkbenchWebviewHostCapabilitiesInput {
390
391
  */
391
392
  declare interface CustomSettingsPanel extends SettingsPanelBase {
392
393
  kind: "custom";
393
- render(input: WorkbenchWidgetRenderInput): unknown;
394
+ render(input: WorkbenchPanelRenderInput): unknown;
394
395
  }
395
396
 
396
- declare interface DataRendererContribution<TRow extends DataRendererRow = DataRendererRow> {
397
+ declare interface DataTableRendererColumn {
398
+ id: string;
399
+ label?: string;
400
+ description?: string;
401
+ icon?: unknown;
402
+ hidden?: boolean;
403
+ stat?: DataTableRendererColumnStat;
404
+ renderer?: DataTableRendererColumnRenderer;
405
+ }
406
+
407
+ declare type DataTableRendererColumnRenderer = {
408
+ type: "json";
409
+ } | {
410
+ type: "color-scale";
411
+ stops: Array<{
412
+ value: number;
413
+ color: DataTableRendererThemeColor;
414
+ }>;
415
+ } | {
416
+ type: "categorical-color";
417
+ categories: Array<{
418
+ value: string | number | boolean | null;
419
+ color: DataTableRendererThemeColor;
420
+ }>;
421
+ };
422
+
423
+ declare type DataTableRendererColumnStat = {
424
+ type: "unique";
425
+ } | {
426
+ type: "histogram";
427
+ bins?: number;
428
+ } | {
429
+ type: "top-values";
430
+ limit?: number;
431
+ };
432
+
433
+ declare interface DataTableRendererContribution {
397
434
  id: string;
398
435
  title: string;
399
436
  resourceKind?: string;
400
- /**
401
- * Declarative attribute schema. The renderer dispatches filter / group /
402
- * sort / display / inline-edit behavior on each descriptor's `type.kind`.
403
- *
404
- * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
405
- * static array to let the contribution mutate its schema at runtime —
406
- * `WorkbenchDataView` subscribes so additions / removals / kind changes
407
- * propagate live without re-registering the renderer.
408
- */
409
- attributes: AttributeDescriptor[] | AttributesSource;
410
- /** Per-board-column overrides (color, drag/create rules, custom actions). */
411
- getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
412
- hideToolbar?: boolean;
437
+ columns?: DataTableRendererColumn[];
438
+ rowActions?: DataTableRendererRowAction[];
439
+ initialPageSize?: number;
440
+ pageSizeOptions?: number[];
413
441
  emptyTitle?: string;
414
442
  emptyDescription?: string;
415
- /** Initial settings/filters applied when the data renderer mounts. */
416
- defaultSettings?: Partial<DataRendererSettings>;
417
- defaultFilters?: DataRendererFilterState;
418
- /**
419
- * Data source. Receives the current display state so backends can paginate
420
- * / filter / sort. The renderer re-applies filter / sort / group locally,
421
- * so this can return unfiltered rows in simple cases.
422
- */
423
- executeQuery(state: DataRendererQueryState): Promise<TRow[]> | TRow[];
443
+ executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
424
444
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
425
- /** Row interactions surfaced by the renderer (mirrored from <DataRenderer>). */
426
- onRowClick?: (row: TRow) => void;
427
- /** Per-row right-click context menu actions (mirrored from <DataRenderer>). */
428
- getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
429
- /**
430
- * Fires for inline attribute edits AND for cross-column drag-to-reorder on
431
- * the board (the renderer passes the grouping attribute id + the target
432
- * column value).
433
- */
434
- onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
435
- /** Manual within-column reorder (only fires when ordering is manual). */
436
- onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
437
- onCreateRow?: (columnId: string) => void;
438
- onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
445
+ onRowClick?: (row: DataTableRendererRow) => void;
439
446
  }
440
447
 
441
- declare type DataRendererFilterState = Record<string, string[]>;
442
-
443
- declare type DataRendererImplementation = (input: WorkbenchWidgetRenderInput & {
444
- dataRendererId: string;
448
+ declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
449
+ dataTableRendererId: string;
445
450
  }) => unknown;
446
451
 
447
- declare interface DataRendererOrdering {
448
- attributeId: string | typeof MANUAL_ORDERING;
449
- direction: SortDirection;
452
+ declare interface DataTableRendererQueryContext {
453
+ resource?: ResourceRef;
454
+ modeId?: string;
450
455
  }
451
456
 
452
- declare interface DataRendererQueryState {
453
- settings: DataRendererSettings;
454
- filters: DataRendererFilterState;
457
+ declare interface DataTableRendererQueryResult {
458
+ rows: DataTableRendererRow[];
459
+ columns?: DataTableRendererColumn[];
455
460
  }
456
461
 
457
- declare interface DataRendererRefreshEvent {
458
- dataRendererId: string;
462
+ declare interface DataTableRendererRefreshEvent {
463
+ dataTableRendererId: string;
459
464
  }
460
465
 
461
- declare type DataRendererRefreshListener = (event: DataRendererRefreshEvent) => void;
462
-
463
- declare interface DataRendererRegistry {
464
- dataStore: WorkbenchStore<DataRendererStoreState>;
465
- registerDataRenderer<TRow extends DataRendererRow = DataRendererRow>(contribution: DataRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
466
- setDataRendererImplementation(impl: DataRendererImplementation): void;
467
- getDataRenderer(id: string): RegisteredDataRendererContribution | undefined;
468
- listDataRenderers(): RegisteredDataRendererContribution[];
469
- refreshDataRenderer(id: string): void;
470
- onDidRefreshDataRenderer(listener: DataRendererRefreshListener): Disposable_2;
466
+ declare interface DataTableRendererRegistry {
467
+ dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
468
+ registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
469
+ setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
470
+ getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
471
+ listDataTableRenderers(): RegisteredDataTableRendererContribution[];
472
+ refreshDataTableRenderer(id: string): void;
473
+ onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
471
474
  }
472
475
 
473
- declare interface DataRendererRow {
476
+ declare interface DataTableRendererRow {
474
477
  id: string;
475
- title: string;
476
- /**
477
- * Optional navigation handle. When set, the renderer's default click handler
478
- * routes through the contribution's onRowClick (which typically opens the
479
- * resource via the workbench).
480
- */
481
- resource?: unknown;
482
- attributes: Record<string, unknown>;
478
+ values: Record<string, unknown>;
479
+ resource?: ResourceRef;
483
480
  }
484
481
 
485
- declare type DataRendererRow_2 = Awaited<ReturnType<DataRendererContribution["executeQuery"]>>[number];
482
+ declare interface DataTableRendererRowAction {
483
+ id: string;
484
+ label: string;
485
+ icon?: unknown;
486
+ destructive?: boolean;
487
+ run(row: DataTableRendererRow): Promise<void> | void;
488
+ }
486
489
 
487
- declare interface DataRendererSettings {
488
- viewMode: ViewMode;
489
- columnGrouping: string | typeof NO_GROUPING;
490
- rowGrouping: string | typeof NO_GROUPING;
491
- ordering: DataRendererOrdering;
492
- displayProperties: string[];
490
+ declare interface DataTableRendererStoreState {
491
+ renderers: Record<string, RegisteredDataTableRendererContribution>;
493
492
  }
494
493
 
495
- declare interface DataRendererStoreState {
496
- renderers: Record<string, RegisteredDataRendererContribution>;
494
+ declare interface DataTableRendererThemeColor {
495
+ light: string;
496
+ dark: string;
497
+ foreground?: {
498
+ light: string;
499
+ dark: string;
500
+ };
497
501
  }
498
502
 
503
+ declare type DataTableViewRecord = WorkbenchExtensionMetadata["panels"][number];
504
+
499
505
  declare interface Disposable_2 {
500
506
  dispose(): void;
501
507
  }
@@ -523,7 +529,7 @@ declare interface EnumOptionsSource {
523
529
 
524
530
  declare type ExtensionTreeRendererRecord = NonNullable<WorkbenchExtensionMetadata["treeRenderers"]>[number];
525
531
 
526
- declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["views"][number];
532
+ declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["panels"][number] | NonNullable<WorkbenchExtensionMetadata["panels"][number]["panelMenus"]>[number];
527
533
 
528
534
  export declare interface ExtensionWebviewFileCapabilities {
529
535
  delete(params: unknown): Promise<unknown> | unknown;
@@ -583,7 +589,7 @@ declare interface FileRendererContribution {
583
589
  save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
584
590
  }
585
591
 
586
- declare type FileRendererImplementation = (input: WorkbenchWidgetRenderInput & {
592
+ declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
587
593
  fileRendererId: string;
588
594
  }) => unknown;
589
595
 
@@ -614,34 +620,185 @@ declare interface HistoryController {
614
620
  goPrevious(): HistoryEntry | undefined;
615
621
  recentlyClosed(): readonly HistoryEntry[];
616
622
  reopenLastClosed(): HistoryEntry | undefined;
623
+ setPersistenceScope(scope: string | undefined): void;
624
+ getPersistenceScope(): string | undefined;
625
+ restore(): HistoryEntry | undefined;
626
+ flush(): void;
617
627
  clear(): void;
618
628
  }
619
629
 
620
- declare interface HistoryEntry {
621
- entryId: string;
622
- recordedAt: number;
623
- kind: "resource" | "widget" | "mode";
624
- modeId?: string;
625
- resource?: ResourceRef;
626
- widgetId?: string;
627
- contributionId?: string;
628
- title?: string;
629
- }
630
+ declare type HistoryEntry = WorkbenchNavigationEntry;
630
631
 
631
632
  declare interface HistoryStoreState {
632
- entries: readonly HistoryEntry[];
633
+ entries: readonly WorkbenchNavigationEntry[];
633
634
  cursor: number;
634
- recentlyClosed: readonly HistoryEntry[];
635
+ recentlyClosed: readonly WorkbenchNavigationEntry[];
636
+ hydrating: boolean;
635
637
  }
636
638
 
637
639
  declare interface HostTreeDefaultNodesInput {
638
640
  ctx: TreeContext;
639
641
  record: ExtensionTreeRendererRecord;
640
- view: ExtensionTreeViewRecord;
642
+ panel: ExtensionTreeViewRecord;
641
643
  }
642
644
 
643
645
  declare type HostTreeDefaultNodesResolver = (input: HostTreeDefaultNodesInput) => Promise<TreeNode[]> | TreeNode[];
644
646
 
647
+ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
648
+ id: string;
649
+ title: string;
650
+ resourceKind?: string;
651
+ /**
652
+ * Declarative attribute schema. The renderer dispatches filter / group /
653
+ * sort / display / inline-edit behavior on each descriptor's `type.kind`.
654
+ *
655
+ * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
656
+ * static array to let the contribution mutate its schema at runtime —
657
+ * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
658
+ * propagate live without re-registering the renderer.
659
+ */
660
+ attributes: AttributeDescriptor[] | AttributesSource;
661
+ /** Per-board-column overrides (color, drag/create rules, custom actions). */
662
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
663
+ hideToolbar?: boolean;
664
+ emptyTitle?: string;
665
+ emptyDescription?: string;
666
+ /** Initial settings/filters applied when the kanban renderer mounts. */
667
+ defaultSettings?: Partial<KanbanRendererSettings>;
668
+ defaultFilters?: KanbanRendererFilterState;
669
+ defaultViews?: KanbanRendererSavedView[];
670
+ defaultActiveViewId?: string;
671
+ /**
672
+ * Data source. Receives the current display state so backends can paginate
673
+ * / filter / sort. The renderer re-applies filter / sort / group locally,
674
+ * so this can return unfiltered rows in simple cases.
675
+ */
676
+ executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
677
+ subscribe?: (listener: () => void) => Disposable_2 | (() => void);
678
+ /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
679
+ onRowClick?: (row: TRow) => void;
680
+ /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
681
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
682
+ /**
683
+ * Fires for inline attribute edits AND for cross-column drag-to-reorder on
684
+ * the board (the renderer passes the grouping attribute id + the target
685
+ * column value).
686
+ */
687
+ onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
688
+ /** Manual within-column reorder (only fires when ordering is manual). */
689
+ onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
690
+ createRow?: KanbanRendererCreateRowConfig;
691
+ onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;
692
+ onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
693
+ }
694
+
695
+ declare interface KanbanRendererCreateField {
696
+ id: string;
697
+ label: string;
698
+ description?: string;
699
+ placeholder?: string;
700
+ type: KanbanRendererCreateFieldType;
701
+ required?: boolean;
702
+ defaultValue?: unknown;
703
+ options?: EnumOption[];
704
+ /** `files` fields only. */
705
+ multiple?: boolean;
706
+ accept?: string;
707
+ }
708
+
709
+ declare type KanbanRendererCreateFieldType = "text" | "longtext" | "markdown" | "number" | "boolean" | "select" | "multi-select" | "files";
710
+
711
+ /** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */
712
+ declare interface KanbanRendererCreateLabels {
713
+ cancel: string;
714
+ properties: string;
715
+ submitError: string;
716
+ removeFile: string;
717
+ }
718
+
719
+ declare interface KanbanRendererCreateRowConfig {
720
+ title: string;
721
+ submitLabel: string;
722
+ fields: KanbanRendererCreateField[];
723
+ labels: KanbanRendererCreateLabels;
724
+ }
725
+
726
+ declare interface KanbanRendererCreateSubmission {
727
+ columnId: string;
728
+ columnAttributeId?: string;
729
+ /** Declared field values, excluding `files` fields — those arrive as `files`. */
730
+ values: Record<string, unknown>;
731
+ /** Every editable attribute the user set, keyed by attribute id. */
732
+ attributeValues: Record<string, unknown>;
733
+ files: File[];
734
+ }
735
+
736
+ declare type KanbanRendererFilterState = Record<string, string[]>;
737
+
738
+ declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
739
+ kanbanRendererId: string;
740
+ }) => unknown;
741
+
742
+ declare interface KanbanRendererOrdering {
743
+ attributeId: string | typeof MANUAL_ORDERING;
744
+ direction: SortDirection;
745
+ }
746
+
747
+ declare interface KanbanRendererQueryState {
748
+ settings: KanbanRendererSettings;
749
+ filters: KanbanRendererFilterState;
750
+ }
751
+
752
+ declare interface KanbanRendererRefreshEvent {
753
+ kanbanRendererId: string;
754
+ }
755
+
756
+ declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
757
+
758
+ declare interface KanbanRendererRegistry {
759
+ dataStore: WorkbenchStore<KanbanRendererStoreState>;
760
+ registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
761
+ setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
762
+ getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
763
+ listKanbanRenderers(): RegisteredKanbanRendererContribution[];
764
+ refreshKanbanRenderer(id: string): void;
765
+ onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
766
+ }
767
+
768
+ declare interface KanbanRendererRow {
769
+ id: string;
770
+ title: string;
771
+ /**
772
+ * Optional navigation handle. When set, the renderer's default click handler
773
+ * routes through the contribution's onRowClick (which typically opens the
774
+ * resource via the workbench).
775
+ */
776
+ resource?: unknown;
777
+ attributes: Record<string, unknown>;
778
+ }
779
+
780
+ declare type KanbanRendererRow_2 = Awaited<ReturnType<KanbanRendererContribution["executeQuery"]>>[number];
781
+
782
+ declare interface KanbanRendererSavedView {
783
+ id: string;
784
+ title: string;
785
+ settings: KanbanRendererSettings;
786
+ filters: KanbanRendererFilterState;
787
+ isDefault?: boolean;
788
+ }
789
+
790
+ declare interface KanbanRendererSettings {
791
+ viewMode: ViewMode;
792
+ columnGrouping: string | typeof NO_GROUPING;
793
+ rowGrouping: string | typeof NO_GROUPING;
794
+ ordering: KanbanRendererOrdering;
795
+ displayProperties: string[];
796
+ }
797
+
798
+ declare interface KanbanRendererStoreState {
799
+ renderers: Record<string, RegisteredKanbanRendererContribution>;
800
+ }
801
+
645
802
  declare interface Keybinding {
646
803
  commandId: string;
647
804
  keybinding: KeybindingSequence;
@@ -667,33 +824,62 @@ declare interface LayoutModel {
667
824
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
668
825
  dispose(): void;
669
826
  };
827
+ registerPanel(panel: WorkbenchPanelContribution, metadata?: ContributionMetadata): {
828
+ dispose(): void;
829
+ };
670
830
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
671
831
  dispose(): void;
672
832
  };
833
+ registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
834
+ dispose(): void;
835
+ };
836
+ registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
837
+ dispose(): void;
838
+ };
839
+ registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
840
+ dispose(): void;
841
+ };
673
842
  unregisterWidget(id: string, options?: {
674
843
  removePlacements?: boolean;
675
844
  persist?: boolean;
676
845
  }): void;
677
- getPlaceholder(areaId: WorkbenchArea): RegisteredPlaceholderContribution | undefined;
846
+ getPlaceholder(regionId: WorkbenchRegion): RegisteredPlaceholderContribution | undefined;
678
847
  getWidget(id: string): RegisteredWidgetContribution | undefined;
679
- getAreaSize(areaId: WorkbenchArea): WorkbenchAreaSize | undefined;
680
- getAreaCollapsible(areaId: WorkbenchArea): boolean;
681
- getAreaHeaderBorderBottom(areaId: WorkbenchArea): boolean;
682
- setAreaVisible(areaId: WorkbenchArea, visible: boolean): void;
683
- setAreaSize(areaId: WorkbenchArea, size: number): void;
848
+ getPanel(id: string): WorkbenchPanelContribution | undefined;
849
+ getRegionSize(regionId: WorkbenchRegion): WorkbenchRegionSize | undefined;
850
+ getRegionCollapsible(regionId: WorkbenchRegion): boolean;
851
+ getRegionHeaderBorderBottom(regionId: WorkbenchRegion): boolean;
852
+ setRegionVisible(regionId: WorkbenchRegion, visible: boolean): void;
853
+ setRegionSize(regionId: WorkbenchRegion, size: number): void;
684
854
  listPlaceholders(): RegisteredPlaceholderContribution[];
685
855
  listWidgets(): RegisteredWidgetContribution[];
856
+ listPanels(): WorkbenchPanelContribution[];
857
+ listPanelInstances(region?: WorkbenchRegion): WorkbenchPanelInstance[];
858
+ getActivePanel(region?: WorkbenchRegion): WorkbenchPanelInstance | undefined;
686
859
  openWidget(id: string, input?: OpenWidgetInput): WorkbenchWidgetPlacement;
860
+ openPanel(id: string, input?: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
861
+ updatePanel(instanceId: string, input: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
862
+ reorderPanel(instanceId: string, position: WorkbenchTabPosition): void;
863
+ activatePanel(instanceId: string): WorkbenchPanelInstance;
864
+ closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
687
865
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
866
+ reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
867
+ expirePreviewTabs(ownerResourceUri?: string): void;
688
868
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
869
+ setRegionActiveWidget(regionId: WorkbenchRegion, widgetId: string | undefined): void;
689
870
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
690
871
  removeWidgetPlacement(widgetId: string): WorkbenchWidgetPlacement | undefined;
691
- clearArea(areaId: WorkbenchArea): void;
692
- resetAreas(): void;
872
+ clearRegion(regionId: WorkbenchRegion): void;
873
+ resetRegions(): void;
693
874
  getLayout(): WorkbenchLayout;
694
875
  restoreLayout(layout: WorkbenchLayout): void;
695
- setPersistenceScope(scope: LayoutScope | undefined): void;
876
+ setPersistenceScope(scope: LayoutScope | undefined, input?: {
877
+ carryRegionState?: readonly WorkbenchRegion[];
878
+ }): void;
696
879
  getPersistenceScope(): LayoutScope | undefined;
880
+ onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
881
+ dispose(): void;
882
+ };
697
883
  onDidChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
698
884
  dispose(): void;
699
885
  };
@@ -707,6 +893,7 @@ declare const MANUAL_ORDERING = "manual";
707
893
 
708
894
  declare interface MenuItem {
709
895
  commandId: string;
896
+ sourceCommandId?: string;
710
897
  label?: string;
711
898
  description?: string;
712
899
  icon?: string;
@@ -771,7 +958,13 @@ declare interface NavigationTargetCompound {
771
958
  targets: readonly NavigationTargetItem[];
772
959
  }
773
960
 
774
- declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetCommand;
961
+ declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
962
+
963
+ declare interface NavigationTargetPanel {
964
+ kind: "panel";
965
+ panelId: string;
966
+ input?: OpenWorkbenchPanelInput;
967
+ }
775
968
 
776
969
  declare interface NavigationTargetResource {
777
970
  kind: "resource";
@@ -779,12 +972,6 @@ declare interface NavigationTargetResource {
779
972
  input?: OpenResourceInput;
780
973
  }
781
974
 
782
- declare interface NavigationTargetView {
783
- kind: "view";
784
- widgetId: string;
785
- input?: OpenWidgetInput;
786
- }
787
-
788
975
  declare const NO_GROUPING = "none";
789
976
 
790
977
  declare interface NotificationRegistry {
@@ -803,23 +990,38 @@ declare interface OpenResourceInput {
803
990
  declare interface OpenWidgetInput {
804
991
  resource?: ResourceRef;
805
992
  title?: string;
806
- area?: WorkbenchArea;
993
+ region?: WorkbenchRegion;
807
994
  ownerId?: string;
808
995
  source?: ContributionSource;
809
996
  pinned?: boolean;
810
997
  closable?: boolean;
811
998
  mountStrategy?: WidgetMountStrategy;
812
999
  hiddenByDefault?: boolean;
1000
+ tabRetention?: WorkbenchTabRetention;
1001
+ tabPosition?: WorkbenchTabPosition;
1002
+ tab?: WorkbenchWidgetTab;
813
1003
  replaceActive?: boolean;
1004
+ replaceWidgetId?: string;
1005
+ }
1006
+
1007
+ declare interface OpenWorkbenchPanelInput {
1008
+ resource?: ResourceRef;
1009
+ title?: string;
1010
+ region?: WorkbenchRegion;
1011
+ pinned?: boolean;
1012
+ mountStrategy?: WorkbenchPanelMountStrategy;
1013
+ hiddenByDefault?: boolean;
1014
+ tab?: WorkbenchPanelTab;
1015
+ strategy?: WorkbenchPanelOpenStrategy;
814
1016
  }
815
1017
 
816
1018
  declare interface PlaceholderContribution {
817
1019
  id: string;
818
1020
  title: string;
819
- area: WorkbenchArea;
1021
+ region: WorkbenchRegion;
820
1022
  rendererId: string;
821
- areaSize?: WorkbenchAreaSize;
822
- areaCollapsible?: boolean;
1023
+ regionSize?: WorkbenchRegionSize;
1024
+ regionCollapsible?: boolean;
823
1025
  config?: unknown;
824
1026
  priority?: number;
825
1027
  }
@@ -857,9 +1059,9 @@ declare interface PreferenceScopeRef {
857
1059
 
858
1060
  declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
859
1061
 
860
- export declare const refreshOpenWorkbenchExtensionWebviews: (workbench: WorkbenchModuleContributionContext, metadata: WorkbenchExtensionMetadata) => void;
1062
+ export declare const refreshOpenWorkbenchExtensionWebviews: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata) => void;
861
1063
 
862
- export declare const refreshWorkbenchExtensionContributions: (workbench: WorkbenchModuleContributionContext, metadata: WorkbenchExtensionMetadata, commandId: string) => void;
1064
+ export declare const refreshWorkbenchExtensionContributions: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata, commandId: string) => void;
863
1065
 
864
1066
  declare interface RegisteredCommand extends RegisteredContributionMetadata {
865
1067
  command: Command;
@@ -872,21 +1074,18 @@ declare interface RegisteredContributionMetadata {
872
1074
  priority: number;
873
1075
  }
874
1076
 
875
- declare interface RegisteredContributionMetadata_2 {
876
- source: ContributionSource_2;
877
- ownerId: string;
878
- priority: number;
879
- }
880
-
881
1077
  declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
882
1078
  }
883
1079
 
884
- declare interface RegisteredDataRendererContribution<TRow extends DataRendererRow = DataRendererRow> extends DataRendererContribution<TRow>, RegisteredContributionMetadata {
1080
+ declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
885
1081
  }
886
1082
 
887
1083
  declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
888
1084
  }
889
1085
 
1086
+ declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1087
+ }
1088
+
890
1089
  declare interface RegisteredKeepAliveHost {
891
1090
  rendererId: string;
892
1091
  host: HTMLElement;
@@ -922,8 +1121,10 @@ declare interface RegisteredTreeRendererContribution extends TreeRendererContrib
922
1121
  }
923
1122
 
924
1123
  declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1124
+ ownedPanelMenuIds?: readonly string[];
925
1125
  singleton: boolean;
926
1126
  reuse: WidgetReusePolicy;
1127
+ role: WorkbenchWidgetRole;
927
1128
  } & RegisteredContributionMetadata;
928
1129
 
929
1130
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -937,17 +1138,6 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
937
1138
  metadata?: Record<string, unknown>;
938
1139
  }
939
1140
 
940
- declare interface RegisteredWorkbenchNotification_2 extends RegisteredContributionMetadata_2 {
941
- id: string;
942
- level: WorkbenchNotificationLevel_2;
943
- title: string;
944
- message?: string;
945
- createdAt: string;
946
- resource?: ResourceRef_2;
947
- actions?: WorkbenchNotificationAction_2[];
948
- metadata?: Record<string, unknown>;
949
- }
950
-
951
1141
  export declare const registerWorkbenchExtensionCommandPaletteResources: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionCommandPaletteResourceRecord[]) => {
952
1142
  dispose(): void;
953
1143
  };
@@ -972,14 +1162,12 @@ export declare interface RegisterWorkbenchExtensionContributionsInput {
972
1162
  settingsSectionId?: string;
973
1163
  settingsSectionTitle?: string;
974
1164
  webviewFiles?: ExtensionWebviewFileCapabilities;
975
- workbench: WorkbenchModuleContributionContext;
1165
+ workbench: WorkbenchModuleContext;
976
1166
  }
977
1167
 
978
- export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], views: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter) => Disposable_2;
1168
+ export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], panels: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter) => Disposable_2;
979
1169
 
980
- export declare const registerWorkbenchExtensionDataRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionDataRendererRecord[], adapter?: WorkbenchExtensionDataRendererAdapter) => {
981
- dispose(): void;
982
- };
1170
+ export declare const registerWorkbenchExtensionDataTableRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionDataTableRendererRecord[], panels: DataTableViewRecord[]) => Disposable_2;
983
1171
 
984
1172
  export declare const registerWorkbenchExtensionFileRenderers: (input: RegisterWorkbenchExtensionFileRenderersInput) => {
985
1173
  dispose(): void;
@@ -989,7 +1177,18 @@ export declare interface RegisterWorkbenchExtensionFileRenderersInput {
989
1177
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
990
1178
  metadata: WorkbenchExtensionMetadata;
991
1179
  projectId: string;
992
- workbench: WorkbenchModuleContributionContext;
1180
+ workbench: WorkbenchModuleContext;
1181
+ }
1182
+
1183
+ export declare const registerWorkbenchExtensionKanbanRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionKanbanRendererRecord[], adapter?: WorkbenchExtensionKanbanRendererAdapter) => {
1184
+ dispose(): void;
1185
+ };
1186
+
1187
+ export declare const registerWorkbenchExtensionPanel: (input: RegisterWorkbenchExtensionPanelInput) => Disposable_2;
1188
+
1189
+ export declare interface RegisterWorkbenchExtensionPanelInput {
1190
+ contribution: WorkbenchPanelContribution;
1191
+ workbench: WorkbenchModuleContext;
993
1192
  }
994
1193
 
995
1194
  export declare const registerWorkbenchExtensionTreeRenderers: (input: RegisterWorkbenchExtensionTreeRenderersInput) => {
@@ -1002,7 +1201,7 @@ export declare interface RegisterWorkbenchExtensionTreeRenderersInput {
1002
1201
  getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;
1003
1202
  metadata: WorkbenchExtensionMetadata;
1004
1203
  projectId: string;
1005
- workbench: WorkbenchModuleContributionContext;
1204
+ workbench: WorkbenchModuleContext;
1006
1205
  }
1007
1206
 
1008
1207
  export declare const renderBridgeWebviewFrame: (input: {
@@ -1015,7 +1214,9 @@ export declare const renderBridgeWebviewFrame: (input: {
1015
1214
  webview: BridgeWebviewConfig;
1016
1215
  }) => JSX.Element;
1017
1216
 
1018
- declare type ResolvedResourceOpener = Required<ResourceOpener>;
1217
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1218
+
1219
+ declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
1019
1220
 
1020
1221
  declare interface ResourceBrowseEntry {
1021
1222
  resource: ResourceRef;
@@ -1037,6 +1238,13 @@ declare interface ResourceContextAction {
1037
1238
  separatorBefore?: boolean;
1038
1239
  }
1039
1240
 
1241
+ declare interface ResourceHierarchyProvider {
1242
+ id: string;
1243
+ priority?: number;
1244
+ canResolve(resource: ResourceRef): boolean;
1245
+ getParent(resource: ResourceRef): ResourceRef | undefined;
1246
+ }
1247
+
1040
1248
  declare interface ResourceKindContribution {
1041
1249
  kind: string;
1042
1250
  label: string;
@@ -1057,11 +1265,11 @@ declare interface ResourceNavigator<TResult = unknown> {
1057
1265
  navigate(resource: ResourceRef): TResult | Promise<TResult>;
1058
1266
  }
1059
1267
 
1060
- declare interface ResourceOpener<TResult = unknown> {
1268
+ declare interface ResourcePresenter {
1061
1269
  id: string;
1062
1270
  priority?: number;
1063
1271
  canOpen(resource: ResourceRef): boolean;
1064
- open(resource: ResourceRef, input: OpenResourceInput): TResult | Promise<TResult>;
1272
+ open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1065
1273
  }
1066
1274
 
1067
1275
  declare interface ResourceProvider {
@@ -1094,24 +1302,29 @@ declare interface ResourceRegistry {
1094
1302
  getKind(kind: string): RegisteredResourceKind | undefined;
1095
1303
  getSurface(resource: ResourceRef): ResourceSurface | undefined;
1096
1304
  listKinds(): RegisteredResourceKind[];
1097
- registerOpener(opener: ResourceOpener): Disposable_2;
1098
- listOpeners(): ResolvedResourceOpener[];
1305
+ registerPresenter(presenter: ResourcePresenter): Disposable_2;
1306
+ listPresenters(): ResolvedResourcePresenter[];
1099
1307
  registerProvider(provider: ResourceProvider): Disposable_2;
1100
1308
  listProviders(): ResourceProvider[];
1101
1309
  listResources(query: string): readonly ResourceBrowseEntry[];
1102
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
1310
+ registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1311
+ listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1312
+ walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1313
+ isOpeningResource(): boolean;
1314
+ openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1103
1315
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1104
1316
  }
1105
1317
 
1106
1318
  declare interface ResourceRegistryStoreState {
1107
1319
  kinds: Record<string, RegisteredResourceKind>;
1108
- openers: Record<string, ResolvedResourceOpener>;
1320
+ presenters: Record<string, ResolvedResourcePresenter>;
1109
1321
  providers: Record<string, ResourceProvider>;
1322
+ hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1110
1323
  }
1111
1324
 
1112
1325
  declare type ResourceSurface = "primary" | "secondary" | "attached";
1113
1326
 
1114
- declare type RowAction = NonNullable<WorkbenchExtensionDataRendererRecord["rowActions"]>[number];
1327
+ declare type RowAction = NonNullable<WorkbenchExtensionKanbanRendererRecord["rowActions"]>[number];
1115
1328
 
1116
1329
  /** Auto-rendered as a param editor from the registered preference schema. */
1117
1330
  declare interface SchemaSettingsPanel extends SettingsPanelBase {
@@ -1179,7 +1392,7 @@ declare interface SettingsRegistryStoreState {
1179
1392
  /** Settings are stored either per-user (global) or per-project. Projectless surfaces show only global entries. */
1180
1393
  declare type SettingsScope = "global" | "project";
1181
1394
 
1182
- /** An ordered sidebar container. Headerless when `title` is omitted. */
1395
+ /** An ordered sidenav container. Headerless when `title` is omitted. */
1183
1396
  declare interface SettingsSectionContribution {
1184
1397
  id: string;
1185
1398
  title?: string;
@@ -1188,6 +1401,8 @@ declare interface SettingsSectionContribution {
1188
1401
  actions?: SettingsAction[];
1189
1402
  }
1190
1403
 
1404
+ export declare const shouldRefreshWorkbenchExtensionDataTableRenderers: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1405
+
1191
1406
  export declare const shouldRefreshWorkbenchExtensionTrees: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1192
1407
 
1193
1408
  declare type SortDirection = "asc" | "desc";
@@ -1263,6 +1478,8 @@ declare interface TreeNode {
1263
1478
  hiddenByDefault?: boolean;
1264
1479
  /** When true, the node (e.g. a header/footer row) opts in to the tree's hide/show customization menu. */
1265
1480
  canHide?: boolean;
1481
+ /** When false, the node stays fixed within its Sidenav group. */
1482
+ canReorder?: boolean;
1266
1483
  }
1267
1484
 
1268
1485
  declare type TreeNodeRowVariant = "empty-state";
@@ -1280,7 +1497,7 @@ declare interface TreeRendererContribution {
1280
1497
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1281
1498
  }
1282
1499
 
1283
- declare type TreeRendererImplementation = (input: WorkbenchWidgetRenderInput & {
1500
+ declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1284
1501
  treeId: string;
1285
1502
  }) => unknown;
1286
1503
 
@@ -1338,11 +1555,13 @@ declare interface TreeViewSection {
1338
1555
  hiddenByDefault?: boolean;
1339
1556
  /** When true, the section (category) opts in to the tree's hide/show customization menu. */
1340
1557
  canHide?: boolean;
1558
+ /** When false, the section stays fixed within the Sidenav main region. */
1559
+ canReorder?: boolean;
1341
1560
  }
1342
1561
 
1343
1562
  /**
1344
- * Core-owned contracts for data renderer contributions. @pstdio/ui's
1345
- * DataRenderer props are structurally identical; the React layer bridges the
1563
+ * Core-owned contracts for kanban renderer contributions. @pstdio/ui's
1564
+ * KanbanRenderer props are structurally identical; the React layer bridges the
1346
1565
  * two, so drift surfaces as a compile error there instead of coupling core's
1347
1566
  * API shape to UI package ownership.
1348
1567
  */
@@ -1351,44 +1570,35 @@ declare type ViewMode = "board" | "list";
1351
1570
  declare interface WidgetContribution {
1352
1571
  id: string;
1353
1572
  title: string;
1354
- area: WorkbenchArea;
1355
- fallbackArea?: WorkbenchArea;
1573
+ icon?: string;
1574
+ region: WorkbenchRegion;
1575
+ fallbackRegion?: WorkbenchRegion;
1356
1576
  singleton?: boolean;
1357
1577
  reuse?: WidgetReusePolicy;
1358
1578
  mountStrategy?: WidgetMountStrategy;
1359
1579
  closable?: boolean;
1360
1580
  hiddenByDefault?: boolean;
1361
- areaSize?: WorkbenchAreaSize;
1362
- areaCollapsible?: boolean;
1581
+ regionSize?: WorkbenchRegionSize;
1582
+ regionCollapsible?: boolean;
1363
1583
  headerBorderBottom?: boolean;
1584
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1364
1585
  resourceKinds?: string[];
1365
1586
  priority?: number;
1366
1587
  rendererId: string;
1588
+ openCommandId?: string;
1589
+ role?: WorkbenchWidgetRole;
1590
+ eligibleLocations?: WorkbenchLocationEligibility;
1591
+ panelMenuOwner?: WorkbenchPanelMenuOwner;
1592
+ tab?: WorkbenchWidgetTab;
1367
1593
  config?: unknown;
1368
1594
  canOpen?(resource: ResourceRef): boolean;
1369
1595
  }
1370
1596
 
1371
1597
  declare type WidgetMountStrategy = "active" | "keep-mounted";
1372
1598
 
1373
- declare type WidgetReusePolicy = "resource" | "none";
1374
-
1375
- declare type WorkbenchArea = (typeof workbenchAreas)[number];
1599
+ declare type WidgetMountStrategy_2 = "active" | "keep-mounted";
1376
1600
 
1377
- declare const workbenchAreas: readonly ["nav", "activity", "left-header", "left", "main-header", "main-left", "main", "main-right", "secondary-header", "secondary", "status", "overlay", "floating-header", "floating"];
1378
-
1379
- declare interface WorkbenchAreaSize {
1380
- defaultPx?: number;
1381
- minPx?: number;
1382
- maxPx?: number;
1383
- }
1384
-
1385
- declare interface WorkbenchAreaState {
1386
- id: WorkbenchArea;
1387
- visible: boolean;
1388
- size?: number;
1389
- widgets: WorkbenchWidgetPlacement[];
1390
- activeWidgetId?: string;
1391
- }
1601
+ declare type WidgetReusePolicy = "resource" | "none";
1392
1602
 
1393
1603
  declare type WorkbenchBreadcrumbChangeListener = () => void;
1394
1604
 
@@ -1403,6 +1613,7 @@ declare interface WorkbenchBreadcrumbController {
1403
1613
  declare interface WorkbenchBreadcrumbItem {
1404
1614
  title: unknown;
1405
1615
  icon?: string;
1616
+ indicator?: "session-status";
1406
1617
  url?: string;
1407
1618
  onClick?: () => void;
1408
1619
  resource?: ResourceRef;
@@ -1412,8 +1623,16 @@ declare interface WorkbenchBreadcrumbState {
1412
1623
  items: WorkbenchBreadcrumbItem[] | undefined;
1413
1624
  }
1414
1625
 
1626
+ declare interface WorkbenchClosedSubPanel {
1627
+ region: WorkbenchPanelRegion;
1628
+ reference: WorkbenchSubPanelRef;
1629
+ resource?: ResourceRef;
1630
+ title?: string;
1631
+ }
1632
+
1415
1633
  declare interface WorkbenchCommandExecutionContext {
1416
1634
  resource?: ResourceRef;
1635
+ source?: "panel-add";
1417
1636
  }
1418
1637
 
1419
1638
  declare interface WorkbenchCommandExecutionError {
@@ -1468,6 +1687,7 @@ declare interface WorkbenchCommandParamsRequest {
1468
1687
  }
1469
1688
 
1470
1689
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1690
+ host: WorkbenchHost;
1471
1691
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1472
1692
  unregisterModule(moduleId: string): void;
1473
1693
  }
@@ -1491,7 +1711,8 @@ declare interface WorkbenchCoreContributionContext {
1491
1711
  renderers: WorkbenchRenderers;
1492
1712
  resources: ResourceRegistry;
1493
1713
  settings: SettingsRegistry;
1494
- sessionPanel: WorkbenchSessionPanelController;
1714
+ shell: WorkbenchShellController;
1715
+ sidePanel: WorkbenchSidePanelController;
1495
1716
  terminal: WorkbenchTerminalController;
1496
1717
  themes: ThemeRegistry;
1497
1718
  fileIconThemes: FileIconThemeRegistry;
@@ -1504,7 +1725,7 @@ declare interface WorkbenchCoreContributionContext {
1504
1725
  export declare interface WorkbenchExtensionCommandContext {
1505
1726
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1506
1727
  projectId: string;
1507
- workbench: WorkbenchModuleContributionContext;
1728
+ workbench: WorkbenchModuleContext;
1508
1729
  }
1509
1730
 
1510
1731
  export declare interface WorkbenchExtensionCommandPaletteRegistration {
@@ -1519,67 +1740,58 @@ export declare interface WorkbenchExtensionControlsAdapter {
1519
1740
  resolveResource?: (record: WorkbenchExtensionControlsRendererRecord) => ResourceRef | undefined;
1520
1741
  }
1521
1742
 
1522
- export declare interface WorkbenchExtensionDataRendererAdapter {
1743
+ export declare interface WorkbenchExtensionKanbanRendererAdapter {
1523
1744
  /** Override label resolution. Defaults to workbench's `text(value, fallback)`. */
1524
1745
  resolveLabel?: Localizer;
1525
1746
  /** Post-process an attribute descriptor (after localization). Defaults to identity. */
1526
- decorateAttribute?: (record: WorkbenchExtensionDataRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor;
1747
+ decorateAttribute?: (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor;
1527
1748
  /**
1528
1749
  * Translate a row's transport-shaped resource (`{ type, id }`) into a workbench
1529
1750
  * `ResourceRef`. Defaults to the workbench `pstdio://extension-resource/...`
1530
1751
  * scheme — dashboard supplies its own. Returns `undefined` for rows that do not
1531
1752
  * carry an explicit resource.
1532
1753
  */
1533
- resolveRowResource?: (record: WorkbenchExtensionDataRendererRecord, row: DataRendererRow_2) => ResourceRef | undefined;
1754
+ resolveRowResource?: (record: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow_2) => ResourceRef | undefined;
1534
1755
  /**
1535
1756
  * Synthesize a `ResourceRef` for row-action execution context when the row does
1536
1757
  * not carry an explicit resource. Defaults to a `pstdio://extension-resource/`
1537
1758
  * fallback built from `record.resourceKind` and `row.id`.
1538
1759
  */
1539
- resolveRowActionResource?: (record: WorkbenchExtensionDataRendererRecord, row: DataRendererRow_2) => ResourceRef | undefined;
1760
+ resolveRowActionResource?: (record: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow_2) => ResourceRef | undefined;
1540
1761
  /**
1541
1762
  * Override the row-action runner. `runDefault` performs the workbench's standard
1542
1763
  * flow (look up the row-action command, request params if needed, execute it).
1543
1764
  */
1544
1765
  executeRowAction?: (input: {
1545
- record: WorkbenchExtensionDataRendererRecord;
1766
+ record: WorkbenchExtensionKanbanRendererRecord;
1546
1767
  action: RowAction;
1547
- row: DataRendererRow_2;
1768
+ row: KanbanRendererRow_2;
1548
1769
  resource: ResourceRef | undefined;
1549
1770
  runDefault: () => Promise<void>;
1550
1771
  }) => void | Promise<void>;
1551
1772
  /**
1552
- * Override the row click handler. When unset the view layer falls back to
1773
+ * Override the row click handler. When unset the panel layer falls back to
1553
1774
  * opening the row's resource via `ctx.resources.openResource` — set this to
1554
- * intercept the click (e.g. swallow rejections when no opener exists yet).
1775
+ * intercept the click (e.g. swallow rejections when no presenter exists yet).
1555
1776
  */
1556
1777
  onRowClick?: (input: {
1557
- record: WorkbenchExtensionDataRendererRecord;
1558
- row: DataRendererRow_2;
1778
+ record: WorkbenchExtensionKanbanRendererRecord;
1779
+ row: KanbanRendererRow_2;
1559
1780
  resource: ResourceRef | undefined;
1560
1781
  }) => void;
1561
- /**
1562
- * Override the inline-create handler. `executeDefault` runs the record's create
1563
- * command with the column param. When omitted, the default executes and any
1564
- * configured `onAfterCreate` runs with the returned value.
1565
- */
1566
- onCreateRow?: (input: {
1567
- record: WorkbenchExtensionDataRendererRecord;
1568
- columnId: string;
1569
- executeDefault: () => Promise<unknown>;
1570
- }) => void;
1571
- /** Called after a successful default create (when `onCreateRow` is not provided). */
1782
+ /** Called after a successful renderer-owned create form submission. */
1572
1783
  onAfterCreate?: (input: {
1573
- record: WorkbenchExtensionDataRendererRecord;
1784
+ record: WorkbenchExtensionKanbanRendererRecord;
1574
1785
  created: unknown;
1575
- }) => void;
1786
+ submission: KanbanRendererCreateSubmission;
1787
+ }) => void | Promise<void>;
1576
1788
  /**
1577
1789
  * Called after any mutation (attribute change, reorder, column action, default
1578
1790
  * create) resolves successfully. Hosts that drive refresh via the outer command
1579
1791
  * pipeline (testbench / workbench) leave this unset; dashboard supplies
1580
- * `ctx.renderers.refreshDataRenderer(id)`.
1792
+ * `ctx.renderers.refreshKanbanRenderer(id)`.
1581
1793
  */
1582
- onAfterMutation?: (record: WorkbenchExtensionDataRendererRecord) => void;
1794
+ onAfterMutation?: (record: WorkbenchExtensionKanbanRendererRecord) => void;
1583
1795
  }
1584
1796
 
1585
1797
  export declare interface WorkbenchExtensionMenuRegistration {
@@ -1612,22 +1824,33 @@ declare interface WorkbenchFileIconThemeStoreState {
1612
1824
  themes: readonly FileIconThemePreferenceOption[];
1613
1825
  }
1614
1826
 
1615
- declare type WorkbenchFocusArea = (typeof workbenchFocusAreas)[number];
1616
-
1617
- declare const workbenchFocusAreas: readonly ["activityBar", "sideBar", "main", "panel", "statusBar"];
1827
+ declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1618
1828
 
1619
- declare type WorkbenchFocusChangeListener = (area: WorkbenchFocusArea | undefined) => void;
1829
+ declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1620
1830
 
1621
1831
  declare interface WorkbenchFocusController {
1622
1832
  store: WorkbenchStore<WorkbenchFocusState>;
1623
- setActiveArea(area: WorkbenchFocusArea): void;
1833
+ setActiveRegion(region: WorkbenchFocusRegionId): void;
1624
1834
  clearFocus(): void;
1625
- getActiveArea(): WorkbenchFocusArea | undefined;
1835
+ getActiveRegion(): WorkbenchFocusRegionId | undefined;
1626
1836
  onDidChange(listener: WorkbenchFocusChangeListener): Disposable_2;
1627
1837
  }
1628
1838
 
1839
+ declare type WorkbenchFocusRegionId = (typeof workbenchFocusRegions)[number];
1840
+
1841
+ declare const workbenchFocusRegions: readonly ["activity", "sidenav", "main", "secondary", "side", "status"];
1842
+
1629
1843
  declare interface WorkbenchFocusState {
1630
- activeArea: WorkbenchFocusArea | undefined;
1844
+ activeRegion: WorkbenchFocusRegionId | undefined;
1845
+ }
1846
+
1847
+ declare interface WorkbenchHost {
1848
+ getSnapshot(): WorkbenchSnapshot;
1849
+ restoreSnapshot(snapshot: WorkbenchSnapshot): void;
1850
+ setPersistenceScope(scope: string | undefined, input?: {
1851
+ carryRegions?: readonly WorkbenchRegion[];
1852
+ }): void;
1853
+ getPersistenceScope(): string | undefined;
1631
1854
  }
1632
1855
 
1633
1856
  declare interface WorkbenchLastResourceController {
@@ -1637,8 +1860,10 @@ declare interface WorkbenchLastResourceController {
1637
1860
  }
1638
1861
 
1639
1862
  declare interface WorkbenchLayout {
1640
- areas: Record<WorkbenchArea, WorkbenchAreaState>;
1863
+ regions: Record<WorkbenchRegion, WorkbenchRegionState>;
1864
+ locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1641
1865
  activeWidgetId?: string;
1866
+ activeLocationWidgetId?: string;
1642
1867
  activeResourceUri?: string;
1643
1868
  }
1644
1869
 
@@ -1647,7 +1872,25 @@ declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1647
1872
  declare interface WorkbenchLayoutStoreState {
1648
1873
  layout: WorkbenchLayout;
1649
1874
  widgets: Record<string, RegisteredWidgetContribution>;
1650
- placeholders: Partial<Record<WorkbenchArea, RegisteredPlaceholderContribution>>;
1875
+ placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
1876
+ }
1877
+
1878
+ declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1879
+
1880
+ declare interface WorkbenchLocationEligibility {
1881
+ modeIds?: string[];
1882
+ resourceKinds?: string[];
1883
+ resourceIds?: string[];
1884
+ canOpen?(resource: ResourceRef): boolean;
1885
+ }
1886
+
1887
+ declare interface WorkbenchLocationRef {
1888
+ key: string;
1889
+ modeId?: string;
1890
+ resource?: ResourceRef;
1891
+ contributionId?: string;
1892
+ instanceKey?: string;
1893
+ title?: string;
1651
1894
  }
1652
1895
 
1653
1896
  declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
@@ -1659,16 +1902,24 @@ declare type WorkbenchModeChangeListener = () => void;
1659
1902
  declare interface WorkbenchModeContribution {
1660
1903
  id: string;
1661
1904
  label?: string;
1905
+ panels?: readonly WorkbenchPanelRegion[];
1662
1906
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1907
+ seed?(ctx: WorkbenchModeActivationContext): void;
1908
+ enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1663
1909
  }
1664
1910
 
1665
1911
  declare interface WorkbenchModeRegistry {
1666
1912
  store: WorkbenchStore<WorkbenchModeStoreState>;
1913
+ dispose(): void;
1667
1914
  registerMode(mode: WorkbenchModeContribution): Disposable_2;
1668
1915
  getMode(id: string): WorkbenchModeContribution | undefined;
1669
1916
  listModes(): WorkbenchModeContribution[];
1670
1917
  getActiveModeId(): string | undefined;
1671
- setActiveMode(id: string | undefined): void;
1918
+ isTransitioning(): boolean;
1919
+ setActiveMode(id: string | undefined, input?: {
1920
+ deferSeed?: boolean;
1921
+ }): void;
1922
+ seedActiveMode(): void;
1672
1923
  onDidChangeActive(listener: WorkbenchModeChangeListener): Disposable_2;
1673
1924
  }
1674
1925
 
@@ -1679,6 +1930,8 @@ declare interface WorkbenchModeStoreState {
1679
1930
 
1680
1931
  declare type WorkbenchModuleActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1681
1932
 
1933
+ declare type WorkbenchModuleContext = WorkbenchCoreContributionContext;
1934
+
1682
1935
  declare interface WorkbenchModuleContribution {
1683
1936
  id: string;
1684
1937
  source?: ContributionSource;
@@ -1686,7 +1939,21 @@ declare interface WorkbenchModuleContribution {
1686
1939
  activate(ctx: WorkbenchModuleContributionContext): WorkbenchModuleActivationResult;
1687
1940
  }
1688
1941
 
1689
- declare type WorkbenchModuleContributionContext = WorkbenchCoreContributionContext;
1942
+ declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1943
+
1944
+ declare interface WorkbenchNavigationEntry {
1945
+ entryId: string;
1946
+ recordedAt: number;
1947
+ location: WorkbenchLocationRef;
1948
+ selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1949
+ kind: "resource" | "widget" | "mode";
1950
+ modeId?: string;
1951
+ resource?: ResourceRef;
1952
+ widgetId?: string;
1953
+ contributionId?: string;
1954
+ title?: string;
1955
+ closedSubPanel?: WorkbenchClosedSubPanel;
1956
+ }
1690
1957
 
1691
1958
  declare interface WorkbenchNotification {
1692
1959
  id?: string;
@@ -1705,12 +1972,6 @@ declare interface WorkbenchNotificationAction {
1705
1972
  args?: unknown;
1706
1973
  }
1707
1974
 
1708
- declare interface WorkbenchNotificationAction_2 {
1709
- commandId: string;
1710
- title: string;
1711
- args?: unknown;
1712
- }
1713
-
1714
1975
  declare type WorkbenchNotificationEvent = {
1715
1976
  type: "show";
1716
1977
  id: string;
@@ -1722,26 +1983,193 @@ declare type WorkbenchNotificationEvent = {
1722
1983
 
1723
1984
  declare type WorkbenchNotificationLevel = "info" | "success" | "warning" | "error";
1724
1985
 
1725
- declare type WorkbenchNotificationLevel_2 = "info" | "success" | "warning" | "error";
1726
-
1727
1986
  declare type WorkbenchNotificationListener = (event: WorkbenchNotificationEvent) => void;
1728
1987
 
1729
1988
  declare interface WorkbenchNotificationStoreState {
1730
1989
  notifications: Record<string, RegisteredWorkbenchNotification>;
1731
1990
  }
1732
1991
 
1992
+ declare interface WorkbenchPanelContribution {
1993
+ id: string;
1994
+ title: string;
1995
+ icon?: string;
1996
+ region: WorkbenchRegion;
1997
+ fallbackRegion?: WorkbenchRegion;
1998
+ rendererId: string;
1999
+ closable: boolean;
2000
+ singleton?: boolean;
2001
+ reuse?: WorkbenchPanelReusePolicy;
2002
+ mountStrategy?: WorkbenchPanelMountStrategy;
2003
+ hiddenByDefault?: boolean;
2004
+ regionSize?: WorkbenchRegionSize;
2005
+ regionCollapsible?: boolean;
2006
+ headerBorderBottom?: boolean;
2007
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
2008
+ resourceKinds?: string[];
2009
+ eligibleLocations?: WorkbenchLocationEligibility;
2010
+ priority?: number;
2011
+ openCommandId?: string;
2012
+ tab?: WorkbenchPanelTab;
2013
+ config?: unknown;
2014
+ canOpen?(resource: ResourceRef): boolean;
2015
+ ownerId?: string;
2016
+ source?: ContributionSource;
2017
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2018
+ }
2019
+
2020
+ declare interface WorkbenchPanelInstance {
2021
+ instanceId: string;
2022
+ panelId: string;
2023
+ ownerId?: string;
2024
+ source?: ContributionSource;
2025
+ resource?: ResourceRef;
2026
+ resourceUri?: string;
2027
+ ownerResourceUri?: string;
2028
+ title?: string;
2029
+ pinned?: boolean;
2030
+ closable: boolean;
2031
+ mountStrategy?: WorkbenchPanelMountStrategy;
2032
+ hiddenByDefault?: boolean;
2033
+ tabRetention?: WorkbenchTabRetention;
2034
+ tab?: WorkbenchPanelTab;
2035
+ }
2036
+
2037
+ declare interface WorkbenchPanelInstance_2 {
2038
+ instanceId: string;
2039
+ panelId: string;
2040
+ ownerId?: string;
2041
+ source?: ContributionSource_2;
2042
+ resource?: ResourceRef_2;
2043
+ resourceUri?: string;
2044
+ ownerResourceUri?: string;
2045
+ title?: string;
2046
+ pinned?: boolean;
2047
+ closable: boolean;
2048
+ mountStrategy?: WorkbenchPanelMountStrategy_2;
2049
+ hiddenByDefault?: boolean;
2050
+ tabRetention?: WorkbenchTabRetention_2;
2051
+ tab?: WorkbenchPanelTab_2;
2052
+ }
2053
+
2054
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2055
+ region: WorkbenchPanelMenuRegion;
2056
+ fallbackRegion?: WorkbenchPanelMenuRegion;
2057
+ };
2058
+
2059
+ declare interface WorkbenchPanelMenuDefinition {
2060
+ id: string;
2061
+ title: string;
2062
+ icon?: string;
2063
+ side: WorkbenchPanelMenuSide;
2064
+ singleton?: boolean;
2065
+ reuse?: WorkbenchPanelReusePolicy;
2066
+ mountStrategy?: WorkbenchPanelMountStrategy;
2067
+ hiddenByDefault?: boolean;
2068
+ regionSize?: WorkbenchRegionSize;
2069
+ regionCollapsible?: boolean;
2070
+ headerBorderBottom?: boolean;
2071
+ rendererId: string;
2072
+ priority?: number;
2073
+ config?: unknown;
2074
+ }
2075
+
2076
+ declare type WorkbenchPanelMenuOwner = {
2077
+ level: "panel";
2078
+ contributionId?: string;
2079
+ } | {
2080
+ level: "sub-panel";
2081
+ contributionId: string;
2082
+ };
2083
+
2084
+ declare type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];
2085
+
2086
+ declare const workbenchPanelMenuRegions: {
2087
+ readonly main: {
2088
+ readonly left: "main-left-menu";
2089
+ readonly right: "main-right-menu";
2090
+ };
2091
+ readonly secondary: {
2092
+ readonly left: "secondary-left-menu";
2093
+ readonly right: "secondary-right-menu";
2094
+ };
2095
+ readonly side: {
2096
+ readonly left: "side-left-menu";
2097
+ readonly right: "side-right-menu";
2098
+ };
2099
+ };
2100
+
2101
+ declare interface WorkbenchPanelMenusContribution {
2102
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2103
+ }
2104
+
2105
+ declare type WorkbenchPanelMenuSide = "left" | "right";
2106
+
2107
+ declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2108
+
2109
+ declare type WorkbenchPanelMountStrategy_2 = WidgetMountStrategy_2;
2110
+
2111
+ declare type WorkbenchPanelOpenStrategy = {
2112
+ kind: "activate-or-open";
2113
+ position?: WorkbenchTabPosition;
2114
+ } | {
2115
+ kind: "replace-active";
2116
+ } | {
2117
+ kind: "replace-panel";
2118
+ instanceId: string;
2119
+ } | {
2120
+ kind: "preview";
2121
+ position?: WorkbenchTabPosition;
2122
+ };
2123
+
2124
+ declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
2125
+
2126
+ declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
2127
+
2128
+ declare interface WorkbenchPanelRenderInput {
2129
+ workbench: WorkbenchCore;
2130
+ panel: WorkbenchPanelContribution | PlaceholderContribution | RegisteredPlaceholderContribution;
2131
+ instance: WorkbenchPanelInstance;
2132
+ refresh: () => void;
2133
+ }
2134
+
2135
+ declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
2136
+
1733
2137
  declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1734
2138
 
1735
2139
  declare interface WorkbenchPanelsController {
1736
2140
  store: WorkbenchStore<WorkbenchPanelsState>;
1737
- isOpen(areaId: string): boolean;
1738
- setOpen(areaId: string, open: boolean): void;
1739
- toggle(areaId: string): void;
2141
+ isOpen(regionId: string): boolean;
2142
+ setOpen(regionId: string, open: boolean): void;
2143
+ toggle(regionId: string): void;
2144
+ setPersistenceScope(scope: string | undefined): void;
2145
+ getPersistenceScope(): string | undefined;
1740
2146
  onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
1741
2147
  }
1742
2148
 
1743
2149
  declare interface WorkbenchPanelsState {
1744
- openByAreaId: Record<string, boolean>;
2150
+ openByRegionId: Record<string, boolean>;
2151
+ }
2152
+
2153
+ declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2154
+
2155
+ declare type WorkbenchPanelTab_2 = WorkbenchWidgetTab_2;
2156
+
2157
+ declare type WorkbenchRegion = (typeof workbenchRegions)[number];
2158
+
2159
+ 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"];
2160
+
2161
+ declare interface WorkbenchRegionSize {
2162
+ defaultPx?: number;
2163
+ minPx?: number;
2164
+ maxPx?: number;
2165
+ }
2166
+
2167
+ declare interface WorkbenchRegionState {
2168
+ id: WorkbenchRegion;
2169
+ visible: boolean;
2170
+ size?: number;
2171
+ widgets: WorkbenchWidgetPlacement[];
2172
+ activeWidgetId?: string;
1745
2173
  }
1746
2174
 
1747
2175
  declare type WorkbenchRendererChangeListener = () => void;
@@ -1749,7 +2177,7 @@ declare type WorkbenchRendererChangeListener = () => void;
1749
2177
  declare type WorkbenchRendererRegistration = {
1750
2178
  id: string;
1751
2179
  keepAlive?: false;
1752
- render: (input: WorkbenchWidgetRenderInput) => unknown;
2180
+ render: (input: WorkbenchPanelRenderInput) => unknown;
1753
2181
  } | {
1754
2182
  id: string;
1755
2183
  keepAlive: true;
@@ -1762,32 +2190,54 @@ declare interface WorkbenchRendererRegistry {
1762
2190
  getRenderer(id: string): WorkbenchRendererRegistration | undefined;
1763
2191
  listRenderers(): WorkbenchRendererRegistration[];
1764
2192
  onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
1765
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchWidgetRenderInput): Disposable_2;
2193
+ claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
1766
2194
  getHost(rendererId: string): HTMLElement | undefined;
1767
- getClaim(rendererId: string): WorkbenchWidgetRenderInput | undefined;
2195
+ getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
1768
2196
  }
1769
2197
 
1770
- declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & DataRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
2198
+ declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1771
2199
 
1772
2200
  declare interface WorkbenchRendererStoreState {
1773
2201
  renderers: Record<string, WorkbenchRendererRegistration>;
1774
2202
  hosts: Record<string, RegisteredKeepAliveHost>;
1775
- claims: Record<string, WorkbenchWidgetRenderInput>;
2203
+ claims: Record<string, WorkbenchPanelRenderInput>;
2204
+ }
2205
+
2206
+ declare interface WorkbenchShellController {
2207
+ getRegionState(region: WorkbenchRegion): WorkbenchShellRegionState;
2208
+ setRegionOpen(region: WorkbenchShellOpenRegion, open: boolean): void;
2209
+ setRegionSize(region: WorkbenchRegion, size: number): void;
2210
+ getSidePanelPresentation(): WorkbenchSidePanelPresentation;
2211
+ setSidePanelPresentation(presentation: WorkbenchSidePanelPresentation): void;
2212
+ onDidChange(listener: () => void): Disposable_2;
1776
2213
  }
1777
2214
 
1778
- declare type WorkbenchSessionPanelChangeListener = (mode: WorkbenchSessionPanelMode) => void;
2215
+ declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
1779
2216
 
1780
- declare interface WorkbenchSessionPanelController {
1781
- store: WorkbenchStore<WorkbenchSessionPanelState>;
1782
- getMode(): WorkbenchSessionPanelMode;
1783
- setMode(mode: WorkbenchSessionPanelMode): void;
1784
- onDidChange(listener: WorkbenchSessionPanelChangeListener): Disposable_2;
2217
+ declare interface WorkbenchShellRegionState {
2218
+ open: boolean;
2219
+ size?: number;
2220
+ }
2221
+
2222
+ declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
2223
+
2224
+ declare interface WorkbenchSidePanelController {
2225
+ store: WorkbenchStore<WorkbenchSidePanelState>;
2226
+ getMode(): WorkbenchSidePanelMode;
2227
+ setMode(mode: WorkbenchSidePanelMode): void;
2228
+ onDidChange(listener: WorkbenchSidePanelChangeListener): Disposable_2;
1785
2229
  }
1786
2230
 
1787
- declare type WorkbenchSessionPanelMode = "bubble" | "closed" | "attached";
2231
+ declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2232
+
2233
+ declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
1788
2234
 
1789
- declare interface WorkbenchSessionPanelState {
1790
- mode: WorkbenchSessionPanelMode;
2235
+ declare interface WorkbenchSidePanelState {
2236
+ mode: WorkbenchSidePanelMode;
2237
+ }
2238
+
2239
+ declare interface WorkbenchSnapshot {
2240
+ layout: WorkbenchLayout;
1791
2241
  }
1792
2242
 
1793
2243
  declare interface WorkbenchStore<TState> {
@@ -1806,6 +2256,27 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
1806
2256
 
1807
2257
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
1808
2258
 
2259
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2260
+ region: WorkbenchPanelRegion;
2261
+ fallbackRegion?: WorkbenchPanelRegion;
2262
+ } & WorkbenchPanelMenusContribution;
2263
+
2264
+ declare interface WorkbenchSubPanelRef {
2265
+ contributionId: string;
2266
+ resourceUri?: string;
2267
+ instanceKey?: string;
2268
+ }
2269
+
2270
+ declare type WorkbenchTabPosition = "start" | "end" | {
2271
+ beforeWidgetId: string;
2272
+ } | {
2273
+ afterWidgetId: string;
2274
+ };
2275
+
2276
+ declare type WorkbenchTabRetention = "preview" | "persistent";
2277
+
2278
+ declare type WorkbenchTabRetention_2 = "preview" | "persistent";
2279
+
1809
2280
  declare interface WorkbenchTerminalController {
1810
2281
  store: WorkbenchStore<WorkbenchTerminalState>;
1811
2282
  /** True once the host injected a session opener. */
@@ -1899,18 +2370,29 @@ declare interface WorkbenchWidgetPlacement {
1899
2370
  source?: ContributionSource;
1900
2371
  resource?: ResourceRef;
1901
2372
  resourceUri?: string;
2373
+ ownerResourceUri?: string;
1902
2374
  title?: string;
1903
2375
  pinned?: boolean;
1904
2376
  closable?: boolean;
1905
2377
  mountStrategy?: WidgetMountStrategy;
1906
2378
  hiddenByDefault?: boolean;
2379
+ tabRetention?: WorkbenchTabRetention;
2380
+ tab?: WorkbenchWidgetTab;
2381
+ role?: WorkbenchWidgetRole;
1907
2382
  }
1908
2383
 
1909
- declare interface WorkbenchWidgetRenderInput {
1910
- workbench: WorkbenchCore;
1911
- widget: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
1912
- placement: WorkbenchWidgetPlacement;
1913
- refresh: () => void;
2384
+ declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2385
+
2386
+ declare interface WorkbenchWidgetTab {
2387
+ contentRendererId?: string;
2388
+ /** Custom actions shown when the user activates an already-active tab. */
2389
+ customMenuRendererId?: string;
2390
+ }
2391
+
2392
+ declare interface WorkbenchWidgetTab_2 {
2393
+ contentRendererId?: string;
2394
+ /** Custom actions shown when the user activates an already-active tab. */
2395
+ customMenuRendererId?: string;
1914
2396
  }
1915
2397
 
1916
2398
  export { }