@pstdio/workbench 0.7.1 → 0.9.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 (44) hide show
  1. package/README.md +39 -317
  2. package/dist/extensions.d.ts +1492 -698
  3. package/dist/extensions.js +1679 -1776
  4. package/dist/extensions.js.map +1 -1
  5. package/dist/file-renderer-view-kfJRY3yR.js +515 -0
  6. package/dist/file-renderer-view-kfJRY3yR.js.map +1 -0
  7. package/dist/index.d.ts +724 -599
  8. package/dist/index.js +5151 -2369
  9. package/dist/index.js.map +1 -1
  10. package/dist/react.d.ts +673 -550
  11. package/dist/react.js +3585 -3335
  12. package/dist/react.js.map +1 -1
  13. package/dist/storage.d.ts +120 -155
  14. package/dist/storage.js +135 -149
  15. package/dist/storage.js.map +1 -1
  16. package/dist/webview-runtime.d.ts +2 -5
  17. package/dist/webview-runtime.js +3 -3
  18. package/dist/webview-runtime.js.map +1 -1
  19. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  20. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  21. package/dist/workbench-renderers-DmsrBGC7.js +960 -0
  22. package/dist/workbench-renderers-DmsrBGC7.js.map +1 -0
  23. package/dist/workspaces-DJwFj8uq.js +1872 -0
  24. package/dist/workspaces-DJwFj8uq.js.map +1 -0
  25. package/package.json +6 -41
  26. package/dist/composition-resolver-types-CWykPyEK.js +0 -241
  27. package/dist/composition-resolver-types-CWykPyEK.js.map +0 -1
  28. package/dist/file-renderer-view-B6_iR4EN.js +0 -496
  29. package/dist/file-renderer-view-B6_iR4EN.js.map +0 -1
  30. package/dist/file-section-navigation-CfYqVObc.js +0 -30
  31. package/dist/file-section-navigation-CfYqVObc.js.map +0 -1
  32. package/dist/icon-B9XolQG8.js +0 -35
  33. package/dist/icon-B9XolQG8.js.map +0 -1
  34. package/dist/layout-types-DMoZz38-.js +0 -100
  35. package/dist/layout-types-DMoZz38-.js.map +0 -1
  36. package/dist/surface-map-C1pOTUmF.js +0 -52
  37. package/dist/surface-map-C1pOTUmF.js.map +0 -1
  38. package/dist/testing.d.ts +0 -2284
  39. package/dist/testing.js +0 -58
  40. package/dist/testing.js.map +0 -1
  41. package/dist/workbench-built-ins-BncLJfQA.js +0 -1175
  42. package/dist/workbench-built-ins-BncLJfQA.js.map +0 -1
  43. package/dist/workbench-menu-paths-Bb0ICxeG.js +0 -20
  44. package/dist/workbench-menu-paths-Bb0ICxeG.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,9 +1,28 @@
1
- import { ComponentType } from 'react';
2
- import { ReactNode } from 'react';
1
+ import { ControlsQueryResult } from '@pstdio/sdk/extensions';
2
+ import { ControlValue } from '@pstdio/sdk/extensions';
3
+ import { ControlValueMap } from '@pstdio/sdk/extensions';
4
+ import { DockedWorkbenchRegion } from '@pstdio/sdk/extensions';
5
+ import { dockedWorkbenchRegions } from '@pstdio/sdk/extensions';
6
+ import { FileRendererSectionTarget } from '@pstdio/sdk/extensions';
7
+ import { KanbanRendererAttributeDisplay } from '@pstdio/sdk/extensions';
8
+ import { Localizable } from '@pstdio/sdk/extensions';
9
+ import { ModeRegionSettings } from '@pstdio/sdk/extensions';
10
+ import { NavigationTargetPage as NavigationTargetPage_2 } from '@pstdio/sdk/extensions';
11
+ import { NavigationTargetPanel as NavigationTargetPanel_2 } from '@pstdio/sdk/extensions';
12
+ import { PageLocation } from '@pstdio/sdk/extensions';
13
+ import { PageMain } from '@pstdio/sdk/extensions';
14
+ import { PageOpenIntent } from '@pstdio/sdk/extensions';
15
+ import { PageRef } from '@pstdio/sdk/extensions';
16
+ import { PageSlot } from '@pstdio/sdk/extensions';
17
+ import { PlacementIdentity } from '@pstdio/sdk/extensions';
18
+ import { PlacementItem } from '@pstdio/sdk/extensions';
19
+ import { PlacementRef } from '@pstdio/sdk/extensions';
20
+ import { ResourceConstraint } from '@pstdio/sdk/extensions';
21
+ import { ResourceRef } from '@pstdio/sdk/extensions';
3
22
 
4
23
  export declare type AnchorId = "primary" | "secondary" | "attached";
5
24
 
