@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
@@ -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
  }
@@ -127,7 +128,7 @@ declare interface CollectionSettingsPanel<TItem = unknown> extends SettingsPanel
127
128
  itemLabel(item: TItem): string;
128
129
  itemIcon?(item: TItem): string | undefined;
129
130
  groupBy?: SettingsCollectionGroupBy<TItem>;
130
- renderItem(item: TItem, input: WorkbenchWidgetRenderInput): unknown;
131
+ renderItem(item: TItem, input: WorkbenchPanelRenderInput): unknown;
131
132
  actions?: SettingsAction[];
132
133
  }
133
134
 
@@ -270,8 +271,6 @@ declare interface ControlsQueryResult {
270
271
  readOnly?: boolean;
271
272
  }
272
273
 
273
- declare type ControlsRendererArea = "main-right" | "secondary" | "overlay";
274
-
275
274
  declare interface ControlsRendererContribution {
276
275
  id: string;
277
276
  title: string;
@@ -291,12 +290,12 @@ declare interface ControlsRendererContribution {
291
290
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
292
291
  }
293
292
 
294
- declare type ControlsRendererImplementation = (input: WorkbenchWidgetRenderInput & {
293
+ declare type ControlsRendererImplementation = (input: WorkbenchPanelRenderInput & {
295
294
  controlsRendererId: string;
296
295
  }) => unknown;
297
296
 
298
297
  declare interface ControlsRendererLayout {
299
- area?: ControlsRendererArea;
298
+ region?: ControlsRendererRegion;
300
299
  defaultPx?: number;
301
300
  minPx?: number;
302
301
  maxPx?: number;
@@ -308,6 +307,8 @@ declare interface ControlsRendererRefreshEvent {
308
307
 
309
308
  declare type ControlsRendererRefreshListener = (event: ControlsRendererRefreshEvent) => void;
310
309
 
310
+ declare type ControlsRendererRegion = "main-right-menu" | "secondary" | "overlay";
311
+
311
312
  declare interface ControlsRendererRegistry {
312
313
  controlsStore: WorkbenchStore<ControlsRendererStoreState>;
313
314
  registerControlsRenderer(contribution: ControlsRendererContribution, metadata?: ContributionMetadata): Disposable_2;
@@ -334,7 +335,7 @@ declare interface ControlsUpdateValueInput {
334
335
  resource?: ResourceRef;
335
336
  }
336
337
 
337
- declare type ControlsViewRecord = WorkbenchExtensionMetadata["views"][number];
338
+ declare type ControlsViewRecord = WorkbenchExtensionMetadata["panels"][number];
338
339
 
339
340
  export declare type CreateBridgeWebviewHostCapabilities = (context: BridgeWebviewRenderContext) => HostCapabilityRegistry;
340
341
 
@@ -342,7 +343,7 @@ export declare type CreateBridgeWebviewProps = (context: BridgeWebviewRenderCont
342
343
 
343
344
  export declare const createBridgeWebviewRenderer: (input?: CreateBridgeWebviewRendererInput) => {
344
345
  id: string;
345
- render: (renderInput: WorkbenchWidgetRenderInput) => JSX.Element | null;
346
+ render: (renderInput: WorkbenchPanelRenderInput) => JSX.Element | null;
346
347
  };
347
348
 
348
349
  declare interface CreateBridgeWebviewRendererInput {
@@ -369,8 +370,8 @@ declare interface CreateTerminalSessionCapabilityInput {
369
370
  export declare const createWorkbenchWebviewHostCapabilities: (input: CreateWorkbenchWebviewHostCapabilitiesInput) => {
370
371
  "terminal.session"?: HostCapability | undefined;
371
372
  "commands.execute": (params: unknown) => Promise<unknown>;
372
- "resource.open": (params: unknown) => Promise<unknown>;
373
- "notification.show": (params: unknown) => RegisteredWorkbenchNotification_2;
373
+ "resource.open": (params: unknown) => Promise<WorkbenchPanelInstance_2>;
374
+ "notification.show": (params: unknown) => RegisteredWorkbenchNotification;
374
375
  "preferences.get": (params: unknown) => PreferenceValue | undefined;
375
376
  "preferences.set": (params: unknown) => {
376
377
  name: string;
@@ -392,112 +393,127 @@ declare interface CreateWorkbenchWebviewHostCapabilitiesInput {
392
393
  */
393
394
  declare interface CustomSettingsPanel extends SettingsPanelBase {
394
395
  kind: "custom";
395
- render(input: WorkbenchWidgetRenderInput): unknown;
396
+ render(input: WorkbenchPanelRenderInput): unknown;
396
397
  }
397
398
 
398
- declare interface DataRendererContribution<TRow extends DataRendererRow = DataRendererRow> {
399
+ declare interface DataTableRendererColumn {
400
+ id: string;
401
+ label?: string;
402
+ description?: string;
403
+ icon?: unknown;
404
+ hidden?: boolean;
405
+ stat?: DataTableRendererColumnStat;
406
+ renderer?: DataTableRendererColumnRenderer;
407
+ }
408
+
409
+ declare type DataTableRendererColumnRenderer = {
410
+ type: "json";
411
+ } | {
412
+ type: "color-scale";
413
+ stops: Array<{
414
+ value: number;
415
+ color: DataTableRendererThemeColor;
416
+ }>;
417
+ } | {
418
+ type: "categorical-color";
419
+ categories: Array<{
420
+ value: string | number | boolean | null;
421
+ color: DataTableRendererThemeColor;
422
+ }>;
423
+ };
424
+
425
+ declare type DataTableRendererColumnStat = {
426
+ type: "unique";
427
+ } | {
428
+ type: "histogram";
429
+ bins?: number;
430
+ } | {
431
+ type: "top-values";
432
+ limit?: number;
433
+ };
434
+
435
+ declare interface DataTableRendererContribution {
399
436
  id: string;
400
437
  title: string;
401
438
  resourceKind?: string;
402
- /**
403
- * Declarative attribute schema. The renderer dispatches filter / group /
404
- * sort / display / inline-edit behavior on each descriptor's `type.kind`.
405
- *
406
- * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
407
- * static array to let the contribution mutate its schema at runtime —
408
- * `WorkbenchDataView` subscribes so additions / removals / kind changes
409
- * propagate live without re-registering the renderer.
410
- */
411
- attributes: AttributeDescriptor[] | AttributesSource;
412
- /** Per-board-column overrides (color, drag/create rules, custom actions). */
413
- getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
414
- hideToolbar?: boolean;
439
+ columns?: DataTableRendererColumn[];
440
+ selectionMode?: "none" | "multiple";
441
+ selectionActions?: DataTableRendererSelectionAction[];
442
+ rowActions?: DataTableRendererRowAction[];
443
+ initialPageSize?: number;
444
+ pageSizeOptions?: number[];
415
445
  emptyTitle?: string;
416
446
  emptyDescription?: string;
417
- /** Initial settings/filters applied when the data renderer mounts. */
418
- defaultSettings?: Partial<DataRendererSettings>;
419
- defaultFilters?: DataRendererFilterState;
420
- /**
421
- * Data source. Receives the current display state so backends can paginate
422
- * / filter / sort. The renderer re-applies filter / sort / group locally,
423
- * so this can return unfiltered rows in simple cases.
424
- */
425
- executeQuery(state: DataRendererQueryState): Promise<TRow[]> | TRow[];
447
+ executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
426
448
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
427
- /** Row interactions surfaced by the renderer (mirrored from <DataRenderer>). */
428
- onRowClick?: (row: TRow) => void;
429
- /** Per-row right-click context menu actions (mirrored from <DataRenderer>). */
430
- getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
431
- /**
432
- * Fires for inline attribute edits AND for cross-column drag-to-reorder on
433
- * the board (the renderer passes the grouping attribute id + the target
434
- * column value).
435
- */
436
- onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
437
- /** Manual within-column reorder (only fires when ordering is manual). */
438
- onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
439
- onCreateRow?: (columnId: string) => void;
440
- onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
449
+ onRowClick?: (row: DataTableRendererRow) => void;
441
450
  }
442
451
 
443
- declare type DataRendererFilterState = Record<string, string[]>;
444
-
445
- declare type DataRendererImplementation = (input: WorkbenchWidgetRenderInput & {
446
- dataRendererId: string;
452
+ declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
453
+ dataTableRendererId: string;
447
454
  }) => unknown;
448
455
 
449
- declare interface DataRendererOrdering {
450
- attributeId: string | typeof MANUAL_ORDERING;
451
- direction: SortDirection;
456
+ declare interface DataTableRendererQueryContext {
457
+ resource?: ResourceRef;
458
+ modeId?: string;
452
459
  }
453
460
 
454
- declare interface DataRendererQueryState {
455
- settings: DataRendererSettings;
456
- filters: DataRendererFilterState;
461
+ declare interface DataTableRendererQueryResult {
462
+ rows: DataTableRendererRow[];
463
+ columns?: DataTableRendererColumn[];
457
464
  }
458
465
 
459
- declare interface DataRendererRefreshEvent {
460
- dataRendererId: string;
466
+ declare interface DataTableRendererRefreshEvent {
467
+ dataTableRendererId: string;
461
468
  }
462
469
 
463
- declare type DataRendererRefreshListener = (event: DataRendererRefreshEvent) => void;
470
+ declare interface DataTableRendererRegistry {
471
+ dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
472
+ registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
473
+ setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
474
+ getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
475
+ listDataTableRenderers(): RegisteredDataTableRendererContribution[];
476
+ refreshDataTableRenderer(id: string): void;
477
+ onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
478
+ }
464
479
 
465
- declare interface DataRendererRegistry {
466
- dataStore: WorkbenchStore<DataRendererStoreState>;
467
- registerDataRenderer<TRow extends DataRendererRow = DataRendererRow>(contribution: DataRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
468
- setDataRendererImplementation(impl: DataRendererImplementation): void;
469
- getDataRenderer(id: string): RegisteredDataRendererContribution | undefined;
470
- listDataRenderers(): RegisteredDataRendererContribution[];
471
- refreshDataRenderer(id: string): void;
472
- onDidRefreshDataRenderer(listener: DataRendererRefreshListener): Disposable_2;
480
+ declare interface DataTableRendererRow {
481
+ id: string;
482
+ values: Record<string, unknown>;
483
+ resource?: ResourceRef;
473
484
  }
474
485
 
475
- declare interface DataRendererRow {
486
+ declare interface DataTableRendererRowAction {
476
487
  id: string;
477
- title: string;
478
- /**
479
- * Optional navigation handle. When set, the renderer's default click handler
480
- * routes through the contribution's onRowClick (which typically opens the
481
- * resource via the workbench).
482
- */
483
- resource?: unknown;
484
- attributes: Record<string, unknown>;
488
+ label: string;
489
+ icon?: unknown;
490
+ destructive?: boolean;
491
+ run(row: DataTableRendererRow): Promise<void> | void;
485
492
  }
486
493
 
487
- declare type DataRendererRow_2 = Awaited<ReturnType<DataRendererContribution["executeQuery"]>>[number];
494
+ declare interface DataTableRendererSelectionAction {
495
+ id: string;
496
+ label: string;
497
+ icon?: unknown;
498
+ destructive?: boolean;
499
+ run(rows: DataTableRendererRow[]): Promise<void> | void;
500
+ }
488
501
 
489
- declare interface DataRendererSettings {
490
- viewMode: ViewMode;
491
- columnGrouping: string | typeof NO_GROUPING;
492
- rowGrouping: string | typeof NO_GROUPING;
493
- ordering: DataRendererOrdering;
494
- displayProperties: string[];
502
+ declare interface DataTableRendererStoreState {
503
+ renderers: Record<string, RegisteredDataTableRendererContribution>;
495
504
  }
496
505
 
497
- declare interface DataRendererStoreState {
498
- renderers: Record<string, RegisteredDataRendererContribution>;
506
+ declare interface DataTableRendererThemeColor {
507
+ light: string;
508
+ dark: string;
509
+ foreground?: {
510
+ light: string;
511
+ dark: string;
512
+ };
499
513
  }
500
514
 
515
+ declare type DataTableViewRecord = WorkbenchExtensionMetadata["panels"][number];
516
+
501
517
  declare interface Disposable_2 {
502
518
  dispose(): void;
503
519
  }
@@ -511,13 +527,14 @@ export declare const emptyWorkbenchExtensionMetadata: {
511
527
  modes: never[];
512
528
  navigation: never[];
513
529
  routes: never[];
514
- dataRenderers: never[];
530
+ kanbanRenderers: never[];
531
+ dataTableRenderers: never[];
515
532
  treeRenderers: never[];
516
533
  fileRenderers: never[];
517
534
  settingsPanels: never[];
518
535
  settingsDefinitions: never[];
519
536
  treeItems: never[];
520
- views: never[];
537
+ panels: never[];
521
538
  };
522
539
 
523
540
  declare interface EnumOption {
@@ -541,7 +558,7 @@ declare interface EnumOptionsSource {
541
558
 
542
559
  declare type ExtensionTreeRendererRecord = NonNullable<WorkbenchExtensionMetadata["treeRenderers"]>[number];
543
560
 
544
- declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["views"][number];
561
+ declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["panels"][number] | NonNullable<WorkbenchExtensionMetadata["panels"][number]["panelMenus"]>[number];
545
562
 
546
563
  export declare interface ExtensionWebviewFileCapabilities {
547
564
  delete(params: unknown): Promise<unknown> | unknown;
@@ -601,7 +618,7 @@ declare interface FileRendererContribution {
601
618
  save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
602
619
  }
603
620
 
604
- declare type FileRendererImplementation = (input: WorkbenchWidgetRenderInput & {
621
+ declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
605
622
  fileRendererId: string;
606
623
  }) => unknown;
607
624
 
@@ -632,34 +649,185 @@ declare interface HistoryController {
632
649
  goPrevious(): HistoryEntry | undefined;
633
650
  recentlyClosed(): readonly HistoryEntry[];
634
651
  reopenLastClosed(): HistoryEntry | undefined;
652
+ setPersistenceScope(scope: string | undefined): void;
653
+ getPersistenceScope(): string | undefined;
654
+ restore(): HistoryEntry | undefined;
655
+ flush(): void;
635
656
  clear(): void;
636
657
  }
637
658
 
638
- declare interface HistoryEntry {
639
- entryId: string;
640
- recordedAt: number;
641
- kind: "resource" | "widget" | "mode";
642
- modeId?: string;
643
- resource?: ResourceRef;
644
- widgetId?: string;
645
- contributionId?: string;
646
- title?: string;
647
- }
659
+ declare type HistoryEntry = WorkbenchNavigationEntry;
648
660
 
649
661
  declare interface HistoryStoreState {
650
- entries: readonly HistoryEntry[];
662
+ entries: readonly WorkbenchNavigationEntry[];
651
663
  cursor: number;
652
- recentlyClosed: readonly HistoryEntry[];
664
+ recentlyClosed: readonly WorkbenchNavigationEntry[];
665
+ hydrating: boolean;
653
666
  }
654
667
 
655
668
  declare interface HostTreeDefaultNodesInput {
656
669
  ctx: TreeContext;
657
670
  record: ExtensionTreeRendererRecord;
658
- view: ExtensionTreeViewRecord;
671
+ panel: ExtensionTreeViewRecord;
659
672
  }
660
673
 
661
674
  declare type HostTreeDefaultNodesResolver = (input: HostTreeDefaultNodesInput) => Promise<TreeNode[]> | TreeNode[];
662
675
 
676
+ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
677
+ id: string;
678
+ title: string;
679
+ resourceKind?: string;
680
+ /**
681
+ * Declarative attribute schema. The renderer dispatches filter / group /
682
+ * sort / display / inline-edit behavior on each descriptor's `type.kind`.
683
+ *
684
+ * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
685
+ * static array to let the contribution mutate its schema at runtime —
686
+ * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
687
+ * propagate live without re-registering the renderer.
688
+ */
689
+ attributes: AttributeDescriptor[] | AttributesSource;
690
+ /** Per-board-column overrides (color, drag/create rules, custom actions). */
691
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
692
+ hideToolbar?: boolean;
693
+ emptyTitle?: string;
694
+ emptyDescription?: string;
695
+ /** Initial settings/filters applied when the kanban renderer mounts. */
696
+ defaultSettings?: Partial<KanbanRendererSettings>;
697
+ defaultFilters?: KanbanRendererFilterState;
698
+ defaultViews?: KanbanRendererSavedView[];
699
+ defaultActiveViewId?: string;
700
+ /**
701
+ * Data source. Receives the current display state so backends can paginate
702
+ * / filter / sort. The renderer re-applies filter / sort / group locally,
703
+ * so this can return unfiltered rows in simple cases.
704
+ */
705
+ executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
706
+ subscribe?: (listener: () => void) => Disposable_2 | (() => void);
707
+ /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
708
+ onRowClick?: (row: TRow) => void;
709
+ /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
710
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
711
+ /**
712
+ * Fires for inline attribute edits AND for cross-column drag-to-reorder on
713
+ * the board (the renderer passes the grouping attribute id + the target
714
+ * column value).
715
+ */
716
+ onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
717
+ /** Manual within-column reorder (only fires when ordering is manual). */
718
+ onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
719
+ createRow?: KanbanRendererCreateRowConfig;
720
+ onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;
721
+ onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
722
+ }
723
+
724
+ declare interface KanbanRendererCreateField {
725
+ id: string;
726
+ label: string;
727
+ description?: string;
728
+ placeholder?: string;
729
+ type: KanbanRendererCreateFieldType;
730
+ required?: boolean;
731
+ defaultValue?: unknown;
732
+ options?: EnumOption[];
733
+ /** `files` fields only. */
734
+ multiple?: boolean;
735
+ accept?: string;
736
+ }
737
+
738
+ declare type KanbanRendererCreateFieldType = "text" | "longtext" | "markdown" | "number" | "boolean" | "select" | "multi-select" | "files";
739
+
740
+ /** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */
741
+ declare interface KanbanRendererCreateLabels {
742
+ cancel: string;
743
+ properties: string;
744
+ submitError: string;
745
+ removeFile: string;
746
+ }
747
+
748
+ declare interface KanbanRendererCreateRowConfig {
749
+ title: string;
750
+ submitLabel: string;
751
+ fields: KanbanRendererCreateField[];
752
+ labels: KanbanRendererCreateLabels;
753
+ }
754
+
755
+ declare interface KanbanRendererCreateSubmission {
756
+ columnId: string;
757
+ columnAttributeId?: string;
758
+ /** Declared field values, excluding `files` fields — those arrive as `files`. */
759
+ values: Record<string, unknown>;
760
+ /** Every editable attribute the user set, keyed by attribute id. */
761
+ attributeValues: Record<string, unknown>;
762
+ files: File[];
763
+ }
764
+
765
+ declare type KanbanRendererFilterState = Record<string, string[]>;
766
+
767
+ declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
768
+ kanbanRendererId: string;
769
+ }) => unknown;
770
+
771
+ declare interface KanbanRendererOrdering {
772
+ attributeId: string | typeof MANUAL_ORDERING;
773
+ direction: SortDirection;
774
+ }
775
+
776
+ declare interface KanbanRendererQueryState {
777
+ settings: KanbanRendererSettings;
778
+ filters: KanbanRendererFilterState;
779
+ }
780
+
781
+ declare interface KanbanRendererRefreshEvent {
782
+ kanbanRendererId: string;
783
+ }
784
+
785
+ declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
786
+
787
+ declare interface KanbanRendererRegistry {
788
+ dataStore: WorkbenchStore<KanbanRendererStoreState>;
789
+ registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
790
+ setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
791
+ getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
792
+ listKanbanRenderers(): RegisteredKanbanRendererContribution[];
793
+ refreshKanbanRenderer(id: string): void;
794
+ onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
795
+ }
796
+
797
+ declare interface KanbanRendererRow {
798
+ id: string;
799
+ title: string;
800
+ /**
801
+ * Optional navigation handle. When set, the renderer's default click handler
802
+ * routes through the contribution's onRowClick (which typically opens the
803
+ * resource via the workbench).
804
+ */
805
+ resource?: unknown;
806
+ attributes: Record<string, unknown>;
807
+ }
808
+
809
+ declare type KanbanRendererRow_2 = Awaited<ReturnType<KanbanRendererContribution["executeQuery"]>>[number];
810
+
811
+ declare interface KanbanRendererSavedView {
812
+ id: string;
813
+ title: string;
814
+ settings: KanbanRendererSettings;
815
+ filters: KanbanRendererFilterState;
816
+ isDefault?: boolean;
817
+ }
818
+
819
+ declare interface KanbanRendererSettings {
820
+ viewMode: ViewMode;
821
+ columnGrouping: string | typeof NO_GROUPING;
822
+ rowGrouping: string | typeof NO_GROUPING;
823
+ ordering: KanbanRendererOrdering;
824
+ displayProperties: string[];
825
+ }
826
+
827
+ declare interface KanbanRendererStoreState {
828
+ renderers: Record<string, RegisteredKanbanRendererContribution>;
829
+ }
830
+
663
831
  declare interface Keybinding {
664
832
  commandId: string;
665
833
  keybinding: KeybindingSequence;
@@ -685,33 +853,62 @@ declare interface LayoutModel {
685
853
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
686
854
  dispose(): void;
687
855
  };
856
+ registerPanel(panel: WorkbenchPanelContribution, metadata?: ContributionMetadata): {
857
+ dispose(): void;
858
+ };
688
859
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
689
860
  dispose(): void;
690
861
  };
862
+ registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
863
+ dispose(): void;
864
+ };
865
+ registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
866
+ dispose(): void;
867
+ };
868
+ registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
869
+ dispose(): void;
870
+ };
691
871
  unregisterWidget(id: string, options?: {
692
872
  removePlacements?: boolean;
693
873
  persist?: boolean;
694
874
  }): void;
695
- getPlaceholder(areaId: WorkbenchArea): RegisteredPlaceholderContribution | undefined;
875
+ getPlaceholder(regionId: WorkbenchRegion): RegisteredPlaceholderContribution | undefined;
696
876
  getWidget(id: string): RegisteredWidgetContribution | undefined;
697
- getAreaSize(areaId: WorkbenchArea): WorkbenchAreaSize | undefined;
698
- getAreaCollapsible(areaId: WorkbenchArea): boolean;
699
- getAreaHeaderBorderBottom(areaId: WorkbenchArea): boolean;
700
- setAreaVisible(areaId: WorkbenchArea, visible: boolean): void;
701
- setAreaSize(areaId: WorkbenchArea, size: number): void;
877
+ getPanel(id: string): WorkbenchPanelContribution | undefined;
878
+ getRegionSize(regionId: WorkbenchRegion): WorkbenchRegionSize | undefined;
879
+ getRegionCollapsible(regionId: WorkbenchRegion): boolean;
880
+ getRegionHeaderBorderBottom(regionId: WorkbenchRegion): boolean;
881
+ setRegionVisible(regionId: WorkbenchRegion, visible: boolean): void;
882
+ setRegionSize(regionId: WorkbenchRegion, size: number): void;
702
883
  listPlaceholders(): RegisteredPlaceholderContribution[];
703
884
  listWidgets(): RegisteredWidgetContribution[];
885
+ listPanels(): WorkbenchPanelContribution[];
886
+ listPanelInstances(region?: WorkbenchRegion): WorkbenchPanelInstance[];
887
+ getActivePanel(region?: WorkbenchRegion): WorkbenchPanelInstance | undefined;
704
888
  openWidget(id: string, input?: OpenWidgetInput): WorkbenchWidgetPlacement;
889
+ openPanel(id: string, input?: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
890
+ updatePanel(instanceId: string, input: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
891
+ reorderPanel(instanceId: string, position: WorkbenchTabPosition): void;
892
+ activatePanel(instanceId: string): WorkbenchPanelInstance;
893
+ closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
705
894
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
895
+ reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
896
+ expirePreviewTabs(ownerResourceUri?: string): void;
706
897
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
898
+ setRegionActiveWidget(regionId: WorkbenchRegion, widgetId: string | undefined): void;
707
899
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
708
900
  removeWidgetPlacement(widgetId: string): WorkbenchWidgetPlacement | undefined;
709
- clearArea(areaId: WorkbenchArea): void;
710
- resetAreas(): void;
901
+ clearRegion(regionId: WorkbenchRegion): void;
902
+ resetRegions(): void;
711
903
  getLayout(): WorkbenchLayout;
712
904
  restoreLayout(layout: WorkbenchLayout): void;
713
- setPersistenceScope(scope: LayoutScope | undefined): void;
905
+ setPersistenceScope(scope: LayoutScope | undefined, input?: {
906
+ carryRegionState?: readonly WorkbenchRegion[];
907
+ }): void;
714
908
  getPersistenceScope(): LayoutScope | undefined;
909
+ onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
910
+ dispose(): void;
911
+ };
715
912
  onDidChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
716
913
  dispose(): void;
717
914
  };
@@ -725,6 +922,7 @@ declare const MANUAL_ORDERING = "manual";
725
922
 
726
923
  declare interface MenuItem {
727
924
  commandId: string;
925
+ sourceCommandId?: string;
728
926
  label?: string;
729
927
  description?: string;
730
928
  icon?: string;
@@ -789,7 +987,13 @@ declare interface NavigationTargetCompound {
789
987
  targets: readonly NavigationTargetItem[];
790
988
  }
791
989
 
792
- declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetCommand;
990
+ declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
991
+
992
+ declare interface NavigationTargetPanel {
993
+ kind: "panel";
994
+ panelId: string;
995
+ input?: OpenWorkbenchPanelInput;
996
+ }
793
997
 
794
998
  declare interface NavigationTargetResource {
795
999
  kind: "resource";
@@ -797,12 +1001,6 @@ declare interface NavigationTargetResource {
797
1001
  input?: OpenResourceInput;
798
1002
  }
799
1003
 
800
- declare interface NavigationTargetView {
801
- kind: "view";
802
- widgetId: string;
803
- input?: OpenWidgetInput;
804
- }
805
-
806
1004
  declare const NO_GROUPING = "none";
807
1005
 
808
1006
  declare interface NotificationRegistry {
@@ -821,23 +1019,38 @@ declare interface OpenResourceInput {
821
1019
  declare interface OpenWidgetInput {
822
1020
  resource?: ResourceRef;
823
1021
  title?: string;
824
- area?: WorkbenchArea;
1022
+ region?: WorkbenchRegion;
825
1023
  ownerId?: string;
826
1024
  source?: ContributionSource;
827
1025
  pinned?: boolean;
828
1026
  closable?: boolean;
829
1027
  mountStrategy?: WidgetMountStrategy;
830
1028
  hiddenByDefault?: boolean;
1029
+ tabRetention?: WorkbenchTabRetention;
1030
+ tabPosition?: WorkbenchTabPosition;
1031
+ tab?: WorkbenchWidgetTab;
831
1032
  replaceActive?: boolean;
1033
+ replaceWidgetId?: string;
1034
+ }
1035
+
1036
+ declare interface OpenWorkbenchPanelInput {
1037
+ resource?: ResourceRef;
1038
+ title?: string;
1039
+ region?: WorkbenchRegion;
1040
+ pinned?: boolean;
1041
+ mountStrategy?: WorkbenchPanelMountStrategy;
1042
+ hiddenByDefault?: boolean;
1043
+ tab?: WorkbenchPanelTab;
1044
+ strategy?: WorkbenchPanelOpenStrategy;
832
1045
  }
833
1046
 
834
1047
  declare interface PlaceholderContribution {
835
1048
  id: string;
836
1049
  title: string;
837
- area: WorkbenchArea;
1050
+ region: WorkbenchRegion;
838
1051
  rendererId: string;
839
- areaSize?: WorkbenchAreaSize;
840
- areaCollapsible?: boolean;
1052
+ regionSize?: WorkbenchRegionSize;
1053
+ regionCollapsible?: boolean;
841
1054
  config?: unknown;
842
1055
  priority?: number;
843
1056
  }
@@ -875,9 +1088,9 @@ declare interface PreferenceScopeRef {
875
1088
 
876
1089
  declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
877
1090
 
878
- export declare const refreshOpenWorkbenchExtensionWebviews: (workbench: WorkbenchModuleContributionContext, metadata: WorkbenchExtensionMetadata) => void;
1091
+ export declare const refreshOpenWorkbenchExtensionWebviews: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata) => void;
879
1092
 
880
- export declare const refreshWorkbenchExtensionContributions: (workbench: WorkbenchModuleContributionContext, metadata: WorkbenchExtensionMetadata, commandId: string) => void;
1093
+ export declare const refreshWorkbenchExtensionContributions: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata, commandId: string) => void;
881
1094
 
882
1095
  declare interface RegisteredCommand extends RegisteredContributionMetadata {
883
1096
  command: Command;
@@ -890,21 +1103,18 @@ declare interface RegisteredContributionMetadata {
890
1103
  priority: number;
891
1104
  }
892
1105
 
893
- declare interface RegisteredContributionMetadata_2 {
894
- source: ContributionSource_2;
895
- ownerId: string;
896
- priority: number;
897
- }
898
-
899
1106
  declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
900
1107
  }
901
1108
 
902
- declare interface RegisteredDataRendererContribution<TRow extends DataRendererRow = DataRendererRow> extends DataRendererContribution<TRow>, RegisteredContributionMetadata {
1109
+ declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
903
1110
  }
904
1111
 
905
1112
  declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
906
1113
  }
907
1114
 
1115
+ declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1116
+ }
1117
+
908
1118
  declare interface RegisteredKeepAliveHost {
909
1119
  rendererId: string;
910
1120
  host: HTMLElement;
@@ -940,8 +1150,10 @@ declare interface RegisteredTreeRendererContribution extends TreeRendererContrib
940
1150
  }
941
1151
 
942
1152
  declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1153
+ ownedPanelMenuIds?: readonly string[];
943
1154
  singleton: boolean;
944
1155
  reuse: WidgetReusePolicy;
1156
+ role: WorkbenchWidgetRole;
945
1157
  } & RegisteredContributionMetadata;
946
1158
 
947
1159
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -955,17 +1167,6 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
955
1167
  metadata?: Record<string, unknown>;
956
1168
  }
957
1169
 
958
- declare interface RegisteredWorkbenchNotification_2 extends RegisteredContributionMetadata_2 {
959
- id: string;
960
- level: WorkbenchNotificationLevel_2;
961
- title: string;
962
- message?: string;
963
- createdAt: string;
964
- resource?: ResourceRef_2;
965
- actions?: WorkbenchNotificationAction_2[];
966
- metadata?: Record<string, unknown>;
967
- }
968
-
969
1170
  export declare const registerWorkbenchExtensionCommandPaletteResources: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionCommandPaletteResourceRecord[]) => {
970
1171
  dispose(): void;
971
1172
  };
@@ -990,14 +1191,12 @@ export declare interface RegisterWorkbenchExtensionContributionsInput {
990
1191
  settingsSectionId?: string;
991
1192
  settingsSectionTitle?: string;
992
1193
  webviewFiles?: ExtensionWebviewFileCapabilities;
993
- workbench: WorkbenchModuleContributionContext;
1194
+ workbench: WorkbenchModuleContext;
994
1195
  }
995
1196
 
996
- export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], views: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter) => Disposable_2;
1197
+ export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], panels: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter) => Disposable_2;
997
1198
 
998
- export declare const registerWorkbenchExtensionDataRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionDataRendererRecord[], adapter?: WorkbenchExtensionDataRendererAdapter) => {
999
- dispose(): void;
1000
- };
1199
+ export declare const registerWorkbenchExtensionDataTableRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionDataTableRendererRecord[], panels: DataTableViewRecord[]) => Disposable_2;
1001
1200
 
1002
1201
  export declare const registerWorkbenchExtensionFileRenderers: (input: RegisterWorkbenchExtensionFileRenderersInput) => {
1003
1202
  dispose(): void;
@@ -1007,7 +1206,18 @@ export declare interface RegisterWorkbenchExtensionFileRenderersInput {
1007
1206
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1008
1207
  metadata: WorkbenchExtensionMetadata;
1009
1208
  projectId: string;
1010
- workbench: WorkbenchModuleContributionContext;
1209
+ workbench: WorkbenchModuleContext;
1210
+ }
1211
+
1212
+ export declare const registerWorkbenchExtensionKanbanRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionKanbanRendererRecord[], adapter?: WorkbenchExtensionKanbanRendererAdapter) => {
1213
+ dispose(): void;
1214
+ };
1215
+
1216
+ export declare const registerWorkbenchExtensionPanel: (input: RegisterWorkbenchExtensionPanelInput) => Disposable_2;
1217
+
1218
+ export declare interface RegisterWorkbenchExtensionPanelInput {
1219
+ contribution: WorkbenchPanelContribution;
1220
+ workbench: WorkbenchModuleContext;
1011
1221
  }
1012
1222
 
1013
1223
  export declare const registerWorkbenchExtensionTreeRenderers: (input: RegisterWorkbenchExtensionTreeRenderersInput) => {
@@ -1020,7 +1230,7 @@ export declare interface RegisterWorkbenchExtensionTreeRenderersInput {
1020
1230
  getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;
1021
1231
  metadata: WorkbenchExtensionMetadata;
1022
1232
  projectId: string;
1023
- workbench: WorkbenchModuleContributionContext;
1233
+ workbench: WorkbenchModuleContext;
1024
1234
  }
1025
1235
 
1026
1236
  export declare const renderBridgeWebviewFrame: (input: {
@@ -1033,7 +1243,9 @@ export declare const renderBridgeWebviewFrame: (input: {
1033
1243
  webview: BridgeWebviewConfig;
1034
1244
  }) => JSX.Element;
1035
1245
 
1036
- declare type ResolvedResourceOpener = Required<ResourceOpener>;
1246
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1247
+
1248
+ declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
1037
1249
 
1038
1250
  declare interface ResourceBrowseEntry {
1039
1251
  resource: ResourceRef;
@@ -1055,6 +1267,13 @@ declare interface ResourceContextAction {
1055
1267
  separatorBefore?: boolean;
1056
1268
  }
1057
1269
 
1270
+ declare interface ResourceHierarchyProvider {
1271
+ id: string;
1272
+ priority?: number;
1273
+ canResolve(resource: ResourceRef): boolean;
1274
+ getParent(resource: ResourceRef): ResourceRef | undefined;
1275
+ }
1276
+
1058
1277
  declare interface ResourceKindContribution {
1059
1278
  kind: string;
1060
1279
  label: string;
@@ -1075,11 +1294,11 @@ declare interface ResourceNavigator<TResult = unknown> {
1075
1294
  navigate(resource: ResourceRef): TResult | Promise<TResult>;
1076
1295
  }
1077
1296
 
1078
- declare interface ResourceOpener<TResult = unknown> {
1297
+ declare interface ResourcePresenter {
1079
1298
  id: string;
1080
1299
  priority?: number;
1081
1300
  canOpen(resource: ResourceRef): boolean;
1082
- open(resource: ResourceRef, input: OpenResourceInput): TResult | Promise<TResult>;
1301
+ open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1083
1302
  }
1084
1303
 
1085
1304
  declare interface ResourceProvider {
@@ -1112,24 +1331,29 @@ declare interface ResourceRegistry {
1112
1331
  getKind(kind: string): RegisteredResourceKind | undefined;
1113
1332
  getSurface(resource: ResourceRef): ResourceSurface | undefined;
1114
1333
  listKinds(): RegisteredResourceKind[];
1115
- registerOpener(opener: ResourceOpener): Disposable_2;
1116
- listOpeners(): ResolvedResourceOpener[];
1334
+ registerPresenter(presenter: ResourcePresenter): Disposable_2;
1335
+ listPresenters(): ResolvedResourcePresenter[];
1117
1336
  registerProvider(provider: ResourceProvider): Disposable_2;
1118
1337
  listProviders(): ResourceProvider[];
1119
1338
  listResources(query: string): readonly ResourceBrowseEntry[];
1120
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
1339
+ registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1340
+ listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1341
+ walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1342
+ isOpeningResource(): boolean;
1343
+ openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1121
1344
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1122
1345
  }
1123
1346
 
1124
1347
  declare interface ResourceRegistryStoreState {
1125
1348
  kinds: Record<string, RegisteredResourceKind>;
1126
- openers: Record<string, ResolvedResourceOpener>;
1349
+ presenters: Record<string, ResolvedResourcePresenter>;
1127
1350
  providers: Record<string, ResourceProvider>;
1351
+ hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1128
1352
  }
1129
1353
 
1130
1354
  declare type ResourceSurface = "primary" | "secondary" | "attached";
1131
1355
 
1132
- declare type RowAction = NonNullable<WorkbenchExtensionDataRendererRecord["rowActions"]>[number];
1356
+ declare type RowAction = NonNullable<WorkbenchExtensionKanbanRendererRecord["rowActions"]>[number];
1133
1357
 
1134
1358
  /** Auto-rendered as a param editor from the registered preference schema. */
1135
1359
  declare interface SchemaSettingsPanel extends SettingsPanelBase {
@@ -1197,7 +1421,7 @@ declare interface SettingsRegistryStoreState {
1197
1421
  /** Settings are stored either per-user (global) or per-project. Projectless surfaces show only global entries. */
1198
1422
  declare type SettingsScope = "global" | "project";
1199
1423
 
1200
- /** An ordered sidebar container. Headerless when `title` is omitted. */
1424
+ /** An ordered sidenav container. Headerless when `title` is omitted. */
1201
1425
  declare interface SettingsSectionContribution {
1202
1426
  id: string;
1203
1427
  title?: string;
@@ -1206,6 +1430,8 @@ declare interface SettingsSectionContribution {
1206
1430
  actions?: SettingsAction[];
1207
1431
  }
1208
1432
 
1433
+ export declare const shouldRefreshWorkbenchExtensionDataTableRenderers: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1434
+
1209
1435
  export declare const shouldRefreshWorkbenchExtensionTrees: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1210
1436
 
1211
1437
  declare type SortDirection = "asc" | "desc";
@@ -1281,6 +1507,8 @@ declare interface TreeNode {
1281
1507
  hiddenByDefault?: boolean;
1282
1508
  /** When true, the node (e.g. a header/footer row) opts in to the tree's hide/show customization menu. */
1283
1509
  canHide?: boolean;
1510
+ /** When false, the node stays fixed within its Sidenav group. */
1511
+ canReorder?: boolean;
1284
1512
  }
1285
1513
 
1286
1514
  declare type TreeNodeRowVariant = "empty-state";
@@ -1298,7 +1526,7 @@ declare interface TreeRendererContribution {
1298
1526
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1299
1527
  }
1300
1528
 
1301
- declare type TreeRendererImplementation = (input: WorkbenchWidgetRenderInput & {
1529
+ declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1302
1530
  treeId: string;
1303
1531
  }) => unknown;
1304
1532
 
@@ -1356,11 +1584,13 @@ declare interface TreeViewSection {
1356
1584
  hiddenByDefault?: boolean;
1357
1585
  /** When true, the section (category) opts in to the tree's hide/show customization menu. */
1358
1586
  canHide?: boolean;
1587
+ /** When false, the section stays fixed within the Sidenav main region. */
1588
+ canReorder?: boolean;
1359
1589
  }
1360
1590
 
1361
1591
  /**
1362
- * Core-owned contracts for data renderer contributions. @pstdio/ui's
1363
- * DataRenderer props are structurally identical; the React layer bridges the
1592
+ * Core-owned contracts for kanban renderer contributions. @pstdio/ui's
1593
+ * KanbanRenderer props are structurally identical; the React layer bridges the
1364
1594
  * two, so drift surfaces as a compile error there instead of coupling core's
1365
1595
  * API shape to UI package ownership.
1366
1596
  */
@@ -1369,44 +1599,35 @@ declare type ViewMode = "board" | "list";
1369
1599
  declare interface WidgetContribution {
1370
1600
  id: string;
1371
1601
  title: string;
1372
- area: WorkbenchArea;
1373
- fallbackArea?: WorkbenchArea;
1602
+ icon?: string;
1603
+ region: WorkbenchRegion;
1604
+ fallbackRegion?: WorkbenchRegion;
1374
1605
  singleton?: boolean;
1375
1606
  reuse?: WidgetReusePolicy;
1376
1607
  mountStrategy?: WidgetMountStrategy;
1377
1608
  closable?: boolean;
1378
1609
  hiddenByDefault?: boolean;
1379
- areaSize?: WorkbenchAreaSize;
1380
- areaCollapsible?: boolean;
1610
+ regionSize?: WorkbenchRegionSize;
1611
+ regionCollapsible?: boolean;
1381
1612
  headerBorderBottom?: boolean;
1613
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1382
1614
  resourceKinds?: string[];
1383
1615
  priority?: number;
1384
1616
  rendererId: string;
1617
+ openCommandId?: string;
1618
+ role?: WorkbenchWidgetRole;
1619
+ eligibleLocations?: WorkbenchLocationEligibility;
1620
+ panelMenuOwner?: WorkbenchPanelMenuOwner;
1621
+ tab?: WorkbenchWidgetTab;
1385
1622
  config?: unknown;
1386
1623
  canOpen?(resource: ResourceRef): boolean;
1387
1624
  }
1388
1625
 
1389
1626
  declare type WidgetMountStrategy = "active" | "keep-mounted";
1390
1627
 
1391
- declare type WidgetReusePolicy = "resource" | "none";
1392
-
1393
- declare type WorkbenchArea = (typeof workbenchAreas)[number];
1394
-
1395
- declare const workbenchAreas: readonly ["nav", "activity", "left-header", "left", "main-header", "main-left", "main", "main-right", "secondary-header", "secondary", "status", "overlay", "floating-header", "floating"];
1396
-
1397
- declare interface WorkbenchAreaSize {
1398
- defaultPx?: number;
1399
- minPx?: number;
1400
- maxPx?: number;
1401
- }
1628
+ declare type WidgetMountStrategy_2 = "active" | "keep-mounted";
1402
1629
 
1403
- declare interface WorkbenchAreaState {
1404
- id: WorkbenchArea;
1405
- visible: boolean;
1406
- size?: number;
1407
- widgets: WorkbenchWidgetPlacement[];
1408
- activeWidgetId?: string;
1409
- }
1630
+ declare type WidgetReusePolicy = "resource" | "none";
1410
1631
 
1411
1632
  declare type WorkbenchBreadcrumbChangeListener = () => void;
1412
1633
 
@@ -1421,6 +1642,7 @@ declare interface WorkbenchBreadcrumbController {
1421
1642
  declare interface WorkbenchBreadcrumbItem {
1422
1643
  title: unknown;
1423
1644
  icon?: string;
1645
+ indicator?: "session-status";
1424
1646
  url?: string;
1425
1647
  onClick?: () => void;
1426
1648
  resource?: ResourceRef;
@@ -1430,8 +1652,16 @@ declare interface WorkbenchBreadcrumbState {
1430
1652
  items: WorkbenchBreadcrumbItem[] | undefined;
1431
1653
  }
1432
1654
 
1655
+ declare interface WorkbenchClosedSubPanel {
1656
+ region: WorkbenchPanelRegion;
1657
+ reference: WorkbenchSubPanelRef;
1658
+ resource?: ResourceRef;
1659
+ title?: string;
1660
+ }
1661
+
1433
1662
  declare interface WorkbenchCommandExecutionContext {
1434
1663
  resource?: ResourceRef;
1664
+ source?: "panel-add";
1435
1665
  }
1436
1666
 
1437
1667
  declare interface WorkbenchCommandExecutionError {
@@ -1486,6 +1716,7 @@ declare interface WorkbenchCommandParamsRequest {
1486
1716
  }
1487
1717
 
1488
1718
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1719
+ host: WorkbenchHost;
1489
1720
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1490
1721
  unregisterModule(moduleId: string): void;
1491
1722
  }
@@ -1509,7 +1740,8 @@ declare interface WorkbenchCoreContributionContext {
1509
1740
  renderers: WorkbenchRenderers;
1510
1741
  resources: ResourceRegistry;
1511
1742
  settings: SettingsRegistry;
1512
- sessionPanel: WorkbenchSessionPanelController;
1743
+ shell: WorkbenchShellController;
1744
+ sidePanel: WorkbenchSidePanelController;
1513
1745
  terminal: WorkbenchTerminalController;
1514
1746
  themes: ThemeRegistry;
1515
1747
  fileIconThemes: FileIconThemeRegistry;
@@ -1522,7 +1754,7 @@ declare interface WorkbenchCoreContributionContext {
1522
1754
  export declare interface WorkbenchExtensionCommandContext {
1523
1755
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1524
1756
  projectId: string;
1525
- workbench: WorkbenchModuleContributionContext;
1757
+ workbench: WorkbenchModuleContext;
1526
1758
  }
1527
1759
 
1528
1760
  export declare interface WorkbenchExtensionCommandPaletteRegistration {
@@ -1537,67 +1769,58 @@ export declare interface WorkbenchExtensionControlsAdapter {
1537
1769
  resolveResource?: (record: WorkbenchExtensionControlsRendererRecord) => ResourceRef | undefined;
1538
1770
  }
1539
1771
 
1540
- export declare interface WorkbenchExtensionDataRendererAdapter {
1772
+ export declare interface WorkbenchExtensionKanbanRendererAdapter {
1541
1773
  /** Override label resolution. Defaults to workbench's `text(value, fallback)`. */
1542
1774
  resolveLabel?: Localizer;
1543
1775
  /** Post-process an attribute descriptor (after localization). Defaults to identity. */
1544
- decorateAttribute?: (record: WorkbenchExtensionDataRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor;
1776
+ decorateAttribute?: (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor;
1545
1777
  /**
1546
1778
  * Translate a row's transport-shaped resource (`{ type, id }`) into a workbench
1547
1779
  * `ResourceRef`. Defaults to the workbench `pstdio://extension-resource/...`
1548
1780
  * scheme — dashboard supplies its own. Returns `undefined` for rows that do not
1549
1781
  * carry an explicit resource.
1550
1782
  */
1551
- resolveRowResource?: (record: WorkbenchExtensionDataRendererRecord, row: DataRendererRow_2) => ResourceRef | undefined;
1783
+ resolveRowResource?: (record: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow_2) => ResourceRef | undefined;
1552
1784
  /**
1553
1785
  * Synthesize a `ResourceRef` for row-action execution context when the row does
1554
1786
  * not carry an explicit resource. Defaults to a `pstdio://extension-resource/`
1555
1787
  * fallback built from `record.resourceKind` and `row.id`.
1556
1788
  */
1557
- resolveRowActionResource?: (record: WorkbenchExtensionDataRendererRecord, row: DataRendererRow_2) => ResourceRef | undefined;
1789
+ resolveRowActionResource?: (record: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow_2) => ResourceRef | undefined;
1558
1790
  /**
1559
1791
  * Override the row-action runner. `runDefault` performs the workbench's standard
1560
1792
  * flow (look up the row-action command, request params if needed, execute it).
1561
1793
  */
1562
1794
  executeRowAction?: (input: {
1563
- record: WorkbenchExtensionDataRendererRecord;
1795
+ record: WorkbenchExtensionKanbanRendererRecord;
1564
1796
  action: RowAction;
1565
- row: DataRendererRow_2;
1797
+ row: KanbanRendererRow_2;
1566
1798
  resource: ResourceRef | undefined;
1567
1799
  runDefault: () => Promise<void>;
1568
1800
  }) => void | Promise<void>;
1569
1801
  /**
1570
- * Override the row click handler. When unset the view layer falls back to
1802
+ * Override the row click handler. When unset the panel layer falls back to
1571
1803
  * opening the row's resource via `ctx.resources.openResource` — set this to
1572
- * intercept the click (e.g. swallow rejections when no opener exists yet).
1804
+ * intercept the click (e.g. swallow rejections when no presenter exists yet).
1573
1805
  */
1574
1806
  onRowClick?: (input: {
1575
- record: WorkbenchExtensionDataRendererRecord;
1576
- row: DataRendererRow_2;
1807
+ record: WorkbenchExtensionKanbanRendererRecord;
1808
+ row: KanbanRendererRow_2;
1577
1809
  resource: ResourceRef | undefined;
1578
1810
  }) => void;
1579
- /**
1580
- * Override the inline-create handler. `executeDefault` runs the record's create
1581
- * command with the column param. When omitted, the default executes and any
1582
- * configured `onAfterCreate` runs with the returned value.
1583
- */
1584
- onCreateRow?: (input: {
1585
- record: WorkbenchExtensionDataRendererRecord;
1586
- columnId: string;
1587
- executeDefault: () => Promise<unknown>;
1588
- }) => void;
1589
- /** Called after a successful default create (when `onCreateRow` is not provided). */
1811
+ /** Called after a successful renderer-owned create form submission. */
1590
1812
  onAfterCreate?: (input: {
1591
- record: WorkbenchExtensionDataRendererRecord;
1813
+ record: WorkbenchExtensionKanbanRendererRecord;
1592
1814
  created: unknown;
1593
- }) => void;
1815
+ submission: KanbanRendererCreateSubmission;
1816
+ }) => void | Promise<void>;
1594
1817
  /**
1595
1818
  * Called after any mutation (attribute change, reorder, column action, default
1596
1819
  * create) resolves successfully. Hosts that drive refresh via the outer command
1597
1820
  * pipeline (testbench / workbench) leave this unset; dashboard supplies
1598
- * `ctx.renderers.refreshDataRenderer(id)`.
1821
+ * `ctx.renderers.refreshKanbanRenderer(id)`.
1599
1822
  */
1600
- onAfterMutation?: (record: WorkbenchExtensionDataRendererRecord) => void;
1823
+ onAfterMutation?: (record: WorkbenchExtensionKanbanRendererRecord) => void;
1601
1824
  }
1602
1825
 
1603
1826
  export declare interface WorkbenchExtensionMenuRegistration {
@@ -1630,22 +1853,33 @@ declare interface WorkbenchFileIconThemeStoreState {
1630
1853
  themes: readonly FileIconThemePreferenceOption[];
1631
1854
  }
1632
1855
 
1633
- declare type WorkbenchFocusArea = (typeof workbenchFocusAreas)[number];
1856
+ declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1634
1857
 
1635
- declare const workbenchFocusAreas: readonly ["activityBar", "sideBar", "main", "panel", "statusBar"];
1636
-
1637
- declare type WorkbenchFocusChangeListener = (area: WorkbenchFocusArea | undefined) => void;
1858
+ declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1638
1859
 
1639
1860
  declare interface WorkbenchFocusController {
1640
1861
  store: WorkbenchStore<WorkbenchFocusState>;
1641
- setActiveArea(area: WorkbenchFocusArea): void;
1862
+ setActiveRegion(region: WorkbenchFocusRegionId): void;
1642
1863
  clearFocus(): void;
1643
- getActiveArea(): WorkbenchFocusArea | undefined;
1864
+ getActiveRegion(): WorkbenchFocusRegionId | undefined;
1644
1865
  onDidChange(listener: WorkbenchFocusChangeListener): Disposable_2;
1645
1866
  }
1646
1867
 
1868
+ declare type WorkbenchFocusRegionId = (typeof workbenchFocusRegions)[number];
1869
+
1870
+ declare const workbenchFocusRegions: readonly ["activity", "sidenav", "main", "secondary", "side", "status"];
1871
+
1647
1872
  declare interface WorkbenchFocusState {
1648
- activeArea: WorkbenchFocusArea | undefined;
1873
+ activeRegion: WorkbenchFocusRegionId | undefined;
1874
+ }
1875
+
1876
+ declare interface WorkbenchHost {
1877
+ getSnapshot(): WorkbenchSnapshot;
1878
+ restoreSnapshot(snapshot: WorkbenchSnapshot): void;
1879
+ setPersistenceScope(scope: string | undefined, input?: {
1880
+ carryRegions?: readonly WorkbenchRegion[];
1881
+ }): void;
1882
+ getPersistenceScope(): string | undefined;
1649
1883
  }
1650
1884
 
1651
1885
  declare interface WorkbenchLastResourceController {
@@ -1655,8 +1889,10 @@ declare interface WorkbenchLastResourceController {
1655
1889
  }
1656
1890
 
1657
1891
  declare interface WorkbenchLayout {
1658
- areas: Record<WorkbenchArea, WorkbenchAreaState>;
1892
+ regions: Record<WorkbenchRegion, WorkbenchRegionState>;
1893
+ locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1659
1894
  activeWidgetId?: string;
1895
+ activeLocationWidgetId?: string;
1660
1896
  activeResourceUri?: string;
1661
1897
  }
1662
1898
 
@@ -1665,7 +1901,25 @@ declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1665
1901
  declare interface WorkbenchLayoutStoreState {
1666
1902
  layout: WorkbenchLayout;
1667
1903
  widgets: Record<string, RegisteredWidgetContribution>;
1668
- placeholders: Partial<Record<WorkbenchArea, RegisteredPlaceholderContribution>>;
1904
+ placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
1905
+ }
1906
+
1907
+ declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1908
+
1909
+ declare interface WorkbenchLocationEligibility {
1910
+ modeIds?: string[];
1911
+ resourceKinds?: string[];
1912
+ resourceIds?: string[];
1913
+ canOpen?(resource: ResourceRef): boolean;
1914
+ }
1915
+
1916
+ declare interface WorkbenchLocationRef {
1917
+ key: string;
1918
+ modeId?: string;
1919
+ resource?: ResourceRef;
1920
+ contributionId?: string;
1921
+ instanceKey?: string;
1922
+ title?: string;
1669
1923
  }
1670
1924
 
1671
1925
  declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
@@ -1677,16 +1931,24 @@ declare type WorkbenchModeChangeListener = () => void;
1677
1931
  declare interface WorkbenchModeContribution {
1678
1932
  id: string;
1679
1933
  label?: string;
1934
+ panels?: readonly WorkbenchPanelRegion[];
1680
1935
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1936
+ seed?(ctx: WorkbenchModeActivationContext): void;
1937
+ enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1681
1938
  }
1682
1939
 
1683
1940
  declare interface WorkbenchModeRegistry {
1684
1941
  store: WorkbenchStore<WorkbenchModeStoreState>;
1942
+ dispose(): void;
1685
1943
  registerMode(mode: WorkbenchModeContribution): Disposable_2;
1686
1944
  getMode(id: string): WorkbenchModeContribution | undefined;
1687
1945
  listModes(): WorkbenchModeContribution[];
1688
1946
  getActiveModeId(): string | undefined;
1689
- setActiveMode(id: string | undefined): void;
1947
+ isTransitioning(): boolean;
1948
+ setActiveMode(id: string | undefined, input?: {
1949
+ deferSeed?: boolean;
1950
+ }): void;
1951
+ seedActiveMode(): void;
1690
1952
  onDidChangeActive(listener: WorkbenchModeChangeListener): Disposable_2;
1691
1953
  }
1692
1954
 
@@ -1697,6 +1959,8 @@ declare interface WorkbenchModeStoreState {
1697
1959
 
1698
1960
  declare type WorkbenchModuleActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1699
1961
 
1962
+ declare type WorkbenchModuleContext = WorkbenchCoreContributionContext;
1963
+
1700
1964
  declare interface WorkbenchModuleContribution {
1701
1965
  id: string;
1702
1966
  source?: ContributionSource;
@@ -1704,7 +1968,21 @@ declare interface WorkbenchModuleContribution {
1704
1968
  activate(ctx: WorkbenchModuleContributionContext): WorkbenchModuleActivationResult;
1705
1969
  }
1706
1970
 
1707
- declare type WorkbenchModuleContributionContext = WorkbenchCoreContributionContext;
1971
+ declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1972
+
1973
+ declare interface WorkbenchNavigationEntry {
1974
+ entryId: string;
1975
+ recordedAt: number;
1976
+ location: WorkbenchLocationRef;
1977
+ selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1978
+ kind: "resource" | "widget" | "mode";
1979
+ modeId?: string;
1980
+ resource?: ResourceRef;
1981
+ widgetId?: string;
1982
+ contributionId?: string;
1983
+ title?: string;
1984
+ closedSubPanel?: WorkbenchClosedSubPanel;
1985
+ }
1708
1986
 
1709
1987
  declare interface WorkbenchNotification {
1710
1988
  id?: string;
@@ -1723,12 +2001,6 @@ declare interface WorkbenchNotificationAction {
1723
2001
  args?: unknown;
1724
2002
  }
1725
2003
 
1726
- declare interface WorkbenchNotificationAction_2 {
1727
- commandId: string;
1728
- title: string;
1729
- args?: unknown;
1730
- }
1731
-
1732
2004
  declare type WorkbenchNotificationEvent = {
1733
2005
  type: "show";
1734
2006
  id: string;
@@ -1740,26 +2012,193 @@ declare type WorkbenchNotificationEvent = {
1740
2012
 
1741
2013
  declare type WorkbenchNotificationLevel = "info" | "success" | "warning" | "error";
1742
2014
 
1743
- declare type WorkbenchNotificationLevel_2 = "info" | "success" | "warning" | "error";
1744
-
1745
2015
  declare type WorkbenchNotificationListener = (event: WorkbenchNotificationEvent) => void;
1746
2016
 
1747
2017
  declare interface WorkbenchNotificationStoreState {
1748
2018
  notifications: Record<string, RegisteredWorkbenchNotification>;
1749
2019
  }
1750
2020
 
2021
+ declare interface WorkbenchPanelContribution {
2022
+ id: string;
2023
+ title: string;
2024
+ icon?: string;
2025
+ region: WorkbenchRegion;
2026
+ fallbackRegion?: WorkbenchRegion;
2027
+ rendererId: string;
2028
+ closable: boolean;
2029
+ singleton?: boolean;
2030
+ reuse?: WorkbenchPanelReusePolicy;
2031
+ mountStrategy?: WorkbenchPanelMountStrategy;
2032
+ hiddenByDefault?: boolean;
2033
+ regionSize?: WorkbenchRegionSize;
2034
+ regionCollapsible?: boolean;
2035
+ headerBorderBottom?: boolean;
2036
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
2037
+ resourceKinds?: string[];
2038
+ eligibleLocations?: WorkbenchLocationEligibility;
2039
+ priority?: number;
2040
+ openCommandId?: string;
2041
+ tab?: WorkbenchPanelTab;
2042
+ config?: unknown;
2043
+ canOpen?(resource: ResourceRef): boolean;
2044
+ ownerId?: string;
2045
+ source?: ContributionSource;
2046
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2047
+ }
2048
+
2049
+ declare interface WorkbenchPanelInstance {
2050
+ instanceId: string;
2051
+ panelId: string;
2052
+ ownerId?: string;
2053
+ source?: ContributionSource;
2054
+ resource?: ResourceRef;
2055
+ resourceUri?: string;
2056
+ ownerResourceUri?: string;
2057
+ title?: string;
2058
+ pinned?: boolean;
2059
+ closable: boolean;
2060
+ mountStrategy?: WorkbenchPanelMountStrategy;
2061
+ hiddenByDefault?: boolean;
2062
+ tabRetention?: WorkbenchTabRetention;
2063
+ tab?: WorkbenchPanelTab;
2064
+ }
2065
+
2066
+ declare interface WorkbenchPanelInstance_2 {
2067
+ instanceId: string;
2068
+ panelId: string;
2069
+ ownerId?: string;
2070
+ source?: ContributionSource_2;
2071
+ resource?: ResourceRef_2;
2072
+ resourceUri?: string;
2073
+ ownerResourceUri?: string;
2074
+ title?: string;
2075
+ pinned?: boolean;
2076
+ closable: boolean;
2077
+ mountStrategy?: WorkbenchPanelMountStrategy_2;
2078
+ hiddenByDefault?: boolean;
2079
+ tabRetention?: WorkbenchTabRetention_2;
2080
+ tab?: WorkbenchPanelTab_2;
2081
+ }
2082
+
2083
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2084
+ region: WorkbenchPanelMenuRegion;
2085
+ fallbackRegion?: WorkbenchPanelMenuRegion;
2086
+ };
2087
+
2088
+ declare interface WorkbenchPanelMenuDefinition {
2089
+ id: string;
2090
+ title: string;
2091
+ icon?: string;
2092
+ side: WorkbenchPanelMenuSide;
2093
+ singleton?: boolean;
2094
+ reuse?: WorkbenchPanelReusePolicy;
2095
+ mountStrategy?: WorkbenchPanelMountStrategy;
2096
+ hiddenByDefault?: boolean;
2097
+ regionSize?: WorkbenchRegionSize;
2098
+ regionCollapsible?: boolean;
2099
+ headerBorderBottom?: boolean;
2100
+ rendererId: string;
2101
+ priority?: number;
2102
+ config?: unknown;
2103
+ }
2104
+
2105
+ declare type WorkbenchPanelMenuOwner = {
2106
+ level: "panel";
2107
+ contributionId?: string;
2108
+ } | {
2109
+ level: "sub-panel";
2110
+ contributionId: string;
2111
+ };
2112
+
2113
+ declare type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];
2114
+
2115
+ declare const workbenchPanelMenuRegions: {
2116
+ readonly main: {
2117
+ readonly left: "main-left-menu";
2118
+ readonly right: "main-right-menu";
2119
+ };
2120
+ readonly secondary: {
2121
+ readonly left: "secondary-left-menu";
2122
+ readonly right: "secondary-right-menu";
2123
+ };
2124
+ readonly side: {
2125
+ readonly left: "side-left-menu";
2126
+ readonly right: "side-right-menu";
2127
+ };
2128
+ };
2129
+
2130
+ declare interface WorkbenchPanelMenusContribution {
2131
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2132
+ }
2133
+
2134
+ declare type WorkbenchPanelMenuSide = "left" | "right";
2135
+
2136
+ declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2137
+
2138
+ declare type WorkbenchPanelMountStrategy_2 = WidgetMountStrategy_2;
2139
+
2140
+ declare type WorkbenchPanelOpenStrategy = {
2141
+ kind: "activate-or-open";
2142
+ position?: WorkbenchTabPosition;
2143
+ } | {
2144
+ kind: "replace-active";
2145
+ } | {
2146
+ kind: "replace-panel";
2147
+ instanceId: string;
2148
+ } | {
2149
+ kind: "preview";
2150
+ position?: WorkbenchTabPosition;
2151
+ };
2152
+
2153
+ declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
2154
+
2155
+ declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
2156
+
2157
+ declare interface WorkbenchPanelRenderInput {
2158
+ workbench: WorkbenchCore;
2159
+ panel: WorkbenchPanelContribution | PlaceholderContribution | RegisteredPlaceholderContribution;
2160
+ instance: WorkbenchPanelInstance;
2161
+ refresh: () => void;
2162
+ }
2163
+
2164
+ declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
2165
+
1751
2166
  declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1752
2167
 
1753
2168
  declare interface WorkbenchPanelsController {
1754
2169
  store: WorkbenchStore<WorkbenchPanelsState>;
1755
- isOpen(areaId: string): boolean;
1756
- setOpen(areaId: string, open: boolean): void;
1757
- toggle(areaId: string): void;
2170
+ isOpen(regionId: string): boolean;
2171
+ setOpen(regionId: string, open: boolean): void;
2172
+ toggle(regionId: string): void;
2173
+ setPersistenceScope(scope: string | undefined): void;
2174
+ getPersistenceScope(): string | undefined;
1758
2175
  onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
1759
2176
  }
1760
2177
 
1761
2178
  declare interface WorkbenchPanelsState {
1762
- openByAreaId: Record<string, boolean>;
2179
+ openByRegionId: Record<string, boolean>;
2180
+ }
2181
+
2182
+ declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2183
+
2184
+ declare type WorkbenchPanelTab_2 = WorkbenchWidgetTab_2;
2185
+
2186
+ declare type WorkbenchRegion = (typeof workbenchRegions)[number];
2187
+
2188
+ 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"];
2189
+
2190
+ declare interface WorkbenchRegionSize {
2191
+ defaultPx?: number;
2192
+ minPx?: number;
2193
+ maxPx?: number;
2194
+ }
2195
+
2196
+ declare interface WorkbenchRegionState {
2197
+ id: WorkbenchRegion;
2198
+ visible: boolean;
2199
+ size?: number;
2200
+ widgets: WorkbenchWidgetPlacement[];
2201
+ activeWidgetId?: string;
1763
2202
  }
1764
2203
 
1765
2204
  declare type WorkbenchRendererChangeListener = () => void;
@@ -1767,7 +2206,7 @@ declare type WorkbenchRendererChangeListener = () => void;
1767
2206
  declare type WorkbenchRendererRegistration = {
1768
2207
  id: string;
1769
2208
  keepAlive?: false;
1770
- render: (input: WorkbenchWidgetRenderInput) => unknown;
2209
+ render: (input: WorkbenchPanelRenderInput) => unknown;
1771
2210
  } | {
1772
2211
  id: string;
1773
2212
  keepAlive: true;
@@ -1780,32 +2219,54 @@ declare interface WorkbenchRendererRegistry {
1780
2219
  getRenderer(id: string): WorkbenchRendererRegistration | undefined;
1781
2220
  listRenderers(): WorkbenchRendererRegistration[];
1782
2221
  onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
1783
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchWidgetRenderInput): Disposable_2;
2222
+ claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
1784
2223
  getHost(rendererId: string): HTMLElement | undefined;
1785
- getClaim(rendererId: string): WorkbenchWidgetRenderInput | undefined;
2224
+ getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
1786
2225
  }
1787
2226
 
1788
- declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & DataRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
2227
+ declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1789
2228
 
1790
2229
  declare interface WorkbenchRendererStoreState {
1791
2230
  renderers: Record<string, WorkbenchRendererRegistration>;
1792
2231
  hosts: Record<string, RegisteredKeepAliveHost>;
1793
- claims: Record<string, WorkbenchWidgetRenderInput>;
2232
+ claims: Record<string, WorkbenchPanelRenderInput>;
2233
+ }
2234
+
2235
+ declare interface WorkbenchShellController {
2236
+ getRegionState(region: WorkbenchRegion): WorkbenchShellRegionState;
2237
+ setRegionOpen(region: WorkbenchShellOpenRegion, open: boolean): void;
2238
+ setRegionSize(region: WorkbenchRegion, size: number): void;
2239
+ getSidePanelPresentation(): WorkbenchSidePanelPresentation;
2240
+ setSidePanelPresentation(presentation: WorkbenchSidePanelPresentation): void;
2241
+ onDidChange(listener: () => void): Disposable_2;
1794
2242
  }
1795
2243
 
1796
- declare type WorkbenchSessionPanelChangeListener = (mode: WorkbenchSessionPanelMode) => void;
2244
+ declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
1797
2245
 
1798
- declare interface WorkbenchSessionPanelController {
1799
- store: WorkbenchStore<WorkbenchSessionPanelState>;
1800
- getMode(): WorkbenchSessionPanelMode;
1801
- setMode(mode: WorkbenchSessionPanelMode): void;
1802
- onDidChange(listener: WorkbenchSessionPanelChangeListener): Disposable_2;
2246
+ declare interface WorkbenchShellRegionState {
2247
+ open: boolean;
2248
+ size?: number;
2249
+ }
2250
+
2251
+ declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
2252
+
2253
+ declare interface WorkbenchSidePanelController {
2254
+ store: WorkbenchStore<WorkbenchSidePanelState>;
2255
+ getMode(): WorkbenchSidePanelMode;
2256
+ setMode(mode: WorkbenchSidePanelMode): void;
2257
+ onDidChange(listener: WorkbenchSidePanelChangeListener): Disposable_2;
1803
2258
  }
1804
2259
 
1805
- declare type WorkbenchSessionPanelMode = "bubble" | "closed" | "attached";
2260
+ declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2261
+
2262
+ declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
1806
2263
 
1807
- declare interface WorkbenchSessionPanelState {
1808
- mode: WorkbenchSessionPanelMode;
2264
+ declare interface WorkbenchSidePanelState {
2265
+ mode: WorkbenchSidePanelMode;
2266
+ }
2267
+
2268
+ declare interface WorkbenchSnapshot {
2269
+ layout: WorkbenchLayout;
1809
2270
  }
1810
2271
 
1811
2272
  declare interface WorkbenchStore<TState> {
@@ -1824,6 +2285,27 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
1824
2285
 
1825
2286
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
1826
2287
 
2288
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2289
+ region: WorkbenchPanelRegion;
2290
+ fallbackRegion?: WorkbenchPanelRegion;
2291
+ } & WorkbenchPanelMenusContribution;
2292
+
2293
+ declare interface WorkbenchSubPanelRef {
2294
+ contributionId: string;
2295
+ resourceUri?: string;
2296
+ instanceKey?: string;
2297
+ }
2298
+
2299
+ declare type WorkbenchTabPosition = "start" | "end" | {
2300
+ beforeWidgetId: string;
2301
+ } | {
2302
+ afterWidgetId: string;
2303
+ };
2304
+
2305
+ declare type WorkbenchTabRetention = "preview" | "persistent";
2306
+
2307
+ declare type WorkbenchTabRetention_2 = "preview" | "persistent";
2308
+
1827
2309
  declare interface WorkbenchTerminalController {
1828
2310
  store: WorkbenchStore<WorkbenchTerminalState>;
1829
2311
  /** True once the host injected a session opener. */
@@ -1917,18 +2399,29 @@ declare interface WorkbenchWidgetPlacement {
1917
2399
  source?: ContributionSource;
1918
2400
  resource?: ResourceRef;
1919
2401
  resourceUri?: string;
2402
+ ownerResourceUri?: string;
1920
2403
  title?: string;
1921
2404
  pinned?: boolean;
1922
2405
  closable?: boolean;
1923
2406
  mountStrategy?: WidgetMountStrategy;
1924
2407
  hiddenByDefault?: boolean;
2408
+ tabRetention?: WorkbenchTabRetention;
2409
+ tab?: WorkbenchWidgetTab;
2410
+ role?: WorkbenchWidgetRole;
1925
2411
  }
1926
2412
 
1927
- declare interface WorkbenchWidgetRenderInput {
1928
- workbench: WorkbenchCore;
1929
- widget: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
1930
- placement: WorkbenchWidgetPlacement;
1931
- refresh: () => void;
2413
+ declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2414
+
2415
+ declare interface WorkbenchWidgetTab {
2416
+ contentRendererId?: string;
2417
+ /** Custom actions shown when the user activates an already-active tab. */
2418
+ customMenuRendererId?: string;
2419
+ }
2420
+
2421
+ declare interface WorkbenchWidgetTab_2 {
2422
+ contentRendererId?: string;
2423
+ /** Custom actions shown when the user activates an already-active tab. */
2424
+ customMenuRendererId?: string;
1932
2425
  }
1933
2426
 
1934
2427
  export { }