@pstdio/workbench 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +100 -88
  2. package/dist/context-key-service-W4QEfVdN.js +1031 -0
  3. package/dist/context-key-service-W4QEfVdN.js.map +1 -0
  4. package/dist/extensions.d.ts +739 -275
  5. package/dist/extensions.js +891 -699
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-DrrhYnb_.js.map +1 -1
  8. package/dist/index.d.ts +746 -448
  9. package/dist/index.js +2974 -60
  10. package/dist/index.js.map +1 -1
  11. package/dist/layout-types-DMoZz38-.js +100 -0
  12. package/dist/layout-types-DMoZz38-.js.map +1 -0
  13. package/dist/react.d.ts +735 -231
  14. package/dist/react.js +3562 -2584
  15. package/dist/react.js.map +1 -1
  16. package/dist/storage.d.ts +109 -14
  17. package/dist/storage.js +142 -47
  18. package/dist/storage.js.map +1 -1
  19. package/dist/surface-map-C1pOTUmF.js +52 -0
  20. package/dist/surface-map-C1pOTUmF.js.map +1 -0
  21. package/dist/testing.d.ts +685 -198
  22. package/dist/testing.js +46 -34
  23. package/dist/testing.js.map +1 -1
  24. package/dist/webview-runtime.js +5 -1
  25. package/dist/webview-runtime.js.map +1 -1
  26. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  27. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  28. package/package.json +6 -7
  29. package/dist/context-key-service-C--cHa0B.js +0 -447
  30. package/dist/context-key-service-C--cHa0B.js.map +0 -1
  31. package/dist/core.d.ts +0 -1885
  32. package/dist/core.js +0 -64
  33. package/dist/core.js.map +0 -1
  34. package/dist/surface-reconcile-DkRf01ro.js +0 -260
  35. package/dist/surface-reconcile-DkRf01ro.js.map +0 -1
  36. package/dist/workbench-core-DFpwi8Lo.js +0 -2264
  37. package/dist/workbench-core-DFpwi8Lo.js.map +0 -1
  38. package/dist/workbench-menu-paths-CQVH6z4_.js +0 -11
  39. package/dist/workbench-menu-paths-CQVH6z4_.js.map +0 -1
@@ -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
  }
@@ -112,9 +113,7 @@ export declare const buildWorkbenchExtensionMenuRegistrations: (input: {
112
113
  export declare const buildWorkbenchExtensionRouteEntries: (input: {
113
114
  metadata: WorkbenchExtensionMetadata | undefined;
114
115
  createResource: (resourceInput: WorkbenchExtensionRouteResourceInput) => ResourceRef;
115
- }) => {
116
- resource: ResourceRef;
117
- }[];
116
+ }) => any;
118
117
 
119
118
  /**
120
119
  * A data-driven list of items, each opening a contributor-supplied editor. The
@@ -127,7 +126,7 @@ declare interface CollectionSettingsPanel<TItem = unknown> extends SettingsPanel
127
126
  itemLabel(item: TItem): string;
128
127
  itemIcon?(item: TItem): string | undefined;
129
128
  groupBy?: SettingsCollectionGroupBy<TItem>;
130
- renderItem(item: TItem, input: WorkbenchWidgetRenderInput): unknown;
129
+ renderItem(item: TItem, input: WorkbenchPanelRenderInput): unknown;
131
130
  actions?: SettingsAction[];
132
131
  }
133
132
 
@@ -270,8 +269,6 @@ declare interface ControlsQueryResult {
270
269
  readOnly?: boolean;
271
270
  }
272
271
 
273
- declare type ControlsRendererArea = "main-right" | "secondary" | "overlay";
274
-
275
272
  declare interface ControlsRendererContribution {
276
273
  id: string;
277
274
  title: string;
@@ -291,12 +288,12 @@ declare interface ControlsRendererContribution {
291
288
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
292
289
  }
293
290
 
294
- declare type ControlsRendererImplementation = (input: WorkbenchWidgetRenderInput & {
291
+ declare type ControlsRendererImplementation = (input: WorkbenchPanelRenderInput & {
295
292
  controlsRendererId: string;
296
293
  }) => unknown;
297
294
 
298
295
  declare interface ControlsRendererLayout {
299
- area?: ControlsRendererArea;
296
+ region?: ControlsRendererRegion;
300
297
  defaultPx?: number;
301
298
  minPx?: number;
302
299
  maxPx?: number;
@@ -308,6 +305,8 @@ declare interface ControlsRendererRefreshEvent {
308
305
 
309
306
  declare type ControlsRendererRefreshListener = (event: ControlsRendererRefreshEvent) => void;
310
307
 
308
+ declare type ControlsRendererRegion = "main-right-menu" | "secondary" | "overlay";
309
+
311
310
  declare interface ControlsRendererRegistry {
312
311
  controlsStore: WorkbenchStore<ControlsRendererStoreState>;
313
312
  registerControlsRenderer(contribution: ControlsRendererContribution, metadata?: ContributionMetadata): Disposable_2;
@@ -334,7 +333,7 @@ declare interface ControlsUpdateValueInput {
334
333
  resource?: ResourceRef;
335
334
  }
336
335
 
337
- declare type ControlsViewRecord = WorkbenchExtensionMetadata["views"][number];
336
+ declare type ControlsViewRecord = WorkbenchExtensionMetadata["panels"][number];
338
337
 
339
338
  export declare type CreateBridgeWebviewHostCapabilities = (context: BridgeWebviewRenderContext) => HostCapabilityRegistry;
340
339
 
@@ -342,7 +341,7 @@ export declare type CreateBridgeWebviewProps = (context: BridgeWebviewRenderCont
342
341
 
343
342
  export declare const createBridgeWebviewRenderer: (input?: CreateBridgeWebviewRendererInput) => {
344
343
  id: string;
345
- render: (renderInput: WorkbenchWidgetRenderInput) => JSX.Element | null;
344
+ render: (renderInput: WorkbenchPanelRenderInput) => JSX.Element | null;
346
345
  };
347
346
 
348
347
  declare interface CreateBridgeWebviewRendererInput {
@@ -369,8 +368,8 @@ declare interface CreateTerminalSessionCapabilityInput {
369
368
  export declare const createWorkbenchWebviewHostCapabilities: (input: CreateWorkbenchWebviewHostCapabilitiesInput) => {
370
369
  "terminal.session"?: HostCapability | undefined;
371
370
  "commands.execute": (params: unknown) => Promise<unknown>;
372
- "resource.open": (params: unknown) => Promise<unknown>;
373
- "notification.show": (params: unknown) => RegisteredWorkbenchNotification_2;
371
+ "resource.open": (params: unknown) => Promise<WorkbenchPanelInstance_2>;
372
+ "notification.show": (params: unknown) => RegisteredWorkbenchNotification;
374
373
  "preferences.get": (params: unknown) => PreferenceValue | undefined;
375
374
  "preferences.set": (params: unknown) => {
376
375
  name: string;
@@ -392,133 +391,122 @@ declare interface CreateWorkbenchWebviewHostCapabilitiesInput {
392
391
  */