6
- export declare interface AttributeDescriptor {
25
+ export declare interface AttributeDescriptor<TNode = unknown> {
7
26
  id: string;
8
27
  label: string;
9
28
  type: AttributeType;
@@ -13,14 +32,11 @@ export declare interface AttributeDescriptor {
13
32
  displayable?: boolean;
14
33
  editable?: boolean;
15
34
  display?: AttributeDisplayDescriptor;
16
- render?: (value: unknown, row: KanbanRendererRow) => ReactNode;
35
+ render?: (value: unknown, row: KanbanRendererRow) => TNode;
17
36
  compare?: (a: unknown, b: unknown) => number;
18
37
  }
19
38
 
20
- export declare type AttributeDisplayDescriptor = {
21
- kind: "workspace-badge";
22
- itemsAttributeId: string;
23
- };
39
+ export declare type AttributeDisplayDescriptor = KanbanRendererAttributeDisplay;
24
40
 
25
41
  export declare type AttributeKind = AttributeType["kind"];
26
42
 
@@ -28,9 +44,9 @@ export declare type AttributeKind = AttributeType["kind"];
28
44
  * Reactive source for an entire attribute schema. Lets a contribution
29
45
  * add/remove/edit attributes at runtime without re-registering.
30
46
  */
31
- declare interface AttributesSource {
47
+ declare interface AttributesSource<TNode = unknown> {
32
48
  subscribe: (listener: () => void) => () => void;
33
- getSnapshot: () => AttributeDescriptor[];
49
+ getSnapshot: () => AttributeDescriptor<TNode>[];
34
50
  }
35
51
 
36
52
  export declare type AttributeType = {
@@ -49,22 +65,20 @@ export declare type AttributeType = {
49
65
  kind: "user";
50
66
  };
51
67
 
52
- export declare interface BoardColumnAction {
68
+ export declare interface BoardColumnAction<TIcon = unknown> {
53
69
  id: string;
54
70
  label: string;
55
- icon: ComponentType<{
56
- size?: number | string;
57
- }>;
71
+ icon: TIcon;
58
72
  }
59
73
 
60
74
  /** Board-column behavior and menu configuration for a resolved column group. */
61
- export declare interface BoardColumnConfig {
75
+ export declare interface BoardColumnConfig<TIcon = unknown> {
62
76
  /** Color palette token used for the column header and group badges. */
63
77
  color?: string;
64
78
  canDragIn?: boolean;
65
79
  canDragOut?: boolean;
66
80
  canCreate?: boolean;
67
- actions?: BoardColumnAction[];
81
+ actions?: BoardColumnAction<TIcon>[];
68
82
  }
69
83
 
70
84
  /**
@@ -73,12 +87,12 @@ export declare interface BoardColumnConfig {
73
87
  */
74
88
  export declare interface CollectionSettingsPanel<TItem = unknown> extends SettingsPanelBase {
75
89
  kind: "collection";
90
+ viewId: string;
76
91
  items(): TItem[] | Promise<TItem[]>;
77
92
  itemId(item: TItem): string;
78
93
  itemLabel(item: TItem): string;
79
94
  itemIcon?(item: TItem): string | undefined;
80
95
  groupBy?: SettingsCollectionGroupBy<TItem>;
81
- renderItem(item: TItem, input: WorkbenchPanelRenderInput): unknown;
82
96
  actions?: SettingsAction[];
83
97
  }
84
98
 
@@ -153,6 +167,7 @@ export declare interface CommandParamDescriptor {
153
167
  accept?: string;
154
168
  multiple?: boolean;
155
169
  metadata?: Record<string, unknown>;
170
+ resolvedFrom?: "resource";
156
171
  }
157
172
 
158
173
  export declare interface CommandParamOption {
@@ -180,70 +195,6 @@ declare interface CommandRegistryStoreState {
180
195
  commands: Record<string, RegisteredCommand>;
181
196
  }
182
197
 
183
- export declare interface CompositionDiagnostic {
184
- code: "extension_resource_kind_missing" | "extension_resource_slot_missing" | "extension_resource_slot_closed" | "extension_panel_missing" | "extension_panel_placement_unresolvable" | "extension_mode_resource_unsupported" | "extension_placement_required_invalid" | "extension_resource_primary_invalid";
185
- message: string;
186
- panelId?: string;
187
- slot?: string;
188
- }
189
-
190
- export declare interface CompositionModeDefinition {
191
- id: string;
192
- extensionId?: string;
193
- resources?: Record<string, CompositionModeRecipe>;
194
- modePanels?: Record<string, CompositionPlacementPolicy>;
195
- }
196
-
197
- export declare interface CompositionModeRecipe {
198
- slots?: Record<string, CompositionPlacementPolicy>;
199
- panels?: Record<string, CompositionPlacementPolicy>;
200
- }
201
-
202
- export declare interface CompositionPanelDefinition {
203
- id: string;
204
- extensionId: string;
205
- title: string;
206
- icon?: string;
207
- show?: CompositionPanelPlacement | readonly CompositionPanelPlacement[];
208
- }
209
-
210
- declare interface CompositionPanelPlacement extends CompositionPlacementPolicy {
211
- resourceKind?: string;
212
- }
213
-
214
- export declare interface CompositionPlacementPolicy {
215
- region: DockedCompositionRegion;
216
- allowedRegions?: readonly DockedCompositionRegion[];
217
- required?: boolean;
218
- defaultOpen?: boolean;
219
- pinned?: boolean;
220
- }
221
-
222
- declare interface CompositionResolutionContext {
223
- modeId: string;
224
- resourceKind?: string;
225
- }
226
-
227
- export declare interface CompositionResourceKindDefinition {
228
- id: string;
229
- extensionId: string;
230
- surface: "primary" | "secondary" | "attached";
231
- slots: Record<string, CompositionSlotDefinition>;
232
- }
233
-
234
- export declare interface CompositionResourcePanelEdge {
235
- id: string;
236
- extensionId: string;
237
- resourceKind: string;
238
- panel: string;
239
- slot: string;
240
- }
241
-
242
- export declare interface CompositionSlotDefinition {
243
- cardinality: "one" | "many";
244
- external: boolean;
245
- }
246
-
247
198
  export declare interface ContextKeyScope extends Disposable_2 {
248
199
  ownerId: string;
249
200
  set(key: string, value: ContextKeyValue): void;
@@ -277,16 +228,11 @@ export declare interface ContributionMetadata {
277
228
  export declare type ContributionSource = "module" | "extension";
278
229
 
279
230
  export declare interface ControlsApplyInput {
280
- values: Record<string, unknown>;
231
+ values: ControlValueMap;
281
232
  resource?: ResourceRef;
282
233
  }
283
234
 
284
- export declare interface ControlsQueryResult {
285
- params?: unknown[];
286
- groups?: unknown[];
287
- values?: Record<string, unknown>;
288
- readOnly?: boolean;
289
- }
235
+ export { ControlsQueryResult }
290
236
 
291
237
  export declare interface ControlsRendererContribution {
292
238
  id: string;
@@ -295,7 +241,7 @@ export declare interface ControlsRendererContribution {
295
241
  emptyTitle?: string;
296
242
  emptyDescription?: string;
297
243
  layout?: ControlsRendererLayout;
298
- defaultValues?: Record<string, unknown>;
244
+ defaultValues?: ControlValueMap;
299
245
  /** Load the control declarations + current values for the active resource. */
300
246
  executeQuery(resource?: ResourceRef): Promise<ControlsQueryResult> | ControlsQueryResult;
301
247
  /** Live-save a single control edit. Omit for explicit-apply or read-only panels. */
@@ -307,10 +253,6 @@ export declare interface ControlsRendererContribution {
307
253
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
308
254
  }
309
255
 
310
- export declare type ControlsRendererImplementation = (input: WorkbenchPanelRenderInput & {
311
- controlsRendererId: string;
312
- }) => unknown;
313
-
314
256
  export declare interface ControlsRendererLayout {
315
257
  region?: ControlsRendererRegion;
316
258
  defaultPx?: number;
@@ -318,28 +260,8 @@ export declare interface ControlsRendererLayout {
318
260
  maxPx?: number;
319
261
  }
320
262
 
321
- export declare interface ControlsRendererRefreshEvent {
322
- controlsRendererId: string;
323
- }
324
-
325
- declare type ControlsRendererRefreshListener = (event: ControlsRendererRefreshEvent) => void;
326
-
327
263
  declare type ControlsRendererRegion = "main-right-menu" | "secondary" | "overlay";
328
264
 
329
- export declare interface ControlsRendererRegistry {
330
- controlsStore: WorkbenchStore<ControlsRendererStoreState>;
331
- registerControlsRenderer(contribution: ControlsRendererContribution, metadata?: ContributionMetadata): Disposable_2;
332
- setControlsRendererImplementation(impl: ControlsRendererImplementation): void;
333
- getControlsRenderer(id: string): RegisteredControlsRendererContribution | undefined;
334
- listControlsRenderers(): RegisteredControlsRendererContribution[];
335
- refreshControlsRenderer(id: string): void;
336
- onDidRefreshControlsRenderer(listener: ControlsRendererRefreshListener): Disposable_2;
337
- }
338
-
339
- declare interface ControlsRendererStoreState {
340
- renderers: Record<string, RegisteredControlsRendererContribution>;
341
- }
342
-
343
265
  export declare interface ControlsResetInput {
344
266
  controlIds?: string[];
345
267
  resource?: ResourceRef;
@@ -347,48 +269,54 @@ export declare interface ControlsResetInput {
347
269
 
348
270
  export declare interface ControlsUpdateValueInput {
349
271
  controlId: string;
350
- value: unknown;
351
- values: Record<string, unknown>;
272
+ value: ControlValue;
273
+ values: ControlValueMap;
352
274
  resource?: ResourceRef;
353
275
  }
354
276
 
355
- export declare const createResourceBreadcrumbItems: (resources: ResourceRegistry, resource: ResourceRef | undefined) => WorkbenchBreadcrumbItem[];
277
+ export declare const createStatusBarRegistry: (input: CreateWorkbenchStatusBarRegistryInput) => WorkbenchStatusBarRegistry;
278
+
279
+ export declare const createStatusRegistry: () => WorkbenchStatusRegistry;
356
280
 
357
- export declare const createWorkbenchCore: (input?: CreateWorkbenchCoreInput) => WorkbenchCore;
281
+ export declare const createViewRegistry: (input: CreateWorkbenchViewRegistryInput) => WorkbenchViewRegistry;
358
282
 
359
- export declare interface CreateWorkbenchCoreInput {
283
+ export declare const createWorkbench: (input?: createWorkbenchInput) => WorkbenchCore;
284
+
285
+ export declare interface createWorkbenchInput {
360
286
  isInScope?: (resource: ResourceRef, primary: ResourceRef | undefined) => boolean;
361
287
  layoutPersistence?: LayoutPersistenceAdapter;
288
+ pageLocationBrowser?: WorkbenchPageLocationBrowser;
289
+ pageLocationPersistence?: WorkbenchPageLocationPersistence;
290
+ resolvePagePersistenceScope?(input: WorkbenchPagePersistenceScopeInput): WorkbenchPagePersistenceScope;
291
+ pageResources?: WorkbenchPageResourceCodec;
362
292
  persistence?: WorkbenchPersistenceAdapter;
363
- historyPersistence?: WorkbenchHistoryPersistence;
364
293
  preferencePersistence?: PreferencePersistenceAdapter;
365
294
  treePersistence?: TreeRendererPersistenceAdapter;
366
- panelsPersistence?: WorkbenchPanelsPersistenceAdapter;
295
+ panelMenuStatePersistence?: WorkbenchPanelMenuStatePersistenceAdapter;
367
296
  defaultPanelOpenByRegionId?: Partial<Record<WorkbenchRegion, boolean>>;
368
- lastResourcePersistence?: LastResourcePersistenceAdapter;
297
+ /** Host-level region layout policy. The active mode's regionSettings win over it. */
298
+ regionSettings?: Partial<Record<WorkbenchRegion, WorkbenchRegionSettings>>;
369
299
  sidePanelPersistence?: WorkbenchSidePanelPersistenceAdapter;
300
+ /** Default floating policy. The active mode may override it. */
301
+ floatingPanels?: "visible" | "hidden";
370
302
  initialSidePanelMode?: WorkbenchSidePanelMode;
371
- renderers?: CreateWorkbenchRendererRegistryInput;
372
- }
373
-
374
- declare interface CreateWorkbenchRendererRegistryInput {
375
- initialRenderers?: WorkbenchRendererRegistration[];
376
- createHost?: () => HTMLElement;
303
+ startPage?: PageRef;
377
304
  }
378
305
 
379
306
  export declare const createWorkbenchResourceContextValues: (resource: ResourceRef | undefined) => Record<string, ContextKeyValue>;
380
307
 
381
- export declare const createWorkbenchSelectionResourceMetadata: (resource: Pick<ResourceRef, "uri">) => {
382
- "workbench.selectionResourceUri": string;
308
+ export declare const createWorkbenchSelectionResourceMetadata: (resource: ResourceRef) => {
309
+ "workbench.selectionResourceKey": string;
383
310
  };
384
311
 
385
- /**
386
- * Renders its own page. `render` returns `unknown` so core stays React-free — the
387
- * React layer treats the result as a node, exactly like WorkbenchRendererRegistration.
388
- */
389
- export declare interface CustomSettingsPanel extends SettingsPanelBase {
390
- kind: "custom";
391
- render(input: WorkbenchPanelRenderInput): unknown;
312
+ declare interface CreateWorkbenchStatusBarRegistryInput {
313
+ hasView(viewId: string): boolean;
314
+ }
315
+
316
+ declare interface CreateWorkbenchViewRegistryInput {
317
+ registerBody(view: WorkbenchViewContribution, metadata?: ContributionMetadata): Disposable_2 & {
318
+ refresh?(input?: unknown): void;
319
+ };
392
320
  }
393
321
 
394
322
  export declare interface DataTableRendererColumn {
@@ -444,10 +372,6 @@ export declare interface DataTableRendererContribution {
444
372
  onRowActivate?: (row: DataTableRendererRow) => Promise<void> | void;
445
373
  }
446
374
 
447
- export declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
448
- dataTableRendererId: string;
449
- }) => unknown;
450
-
451
375
  export declare interface DataTableRendererQueryContext {
452
376
  resource?: ResourceRef;
453
377
  modeId?: string;
@@ -458,20 +382,6 @@ export declare interface DataTableRendererQueryResult {
458
382
  columns?: DataTableRendererColumn[];
459
383
  }
460
384
 
461
- export declare interface DataTableRendererRefreshEvent {
462
- dataTableRendererId: string;
463
- }
464
-
465
- export declare interface DataTableRendererRegistry {
466
- dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
467
- registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
468
- setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
469
- getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
470
- listDataTableRenderers(): RegisteredDataTableRendererContribution[];
471
- refreshDataTableRenderer(id: string): void;
472
- onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
473
- }
474
-
475
385
  export declare interface DataTableRendererRow {
476
386
  id: string;
477
387
  values: Record<string, unknown>;
@@ -494,10 +404,6 @@ export declare interface DataTableRendererSelectionAction {
494
404
  run(rows: DataTableRendererRow[]): Promise<void> | void;
495
405
  }
496
406
 
497
- declare interface DataTableRendererStoreState {
498
- renderers: Record<string, RegisteredDataTableRendererContribution>;
499
- }
500
-
501
407
  export declare interface DataTableRendererThemeColor {
502
408
  light: string;
503
409
  dark: string;
@@ -507,14 +413,19 @@ export declare interface DataTableRendererThemeColor {
507
413
  };
508
414
  }
509
415
 
416
+ /** Resource URI conversion belongs to route and persistence adapters. */
417
+ export declare const defaultPageResourceCodec: WorkbenchPageResourceCodec;
418
+
510
419
  declare interface Disposable_2 {
511
420
  dispose(): void;
512
421
  }
513
422
  export { Disposable_2 as Disposable }
514
423
 
515
- export declare type DockedCompositionRegion = (typeof dockedCompositionRegions)[number];
424
+ declare type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
425
+
426
+ export { DockedWorkbenchRegion }
516
427
 
517
- export declare const dockedCompositionRegions: readonly ["sidenav", "main", "secondary", "side"];
428
+ export { dockedWorkbenchRegions }
518
429
 
519
430
  export declare interface EnumOption {
520
431
  value: string;
@@ -600,86 +511,37 @@ export declare interface FileRendererContribution {
600
511
  save?(resource: ResourceRef | undefined, content: string, origin?: FileRendererRefreshOrigin): Promise<FileRendererSaveResult | undefined> | FileRendererSaveResult | void;
601
512
  }
602
513
 
603
- export declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
604
- fileRendererId: string;
605
- }) => unknown;
606
-
607
514
  export declare interface FileRendererRefreshEnvelope {
608
- resourceUri?: string;
515
+ resourceKey?: string;
609
516
  origin?: FileRendererRefreshOrigin;
610
517
  revision?: string;
611
518
  }
612
519
 
613
- export declare interface FileRendererRefreshEvent extends FileRendererRefreshEnvelope {
614
- fileRendererId: string;
615
- }
616
-
617
- declare type FileRendererRefreshListener = (event: FileRendererRefreshEvent) => void;
618
-
619
520
  export declare interface FileRendererRefreshOrigin {
620
521
  rendererId: string;
621
522
  instanceId: string;
622
523
  operationId: string;
623
524
  }
624
525
 
625
- export declare interface FileRendererRegistry {
626
- fileRendererStore: WorkbenchStore<FileRendererStoreState>;
627
- registerFileRenderer(contribution: FileRendererContribution, metadata?: ContributionMetadata): Disposable_2;
628
- setFileRendererImplementation(impl: FileRendererImplementation): void;
629
- getFileRenderer(id: string): RegisteredFileRendererContribution | undefined;
630
- listFileRenderers(): RegisteredFileRendererContribution[];
631
- refreshFileRenderer(id: string, event?: FileRendererRefreshEnvelope): void;
632
- onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
633
- }
634
-
635
526
  export declare interface FileRendererSaveResult {
636
527
  revision?: string;
637
528
  }
638
529
 
639
- declare interface FileRendererStoreState {
640
- renderers: Record<string, RegisteredFileRendererContribution>;
641
- }
642
-
643
530
  export declare const getKeybindingSteps: (keybinding: KeybindingSequence) => string[];
644
531
 
645
- export declare const getSwitchModeNavigationTargetModeId: (target: NavigationTarget) => string | undefined;
646
-
647
532
  export declare const getWorkbenchModePanelForRegion: (region: WorkbenchRegion) => "main" | "secondary" | "side" | undefined;
648
533
 
649
- export declare const getWorkbenchSelectionResourceUris: (resource: ResourceRef | undefined) => string[];
534
+ export declare const getWorkbenchSelectionResourceKeys: (resource: ResourceRef | undefined) => string[];
650
535
 
651
536
  export declare const headerLeadingMenuPath: (region: string) => MenuPath;
652
537
 
653
538
  export declare const headerTrailingMenuPath: (region: string) => MenuPath;
654
539
 
655
- export declare interface HistoryController {
656
- store: WorkbenchStore<HistoryStoreState>;
657
- /** Snapshot the history for a compound navigation; the returned function restores it. */
658
- createCheckpoint(): () => void;
659
- goBack(): HistoryEntry | undefined;
660
- goForward(): HistoryEntry | undefined;
661
- goPrevious(): HistoryEntry | undefined;
662
- recentlyClosed(): readonly HistoryEntry[];
663
- reopenLastClosed(): HistoryEntry | undefined;
664
- setPersistenceScope(scope: string | undefined): void;
665
- getPersistenceScope(): string | undefined;
666
- restore(): HistoryEntry | undefined;
667
- flush(): void;
668
- clear(): void;
669
- }
670
-
671
- export declare type HistoryEntry = WorkbenchNavigationEntry;
672
-
673
- declare interface HistoryStoreState {
674
- entries: readonly WorkbenchNavigationEntry[];
675
- cursor: number;
676
- recentlyClosed: readonly WorkbenchNavigationEntry[];
677
- hydrating: boolean;
678
- }
679
-
680
540
  export declare const isWorkbenchModePanelAvailable: (mode: WorkbenchModeContribution | undefined, panel: WorkbenchPanelRegion) => boolean;
681
541
 
682
- export declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
542
+ export declare const isWorkbenchViewHierarchyNode: (node: WorkbenchHierarchyNode) => node is WorkbenchViewHierarchyNode;
543
+
544
+ export declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow, TNode = unknown, TIcon = unknown> {
683
545
  id: string;
684
546
  title: string;
685
547
  resourceKind?: string;
@@ -694,9 +556,9 @@ export declare interface KanbanRendererContribution<TRow extends KanbanRendererR
694
556
  * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
695
557
  * propagate live without re-registering the renderer.
696
558
  */
697
- attributes: AttributeDescriptor[] | AttributesSource;
559
+ attributes: AttributeDescriptor<TNode>[] | AttributesSource<TNode>;
698
560
  /** Per-board-column overrides (color, drag/create rules, custom actions). */
699
- getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
561
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig<TIcon>;
700
562
  hideToolbar?: boolean;
701
563
  emptyTitle?: string;
702
564
  emptyDescription?: string;
@@ -715,7 +577,7 @@ export declare interface KanbanRendererContribution<TRow extends KanbanRendererR
715
577
  /** Row activation surfaced by the renderer (mirrored from <KanbanRenderer>). */
716
578
  onRowActivate?: (row: TRow) => Promise<void> | void;
717
579
  /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
718
- getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
580
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction<TNode>[];
719
581
  /**
720
582
  * Fires for inline attribute edits AND for cross-column drag-to-reorder on
721
583
  * the board (the renderer passes the grouping attribute id + the target
@@ -772,10 +634,6 @@ export declare interface KanbanRendererCreateSubmission {
772
634
 
773
635
  export declare type KanbanRendererFilterState = Record<string, string[]>;
774
636
 
775
- export declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
776
- kanbanRendererId: string;
777
- }) => unknown;
778
-
779
637
  export declare interface KanbanRendererOrdering {
780
638
  attributeId: string | typeof MANUAL_ORDERING;
781
639
  direction: SortDirection;
@@ -786,22 +644,6 @@ export declare interface KanbanRendererQueryState {
786
644
  filters: KanbanRendererFilterState;
787
645
  }
788
646
 
789
- declare interface KanbanRendererRefreshEvent {
790
- kanbanRendererId: string;
791
- }
792
-
793
- declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
794
-
795
- export declare interface KanbanRendererRegistry {
796
- dataStore: WorkbenchStore<KanbanRendererStoreState>;
797
- registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
798
- setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
799
- getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
800
- listKanbanRenderers(): RegisteredKanbanRendererContribution[];
801
- refreshKanbanRenderer(id: string): void;
802
- onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
803
- }
804
-
805
647
  export declare interface KanbanRendererRow {
806
648
  id: string;
807
649
  title: string;
@@ -830,15 +672,11 @@ export declare interface KanbanRendererSettings {
830
672
  displayProperties: string[];
831
673
  }
832
674
 
833
- declare interface KanbanRendererStoreState {
834
- renderers: Record<string, RegisteredKanbanRendererContribution>;
835
- }
836
-
837
675
  export declare interface Keybinding {
838
- commandId: string;
676
+ /** Action the chord executes through the shared navigation executor. */
677
+ action: NavigationTarget;
839
678
  keybinding: KeybindingSequence;
840
679
  when?: string;
841
- args?: unknown;
842
680
  }
843
681
 
844
682
  export declare interface KeybindingRegistry {
@@ -846,6 +684,11 @@ export declare interface KeybindingRegistry {
846
684
  registerKeybinding(keybinding: Keybinding, metadata?: ContributionMetadata): Disposable_2;
847
685
  listKeybindings(): RegisteredKeybinding[];
848
686
  listActiveKeybindings(): RegisteredKeybinding[];
687
+ /** Chords bound to plain command actions, for rendering shortcut hints beside commands. */
688
+ listCommandKeybindings(): {
689
+ commandId: string;
690
+ keybinding: KeybindingSequence;
691
+ }[];
849
692
  }
850
693
 
851
694
  declare interface KeybindingRegistryStoreState {
@@ -854,11 +697,6 @@ declare interface KeybindingRegistryStoreState {
854
697
 
855
698
  export declare type KeybindingSequence = string | string[];
856
699
 
857
- export declare interface LastResourcePersistenceAdapter {
858
- getLastResource(): ResourceRef | undefined;
859
- setLastResource(resource: ResourceRef | undefined): void;
860
- }
861
-
862
700
  declare interface LayoutModel {
863
701
  store: WorkbenchStore<WorkbenchLayoutStoreState>;
864
702
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
@@ -870,12 +708,6 @@ declare interface LayoutModel {
870
708
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
871
709
  dispose(): void;
872
710
  };
873
- registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
874
- dispose(): void;
875
- };
876
- registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
877
- dispose(): void;
878
- };
879
711
  registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
880
712
  dispose(): void;
881
713
  };
@@ -887,6 +719,7 @@ declare interface LayoutModel {
887
719
  getWidget(id: string): RegisteredWidgetContribution | undefined;
888
720
  getPanel(id: string): WorkbenchPanelContribution | undefined;
889
721
  getRegionSize(regionId: WorkbenchRegion): WorkbenchRegionSize | undefined;
722
+ getRegionSettings(regionId: WorkbenchRegion): WorkbenchRegionSettings | undefined;
890
723
  getRegionCollapsible(regionId: WorkbenchRegion): boolean;
891
724
  getRegionHeaderBorderBottom(regionId: WorkbenchRegion): boolean;
892
725
  setRegionVisible(regionId: WorkbenchRegion, visible: boolean): void;
@@ -904,7 +737,7 @@ declare interface LayoutModel {
904
737
  closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
905
738
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
906
739
  reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
907
- expirePreviewTabs(ownerResourceUri?: string): void;
740
+ expirePreviewTabs(ownerResourceKey?: string): void;
908
741
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
909
742
  setRegionActiveWidget(regionId: WorkbenchRegion, widgetId: string | undefined): void;
910
743
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
@@ -982,14 +815,20 @@ declare interface MenuRegistryStoreState {
982
815
  itemsByPath: Record<string, RegisteredMenuItem[]>;
983
816
  }
984
817
 
818
+ declare type NativeViewBody<Kind extends string, Contribution> = {
819
+ kind: Kind;
820
+ } & Omit<Contribution, "id" | "title" | "icon">;
821
+
985
822
  export declare interface NavigationDispatcherContext {
986
- canOpenResource?(resource: ResourceRef): boolean;
987
- canOpenPanel?(panelId: string): boolean;
823
+ canOpenPanel?(target: NavigationTargetPanel): boolean;
988
824
  canExecuteCommand?(commandId: string): boolean;
989
- createCheckpoint?(): undefined | (() => void);
990
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
991
- openPanel(panelId: string, input?: OpenWorkbenchPanelInput): unknown;
825
+ prepareNavigation?(targets: readonly (NavigationTargetPage | NavigationTargetPanel)[]): {
826
+ commit(): unknown;
827
+ };
828
+ openPanelTarget?(target: NavigationTargetPanel): unknown;
829
+ openPageTarget?(target: NavigationTargetPage): unknown;
992
830
  executeCommand(commandId: string, args?: unknown): Promise<unknown> | unknown;
831
+ openHref?(href: string): Promise<unknown> | unknown;
993
832
  }
994
833
 
995
834
  export declare interface NavigationParser {
@@ -1005,16 +844,15 @@ export declare interface NavigationRegistry {
1005
844
  listParsers(): RegisteredNavigationParser[];
1006
845
  resolveLocation(location: string): NavigationTarget;
1007
846
  openTarget(target: NavigationTarget): Promise<readonly unknown[]>;
847
+ /** Opens a page location through the shared executor. */
848
+ openPage(target: Omit<NavigationTargetPage, "kind">): Promise<readonly unknown[]>;
849
+ /** Opens or activates an owned panel through the shared executor. */
850
+ openPanel(target: DistributiveOmit<NavigationTargetPanel, "kind">): Promise<readonly unknown[]>;
1008
851
  navigate(location: string): Promise<readonly unknown[]>;
1009
- registerNavigator(navigator: ResourceNavigator, metadata?: ContributionMetadata): Disposable_2;
1010
- listNavigators(): RegisteredResourceNavigator[];
1011
- createHref(resource: ResourceRef): string;
1012
- navigateResource(resource: ResourceRef): Promise<unknown>;
1013
852
  }
1014
853
 
1015
854
  declare interface NavigationRegistryStoreState {
1016
855
  parsers: Record<string, RegisteredNavigationParser>;
1017
- navigators: Record<string, RegisteredResourceNavigator>;
1018
856
  }
1019
857
 
1020
858
  export declare type NavigationTarget = NavigationTargetItem | NavigationTargetCompound;
@@ -1027,23 +865,63 @@ export declare interface NavigationTargetCommand {
1027
865
 
1028
866
  export declare interface NavigationTargetCompound {
1029
867
  kind: "compound";
1030
- targets: readonly NavigationTargetItem[];
868
+ targets: readonly (NavigationTargetPage | NavigationTargetPanel)[];
1031
869
  }
1032
870
 
1033
- export declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
871
+ declare interface NavigationTargetHref {
872
+ kind: "href";
873
+ href: string;
874
+ }
875
+
876
+ export declare type NavigationTargetItem = NavigationTargetPage | NavigationTargetPanel | NavigationTargetCommand | NavigationTargetHref;
877
+
878
+ declare type NavigationTargetPage = NavigationTargetPage_2;
879
+
880
+ export declare type NavigationTargetPanel = NavigationTargetPanel_2 | NavigationTargetShellPanel;
1034
881
 
1035
- export declare interface NavigationTargetPanel {
882
+ declare interface NavigationTargetShellPanel {
1036
883
  kind: "panel";
1037
- panelId: string;
1038
- input?: OpenWorkbenchPanelInput;
884
+ panel: ShellPlacementRef;
885
+ resource?: NavigationTargetPanel_2["resource"];
886
+ open?: NavigationTargetPanel_2["open"];
887
+ title?: string;
1039
888
  }
1040
889
 
1041
- export declare interface NavigationTargetResource {
1042
- kind: "resource";
1043
- resource: ResourceRef;
1044
- input?: OpenResourceInput;
890
+ export declare interface NavigationTreeContext {
891
+ resource?: ResourceRef;
892
+ }
893
+
894
+ export declare interface NavigationTreeContribution {
895
+ id: string;
896
+ /** Prefix projected section and node ids when they come from an independent tree renderer. */
897
+ idScope?: string;
898
+ owner: NavigationTreeOwner;
899
+ sourceExtensionId: string;
900
+ declarationIndex: number;
901
+ slot?: NavigationTreeSlot;
902
+ viewId?: string;
903
+ defaultExpandedSectionIds?: string[];
904
+ getSections?(context: NavigationTreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
905
+ getChildren?(node: TreeNode, context: NavigationTreeContext): Promise<TreeNode[]> | TreeNode[];
906
+ }
907
+
908
+ export declare interface NavigationTreeOwner {
909
+ kind: "mode" | "page";
910
+ id: string;
911
+ extensionId: string;
912
+ }
913
+
914
+ export declare interface NavigationTreeRegistry {
915
+ registerContribution(contribution: NavigationTreeContribution): Disposable_2;
916
+ resolveOwner(kind: NavigationTreeOwner["kind"], id: string): NavigationTreeOwner | undefined;
917
+ getSections(owner: NavigationTreeOwner, slot?: NavigationTreeSlot, context?: NavigationTreeContext): Promise<TreeViewSection[]>;
918
+ getChildren(node: TreeNode, context?: NavigationTreeContext): Promise<TreeNode[]>;
919
+ getDefaultExpandedSectionIds(owner: NavigationTreeOwner): string[];
920
+ onDidChange(listener: () => void): Disposable_2;
1045
921
  }
1046
922
 
923
+ export declare type NavigationTreeSlot = "header" | "content" | "footer";
924
+
1047
925
  declare const NO_GROUPING = "none";
1048
926
 
1049
927
  export declare interface NotificationRegistry {
@@ -1055,12 +933,15 @@ export declare interface NotificationRegistry {
1055
933
  subscribe(listener: WorkbenchNotificationListener): Disposable_2;
1056
934
  }
1057
935
 
1058
- export declare interface OpenResourceInput {
1059
- replaceActive?: boolean;
936
+ declare interface OpenModePlacementTarget {
937
+ panel: PlacementRef;
938
+ resource?: ResourceRef;
939
+ open?: PageOpenIntent;
1060
940
  }
1061
941
 
1062
942
  declare interface OpenWidgetInput {
1063
- resource?: ResourceRef;
943
+ viewId?: string | null;
944
+ resource?: ResourceRef | null;
1064
945
  title?: string;
1065
946
  region?: WorkbenchRegion;
1066
947
  role?: WorkbenchWidgetRole;
@@ -1077,9 +958,17 @@ declare interface OpenWidgetInput {
1077
958
  replaceWidgetId?: string;
1078
959
  }
1079
960
 
1080
- export declare interface OpenWorkbenchPanelInput {
961
+ declare interface OpenWorkbenchOverlayInput {
1081
962
  resource?: ResourceRef;
1082
963
  title?: string;
964
+ }
965
+
966
+ declare interface OpenWorkbenchPanelInput {
967
+ /** Set by the view registry. Low-level layout callers should leave this undefined. */
968
+ viewId?: string | null;
969
+ /** `null` explicitly clears an existing singleton placement's resource binding. */
970
+ resource?: ResourceRef | null;
971
+ title?: string;
1083
972
  region?: WorkbenchRegion;
1084
973
  role?: WorkbenchWidgetRole;
1085
974
  pinned?: boolean;
@@ -1090,25 +979,39 @@ export declare interface OpenWorkbenchPanelInput {
1090
979
  strategy?: WorkbenchPanelOpenStrategy;
1091
980
  }
1092
981
 
1093
- export declare interface PersistedCompositionLayout {
1094
- regions: Partial<Record<DockedCompositionRegion, PersistedCompositionRegionState>>;
982
+ declare interface OpenWorkbenchShellPlacementInput {
983
+ placementId: string;
984
+ resource?: ResourceRef;
985
+ open?: PageOpenIntent;
986
+ title?: string;
987
+ }
988
+
989
+ declare interface OwnedPlacementLocationContext {
990
+ modeId: string;
991
+ pageId?: string;
992
+ projectId?: string;
993
+ location?: PageLocation;
1095
994
  }
1096
995
 
1097
- declare interface PersistedCompositionRegionState {
1098
- order: readonly string[];
1099
- activePanelId?: string;
996
+ declare interface OwnedPlacementReconciliation<Value> {
997
+ add: readonly ResolvedOwnedPlacement<Value>[];
998
+ retain: readonly ResolvedOwnedPlacement<Value>[];
999
+ update: readonly OwnedPlacementUpdate<Value>[];
1000
+ activate: readonly ResolvedOwnedPlacement<Value>[];
1001
+ remove: readonly ResolvedOwnedPlacement<Value>[];
1100
1002
  }
1101
1003
 
1102
- export declare interface PersistedTreeRendererStates {
1103
- statesByTreeId: Record<string, TreeRendererState>;
1004
+ declare interface OwnedPlacementUpdate<Value> {
1005
+ current: ResolvedOwnedPlacement<Value>;
1006
+ desired: ResolvedOwnedPlacement<Value>;
1104
1007
  }
1105
1008
 
1106
- export declare interface PersistedWorkbenchHistory extends Omit<HistoryStoreState, "hydrating"> {
1107
- version: 1;
1009
+ declare interface PersistedTreeRendererStates {
1010
+ statesByTreeId: Record<string, TreeRendererState>;
1108
1011
  }
1109
1012
 
1110
- declare interface PersistedWorkbenchPanels {
1111
- openByRegionId: Record<string, boolean>;
1013
+ declare interface PersistedWorkbenchPanelMenuState {
1014
+ openByMenuId: Record<string, boolean>;
1112
1015
  }
1113
1016
 
1114
1017
  declare interface PlaceholderContribution {
@@ -1171,24 +1074,6 @@ declare interface RegisteredContributionMetadata {
1171
1074
  priority: number;
1172
1075
  }
1173
1076
 
1174
- declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
1175
- }
1176
-
1177
- declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
1178
- }
1179
-
1180
- declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
1181
- }
1182
-
1183
- declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1184
- }
1185
-
1186
- declare interface RegisteredKeepAliveHost {
1187
- rendererId: string;
1188
- host: HTMLElement;
1189
- attachedTo?: HTMLElement;
1190
- }
1191
-
1192
1077
  declare interface RegisteredKeybinding extends Keybinding, RegisteredContributionMetadata {
1193
1078
  }
1194
1079
 
@@ -1208,8 +1093,6 @@ declare type RegisteredPreferenceSchema = PreferencePropertySchema & {
1208
1093
  declare interface RegisteredResourceKind extends ResourceKindContribution, RegisteredContributionMetadata {
1209
1094
  }
1210
1095
 
1211
- declare type RegisteredResourceNavigator = Omit<ResourceNavigator, "priority"> & RegisteredContributionMetadata;
1212
-
1213
1096
  declare type RegisteredSettingsPanel = SettingsPanelContribution & RegisteredContributionMetadata;
1214
1097
 
1215
1098
  declare type RegisteredSettingsSection = SettingsSectionContribution & RegisteredContributionMetadata;
@@ -1234,52 +1117,21 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
1234
1117
  metadata?: Record<string, unknown>;
1235
1118
  }
1236
1119
 
1237
- export declare const resolveAnchorRegion: (anchorId: AnchorId) => "status" | "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" | "overlay";
1120
+ declare type RegisteredWorkbenchStatusSet = WorkbenchStatusSetContribution & RegisteredContributionMetadata;
1238
1121
 
1239
- export declare const resolveComposition: (input: ResolveCompositionInput) => ResolvedComposition;
1240
-
1241
- declare interface ResolveCompositionInput {
1242
- context: CompositionResolutionContext;
1243
- mode: CompositionModeDefinition;
1244
- composition: WorkbenchComposition;
1245
- persisted?: PersistedCompositionLayout;
1246
- }
1247
-
1248
- export declare interface ResolvedComposition {
1249
- placements: readonly ResolvedCompositionPlacement[];
1250
- regionOrder: Partial<Record<DockedCompositionRegion, readonly string[]>>;
1251
- activePanelIds: Partial<Record<DockedCompositionRegion, string>>;
1252
- addablePanels: readonly ResolvedCompositionAddablePanel[];
1253
- diagnostics: readonly CompositionDiagnostic[];
1254
- requiredFallback?: {
1255
- panelId: string;
1256
- };
1257
- }
1122
+ export declare type RegisteredWorkbenchView = WorkbenchViewContribution & RegisteredContributionMetadata;
1258
1123
 
1259
- export declare interface ResolvedCompositionAddablePanel {
1260
- panelId: string;
1261
- region: DockedCompositionRegion;
1262
- allowedRegions: readonly DockedCompositionRegion[];
1263
- pinned?: boolean;
1264
- }
1124
+ export declare const resolveAnchorRegion: (anchorId: AnchorId) => "status" | "main" | "nav" | "activity" | "sidenav" | "main-header" | "main-left-menu" | "main-right-menu" | "secondary-header" | "secondary-left-menu" | "secondary" | "secondary-right-menu" | "side-header" | "side-left-menu" | "side" | "side-right-menu" | "overlay";
1265
1125
 
1266
- export declare interface ResolvedCompositionPlacement {
1267
- panelId: string;
1268
- region: DockedCompositionRegion;
1269
- slot?: string;
1270
- required: boolean;
1271
- defaultOpen: boolean;
1272
- pinned?: boolean;
1273
- allowedRegions: readonly DockedCompositionRegion[];
1274
- origin: "persisted" | "required" | "default";
1126
+ declare interface ResolvedOwnedPlacement<Value = unknown> {
1127
+ identity: PlacementIdentity;
1128
+ region: WorkbenchRegion;
1129
+ order: number;
1130
+ value: Value;
1275
1131
  }
1276
1132
 
1277
1133
  declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1278
1134
 
1279
- declare type ResolvedResourcePresenter = Omit<ResourcePresenter, "priority"> & {
1280
- priority: number;
1281
- };
1282
-
1283
1135
  export declare interface ResourceBrowseEntry {
1284
1136
  resource: ResourceRef;
1285
1137
  searchText?: string;
@@ -1290,13 +1142,13 @@ export declare interface ResourceBrowseEntry {
1290
1142
  }
1291
1143
 
1292
1144
  /** Row-level context menu action surfaced by the renderer. */
1293
- export declare interface ResourceContextAction {
1145
+ export declare interface ResourceContextAction<TNode = unknown> {
1294
1146
  key: string;
1295
1147
  label: string;
1296
1148
  onClick: () => Promise<void> | void;
1297
1149
  isDisabled?: boolean;
1298
- icon?: ReactNode;
1299
- endContent?: ReactNode;
1150
+ icon?: TNode;
1151
+ endContent?: TNode;
1300
1152
  separatorBefore?: boolean;
1301
1153
  }
1302
1154
 
@@ -1304,7 +1156,7 @@ export declare const resourceContextMenuPath: (resourceKind: string) => MenuPath
1304
1156
 
1305
1157
  export declare interface ResourceHierarchyCycle {
1306
1158
  code: typeof resourceHierarchyCycleCode;
1307
- path: ResourceRef[];
1159
+ path: WorkbenchHierarchyNode[];
1308
1160
  repeatedUri: string;
1309
1161
  }
1310
1162
 
@@ -1314,81 +1166,47 @@ export declare interface ResourceHierarchyProvider {
1314
1166
  id: string;
1315
1167
  priority?: number;
1316
1168
  canResolve(resource: ResourceRef): boolean;
1317
- getParent(resource: ResourceRef): ResourceRef | undefined;
1169
+ getParent(resource: ResourceRef): WorkbenchHierarchyNode | undefined;
1318
1170
  }
1319
1171
 
1320
1172
  export declare interface ResourceKindContribution {
1321
1173
  kind: string;
1322
1174
  label: string;
1323
1175
  icon?: string;
1324
- surface?: ResourceSurface;
1325
- paletteOpenInput?: OpenResourceInput;
1326
1176
  }
1327
1177
 
1328
1178
  export declare interface ResourceListContext {
1329
1179
  primary?: ResourceRef;
1330
1180
  }
1331
1181
 
1332
- declare interface ResourceNavigator<TResult = unknown> {
1333
- id: string;
1334
- priority?: number;
1335
- canNavigate(resource: ResourceRef): boolean;
1336
- createHref?(resource: ResourceRef): string;
1337
- navigate(resource: ResourceRef): TResult | Promise<TResult>;
1338
- }
1339
-
1340
- export declare interface ResourcePresenter {
1341
- id: string;
1342
- priority?: number;
1343
- canOpen(resource: ResourceRef): boolean;
1344
- open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1345
- afterOpen?(resource: ResourceRef, instance: WorkbenchPanelInstance, input: OpenResourceInput): void;
1346
- }
1347
-
1348
1182
  export declare interface ResourceProvider {
1349
1183
  id: string;
1350
1184
  kind: string;
1351
1185
  list(query: string, context: ResourceListContext): readonly ResourceBrowseEntry[];
1352
1186
  }
1353
1187
 
1354
- export declare interface ResourceRef {
1355
- kind: string;
1356
- uri: string;
1357
- id?: string;
1358
- label?: string;
1359
- icon?: string;
1360
- metadata?: Record<string, unknown>;
1361
- }
1188
+ export { ResourceRef }
1362
1189
 
1363
1190
  export declare interface ResourceRegistry {
1364
1191
  store: WorkbenchStore<ResourceRegistryStoreState>;
1365
1192
  registerKind(kind: ResourceKindContribution, metadata?: ContributionMetadata): Disposable_2;
1366
1193
  getKind(kind: string): RegisteredResourceKind | undefined;
1367
- getSurface(resource: ResourceRef): ResourceSurface | undefined;
1368
1194
  listKinds(): RegisteredResourceKind[];
1369
- registerPresenter(presenter: ResourcePresenter): Disposable_2;
1370
- listPresenters(): ResolvedResourcePresenter[];
1371
1195
  registerProvider(provider: ResourceProvider): Disposable_2;
1372
1196
  listProviders(): ResourceProvider[];
1373
1197
  listResources(query: string): readonly ResourceBrowseEntry[];
1374
1198
  registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1375
1199
  listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1376
- walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1200
+ walkHierarchy(resource: ResourceRef | undefined): WorkbenchHierarchyNode[];
1377
1201
  onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
1378
- isOpeningResource(): boolean;
1379
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1380
- onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1381
1202
  }
1382
1203
 
1383
1204
  declare interface ResourceRegistryStoreState {
1384
1205
  kinds: Record<string, RegisteredResourceKind>;
1385
- presenters: Record<string, ResolvedResourcePresenter>;
1386
1206
  providers: Record<string, ResourceProvider>;
1387
1207
  hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1388
1208
  }
1389
1209
 
1390
- export declare type ResourceSurface = "primary" | "secondary" | "attached";
1391
-
1392
1210
  /** Auto-rendered as a param editor from the registered preference schema. */
1393
1211
  export declare interface SchemaSettingsPanel extends SettingsPanelBase {
1394
1212
  kind: "schema";
@@ -1425,7 +1243,7 @@ export declare interface SettingsPanelBase {
1425
1243
  when?: string;
1426
1244
  }
1427
1245
 
1428
- export declare type SettingsPanelContribution = SchemaSettingsPanel | CustomSettingsPanel | CollectionSettingsPanel;
1246
+ export declare type SettingsPanelContribution = SchemaSettingsPanel | ViewSettingsPanel | CollectionSettingsPanel;
1429
1247
 
1430
1248
  /** A preference this panel edits; a bare string uses the preference name as its label. */
1431
1249
  export declare type SettingsPanelPreference = string | {
@@ -1436,11 +1254,13 @@ export declare type SettingsPanelPreference = string | {
1436
1254
  export declare interface SettingsRegistry {
1437
1255
  store: WorkbenchStore<SettingsRegistryStoreState>;
1438
1256
  registerSection(section: SettingsSectionContribution, metadata?: ContributionMetadata): Disposable_2;
1439
- registerPanel<TItem = unknown>(panel: SchemaSettingsPanel | CustomSettingsPanel | CollectionSettingsPanel<TItem>, metadata?: ContributionMetadata): Disposable_2;
1257
+ registerPanel<TItem = unknown>(panel: SchemaSettingsPanel | ViewSettingsPanel | CollectionSettingsPanel<TItem>, metadata?: ContributionMetadata): Disposable_2;
1440
1258
  getSection(id: string): RegisteredSettingsSection | undefined;
1441
1259
  getPanel(id: string): RegisteredSettingsPanel | undefined;
1442
1260
  listSections(): RegisteredSettingsSection[];
1443
1261
  listPanels(): RegisteredSettingsPanel[];
1262
+ resolveCollectionItem(panelId: string, itemId: string): Promise<unknown | undefined>;
1263
+ getCollectionItem(panelId: string, itemId: string): unknown | undefined;
1444
1264
  /** Signal that a collection's backing data changed so the surface refreshes. */
1445
1265
  refresh(): void;
1446
1266
  }
@@ -1464,6 +1284,12 @@ export declare interface SettingsSectionContribution {
1464
1284
  actions?: SettingsAction[];
1465
1285
  }
1466
1286
 
1287
+ /** Core-only panel ref for host-owned shell placements. Extensions cannot address them. */
1288
+ declare interface ShellPlacementRef {
1289
+ kind: "shell-placement";
1290
+ id: string;
1291
+ }
1292
+
1467
1293
  export declare type SortDirection = "asc" | "desc";
1468
1294
 
1469
1295
  export declare type StandardResourceIcon = (typeof standardResourceIcons)[keyof typeof standardResourceIcons];
@@ -1514,15 +1340,29 @@ export declare interface TreeAction {
1514
1340
  run?(args?: unknown): Promise<void> | void;
1515
1341
  }
1516
1342
 
1517
- export declare interface TreeContext {
1518
- filter?: string;
1519
- resource?: ResourceRef;
1520
- /** Widget/view contribution id for trees rendered through a view-backed widget. */
1521
- viewId?: string;
1343
+ export declare interface TreeContext extends TreeQueryContext {
1344
+ state: Readonly<TreeRendererState>;
1345
+ refresh(): void;
1346
+ setSelectedNode(nodeId: string | undefined): void;
1347
+ }
1348
+
1349
+ export declare interface TreeMoveEndpoint {
1350
+ kind: "section" | "node";
1351
+ sectionId: string;
1352
+ id: string;
1353
+ moveScope?: string;
1522
1354
  }
1523
1355
 
1356
+ export declare type TreeMovePolicy = (move: {
1357
+ source: TreeMoveEndpoint;
1358
+ destination: TreeMoveEndpoint;
1359
+ }) => boolean;
1360
+
1524
1361
  export declare interface TreeNode {
1525
1362
  id: string;
1363
+ selected?: boolean;
1364
+ /** Host-owned customization boundary. Extension callbacks cannot set it. */
1365
+ moveScope?: string;
1526
1366
  label: string;
1527
1367
  icon?: string;
1528
1368
  iconElement?: unknown;
@@ -1567,6 +1407,13 @@ export declare interface TreeNodeInlineInput {
1567
1407
 
1568
1408
  declare type TreeNodeRowVariant = "empty-state";
1569
1409
 
1410
+ declare interface TreeQueryContext {
1411
+ filter?: string;
1412
+ resource?: ResourceRef;
1413
+ /** Widget/view contribution id for trees rendered through a view-backed widget. */
1414
+ viewId?: string;
1415
+ }
1416
+
1570
1417
  export declare interface TreeRendererContribution {
1571
1418
  id: string;
1572
1419
  title: string;
@@ -1577,37 +1424,38 @@ export declare interface TreeRendererContribution {
1577
1424
  defaultExpandedSectionIds?: string[];
1578
1425
  defaultExpandedNodeIds?: string[];
1579
1426
  getBody(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
1580
- getHeader?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1581
- getFooter?(ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1427
+ getHeader?(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
1428
+ getFooter?(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
1582
1429
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1430
+ canMove?: TreeMovePolicy;
1583
1431
  moveNode?(source: TreeNode, target: TreeNode | undefined, ctx: TreeContext): Promise<void> | void;
1584
1432
  }
1585
1433
 
1586
- export declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1434
+ declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1587
1435
  treeId: string;
1588
1436
  }) => unknown;
1589
1437
 
1590
- export declare interface TreeRendererPersistenceAdapter {
1438
+ declare interface TreeRendererPersistenceAdapter {
1591
1439
  getTreeStates(): PersistedTreeRendererStates | undefined;
1592
1440
  setTreeStates(states: PersistedTreeRendererStates): void;
1593
1441
  }
1594
1442
 
1595
- export declare interface TreeRendererRefreshEvent {
1443
+ declare interface TreeRendererRefreshEvent {
1596
1444
  treeId: string;
1597
1445
  }
1598
1446
 
1599
1447
  declare type TreeRendererRefreshListener = (event: TreeRendererRefreshEvent) => void;
1600
1448
 
1601
- export declare interface TreeRendererRegistry {
1449
+ declare interface TreeRendererRegistry {
1602
1450
  treeStore: WorkbenchStore<TreeRendererStoreState>;
1603
1451
  registerTreeRenderer(view: TreeRendererContribution, metadata?: ContributionMetadata): Disposable_2;
1604
1452
  setTreeRendererImplementation(impl: TreeRendererImplementation): void;
1605
1453
  getTreeRenderer(id: string): RegisteredTreeRendererContribution | undefined;
1606
1454
  listTreeRenderers(): RegisteredTreeRendererContribution[];
1607
- getBody(id: string, ctx?: TreeContext): Promise<TreeViewSection[]>;
1608
- getHeader(id: string, ctx?: TreeContext): Promise<TreeNode[]>;
1609
- getFooter(id: string, ctx?: TreeContext): Promise<TreeNode[]>;
1610
- getChildren(id: string, node: TreeNode, ctx?: TreeContext): Promise<TreeNode[]>;
1455
+ getBody(id: string, ctx?: TreeQueryContext): Promise<TreeViewSection[]>;
1456
+ getHeader(id: string, ctx?: TreeQueryContext): Promise<TreeViewSection[]>;
1457
+ getFooter(id: string, ctx?: TreeQueryContext): Promise<TreeViewSection[]>;
1458
+ getChildren(id: string, node: TreeNode, ctx?: TreeQueryContext): Promise<TreeNode[]>;
1611
1459
  getTreeState(id: string): TreeRendererState;
1612
1460
  setNodeExpanded(id: string, nodeId: string, expanded: boolean): void;
1613
1461
  setSectionExpanded(id: string, sectionId: string, expanded: boolean): void;
@@ -1638,6 +1486,8 @@ declare interface TreeSectionEmptyState {
1638
1486
 
1639
1487
  export declare interface TreeViewSection {
1640
1488
  id: string;
1489
+ /** Host-owned customization boundary. Extension callbacks cannot set it. */
1490
+ moveScope?: string;
1641
1491
  label?: string;
1642
1492
  actions?: TreeAction[];
1643
1493
  collapsible?: boolean;
@@ -1658,6 +1508,11 @@ export declare interface TreeViewSection {
1658
1508
  */
1659
1509
  export declare type ViewMode = "board" | "list";
1660
1510
 
1511
+ export declare interface ViewSettingsPanel extends SettingsPanelBase {
1512
+ kind: "view";
1513
+ viewId: string;
1514
+ }
1515
+
1661
1516
  declare interface WidgetContribution {
1662
1517
  id: string;
1663
1518
  title: string;
@@ -1669,15 +1524,13 @@ declare interface WidgetContribution {
1669
1524
  mountStrategy?: WidgetMountStrategy;
1670
1525
  closable?: boolean;
1671
1526
  hiddenByDefault?: boolean;
1672
- subPanelsOnly?: boolean;
1673
1527
  regionSize?: WorkbenchRegionSize;
1674
1528
  regionCollapsible?: boolean;
1675
1529
  headerBorderBottom?: boolean;
1676
- floatingPanels?: WorkbenchFloatingPanelVisibility;
1677
1530
  resourceKinds?: string[];
1678
1531
  priority?: number;
1679
1532
  rendererId: string;
1680
- openCommandId?: string;
1533
+ openCommand?: WorkbenchCommandTarget;
1681
1534
  eligibleLocations?: WorkbenchLocationEligibility;
1682
1535
  panelMenuOwner?: WorkbenchPanelMenuOwner;
1683
1536
  tab?: WorkbenchWidgetTab;
@@ -1712,13 +1565,6 @@ declare interface WorkbenchBreadcrumbState {
1712
1565
  items: WorkbenchBreadcrumbItem[] | undefined;
1713
1566
  }
1714
1567
 
1715
- declare interface WorkbenchClosedSubPanel {
1716
- region: WorkbenchPanelRegion;
1717
- reference: WorkbenchSubPanelRef;
1718
- resource?: ResourceRef;
1719
- title?: string;
1720
- }
1721
-
1722
1568
  export declare interface WorkbenchCommandExecutionContext {
1723
1569
  resource?: ResourceRef;
1724
1570
  source?: "panel-add";
@@ -1762,7 +1608,7 @@ declare interface WorkbenchCommandPaletteState {
1762
1608
  paramsRequest: WorkbenchCommandParamsRequest | null;
1763
1609
  }
1764
1610
 
1765
- declare type WorkbenchCommandPaletteView = "main" | "theme" | "mode";
1611
+ declare type WorkbenchCommandPaletteView = "main" | "theme";
1766
1612
 
1767
1613
  declare interface WorkbenchCommandParamsRequest {
1768
1614
  record: {
@@ -1777,14 +1623,14 @@ declare interface WorkbenchCommandParamsRequest {
1777
1623
  context?: WorkbenchCommandExecutionContext;
1778
1624
  }
1779
1625
 
1780
- export declare interface WorkbenchComposition {
1781
- resourceKinds: readonly CompositionResourceKindDefinition[];
1782
- panels: readonly CompositionPanelDefinition[];
1783
- resourcePanels: readonly CompositionResourcePanelEdge[];
1626
+ export declare interface WorkbenchCommandTarget {
1627
+ commandId: string;
1628
+ args?: unknown;
1784
1629
  }
1785
1630
 
1786
1631
  declare interface WorkbenchCompositionAddablePanel extends WorkbenchModeAddablePanel {
1787
1632
  contribution: RegisteredWidgetContribution;
1633
+ open?(resource?: ResourceRef): void;
1788
1634
  }
1789
1635
 
1790
1636
  declare interface WorkbenchCompositionController {
@@ -1799,11 +1645,14 @@ declare interface WorkbenchCompositionRegionPanels {
1799
1645
 
1800
1646
  export declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1801
1647
  host: WorkbenchHost;
1648
+ layout: WorkbenchLayoutModel;
1802
1649
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1803
1650
  unregisterModule(moduleId: string): void;
1804
1651
  }
1805
1652
 
1806
1653
  declare interface WorkbenchCoreContributionContext {
1654
+ pinPlacement(identity: PlacementIdentity): void;
1655
+ closePlacement(identity: PlacementIdentity): void;
1807
1656
  breadcrumbs: WorkbenchBreadcrumbController;
1808
1657
  commandPalette: WorkbenchCommandPaletteController;
1809
1658
  commandPaletteResources: CommandPaletteResourceRegistry;
@@ -1811,19 +1660,27 @@ declare interface WorkbenchCoreContributionContext {
1811
1660
  composition: WorkbenchCompositionController;
1812
1661
  context: ContextKeyService;
1813
1662
  focus: WorkbenchFocusController;
1814
- history: HistoryController;
1815
1663
  keybindings: KeybindingRegistry;
1816
- lastResource: WorkbenchLastResourceController;
1817
- layout: WorkbenchLayoutModel;
1664
+ layout: WorkbenchModuleLayoutModel;
1818
1665
  modes: WorkbenchModeRegistry;
1666
+ modePlacements: WorkbenchModePlacementRegistry;
1667
+ shellPlacements: WorkbenchShellPlacementRegistry;
1819
1668
  navigation: NavigationRegistry;
1820
- navigator: WorkbenchNavigator;
1669
+ navigationTrees: NavigationTreeRegistry;
1821
1670
  notifications: NotificationRegistry;
1822
- panels: WorkbenchPanelsController;
1671
+ overlays: WorkbenchOverlayRegistry;
1672
+ placeholders: WorkbenchPlaceholderRegistry;
1673
+ pageLocations: WorkbenchPageLocationController;
1674
+ pages: WorkbenchPageRegistry<WorkbenchWidgetPlacement>;
1675
+ panelMenuState: WorkbenchPanelMenuStateController;
1823
1676
  preferences: PreferenceRegistry;
1824
- renderers: WorkbenchRenderers;
1677
+ treeViews: WorkbenchTreeViews;
1825
1678
  resources: ResourceRegistry;
1679
+ views: WorkbenchViewRegistry;
1680
+ viewMenus: WorkbenchViewMenuRegistry;
1826
1681
  settings: SettingsRegistry;
1682
+ statusBar: WorkbenchStatusBarRegistry;
1683
+ statuses: WorkbenchStatusRegistry;
1827
1684
  shell: WorkbenchShellController;
1828
1685
  sidePanel: WorkbenchSidePanelController;
1829
1686
  terminal: WorkbenchTerminalController;
@@ -1833,14 +1690,13 @@ declare interface WorkbenchCoreContributionContext {
1833
1690
  onDidChangePrimaryResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1834
1691
  getActiveResource(): ResourceRef | undefined;
1835
1692
  onDidChangeActiveResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1693
+ registerChildModule(module: WorkbenchModuleContribution): Disposable_2;
1836
1694
  }
1837
1695
 
1838
1696
  declare interface WorkbenchFileIconThemeStoreState {
1839
1697
  themes: readonly FileIconThemePreferenceOption[];
1840
1698
  }
1841
1699
 
1842
- export declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1843
-
1844
1700
  declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1845
1701
 
1846
1702
  export declare interface WorkbenchFocusController {
@@ -1859,10 +1715,7 @@ declare interface WorkbenchFocusState {
1859
1715
  activeRegion: WorkbenchFocusRegionId | undefined;
1860
1716
  }
1861
1717
 
1862
- declare interface WorkbenchHistoryPersistence {
1863
- getHistory(scope?: string): PersistedWorkbenchHistory | undefined;
1864
- setHistory(state: PersistedWorkbenchHistory, scope?: string): void;
1865
- }
1718
+ export declare type WorkbenchHierarchyNode = ResourceRef | WorkbenchViewHierarchyNode;
1866
1719
 
1867
1720
  export declare interface WorkbenchHost {
1868
1721
  getSnapshot(): WorkbenchSnapshot;
@@ -1873,18 +1726,12 @@ export declare interface WorkbenchHost {
1873
1726
  getPersistenceScope(): string | undefined;
1874
1727
  }
1875
1728
 
1876
- declare interface WorkbenchLastResourceController {
1877
- get(): ResourceRef | undefined;
1878
- set(resource: ResourceRef | undefined): void;
1879
- restore(): Promise<boolean>;
1880
- }
1881
-
1882
1729
  export declare interface WorkbenchLayout {
1883
1730
  regions: Record<WorkbenchRegion, WorkbenchRegionState>;
1884
1731
  locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1885
1732
  activeWidgetId?: string;
1886
1733
  activeLocationWidgetId?: string;
1887
- activeResourceUri?: string;
1734
+ activeResourceKey?: string;
1888
1735
  }
1889
1736
 
1890
1737
  declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
@@ -1895,22 +1742,15 @@ declare interface WorkbenchLayoutStoreState {
1895
1742
  placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
1896
1743
  }
1897
1744
 
1898
- declare type WorkbenchLocationContribution = WidgetContribution & WorkbenchPanelMenusContribution;
1899
-
1900
- export declare interface WorkbenchLocationEligibility {
1745
+ declare interface WorkbenchLocationEligibility {
1901
1746
  modeIds?: string[];
1902
1747
  resourceKinds?: string[];
1903
1748
  resourceIds?: string[];
1904
1749
  canOpen?(resource: ResourceRef): boolean;
1905
- }
1906
-
1907
- declare interface WorkbenchLocationRef {
1908
- key: string;
1909
- modeId?: string;
1910
- resource?: ResourceRef;
1911
- contributionId?: string;
1912
- instanceKey?: string;
1913
- title?: string;
1750
+ canOpenLocation?(location: {
1751
+ resource?: ResourceRef;
1752
+ viewId?: string;
1753
+ }): boolean;
1914
1754
  }
1915
1755
 
1916
1756
  export declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
@@ -1934,7 +1774,12 @@ declare type WorkbenchModeChangeListener = () => void;
1934
1774
  export declare interface WorkbenchModeContribution {
1935
1775
  id: string;
1936
1776
  label?: string;
1777
+ defaultTheme?: string;
1778
+ floatingPanels?: "visible" | "hidden";
1779
+ chrome?: Partial<Record<"nav" | "sidenav" | "activity" | "status", string | false>>;
1937
1780
  panels?: readonly WorkbenchPanelRegion[];
1781
+ /** Region-level layout policy while this mode is active. */
1782
+ regionSettings?: Partial<Record<WorkbenchRegion, WorkbenchRegionSettings>>;
1938
1783
  resourceKinds?: readonly string[];
1939
1784
  defaultResource?: ResourceRef | (() => Promise<ResourceRef | undefined> | ResourceRef | undefined);
1940
1785
  listAddablePanels?(context: WorkbenchModeAddablePanelContext): readonly WorkbenchModeAddablePanel[];
@@ -1944,6 +1789,31 @@ export declare interface WorkbenchModeContribution {
1944
1789
  reconcile?(ctx: WorkbenchModeActivationContext): void;
1945
1790
  }
1946
1791
 
1792
+ export declare interface WorkbenchModePlacementContribution extends WorkbenchPlacementPresentation {
1793
+ readonly id: string;
1794
+ readonly ref: PlacementRef;
1795
+ readonly modeId: string;
1796
+ readonly item: WorkbenchOwnedPlacementItem;
1797
+ readonly region: DockedWorkbenchRegion;
1798
+ readonly order?: number;
1799
+ readonly movableTo?: readonly DockedWorkbenchRegion[];
1800
+ }
1801
+
1802
+ export declare interface WorkbenchModePlacementRegistry {
1803
+ registerPlacement(placement: WorkbenchModePlacementContribution): Disposable_2;
1804
+ getPlacement(ref: PlacementRef): WorkbenchModePlacementContribution | undefined;
1805
+ listPlacements(modeId?: string): WorkbenchModePlacementContribution[];
1806
+ openPlacement(input: OpenModePlacementTarget): PlacementIdentity;
1807
+ updatePlacement(identity: PlacementIdentity, input: {
1808
+ resource?: ResourceRef;
1809
+ title?: string;
1810
+ open?: PageOpenIntent;
1811
+ }): void;
1812
+ closePlacement(identity: PlacementIdentity): void;
1813
+ resolvePlacements(modeId: string, context?: OwnedPlacementLocationContext): readonly ResolvedOwnedPlacement<WorkbenchWidgetPlacement>[];
1814
+ onDidChange(listener: () => void): Disposable_2;
1815
+ }
1816
+
1947
1817
  export declare interface WorkbenchModeRegistry {
1948
1818
  store: WorkbenchStore<WorkbenchModeStoreState>;
1949
1819
  dispose(): void;
@@ -1977,74 +1847,7 @@ export declare interface WorkbenchModuleContribution {
1977
1847
 
1978
1848
  export declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1979
1849
 
1980
- declare interface WorkbenchNavigationCommit {
1981
- modeId: string | undefined;
1982
- resource: ResourceRef | undefined;
1983
- replaceActive: boolean;
1984
- }
1985
-
1986
- declare type WorkbenchNavigationDiagnosticCode = "navigation_mode_missing" | "navigation_resource_missing" | "navigation_resource_incompatible" | "navigation_default_missing" | "navigation_target_stale";
1987
-
1988
- declare interface WorkbenchNavigationEntry {
1989
- entryId: string;
1990
- recordedAt: number;
1991
- location: WorkbenchLocationRef;
1992
- selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1993
- kind: "resource" | "widget" | "mode";
1994
- modeId?: string;
1995
- resource?: ResourceRef;
1996
- widgetId?: string;
1997
- contributionId?: string;
1998
- title?: string;
1999
- closedSubPanel?: WorkbenchClosedSubPanel;
2000
- }
2001
-
2002
- declare type WorkbenchNavigationResult = {
2003
- ok: true;
2004
- modeId: string | undefined;
2005
- resource: ResourceRef | undefined;
2006
- } | {
2007
- ok: false;
2008
- code: WorkbenchNavigationDiagnosticCode;
2009
- message: string;
2010
- };
2011
-
2012
- declare interface WorkbenchNavigationTarget {
2013
- modeId?: string;
2014
- resource?: ResourceRef;
2015
- replaceActive?: boolean;
2016
- }
2017
-
2018
- declare interface WorkbenchNavigator {
2019
- configure(hooks: WorkbenchNavigatorHostHooks): void;
2020
- getSelectedResource(): ResourceRef | undefined;
2021
- open(target: WorkbenchNavigationTarget): Promise<WorkbenchNavigationResult>;
2022
- commitContext(input: WorkbenchNavigatorCommitInput): WorkbenchNavigationResult;
2023
- getLastResource(projectId: string | undefined, modeId: string): ResourceRef | undefined;
2024
- forgetResource(uri: string): void;
2025
- onDidCommit(listener: (commit: WorkbenchNavigationCommit) => void): {
2026
- dispose(): void;
2027
- };
2028
- }
2029
-
2030
- declare interface WorkbenchNavigatorCommitInput {
2031
- modeId?: string | null;
2032
- resource?: ResourceRef | null;
2033
- replaceActive?: boolean;
2034
- present?: boolean;
2035
- }
2036
-
2037
- declare interface WorkbenchNavigatorHostHooks {
2038
- getProjectId?(): string | undefined;
2039
- getSelectedResource?(): ResourceRef | undefined;
2040
- interpretSelection?(resource: ResourceRef): ResourceRef | undefined;
2041
- applySelection?(resource: ResourceRef | undefined): void;
2042
- applyScope?(commit: WorkbenchNavigationCommit): void;
2043
- applyBreadcrumb?(resource: ResourceRef | undefined): void;
2044
- presentResource?(resource: ResourceRef, input: {
2045
- replaceActive: boolean;
2046
- }): Promise<unknown> | unknown;
2047
- }
1850
+ declare type WorkbenchModuleLayoutModel = Omit<WorkbenchLayoutModel, "registerPanel" | "registerWidget" | "openPanel" | "openWidget" | "registerPlaceholder" | "registerPanelMenu">;
2048
1851
 
2049
1852
  export declare interface WorkbenchNotification {
2050
1853
  id?: string;
@@ -2080,7 +1883,162 @@ declare interface WorkbenchNotificationStoreState {
2080
1883
  notifications: Record<string, RegisteredWorkbenchNotification>;
2081
1884
  }
2082
1885
 
2083
- export declare interface WorkbenchPanelContribution {
1886
+ export declare interface WorkbenchOverlayContribution extends Omit<WorkbenchPlacementPresentation, "mountStrategy"> {
1887
+ id: string;
1888
+ viewId: string;
1889
+ closable?: boolean;
1890
+ }
1891
+
1892
+ export declare interface WorkbenchOverlayRegistry {
1893
+ registerOverlay(overlay: WorkbenchOverlayContribution): Disposable_2;
1894
+ getOverlay(id: string): WorkbenchOverlayContribution | undefined;
1895
+ listOverlays(): WorkbenchOverlayContribution[];
1896
+ openOverlay(id: string, input?: OpenWorkbenchOverlayInput): string;
1897
+ closeOverlay(instanceId: string): void;
1898
+ }
1899
+
1900
+ declare type WorkbenchOwnedPlacementItem = PlacementItem;
1901
+
1902
+ export declare interface WorkbenchPageBrowserEntry {
1903
+ url: string;
1904
+ state?: unknown;
1905
+ }
1906
+
1907
+ declare interface WorkbenchPageContribution {
1908
+ id: string;
1909
+ ref: PageRef;
1910
+ title?: Localizable<string>;
1911
+ icon?: string;
1912
+ path: string;
1913
+ modeId: string;
1914
+ parentId?: string;
1915
+ resource?: ResourceConstraint;
1916
+ main: WorkbenchPageMain;
1917
+ slots: readonly WorkbenchPageSlot[];
1918
+ }
1919
+
1920
+ export declare interface WorkbenchPageLocationBrowser {
1921
+ current(): WorkbenchPageBrowserEntry;
1922
+ push(entry: WorkbenchPageBrowserEntry): void;
1923
+ replace(entry: WorkbenchPageBrowserEntry): void;
1924
+ back(): void;
1925
+ forward(): void;
1926
+ onPopState(listener: (entry: WorkbenchPageBrowserEntry) => void): {
1927
+ dispose(): void;
1928
+ };
1929
+ }
1930
+
1931
+ export declare interface WorkbenchPageLocationController {
1932
+ historyStore: WorkbenchStore<WorkbenchPageLocationHistoryState>;
1933
+ setProject(projectId: string): void;
1934
+ clearProject(): void;
1935
+ isCurrentProjectUrl(projectId: string): boolean;
1936
+ hasCurrentPageUrl(projectId: string): boolean;
1937
+ boot(projectId: string): WorkbenchPageNavigationResult;
1938
+ switchProject(projectId: string): WorkbenchPageNavigationResult;
1939
+ navigate(target: NavigationTargetPage_2): WorkbenchPageNavigationResult;
1940
+ replay(location: PageLocation): WorkbenchPageNavigationResult;
1941
+ navigateToParent(): WorkbenchPageNavigationResult;
1942
+ closePlacement(identity: PlacementIdentity): WorkbenchPageNavigationResult;
1943
+ goBack(): void;
1944
+ goForward(): void;
1945
+ dispose(): void;
1946
+ }
1947
+
1948
+ export declare interface WorkbenchPageLocationDiagnostic {
1949
+ code: "page-location-unresolved";
1950
+ source: "boot" | "history" | "navigation" | "project-switch";
1951
+ message: string;
1952
+ }
1953
+
1954
+ declare interface WorkbenchPageLocationHistoryState {
1955
+ canGoBack: boolean;
1956
+ canGoForward: boolean;
1957
+ }
1958
+
1959
+ export declare interface WorkbenchPageLocationPersistence {
1960
+ load(projectId: string): PageLocation | undefined;
1961
+ save(projectId: string, location: PageLocation): void;
1962
+ }
1963
+
1964
+ declare type WorkbenchPageMain = PageMain extends infer Main ? Main extends PageMain ? Omit<Main, "tab"> & {
1965
+ readonly tab?: WorkbenchPlacementPresentation["tab"];
1966
+ } : never : never;
1967
+
1968
+ export declare type WorkbenchPageNavigationResult = {
1969
+ ok: true;
1970
+ location: PageLocation;
1971
+ } | {
1972
+ ok: false;
1973
+ diagnostic: WorkbenchPageLocationDiagnostic;
1974
+ };
1975
+
1976
+ export declare interface WorkbenchPagePersistenceScope {
1977
+ scope?: string;
1978
+ carryRegions?: readonly WorkbenchRegion[];
1979
+ }
1980
+
1981
+ export declare interface WorkbenchPagePersistenceScopeInput {
1982
+ currentScope?: string;
1983
+ modeId?: string;
1984
+ pageId?: string;
1985
+ projectId?: string;
1986
+ resource?: ResourceRef;
1987
+ }
1988
+
1989
+ declare interface WorkbenchPageRegistry<Value> {
1990
+ store: WorkbenchStore<WorkbenchPageRegistryStoreState<Value>>;
1991
+ registerPage(page: WorkbenchPageContribution): {
1992
+ dispose(): void;
1993
+ };
1994
+ getPage(pageId: string): WorkbenchPageContribution | undefined;
1995
+ listPages(): WorkbenchPageContribution[];
1996
+ pinPlacement(identity: PlacementIdentity): void;
1997
+ openSlot(input: WorkbenchPageSlotOpenInput): void;
1998
+ }
1999
+
2000
+ declare interface WorkbenchPageRegistryStoreState<Value> {
2001
+ pages: Readonly<Record<string, WorkbenchPageContribution>>;
2002
+ pageStates: Readonly<Record<string, WorkbenchPageRuntimeState>>;
2003
+ projectId?: string;
2004
+ location?: PageLocation;
2005
+ activeModeId?: string;
2006
+ activePageId?: string;
2007
+ placements: readonly ResolvedOwnedPlacement<Value>[];
2008
+ reconciliation: OwnedPlacementReconciliation<Value>;
2009
+ }
2010
+
2011
+ declare interface WorkbenchPageResourceCodec {
2012
+ normalize(resource: ResourceRef): ResourceRef;
2013
+ toUri(resource: ResourceRef): string;
2014
+ fromUri(uri: string): ResourceRef | undefined;
2015
+ }
2016
+
2017
+ declare interface WorkbenchPageRuntimeState {
2018
+ openStaticSlotIds: readonly string[];
2019
+ resourceInstances: Readonly<Record<string, readonly WorkbenchPageSlotInstance[]>>;
2020
+ activePrimaryInstanceKey?: string;
2021
+ }
2022
+
2023
+ declare interface WorkbenchPageSlot extends Omit<PageSlot, "tab"> {
2024
+ readonly tab?: WorkbenchPlacementPresentation["tab"];
2025
+ }
2026
+
2027
+ declare interface WorkbenchPageSlotInstance {
2028
+ instanceKey: string;
2029
+ resource: ResourceRef;
2030
+ section?: FileRendererSectionTarget;
2031
+ open?: PageOpenIntent;
2032
+ }
2033
+
2034
+ declare interface WorkbenchPageSlotOpenInput {
2035
+ pageId: string;
2036
+ slotId: string;
2037
+ resource?: ResourceRef;
2038
+ open?: PageOpenIntent;
2039
+ }
2040
+
2041
+ declare interface WorkbenchPanelContribution {
2084
2042
  id: string;
2085
2043
  title: string;
2086
2044
  icon?: string;
@@ -2090,16 +2048,15 @@ export declare interface WorkbenchPanelContribution {
2090
2048
  singleton?: boolean;
2091
2049
  reuse?: WorkbenchPanelReusePolicy;
2092
2050
  mountStrategy?: WorkbenchPanelMountStrategy;
2051
+ closable?: boolean;
2093
2052
  hiddenByDefault?: boolean;
2094
- subPanelsOnly?: boolean;
2095
2053
  regionSize?: WorkbenchRegionSize;
2096
2054
  regionCollapsible?: boolean;
2097
2055
  headerBorderBottom?: boolean;
2098
- floatingPanels?: WorkbenchFloatingPanelVisibility;
2099
2056
  resourceKinds?: string[];
2100
2057
  eligibleLocations?: WorkbenchLocationEligibility;
2101
2058
  priority?: number;
2102
- openCommandId?: string;
2059
+ openCommand?: WorkbenchCommandTarget;
2103
2060
  tab?: WorkbenchPanelTab;
2104
2061
  config?: unknown;
2105
2062
  canOpen?(resource: ResourceRef): boolean;
@@ -2111,11 +2068,14 @@ export declare interface WorkbenchPanelContribution {
2111
2068
  export declare interface WorkbenchPanelInstance {
2112
2069
  instanceId: string;
2113
2070
  panelId: string;
2071
+ placementIdentity?: PlacementIdentity;
2072
+ viewId?: string;
2114
2073
  ownerId?: string;
2115
2074
  source?: ContributionSource;
2116
2075
  resource?: ResourceRef;
2117
- resourceUri?: string;
2118
- ownerResourceUri?: string;
2076
+ section?: FileRendererSectionTarget;
2077
+ resourceKey?: string;
2078
+ ownerResourceKey?: string;
2119
2079
  title?: string;
2120
2080
  pinned?: boolean;
2121
2081
  closable: boolean;
@@ -2130,7 +2090,7 @@ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region"
2130
2090
  fallbackRegion?: WorkbenchPanelMenuRegion;
2131
2091
  };
2132
2092
 
2133
- export declare interface WorkbenchPanelMenuDefinition {
2093
+ declare interface WorkbenchPanelMenuDefinition {
2134
2094
  id: string;
2135
2095
  title: string;
2136
2096
  icon?: string;
@@ -2172,15 +2132,32 @@ declare const workbenchPanelMenuRegions: {
2172
2132
  };
2173
2133
  };
2174
2134
 
2175
- declare interface WorkbenchPanelMenusContribution {
2176
- panelMenus?: readonly WorkbenchPanelMenuDefinition[];
2135
+ export declare type WorkbenchPanelMenuSide = "left" | "right";
2136
+
2137
+ declare interface WorkbenchPanelMenuState {
2138
+ openByMenuId: Record<string, boolean>;
2177
2139
  }
2178
2140
 
2179
- export declare type WorkbenchPanelMenuSide = "left" | "right";
2141
+ declare type WorkbenchPanelMenuStateChangeListener = (state: WorkbenchPanelMenuState) => void;
2142
+
2143
+ declare interface WorkbenchPanelMenuStateController {
2144
+ store: WorkbenchStore<WorkbenchPanelMenuState>;
2145
+ isOpen(menuId: string): boolean;
2146
+ setOpen(menuId: string, open: boolean): void;
2147
+ toggle(menuId: string): void;
2148
+ setPersistenceScope(scope: string | undefined): void;
2149
+ getPersistenceScope(): string | undefined;
2150
+ onDidChange(listener: WorkbenchPanelMenuStateChangeListener): Disposable_2;
2151
+ }
2152
+
2153
+ declare interface WorkbenchPanelMenuStatePersistenceAdapter {
2154
+ getMenuStates(scope?: string): PersistedWorkbenchPanelMenuState | undefined;
2155
+ setMenuStates(state: PersistedWorkbenchPanelMenuState, scope?: string): void;
2156
+ }
2180
2157
 
2181
2158
  export declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
2182
2159
 
2183
- export declare type WorkbenchPanelOpenStrategy = {
2160
+ declare type WorkbenchPanelOpenStrategy = {
2184
2161
  kind: "persistent";
2185
2162
  position?: WorkbenchTabPosition;
2186
2163
  } | {
@@ -2205,41 +2182,50 @@ export declare interface WorkbenchPanelRenderInput {
2205
2182
  refresh: () => void;
2206
2183
  }
2207
2184
 
2208
- export declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
2185
+ declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
2209
2186
 
2210
- declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
2187
+ export declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2211
2188
 
2212
- declare interface WorkbenchPanelsController {
2213
- store: WorkbenchStore<WorkbenchPanelsState>;
2214
- isOpen(regionId: string): boolean;
2215
- setOpen(regionId: string, open: boolean): void;
2216
- toggle(regionId: string): void;
2217
- setPersistenceScope(scope: string | undefined): void;
2218
- getPersistenceScope(): string | undefined;
2219
- onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
2189
+ export declare interface WorkbenchPersistenceAdapter {
2190
+ getSnapshot(scope?: string): WorkbenchSnapshot | undefined;
2191
+ setSnapshot(snapshot: WorkbenchSnapshot, scope?: string): void;
2192
+ flush?(): void;
2193
+ dispose?(): void;
2220
2194
  }
2221
2195
 
2222
- declare interface WorkbenchPanelsPersistenceAdapter {
2223
- getPanelStates(scope?: string): PersistedWorkbenchPanels | undefined;
2224
- setPanelStates(state: PersistedWorkbenchPanels, scope?: string): void;
2196
+ export declare interface WorkbenchPlaceholderContribution {
2197
+ id: string;
2198
+ viewId: string;
2199
+ title?: string;
2200
+ region: WorkbenchRegion;
2201
+ regionSize?: WorkbenchRegionSize;
2202
+ regionCollapsible?: boolean;
2203
+ config?: unknown;
2225
2204
  }
2226
2205
 
2227
- declare interface WorkbenchPanelsState {
2228
- openByRegionId: Record<string, boolean>;
2206
+ export declare interface WorkbenchPlaceholderRegistry {
2207
+ registerPlaceholder(placeholder: WorkbenchPlaceholderContribution, metadata?: ContributionMetadata): Disposable_2;
2229
2208
  }
2230
2209
 
2231
- export declare type WorkbenchPanelTab = WorkbenchWidgetTab;
2210
+ export declare interface WorkbenchPlacementPresentation {
2211
+ mountStrategy?: WidgetMountStrategy;
2212
+ hiddenByDefault?: boolean;
2213
+ headerBorderBottom?: boolean;
2214
+ tab?: WorkbenchPanelTab;
2215
+ config?: unknown;
2216
+ }
2232
2217
 
2233
- export declare interface WorkbenchPersistenceAdapter {
2234
- getSnapshot(scope?: string): WorkbenchSnapshot | undefined;
2235
- setSnapshot(snapshot: WorkbenchSnapshot, scope?: string): void;
2236
- flush?(): void;
2237
- dispose?(): void;
2218
+ export declare interface WorkbenchReactViewBody {
2219
+ kind: "react";
2220
+ render: WorkbenchRendererRegistration["render"];
2238
2221
  }
2239
2222
 
2240
2223
  export declare type WorkbenchRegion = (typeof workbenchRegions)[number];
2241
2224
 
2242
- export 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"];
2225
+ export declare const workbenchRegions: readonly ["nav", "activity", "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"];
2226
+
2227
+ /** Region-level layout policy owned by the active mode or the host, never by a placement. */
2228
+ declare type WorkbenchRegionSettings = ModeRegionSettings;
2243
2229
 
2244
2230
  export declare interface WorkbenchRegionSize {
2245
2231
  defaultPx?: number;
@@ -2259,44 +2245,18 @@ export declare const workbenchRegionTabAddMenuPath: (region: string) => MenuPath
2259
2245
 
2260
2246
  export declare const workbenchRegionTabLeadingMenuPath: (region: string) => MenuPath;
2261
2247
 
2262
- declare type WorkbenchRendererChangeListener = () => void;
2263
-
2264
- export declare type WorkbenchRendererRegistration = {
2248
+ declare interface WorkbenchRendererRegistration {
2265
2249
  id: string;
2266
- keepAlive?: false;
2267
2250
  render: (input: WorkbenchPanelRenderInput) => unknown;
2268
- } | {
2269
- id: string;
2270
- keepAlive: true;
2271
- render: () => unknown;
2272
- };
2273
-
2274
- export declare interface WorkbenchRendererRegistry {
2275
- store: WorkbenchStore<WorkbenchRendererStoreState>;
2276
- registerRenderer(renderer: WorkbenchRendererRegistration): Disposable_2;
2277
- getRenderer(id: string): WorkbenchRendererRegistration | undefined;
2278
- listRenderers(): WorkbenchRendererRegistration[];
2279
- onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
2280
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
2281
- getHost(rendererId: string): HTMLElement | undefined;
2282
- getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
2283
- }
2284
-
2285
- declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
2286
-
2287
- declare interface WorkbenchRendererStoreState {
2288
- renderers: Record<string, WorkbenchRendererRegistration>;
2289
- hosts: Record<string, RegisteredKeepAliveHost>;
2290
- claims: Record<string, WorkbenchPanelRenderInput>;
2291
2251
  }
2292
2252
 
2293
2253
  export declare const workbenchResourceIdContextKey = "workbench.resource.id";
2294
2254
 
2295
- export declare const workbenchResourceKindContextKey = "workbench.resource.kind";
2296
-
2297
2255
  export declare const workbenchResourceMetadataContextKey: (key: string) => string;
2298
2256
 
2299
- export declare const workbenchSelectionResourceUriMetadataKey = "workbench.selectionResourceUri";
2257
+ export declare const workbenchResourceTypeContextKey = "workbench.resource.type";
2258
+
2259
+ export declare const workbenchSelectionResourceKeyMetadataKey = "workbench.selectionResourceKey";
2300
2260
 
2301
2261
  export declare interface WorkbenchShellController {
2302
2262
  getRegionState(region: WorkbenchRegion): WorkbenchShellRegionState;
@@ -2307,7 +2267,29 @@ export declare interface WorkbenchShellController {
2307
2267
  onDidChange(listener: () => void): Disposable_2;
2308
2268
  }
2309
2269
 
2310
- export declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
2270
+ export declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | "side";
2271
+
2272
+ export declare interface WorkbenchShellPlacementContribution extends WorkbenchPlacementPresentation {
2273
+ readonly id: string;
2274
+ readonly item: WorkbenchOwnedPlacementItem;
2275
+ readonly region: WorkbenchRegion;
2276
+ readonly order?: number;
2277
+ }
2278
+
2279
+ export declare interface WorkbenchShellPlacementRegistry {
2280
+ registerPlacement(placement: WorkbenchShellPlacementContribution): Disposable_2;
2281
+ getPlacement(placementId: string): WorkbenchShellPlacementContribution | undefined;
2282
+ listPlacements(): WorkbenchShellPlacementContribution[];
2283
+ openPlacement(input: OpenWorkbenchShellPlacementInput): PlacementIdentity;
2284
+ updatePlacement(identity: PlacementIdentity, input: {
2285
+ resource?: ResourceRef;
2286
+ title?: string;
2287
+ open?: PageOpenIntent;
2288
+ }): void;
2289
+ closePlacement(identity: PlacementIdentity): void;
2290
+ resolvePlacements(context?: OwnedPlacementLocationContext): readonly ResolvedOwnedPlacement<WorkbenchWidgetPlacement>[];
2291
+ onDidChange(listener: () => void): Disposable_2;
2292
+ }
2311
2293
 
2312
2294
  export declare interface WorkbenchShellRegionState {
2313
2295
  open: boolean;
@@ -2317,6 +2299,7 @@ export declare interface WorkbenchShellRegionState {
2317
2299
  declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
2318
2300
 
2319
2301
  declare interface WorkbenchSidePanelController {
2302
+ canFloat(): boolean;
2320
2303
  store: WorkbenchStore<WorkbenchSidePanelState>;
2321
2304
  getMode(): WorkbenchSidePanelMode;
2322
2305
  setMode(mode: WorkbenchSidePanelMode): void;
@@ -2340,6 +2323,52 @@ export declare interface WorkbenchSnapshot {
2340
2323
  layout: WorkbenchLayout;
2341
2324
  }
2342
2325
 
2326
+ export declare interface WorkbenchStatusBarItem {
2327
+ id: string;
2328
+ viewId: string;
2329
+ slot: WorkbenchStatusBarSlot;
2330
+ order?: number;
2331
+ isVisible?(): boolean;
2332
+ }
2333
+
2334
+ export declare interface WorkbenchStatusBarRegistry {
2335
+ store: WorkbenchStore<WorkbenchStatusBarRegistryState>;
2336
+ registerItem(item: WorkbenchStatusBarItem): Disposable_2;
2337
+ getItem(id: string): WorkbenchStatusBarItem | undefined;
2338
+ listItems(): WorkbenchStatusBarItem[];
2339
+ listVisibleItems(slot?: WorkbenchStatusBarSlot): WorkbenchStatusBarItem[];
2340
+ }
2341
+
2342
+ export declare interface WorkbenchStatusBarRegistryState {
2343
+ items: Record<string, WorkbenchStatusBarItem>;
2344
+ }
2345
+
2346
+ export declare type WorkbenchStatusBarSlot = "leading" | "trailing";
2347
+
2348
+ export declare interface WorkbenchStatusRegistry {
2349
+ store: WorkbenchStore<WorkbenchStatusRegistryState>;
2350
+ registerStatusSet(contribution: WorkbenchStatusSetContribution, metadata?: ContributionMetadata): Disposable_2;
2351
+ getStatusSet(id: string): RegisteredWorkbenchStatusSet | undefined;
2352
+ listStatusSets(): RegisteredWorkbenchStatusSet[];
2353
+ getStatuses(id: string): readonly WorkflowStatus[] | undefined;
2354
+ load(id: string): Promise<readonly WorkflowStatus[]>;
2355
+ query(id: string): Promise<readonly WorkflowStatus[]>;
2356
+ save(id: string, statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]>;
2357
+ }
2358
+
2359
+ export declare interface WorkbenchStatusRegistryState {
2360
+ statusSets: Record<string, RegisteredWorkbenchStatusSet>;
2361
+ values: Record<string, readonly WorkflowStatus[]>;
2362
+ }
2363
+
2364
+ export declare interface WorkbenchStatusSetContribution {
2365
+ id: string;
2366
+ title: string;
2367
+ actions?: readonly WorkflowStatusAction[];
2368
+ query(): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2369
+ save?(statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2370
+ }
2371
+
2343
2372
  declare interface WorkbenchStore<TState> {
2344
2373
  getState(): TState;
2345
2374
  getInitialState(): TState;
@@ -2356,18 +2385,27 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2356
2385
 
2357
2386
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2358
2387
 
2359
- declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2360
- region: WorkbenchPanelRegion;
2361
- fallbackRegion?: WorkbenchPanelRegion;
2362
- } & WorkbenchPanelMenusContribution;
2388
+ export declare type WorkbenchTabAction = ({
2389
+ kind: "command";
2390
+ } & WorkbenchCommandTarget) | {
2391
+ kind: "navigation";
2392
+ target: NavigationTarget;
2393
+ };
2363
2394
 
2364
- declare interface WorkbenchSubPanelRef {
2365
- contributionId: string;
2366
- resourceUri?: string;
2367
- instanceKey?: string;
2395
+ export declare interface WorkbenchTabMenuGroup {
2396
+ id: string;
2397
+ rows: readonly WorkbenchTabMenuRow[];
2368
2398
  }
2369
2399
 
2370
- export declare const workbenchSwitchModeCommandId = "workbench.action.switchMode";
2400
+ export declare interface WorkbenchTabMenuRow {
2401
+ id: string;
2402
+ label: string;
2403
+ icon?: string;
2404
+ iconColor?: string;
2405
+ selected?: boolean;
2406
+ disabled?: boolean;
2407
+ action?: WorkbenchTabAction;
2408
+ }
2371
2409
 
2372
2410
  export declare type WorkbenchTabPosition = "start" | "end" | {
2373
2411
  beforeWidgetId: string;
@@ -2377,6 +2415,17 @@ export declare type WorkbenchTabPosition = "start" | "end" | {
2377
2415
 
2378
2416
  export declare type WorkbenchTabRetention = "preview" | "persistent";
2379
2417
 
2418
+ export declare interface WorkbenchTabSnapshot {
2419
+ label?: string;
2420
+ icon?: string;
2421
+ indicator?: {
2422
+ icon: string;
2423
+ color?: string;
2424
+ label?: string;
2425
+ };
2426
+ menu?: readonly WorkbenchTabMenuGroup[];
2427
+ }
2428
+
2380
2429
  export declare interface WorkbenchTerminalController {
2381
2430
  store: WorkbenchStore<WorkbenchTerminalState>;
2382
2431
  /** True once the host injected a session opener. */
@@ -2384,6 +2433,7 @@ export declare interface WorkbenchTerminalController {
2384
2433
  setSessionOpener(opener: WorkbenchTerminalSessionOpener | null): void;
2385
2434
  /** Opens a session; the live adapter stays host-side and only the id is returned. */
2386
2435
  open(input: {
2436
+ bindingId?: string;
2387
2437
  request: WorkbenchTerminalSessionRequest;
2388
2438
  title?: string;
2389
2439
  }): Promise<{
@@ -2402,6 +2452,7 @@ export declare interface WorkbenchTerminalController {
2402
2452
  sessionId: string;
2403
2453
  signal?: string;
2404
2454
  }): Promise<void>;
2455
+ killBinding(bindingId: string): Promise<void>;
2405
2456
  subscribe(sessionId: string, sink: WorkbenchTerminalSessionSink): () => void;
2406
2457
  getSession(sessionId: string): WorkbenchTerminalSessionModel | undefined;
2407
2458
  listSessions(): WorkbenchTerminalSessionModel[];
@@ -2467,14 +2518,70 @@ export declare const workbenchTopHeaderLeadingMenuPath: MenuPath;
2467
2518
 
2468
2519
  export declare const workbenchTopHeaderTrailingMenuPath: MenuPath;
2469
2520
 
2521
+ declare type WorkbenchTreeViews = Pick<TreeRendererRegistry, "getTreeState" | "setNodeExpanded" | "setSectionExpanded" | "setSelectedNode">;
2522
+
2523
+ export declare type WorkbenchViewBody = WorkbenchReactViewBody | NativeViewBody<"tree", TreeRendererContribution> | NativeViewBody<"file", FileRendererContribution> | NativeViewBody<"controls", ControlsRendererContribution> | NativeViewBody<"kanban", KanbanRendererContribution> | NativeViewBody<"dataTable", DataTableRendererContribution>;
2524
+
2525
+ export declare interface WorkbenchViewContribution {
2526
+ id: string;
2527
+ title: string;
2528
+ icon?: string;
2529
+ body: WorkbenchViewBody;
2530
+ }
2531
+
2532
+ export declare interface WorkbenchViewHierarchyNode {
2533
+ type: "view";
2534
+ viewId: string;
2535
+ label?: string;
2536
+ icon?: string;
2537
+ }
2538
+
2539
+ export declare const workbenchViewIdContextKey = "workbench.view.id";
2540
+
2541
+ export declare interface WorkbenchViewMenuContribution {
2542
+ id: string;
2543
+ ownerViewId: string;
2544
+ viewId: string;
2545
+ side: "left" | "right";
2546
+ priority?: number;
2547
+ mountStrategy?: "active" | "keep-mounted";
2548
+ hiddenByDefault?: boolean;
2549
+ regionSize?: WorkbenchRegionSize;
2550
+ regionCollapsible?: boolean;
2551
+ headerBorderBottom?: boolean;
2552
+ config?: unknown;
2553
+ }
2554
+
2555
+ export declare interface WorkbenchViewMenuRegistry {
2556
+ registerViewMenu(menu: WorkbenchViewMenuContribution): Disposable_2;
2557
+ getViewMenu(id: string): WorkbenchViewMenuContribution | undefined;
2558
+ listViewMenus(ownerViewId?: string): WorkbenchViewMenuContribution[];
2559
+ definitionsFor(ownerViewId: string, placementId: string): readonly WorkbenchPanelMenuDefinition[];
2560
+ }
2561
+
2562
+ export declare interface WorkbenchViewRegistry {
2563
+ store: WorkbenchStore<WorkbenchViewRegistryStoreState>;
2564
+ registerView(view: WorkbenchViewContribution, metadata?: ContributionMetadata): Disposable_2;
2565
+ getView(viewId: string): RegisteredWorkbenchView | undefined;
2566
+ listViews(): RegisteredWorkbenchView[];
2567
+ refreshView(viewId: string, input?: unknown): void;
2568
+ }
2569
+
2570
+ export declare interface WorkbenchViewRegistryStoreState {
2571
+ views: Record<string, RegisteredWorkbenchView>;
2572
+ }
2573
+
2470
2574
  export declare interface WorkbenchWidgetPlacement {
2471
2575
  widgetId: string;
2472
2576
  contributionId: string;
2577
+ placementIdentity?: PlacementIdentity;
2578
+ viewId?: string;
2473
2579
  ownerId?: string;
2474
2580
  source?: ContributionSource;
2475
2581
  resource?: ResourceRef;
2476
- resourceUri?: string;
2477
- ownerResourceUri?: string;
2582
+ section?: FileRendererSectionTarget;
2583
+ resourceKey?: string;
2584
+ ownerResourceKey?: string;
2478
2585
  title?: string;
2479
2586
  pinned?: boolean;
2480
2587
  closable?: boolean;
@@ -2487,10 +2594,28 @@ export declare interface WorkbenchWidgetPlacement {
2487
2594
 
2488
2595
  declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2489
2596
 
2490
- declare interface WorkbenchWidgetTab {
2491
- contentRendererId?: string;
2492
- /** Custom actions shown when the user activates an already-active tab. */
2493
- customMenuRendererId?: string;
2597
+ export declare interface WorkbenchWidgetTab {
2598
+ getSnapshot(instance: WorkbenchPanelInstance): WorkbenchTabSnapshot;
2599
+ subscribe?(listener: () => void): {
2600
+ dispose(): void;
2601
+ } | (() => void);
2602
+ refreshEvents?: readonly string[];
2603
+ }
2604
+
2605
+ export declare interface WorkflowStatus {
2606
+ id: string;
2607
+ label: string;
2608
+ color: string;
2609
+ icon?: string | null;
2610
+ sortOrder: number;
2611
+ isDefault?: boolean;
2612
+ actions?: readonly string[];
2613
+ }
2614
+
2615
+ export declare interface WorkflowStatusAction {
2616
+ id: string;
2617
+ label: string;
2618
+ icon?: string;
2494
2619
  }
2495
2620
 
2496
2621
  export { }