393
392
  declare interface CustomSettingsPanel extends SettingsPanelBase {
394
393
  kind: "custom";
395
- render(input: WorkbenchWidgetRenderInput): unknown;
394
+ render(input: WorkbenchPanelRenderInput): unknown;
396
395
  }
397
396
 
398
- 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 {
399
434
  id: string;
400
435
  title: string;
401
436
  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;
437
+ columns?: DataTableRendererColumn[];
438
+ rowActions?: DataTableRendererRowAction[];
439
+ initialPageSize?: number;
440
+ pageSizeOptions?: number[];
415
441
  emptyTitle?: string;
416
442
  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[];
443
+ executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
426
444
  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;
445
+ onRowClick?: (row: DataTableRendererRow) => void;
441
446
  }
442
447
 
443
- declare type DataRendererFilterState = Record<string, string[]>;
444
-
445
- declare type DataRendererImplementation = (input: WorkbenchWidgetRenderInput & {
446
- dataRendererId: string;
448
+ declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
449
+ dataTableRendererId: string;
447
450
  }) => unknown;
448
451
 
449
- declare interface DataRendererOrdering {
450
- attributeId: string | typeof MANUAL_ORDERING;
451
- direction: SortDirection;
452
+ declare interface DataTableRendererQueryContext {
453
+ resource?: ResourceRef;
454
+ modeId?: string;
452
455
  }
453
456
 
454
- declare interface DataRendererQueryState {
455
- settings: DataRendererSettings;
456
- filters: DataRendererFilterState;
457
+ declare interface DataTableRendererQueryResult {
458
+ rows: DataTableRendererRow[];
459
+ columns?: DataTableRendererColumn[];
457
460
  }
458
461
 
459
- declare interface DataRendererRefreshEvent {
460
- dataRendererId: string;
462
+ declare interface DataTableRendererRefreshEvent {
463
+ dataTableRendererId: string;
461
464
  }
462
465
 
463
- declare type DataRendererRefreshListener = (event: DataRendererRefreshEvent) => void;
464
-
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;
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;
473
474
  }
474
475
 
475
- declare interface DataRendererRow {
476
+ declare interface DataTableRendererRow {
476
477
  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>;
478
+ values: Record<string, unknown>;
479
+ resource?: ResourceRef;
485
480
  }
486
481
 
487
- 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
+ }
488
489
 
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[];
490
+ declare interface DataTableRendererStoreState {
491
+ renderers: Record<string, RegisteredDataTableRendererContribution>;
495
492
  }
496
493
 
497
- declare interface DataRendererStoreState {
498
- renderers: Record<string, RegisteredDataRendererContribution>;
494
+ declare interface DataTableRendererThemeColor {
495
+ light: string;
496
+ dark: string;
497
+ foreground?: {
498
+ light: string;
499
+ dark: string;
500
+ };
499
501
  }
500
502
 
503
+ declare type DataTableViewRecord = WorkbenchExtensionMetadata["panels"][number];
504
+
501
505
  declare interface Disposable_2 {
502
506
  dispose(): void;
503
507
  }
504
508
 
505
- export declare const emptyWorkbenchExtensionMetadata: {
506
- commands: never[];
507
- commandPaletteContributions: never[];
508
- diagnostics: never[];
509
- extensions: never[];
510
- menuContributions: never[];
511
- modes: never[];
512
- navigation: never[];
513
- routes: never[];
514
- dataRenderers: never[];
515
- treeRenderers: never[];
516
- fileRenderers: never[];
517
- settingsPanels: never[];
518
- settingsDefinitions: never[];
519
- treeItems: never[];
520
- views: never[];
521
- };
509
+ export declare const emptyWorkbenchExtensionMetadata: WorkbenchExtensionMetadata;
522
510
 
523
511
  declare interface EnumOption {
524
512
  value: string;
@@ -541,7 +529,7 @@ declare interface EnumOptionsSource {
541
529
 
542
530
  declare type ExtensionTreeRendererRecord = NonNullable<WorkbenchExtensionMetadata["treeRenderers"]>[number];
543
531
 
544
- declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["views"][number];
532
+ declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["panels"][number] | NonNullable<WorkbenchExtensionMetadata["panels"][number]["panelMenus"]>[number];
545
533
 
546
534
  export declare interface ExtensionWebviewFileCapabilities {
547
535
  delete(params: unknown): Promise<unknown> | unknown;
@@ -601,7 +589,7 @@ declare interface FileRendererContribution {
601
589
  save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
602
590
  }
603
591
 
604
- declare type FileRendererImplementation = (input: WorkbenchWidgetRenderInput & {
592
+ declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
605
593
  fileRendererId: string;
606
594
  }) => unknown;
607
595
 
@@ -632,34 +620,185 @@ declare interface HistoryController {
632
620
  goPrevious(): HistoryEntry | undefined;
633
621
  recentlyClosed(): readonly HistoryEntry[];
634
622
  reopenLastClosed(): HistoryEntry | undefined;
623
+ setPersistenceScope(scope: string | undefined): void;
624
+ getPersistenceScope(): string | undefined;
625
+ restore(): HistoryEntry | undefined;
626
+ flush(): void;
635
627
  clear(): void;
636
628
  }
637
629
 
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
- }
630
+ declare type HistoryEntry = WorkbenchNavigationEntry;
648
631
 
649
632
  declare interface HistoryStoreState {
650
- entries: readonly HistoryEntry[];
633
+ entries: readonly WorkbenchNavigationEntry[];
651
634
  cursor: number;
652
- recentlyClosed: readonly HistoryEntry[];
635
+ recentlyClosed: readonly WorkbenchNavigationEntry[];
636
+ hydrating: boolean;
653
637
  }
654
638
 
655
639
  declare interface HostTreeDefaultNodesInput {
656
640
  ctx: TreeContext;
657
641
  record: ExtensionTreeRendererRecord;
658
- view: ExtensionTreeViewRecord;
642
+ panel: ExtensionTreeViewRecord;
659
643
  }
660
644
 
661
645
  declare type HostTreeDefaultNodesResolver = (input: HostTreeDefaultNodesInput) => Promise<TreeNode[]> | TreeNode[];
662
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
+
663
802
  declare interface Keybinding {
664
803
  commandId: string;
665
804
  keybinding: KeybindingSequence;
@@ -685,33 +824,62 @@ declare interface LayoutModel {
685
824
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
686
825
  dispose(): void;
687
826
  };
827
+ registerPanel(panel: WorkbenchPanelContribution, metadata?: ContributionMetadata): {
828
+ dispose(): void;
829
+ };
688
830
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
689
831
  dispose(): void;
690
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
+ };
691
842
  unregisterWidget(id: string, options?: {
692
843
  removePlacements?: boolean;
693
844
  persist?: boolean;
694
845
  }): void;
695
- getPlaceholder(areaId: WorkbenchArea): RegisteredPlaceholderContribution | undefined;
846
+ getPlaceholder(regionId: WorkbenchRegion): RegisteredPlaceholderContribution | undefined;
696
847
  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;
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;
702
854
  listPlaceholders(): RegisteredPlaceholderContribution[];
703
855
  listWidgets(): RegisteredWidgetContribution[];
856
+ listPanels(): WorkbenchPanelContribution[];
857
+ listPanelInstances(region?: WorkbenchRegion): WorkbenchPanelInstance[];
858
+ getActivePanel(region?: WorkbenchRegion): WorkbenchPanelInstance | undefined;
704
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;
705
865
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
866
+ reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
867
+ expirePreviewTabs(ownerResourceUri?: string): void;
706
868
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
869
+ setRegionActiveWidget(regionId: WorkbenchRegion, widgetId: string | undefined): void;
707
870
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
708
871
  removeWidgetPlacement(widgetId: string): WorkbenchWidgetPlacement | undefined;
709
- clearArea(areaId: WorkbenchArea): void;
710
- resetAreas(): void;
872
+ clearRegion(regionId: WorkbenchRegion): void;
873
+ resetRegions(): void;
711
874
  getLayout(): WorkbenchLayout;
712
875
  restoreLayout(layout: WorkbenchLayout): void;
713
- setPersistenceScope(scope: LayoutScope | undefined): void;
876
+ setPersistenceScope(scope: LayoutScope | undefined, input?: {
877
+ carryRegionState?: readonly WorkbenchRegion[];
878
+ }): void;
714
879
  getPersistenceScope(): LayoutScope | undefined;
880
+ onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
881
+ dispose(): void;
882
+ };
715
883
  onDidChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
716
884
  dispose(): void;
717
885
  };
@@ -725,6 +893,7 @@ declare const MANUAL_ORDERING = "manual";
725
893
 
726
894
  declare interface MenuItem {
727
895
  commandId: string;
896
+ sourceCommandId?: string;
728
897
  label?: string;
729
898
  description?: string;
730
899
  icon?: string;
@@ -789,7 +958,13 @@ declare interface NavigationTargetCompound {
789
958
  targets: readonly NavigationTargetItem[];
790
959
  }
791
960
 
792
- 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
+ }
793
968
 
794
969
  declare interface NavigationTargetResource {
795
970
  kind: "resource";
@@ -797,12 +972,6 @@ declare interface NavigationTargetResource {
797
972
  input?: OpenResourceInput;
798
973
  }
799
974
 
800
- declare interface NavigationTargetView {
801
- kind: "view";
802
- widgetId: string;
803
- input?: OpenWidgetInput;
804
- }
805
-
806
975
  declare const NO_GROUPING = "none";
807
976
 
808
977
  declare interface NotificationRegistry {
@@ -821,23 +990,38 @@ declare interface OpenResourceInput {
821
990
  declare interface OpenWidgetInput {
822
991
  resource?: ResourceRef;
823
992
  title?: string;
824
- area?: WorkbenchArea;
993
+ region?: WorkbenchRegion;
825
994
  ownerId?: string;
826
995
  source?: ContributionSource;
827
996
  pinned?: boolean;
828
997
  closable?: boolean;
829
998
  mountStrategy?: WidgetMountStrategy;
830
999
  hiddenByDefault?: boolean;
1000
+ tabRetention?: WorkbenchTabRetention;
1001
+ tabPosition?: WorkbenchTabPosition;
1002
+ tab?: WorkbenchWidgetTab;
831
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;
832
1016
  }
833
1017
 
834
1018
  declare interface PlaceholderContribution {
835
1019
  id: string;
836
1020
  title: string;
837
- area: WorkbenchArea;
1021
+ region: WorkbenchRegion;
838
1022
  rendererId: string;
839
- areaSize?: WorkbenchAreaSize;
840
- areaCollapsible?: boolean;
1023
+ regionSize?: WorkbenchRegionSize;
1024
+ regionCollapsible?: boolean;
841
1025
  config?: unknown;
842
1026
  priority?: number;
843
1027
  }
@@ -875,9 +1059,9 @@ declare interface PreferenceScopeRef {
875
1059
 
876
1060
  declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
877
1061
 
878
- export declare const refreshOpenWorkbenchExtensionWebviews: (workbench: WorkbenchModuleContributionContext, metadata: WorkbenchExtensionMetadata) => void;
1062
+ export declare const refreshOpenWorkbenchExtensionWebviews: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata) => void;
879
1063
 
880
- export declare const refreshWorkbenchExtensionContributions: (workbench: WorkbenchModuleContributionContext, metadata: WorkbenchExtensionMetadata, commandId: string) => void;
1064
+ export declare const refreshWorkbenchExtensionContributions: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata, commandId: string) => void;
881
1065
 
882
1066
  declare interface RegisteredCommand extends RegisteredContributionMetadata {
883
1067
  command: Command;
@@ -890,21 +1074,18 @@ declare interface RegisteredContributionMetadata {
890
1074
  priority: number;
891
1075
  }
892
1076
 
893
- declare interface RegisteredContributionMetadata_2 {
894
- source: ContributionSource_2;
895
- ownerId: string;
896
- priority: number;
897
- }
898
-
899
1077
  declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
900
1078
  }
901
1079
 
902
- declare interface RegisteredDataRendererContribution<TRow extends DataRendererRow = DataRendererRow> extends DataRendererContribution<TRow>, RegisteredContributionMetadata {
1080
+ declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
903
1081
  }
904
1082
 
905
1083
  declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
906
1084
  }
907
1085
 
1086
+ declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1087
+ }
1088
+
908
1089
  declare interface RegisteredKeepAliveHost {
909
1090
  rendererId: string;
910
1091
  host: HTMLElement;
@@ -940,8 +1121,10 @@ declare interface RegisteredTreeRendererContribution extends TreeRendererContrib
940
1121
  }
941
1122
 
942
1123
  declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1124
+ ownedPanelMenuIds?: readonly string[];
943
1125
  singleton: boolean;
944
1126
  reuse: WidgetReusePolicy;
1127
+ role: WorkbenchWidgetRole;
945
1128
  } & RegisteredContributionMetadata;
946
1129
 
947
1130
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -955,17 +1138,6 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
955
1138
  metadata?: Record<string, unknown>;
956
1139
  }
957
1140
 
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
1141
  export declare const registerWorkbenchExtensionCommandPaletteResources: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionCommandPaletteResourceRecord[]) => {
970
1142
  dispose(): void;
971
1143
  };
@@ -990,14 +1162,12 @@ export declare interface RegisterWorkbenchExtensionContributionsInput {
990
1162
  settingsSectionId?: string;
991
1163
  settingsSectionTitle?: string;
992
1164
  webviewFiles?: ExtensionWebviewFileCapabilities;
993
- workbench: WorkbenchModuleContributionContext;
1165
+ workbench: WorkbenchModuleContext;
994
1166
  }
995
1167
 
996
- 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;
997
1169
 
998
- export declare const registerWorkbenchExtensionDataRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionDataRendererRecord[], adapter?: WorkbenchExtensionDataRendererAdapter) => {
999
- dispose(): void;
1000
- };
1170
+ export declare const registerWorkbenchExtensionDataTableRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionDataTableRendererRecord[], panels: DataTableViewRecord[]) => Disposable_2;
1001
1171
 
1002
1172
  export declare const registerWorkbenchExtensionFileRenderers: (input: RegisterWorkbenchExtensionFileRenderersInput) => {
1003
1173
  dispose(): void;
@@ -1007,7 +1177,18 @@ export declare interface RegisterWorkbenchExtensionFileRenderersInput {
1007
1177
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1008
1178
  metadata: WorkbenchExtensionMetadata;
1009
1179
  projectId: string;
1010
- 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;
1011
1192
  }
1012
1193
 
1013
1194
  export declare const registerWorkbenchExtensionTreeRenderers: (input: RegisterWorkbenchExtensionTreeRenderersInput) => {
@@ -1020,7 +1201,7 @@ export declare interface RegisterWorkbenchExtensionTreeRenderersInput {
1020
1201
  getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;
1021
1202
  metadata: WorkbenchExtensionMetadata;
1022
1203
  projectId: string;
1023
- workbench: WorkbenchModuleContributionContext;
1204
+ workbench: WorkbenchModuleContext;
1024
1205
  }
1025
1206
 
1026
1207
  export declare const renderBridgeWebviewFrame: (input: {
@@ -1033,7 +1214,9 @@ export declare const renderBridgeWebviewFrame: (input: {
1033
1214
  webview: BridgeWebviewConfig;
1034
1215
  }) => JSX.Element;
1035
1216
 
1036
- declare type ResolvedResourceOpener = Required<ResourceOpener>;
1217
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1218
+
1219
+ declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
1037
1220
 
1038
1221
  declare interface ResourceBrowseEntry {
1039
1222
  resource: ResourceRef;
@@ -1055,6 +1238,13 @@ declare interface ResourceContextAction {
1055
1238
  separatorBefore?: boolean;
1056
1239
  }
1057
1240
 
1241
+ declare interface ResourceHierarchyProvider {
1242
+ id: string;
1243
+ priority?: number;
1244
+ canResolve(resource: ResourceRef): boolean;
1245
+ getParent(resource: ResourceRef): ResourceRef | undefined;
1246
+ }
1247
+
1058
1248
  declare interface ResourceKindContribution {
1059
1249
  kind: string;
1060
1250
  label: string;
@@ -1075,11 +1265,11 @@ declare interface ResourceNavigator<TResult = unknown> {
1075
1265
  navigate(resource: ResourceRef): TResult | Promise<TResult>;
1076
1266
  }
1077
1267
 
1078
- declare interface ResourceOpener<TResult = unknown> {
1268
+ declare interface ResourcePresenter {
1079
1269
  id: string;
1080
1270
  priority?: number;
1081
1271
  canOpen(resource: ResourceRef): boolean;
1082
- open(resource: ResourceRef, input: OpenResourceInput): TResult | Promise<TResult>;
1272
+ open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1083
1273
  }
1084
1274
 
1085
1275
  declare interface ResourceProvider {
@@ -1112,24 +1302,29 @@ declare interface ResourceRegistry {
1112
1302
  getKind(kind: string): RegisteredResourceKind | undefined;
1113
1303
  getSurface(resource: ResourceRef): ResourceSurface | undefined;
1114
1304
  listKinds(): RegisteredResourceKind[];
1115
- registerOpener(opener: ResourceOpener): Disposable_2;
1116
- listOpeners(): ResolvedResourceOpener[];
1305
+ registerPresenter(presenter: ResourcePresenter): Disposable_2;
1306
+ listPresenters(): ResolvedResourcePresenter[];
1117
1307
  registerProvider(provider: ResourceProvider): Disposable_2;
1118
1308
  listProviders(): ResourceProvider[];
1119
1309
  listResources(query: string): readonly ResourceBrowseEntry[];
1120
- 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>;
1121
1315
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1122
1316
  }
1123
1317
 
1124
1318
  declare interface ResourceRegistryStoreState {
1125
1319
  kinds: Record<string, RegisteredResourceKind>;
1126
- openers: Record<string, ResolvedResourceOpener>;
1320
+ presenters: Record<string, ResolvedResourcePresenter>;
1127
1321
  providers: Record<string, ResourceProvider>;
1322
+ hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1128
1323
  }
1129
1324
 
1130
1325
  declare type ResourceSurface = "primary" | "secondary" | "attached";
1131
1326
 
1132
- declare type RowAction = NonNullable<WorkbenchExtensionDataRendererRecord["rowActions"]>[number];
1327
+ declare type RowAction = NonNullable<WorkbenchExtensionKanbanRendererRecord["rowActions"]>[number];
1133
1328
 
1134
1329
  /** Auto-rendered as a param editor from the registered preference schema. */
1135
1330
  declare interface SchemaSettingsPanel extends SettingsPanelBase {
@@ -1197,7 +1392,7 @@ declare interface SettingsRegistryStoreState {
1197
1392
  /** Settings are stored either per-user (global) or per-project. Projectless surfaces show only global entries. */
1198
1393
  declare type SettingsScope = "global" | "project";
1199
1394
 
1200
- /** An ordered sidebar container. Headerless when `title` is omitted. */
1395
+ /** An ordered sidenav container. Headerless when `title` is omitted. */
1201
1396
  declare interface SettingsSectionContribution {
1202
1397
  id: string;
1203
1398
  title?: string;
@@ -1206,6 +1401,8 @@ declare interface SettingsSectionContribution {
1206
1401
  actions?: SettingsAction[];
1207
1402
  }
1208
1403
 
1404
+ export declare const shouldRefreshWorkbenchExtensionDataTableRenderers: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1405
+
1209
1406
  export declare const shouldRefreshWorkbenchExtensionTrees: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1210
1407
 
1211
1408
  declare type SortDirection = "asc" | "desc";
@@ -1281,6 +1478,8 @@ declare interface TreeNode {
1281
1478
  hiddenByDefault?: boolean;
1282
1479
  /** When true, the node (e.g. a header/footer row) opts in to the tree's hide/show customization menu. */
1283
1480
  canHide?: boolean;
1481
+ /** When false, the node stays fixed within its Sidenav group. */
1482
+ canReorder?: boolean;
1284
1483
  }
1285
1484
 
1286
1485
  declare type TreeNodeRowVariant = "empty-state";
@@ -1298,7 +1497,7 @@ declare interface TreeRendererContribution {
1298
1497
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1299
1498
  }
1300
1499
 
1301
- declare type TreeRendererImplementation = (input: WorkbenchWidgetRenderInput & {
1500
+ declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1302
1501
  treeId: string;
1303
1502
  }) => unknown;
1304
1503
 
@@ -1356,11 +1555,13 @@ declare interface TreeViewSection {
1356
1555
  hiddenByDefault?: boolean;
1357
1556
  /** When true, the section (category) opts in to the tree's hide/show customization menu. */
1358
1557
  canHide?: boolean;
1558
+ /** When false, the section stays fixed within the Sidenav main region. */
1559
+ canReorder?: boolean;
1359
1560
  }
1360
1561
 
1361
1562
  /**
1362
- * Core-owned contracts for data renderer contributions. @pstdio/ui's
1363
- * 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
1364
1565
  * two, so drift surfaces as a compile error there instead of coupling core's
1365
1566
  * API shape to UI package ownership.
1366
1567
  */
@@ -1369,44 +1570,35 @@ declare type ViewMode = "board" | "list";
1369
1570
  declare interface WidgetContribution {
1370
1571
  id: string;
1371
1572
  title: string;
1372
- area: WorkbenchArea;
1373
- fallbackArea?: WorkbenchArea;
1573
+ icon?: string;
1574
+ region: WorkbenchRegion;
1575
+ fallbackRegion?: WorkbenchRegion;
1374
1576
  singleton?: boolean;
1375
1577
  reuse?: WidgetReusePolicy;
1376
1578
  mountStrategy?: WidgetMountStrategy;
1377
1579
  closable?: boolean;
1378
1580
  hiddenByDefault?: boolean;
1379
- areaSize?: WorkbenchAreaSize;
1380
- areaCollapsible?: boolean;
1581
+ regionSize?: WorkbenchRegionSize;
1582
+ regionCollapsible?: boolean;
1381
1583
  headerBorderBottom?: boolean;
1584
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1382
1585
  resourceKinds?: string[];
1383
1586
  priority?: number;
1384
1587
  rendererId: string;
1588
+ openCommandId?: string;
1589
+ role?: WorkbenchWidgetRole;
1590
+ eligibleLocations?: WorkbenchLocationEligibility;
1591
+ panelMenuOwner?: WorkbenchPanelMenuOwner;
1592
+ tab?: WorkbenchWidgetTab;
1385
1593
  config?: unknown;
1386
1594
  canOpen?(resource: ResourceRef): boolean;
1387
1595
  }
1388
1596
 
1389
1597
  declare type WidgetMountStrategy = "active" | "keep-mounted";
1390
1598
 
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
- }
1599
+ declare type WidgetMountStrategy_2 = "active" | "keep-mounted";
1402
1600
 
1403
- declare interface WorkbenchAreaState {
1404
- id: WorkbenchArea;
1405
- visible: boolean;
1406
- size?: number;
1407
- widgets: WorkbenchWidgetPlacement[];
1408
- activeWidgetId?: string;
1409
- }
1601
+ declare type WidgetReusePolicy = "resource" | "none";
1410
1602
 
1411
1603
  declare type WorkbenchBreadcrumbChangeListener = () => void;
1412
1604
 
@@ -1421,6 +1613,7 @@ declare interface WorkbenchBreadcrumbController {
1421
1613
  declare interface WorkbenchBreadcrumbItem {
1422
1614
  title: unknown;
1423
1615
  icon?: string;
1616
+ indicator?: "session-status";
1424
1617
  url?: string;
1425
1618
  onClick?: () => void;
1426
1619
  resource?: ResourceRef;
@@ -1430,8 +1623,16 @@ declare interface WorkbenchBreadcrumbState {
1430
1623
  items: WorkbenchBreadcrumbItem[] | undefined;
1431
1624
  }
1432
1625
 
1626
+ declare interface WorkbenchClosedSubPanel {
1627
+ region: WorkbenchPanelRegion;
1628
+ reference: WorkbenchSubPanelRef;
1629
+ resource?: ResourceRef;
1630
+ title?: string;
1631
+ }
1632
+
1433
1633
  declare interface WorkbenchCommandExecutionContext {
1434
1634
  resource?: ResourceRef;
1635
+ source?: "panel-add";
1435
1636
  }
1436
1637
 
1437
1638
  declare interface WorkbenchCommandExecutionError {
@@ -1486,6 +1687,7 @@ declare interface WorkbenchCommandParamsRequest {
1486
1687
  }
1487
1688
 
1488
1689
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1690
+ host: WorkbenchHost;
1489
1691
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1490
1692
  unregisterModule(moduleId: string): void;
1491
1693
  }
@@ -1509,7 +1711,8 @@ declare interface WorkbenchCoreContributionContext {
1509
1711
  renderers: WorkbenchRenderers;
1510
1712
  resources: ResourceRegistry;
1511
1713
  settings: SettingsRegistry;
1512
- sessionPanel: WorkbenchSessionPanelController;
1714
+ shell: WorkbenchShellController;
1715
+ sidePanel: WorkbenchSidePanelController;
1513
1716
  terminal: WorkbenchTerminalController;
1514
1717
  themes: ThemeRegistry;
1515
1718
  fileIconThemes: FileIconThemeRegistry;
@@ -1522,7 +1725,7 @@ declare interface WorkbenchCoreContributionContext {
1522
1725
  export declare interface WorkbenchExtensionCommandContext {
1523
1726
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1524
1727
  projectId: string;
1525
- workbench: WorkbenchModuleContributionContext;
1728
+ workbench: WorkbenchModuleContext;
1526
1729
  }
1527
1730
 
1528
1731
  export declare interface WorkbenchExtensionCommandPaletteRegistration {
@@ -1537,67 +1740,58 @@ export declare interface WorkbenchExtensionControlsAdapter {
1537
1740
  resolveResource?: (record: WorkbenchExtensionControlsRendererRecord) => ResourceRef | undefined;
1538
1741
  }
1539
1742
 
1540
- export declare interface WorkbenchExtensionDataRendererAdapter {
1743
+ export declare interface WorkbenchExtensionKanbanRendererAdapter {
1541
1744
  /** Override label resolution. Defaults to workbench's `text(value, fallback)`. */
1542
1745
  resolveLabel?: Localizer;
1543
1746
  /** Post-process an attribute descriptor (after localization). Defaults to identity. */
1544
- decorateAttribute?: (record: WorkbenchExtensionDataRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor;
1747
+ decorateAttribute?: (record: WorkbenchExtensionKanbanRendererRecord, attribute: AttributeDescriptor) => AttributeDescriptor;
1545
1748
  /**
1546
1749
  * Translate a row's transport-shaped resource (`{ type, id }`) into a workbench
1547
1750
  * `ResourceRef`. Defaults to the workbench `pstdio://extension-resource/...`
1548
1751
  * scheme — dashboard supplies its own. Returns `undefined` for rows that do not
1549
1752
  * carry an explicit resource.
1550
1753
  */
1551
- resolveRowResource?: (record: WorkbenchExtensionDataRendererRecord, row: DataRendererRow_2) => ResourceRef | undefined;
1754
+ resolveRowResource?: (record: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow_2) => ResourceRef | undefined;
1552
1755
  /**
1553
1756
  * Synthesize a `ResourceRef` for row-action execution context when the row does
1554
1757
  * not carry an explicit resource. Defaults to a `pstdio://extension-resource/`
1555
1758
  * fallback built from `record.resourceKind` and `row.id`.
1556
1759
  */
1557
- resolveRowActionResource?: (record: WorkbenchExtensionDataRendererRecord, row: DataRendererRow_2) => ResourceRef | undefined;
1760
+ resolveRowActionResource?: (record: WorkbenchExtensionKanbanRendererRecord, row: KanbanRendererRow_2) => ResourceRef | undefined;
1558
1761
  /**
1559
1762
  * Override the row-action runner. `runDefault` performs the workbench's standard
1560
1763
  * flow (look up the row-action command, request params if needed, execute it).
1561
1764
  */
1562
1765
  executeRowAction?: (input: {
1563
- record: WorkbenchExtensionDataRendererRecord;
1766
+ record: WorkbenchExtensionKanbanRendererRecord;
1564
1767
  action: RowAction;
1565
- row: DataRendererRow_2;
1768
+ row: KanbanRendererRow_2;
1566
1769
  resource: ResourceRef | undefined;
1567
1770
  runDefault: () => Promise<void>;
1568
1771
  }) => void | Promise<void>;
1569
1772
  /**
1570
- * 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
1571
1774
  * 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).
1775
+ * intercept the click (e.g. swallow rejections when no presenter exists yet).
1573
1776
  */
1574
1777
  onRowClick?: (input: {
1575
- record: WorkbenchExtensionDataRendererRecord;
1576
- row: DataRendererRow_2;
1778
+ record: WorkbenchExtensionKanbanRendererRecord;
1779
+ row: KanbanRendererRow_2;
1577
1780
  resource: ResourceRef | undefined;
1578
1781
  }) => 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). */
1782
+ /** Called after a successful renderer-owned create form submission. */
1590
1783
  onAfterCreate?: (input: {
1591
- record: WorkbenchExtensionDataRendererRecord;
1784
+ record: WorkbenchExtensionKanbanRendererRecord;
1592
1785
  created: unknown;
1593
- }) => void;
1786
+ submission: KanbanRendererCreateSubmission;
1787
+ }) => void | Promise<void>;
1594
1788
  /**
1595
1789
  * Called after any mutation (attribute change, reorder, column action, default
1596
1790
  * create) resolves successfully. Hosts that drive refresh via the outer command
1597
1791
  * pipeline (testbench / workbench) leave this unset; dashboard supplies
1598
- * `ctx.renderers.refreshDataRenderer(id)`.
1792
+ * `ctx.renderers.refreshKanbanRenderer(id)`.
1599
1793
  */
1600
- onAfterMutation?: (record: WorkbenchExtensionDataRendererRecord) => void;
1794
+ onAfterMutation?: (record: WorkbenchExtensionKanbanRendererRecord) => void;
1601
1795
  }
1602
1796
 
1603
1797
  export declare interface WorkbenchExtensionMenuRegistration {
@@ -1630,22 +1824,33 @@ declare interface WorkbenchFileIconThemeStoreState {
1630
1824
  themes: readonly FileIconThemePreferenceOption[];
1631
1825
  }
1632
1826
 
1633
- declare type WorkbenchFocusArea = (typeof workbenchFocusAreas)[number];
1827
+ declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1634
1828
 
1635
- declare const workbenchFocusAreas: readonly ["activityBar", "sideBar", "main", "panel", "statusBar"];
1636
-
1637
- declare type WorkbenchFocusChangeListener = (area: WorkbenchFocusArea | undefined) => void;
1829
+ declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1638
1830
 
1639
1831
  declare interface WorkbenchFocusController {
1640
1832
  store: WorkbenchStore<WorkbenchFocusState>;
1641
- setActiveArea(area: WorkbenchFocusArea): void;
1833
+ setActiveRegion(region: WorkbenchFocusRegionId): void;
1642
1834
  clearFocus(): void;
1643
- getActiveArea(): WorkbenchFocusArea | undefined;
1835
+ getActiveRegion(): WorkbenchFocusRegionId | undefined;
1644
1836
  onDidChange(listener: WorkbenchFocusChangeListener): Disposable_2;
1645
1837
  }
1646
1838
 
1839
+ declare type WorkbenchFocusRegionId = (typeof workbenchFocusRegions)[number];
1840
+
1841
+ declare const workbenchFocusRegions: readonly ["activity", "sidenav", "main", "secondary", "side", "status"];
1842
+
1647
1843
  declare interface WorkbenchFocusState {
1648
- 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;
1649
1854
  }
1650
1855
 
1651
1856
  declare interface WorkbenchLastResourceController {
@@ -1655,8 +1860,10 @@ declare interface WorkbenchLastResourceController {
1655
1860
  }
1656
1861
 
1657
1862
  declare interface WorkbenchLayout {
1658
- areas: Record<WorkbenchArea, WorkbenchAreaState>;
1863
+ regions: Record<WorkbenchRegion, WorkbenchRegionState>;
1864
+ locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1659
1865
  activeWidgetId?: string;
1866
+ activeLocationWidgetId?: string;
1660
1867
  activeResourceUri?: string;
1661
1868
  }
1662
1869
 
@@ -1665,7 +1872,25 @@ declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1665
1872
  declare interface WorkbenchLayoutStoreState {
1666
1873
  layout: WorkbenchLayout;
1667
1874
  widgets: Record<string, RegisteredWidgetContribution>;
1668
- 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;
1669
1894
  }
1670
1895
 
1671
1896
  declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
@@ -1677,16 +1902,24 @@ declare type WorkbenchModeChangeListener = () => void;
1677
1902
  declare interface WorkbenchModeContribution {
1678
1903
  id: string;
1679
1904
  label?: string;
1905
+ panels?: readonly WorkbenchPanelRegion[];
1680
1906
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1907
+ seed?(ctx: WorkbenchModeActivationContext): void;
1908
+ enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1681
1909
  }
1682
1910
 
1683
1911
  declare interface WorkbenchModeRegistry {
1684
1912
  store: WorkbenchStore<WorkbenchModeStoreState>;
1913
+ dispose(): void;
1685
1914
  registerMode(mode: WorkbenchModeContribution): Disposable_2;
1686
1915
  getMode(id: string): WorkbenchModeContribution | undefined;
1687
1916
  listModes(): WorkbenchModeContribution[];
1688
1917
  getActiveModeId(): string | undefined;
1689
- setActiveMode(id: string | undefined): void;
1918
+ isTransitioning(): boolean;
1919
+ setActiveMode(id: string | undefined, input?: {
1920
+ deferSeed?: boolean;
1921
+ }): void;
1922
+ seedActiveMode(): void;
1690
1923
  onDidChangeActive(listener: WorkbenchModeChangeListener): Disposable_2;
1691
1924
  }
1692
1925
 
@@ -1697,6 +1930,8 @@ declare interface WorkbenchModeStoreState {
1697
1930
 
1698
1931
  declare type WorkbenchModuleActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1699
1932
 
1933
+ declare type WorkbenchModuleContext = WorkbenchCoreContributionContext;
1934
+
1700
1935
  declare interface WorkbenchModuleContribution {
1701
1936
  id: string;
1702
1937
  source?: ContributionSource;
@@ -1704,7 +1939,21 @@ declare interface WorkbenchModuleContribution {
1704
1939
  activate(ctx: WorkbenchModuleContributionContext): WorkbenchModuleActivationResult;
1705
1940
  }
1706
1941
 
1707
- 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
+ }
1708
1957
 
1709
1958
  declare interface WorkbenchNotification {
1710
1959
  id?: string;
@@ -1723,12 +1972,6 @@ declare interface WorkbenchNotificationAction {
1723
1972
  args?: unknown;
1724
1973
  }
1725
1974
 
1726
- declare interface WorkbenchNotificationAction_2 {
1727
- commandId: string;
1728
- title: string;
1729
- args?: unknown;
1730
- }
1731
-
1732
1975
  declare type WorkbenchNotificationEvent = {
1733
1976
  type: "show";
1734
1977
  id: string;
@@ -1740,26 +1983,193 @@ declare type WorkbenchNotificationEvent = {
1740
1983
 
1741
1984
  declare type WorkbenchNotificationLevel = "info" | "success" | "warning" | "error";
1742
1985
 
1743
- declare type WorkbenchNotificationLevel_2 = "info" | "success" | "warning" | "error";
1744
-
1745
1986
  declare type WorkbenchNotificationListener = (event: WorkbenchNotificationEvent) => void;
1746
1987
 
1747
1988
  declare interface WorkbenchNotificationStoreState {
1748
1989
  notifications: Record<string, RegisteredWorkbenchNotification>;
1749
1990
  }
1750
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
+
1751
2137
  declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1752
2138
 
1753
2139
  declare interface WorkbenchPanelsController {
1754
2140
  store: WorkbenchStore<WorkbenchPanelsState>;
1755
- isOpen(areaId: string): boolean;
1756
- setOpen(areaId: string, open: boolean): void;
1757
- 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;
1758
2146
  onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
1759
2147
  }
1760
2148
 
1761
2149
  declare interface WorkbenchPanelsState {
1762
- 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;
1763
2173
  }
1764
2174
 
1765
2175
  declare type WorkbenchRendererChangeListener = () => void;
@@ -1767,7 +2177,7 @@ declare type WorkbenchRendererChangeListener = () => void;
1767
2177
  declare type WorkbenchRendererRegistration = {
1768
2178
  id: string;
1769
2179
  keepAlive?: false;
1770
- render: (input: WorkbenchWidgetRenderInput) => unknown;
2180
+ render: (input: WorkbenchPanelRenderInput) => unknown;
1771
2181
  } | {
1772
2182
  id: string;
1773
2183
  keepAlive: true;
@@ -1780,32 +2190,54 @@ declare interface WorkbenchRendererRegistry {
1780
2190
  getRenderer(id: string): WorkbenchRendererRegistration | undefined;
1781
2191
  listRenderers(): WorkbenchRendererRegistration[];
1782
2192
  onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
1783
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchWidgetRenderInput): Disposable_2;
2193
+ claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
1784
2194
  getHost(rendererId: string): HTMLElement | undefined;
1785
- getClaim(rendererId: string): WorkbenchWidgetRenderInput | undefined;
2195
+ getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
1786
2196
  }
1787
2197
 
1788
- declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & DataRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
2198
+ declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1789
2199
 
1790
2200
  declare interface WorkbenchRendererStoreState {
1791
2201
  renderers: Record<string, WorkbenchRendererRegistration>;
1792
2202
  hosts: Record<string, RegisteredKeepAliveHost>;
1793
- 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;
1794
2213
  }
1795
2214
 
1796
- declare type WorkbenchSessionPanelChangeListener = (mode: WorkbenchSessionPanelMode) => void;
2215
+ declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
1797
2216
 
1798
- declare interface WorkbenchSessionPanelController {
1799
- store: WorkbenchStore<WorkbenchSessionPanelState>;
1800
- getMode(): WorkbenchSessionPanelMode;
1801
- setMode(mode: WorkbenchSessionPanelMode): void;
1802
- 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;
1803
2229
  }
1804
2230
 
1805
- declare type WorkbenchSessionPanelMode = "bubble" | "closed" | "attached";
2231
+ declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2232
+
2233
+ declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
1806
2234
 
1807
- declare interface WorkbenchSessionPanelState {
1808
- mode: WorkbenchSessionPanelMode;
2235
+ declare interface WorkbenchSidePanelState {
2236
+ mode: WorkbenchSidePanelMode;
2237
+ }
2238
+
2239
+ declare interface WorkbenchSnapshot {
2240
+ layout: WorkbenchLayout;
1809
2241
  }
1810
2242
 
1811
2243
  declare interface WorkbenchStore<TState> {
@@ -1824,6 +2256,27 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
1824
2256
 
1825
2257
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
1826
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
+
1827
2280
  declare interface WorkbenchTerminalController {
1828
2281
  store: WorkbenchStore<WorkbenchTerminalState>;
1829
2282
  /** True once the host injected a session opener. */
@@ -1917,18 +2370,29 @@ declare interface WorkbenchWidgetPlacement {
1917
2370
  source?: ContributionSource;
1918
2371
  resource?: ResourceRef;
1919
2372
  resourceUri?: string;
2373
+ ownerResourceUri?: string;
1920
2374
  title?: string;
1921
2375
  pinned?: boolean;
1922
2376
  closable?: boolean;
1923
2377
  mountStrategy?: WidgetMountStrategy;
1924
2378
  hiddenByDefault?: boolean;
2379
+ tabRetention?: WorkbenchTabRetention;
2380
+ tab?: WorkbenchWidgetTab;
2381
+ role?: WorkbenchWidgetRole;
1925
2382
  }
1926
2383
 
1927
- declare interface WorkbenchWidgetRenderInput {
1928
- workbench: WorkbenchCore;
1929
- widget: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
1930
- placement: WorkbenchWidgetPlacement;
1931
- 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;
1932
2396
  }
1933
2397
 
1934
2398
  export { }