@pstdio/workbench 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +100 -88
  2. package/dist/context-key-service-W4QEfVdN.js +1031 -0
  3. package/dist/context-key-service-W4QEfVdN.js.map +1 -0
  4. package/dist/extensions.d.ts +739 -275
  5. package/dist/extensions.js +891 -699
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-DrrhYnb_.js.map +1 -1
  8. package/dist/index.d.ts +746 -448
  9. package/dist/index.js +2974 -60
  10. package/dist/index.js.map +1 -1
  11. package/dist/layout-types-DMoZz38-.js +100 -0
  12. package/dist/layout-types-DMoZz38-.js.map +1 -0
  13. package/dist/react.d.ts +735 -231
  14. package/dist/react.js +3562 -2584
  15. package/dist/react.js.map +1 -1
  16. package/dist/storage.d.ts +109 -14
  17. package/dist/storage.js +142 -47
  18. package/dist/storage.js.map +1 -1
  19. package/dist/surface-map-C1pOTUmF.js +52 -0
  20. package/dist/surface-map-C1pOTUmF.js.map +1 -0
  21. package/dist/testing.d.ts +685 -198
  22. package/dist/testing.js +46 -34
  23. package/dist/testing.js.map +1 -1
  24. package/dist/webview-runtime.js +5 -1
  25. package/dist/webview-runtime.js.map +1 -1
  26. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  27. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  28. package/package.json +6 -7
  29. package/dist/context-key-service-C--cHa0B.js +0 -447
  30. package/dist/context-key-service-C--cHa0B.js.map +0 -1
  31. package/dist/core.d.ts +0 -1885
  32. package/dist/core.js +0 -64
  33. package/dist/core.js.map +0 -1
  34. package/dist/surface-reconcile-DkRf01ro.js +0 -260
  35. package/dist/surface-reconcile-DkRf01ro.js.map +0 -1
  36. package/dist/workbench-core-DFpwi8Lo.js +0 -2264
  37. package/dist/workbench-core-DFpwi8Lo.js.map +0 -1
  38. package/dist/workbench-menu-paths-CQVH6z4_.js +0 -11
  39. package/dist/workbench-menu-paths-CQVH6z4_.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,28 +1,8 @@
1
1
  import { ComponentType } from 'react';
2
- import { NamedSet } from 'zustand/middleware';
3
2
  import { ReactNode } from 'react';
4
- import { StoreApi } from 'zustand/vanilla';
5
-
6
- declare type AnchorCandidates = "global" | "scoped";
7
3
 
8
4
  export declare type AnchorId = "primary" | "secondary" | "attached";
9
5
 
10
- declare type AnchorPersistence = "primary" | "derived" | "detached";
11
-
12
- export declare type AnchorReadId = "primary" | "attached";
13
-
14
- export declare type AnchorReconcileAction = {
15
- area: WorkbenchArea;
16
- action: "keep" | "clear";
17
- };
18
-
19
- declare interface AnchorSurface {
20
- role: "anchor";
21
- anchor: AnchorId;
22
- persistence: AnchorPersistence;
23
- candidates: AnchorCandidates;
24
- }
25
-
26
6
  export declare interface AttributeDescriptor {
27
7
  id: string;
28
8
  label: string;
@@ -33,7 +13,7 @@ export declare interface AttributeDescriptor {
33
13
  displayable?: boolean;
34
14
  editable?: boolean;
35
15
  display?: AttributeDisplayDescriptor;
36
- render?: (value: unknown, row: DataRendererRow) => ReactNode;
16
+ render?: (value: unknown, row: KanbanRendererRow) => ReactNode;
37
17
  compare?: (a: unknown, b: unknown) => number;
38
18
  }
39
19
 
@@ -48,7 +28,7 @@ export declare type AttributeKind = AttributeType["kind"];
48
28
  * Reactive source for an entire attribute schema. Lets a contribution
49
29
  * add/remove/edit attributes at runtime without re-registering.
50
30
  */
51
- export declare interface AttributesSource {
31
+ declare interface AttributesSource {
52
32
  subscribe: (listener: () => void) => () => void;
53
33
  getSnapshot: () => AttributeDescriptor[];
54
34
  }
@@ -87,10 +67,6 @@ export declare interface BoardColumnConfig {
87
67
  actions?: BoardColumnAction[];
88
68
  }
89
69
 
90
- declare interface ChromeSurface {
91
- role: "chrome";
92
- }
93
-
94
70
  /**
95
71
  * A data-driven list of items, each opening a contributor-supplied editor. The
96
72
  * framework knows nothing about what an item is — it only calls these hooks.
@@ -102,7 +78,7 @@ export declare interface CollectionSettingsPanel<TItem = unknown> extends Settin
102
78
  itemLabel(item: TItem): string;
103
79
  itemIcon?(item: TItem): string | undefined;
104
80
  groupBy?: SettingsCollectionGroupBy<TItem>;
105
- renderItem(item: TItem, input: WorkbenchWidgetRenderInput): unknown;
81
+ renderItem(item: TItem, input: WorkbenchPanelRenderInput): unknown;
106
82
  actions?: SettingsAction[];
107
83
  }
108
84
 
@@ -243,8 +219,6 @@ export declare interface ControlsQueryResult {
243
219
  readOnly?: boolean;
244
220
  }
245
221
 
246
- declare type ControlsRendererArea = "main-right" | "secondary" | "overlay";
247
-
248
222
  export declare interface ControlsRendererContribution {
249
223
  id: string;
250
224
  title: string;
@@ -264,12 +238,12 @@ export declare interface ControlsRendererContribution {
264
238
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
265
239
  }
266
240
 
267
- export declare type ControlsRendererImplementation = (input: WorkbenchWidgetRenderInput & {
241
+ export declare type ControlsRendererImplementation = (input: WorkbenchPanelRenderInput & {
268
242
  controlsRendererId: string;
269
243
  }) => unknown;
270
244
 
271
245
  export declare interface ControlsRendererLayout {
272
- area?: ControlsRendererArea;
246
+ region?: ControlsRendererRegion;
273
247
  defaultPx?: number;
274
248
  minPx?: number;
275
249
  maxPx?: number;
@@ -281,6 +255,8 @@ export declare interface ControlsRendererRefreshEvent {
281
255
 
282
256
  declare type ControlsRendererRefreshListener = (event: ControlsRendererRefreshEvent) => void;
283
257
 
258
+ declare type ControlsRendererRegion = "main-right-menu" | "secondary" | "overlay";
259
+
284
260
  export declare interface ControlsRendererRegistry {
285
261
  controlsStore: WorkbenchStore<ControlsRendererStoreState>;
286
262
  registerControlsRenderer(contribution: ControlsRendererContribution, metadata?: ContributionMetadata): Disposable_2;
@@ -291,7 +267,7 @@ export declare interface ControlsRendererRegistry {
291
267
  onDidRefreshControlsRenderer(listener: ControlsRendererRefreshListener): Disposable_2;
292
268
  }
293
269
 
294
- export declare interface ControlsRendererStoreState {
270
+ declare interface ControlsRendererStoreState {
295
271
  renderers: Record<string, RegisteredControlsRendererContribution>;
296
272
  }
297
273
 
@@ -307,137 +283,25 @@ export declare interface ControlsUpdateValueInput {
307
283
  resource?: ResourceRef;
308
284
  }
309
285
 
310
- export declare const createCommandPaletteResourceRegistry: () => CommandPaletteResourceRegistry;
311
-
312
- export declare const createCommandRegistry: (input?: CreateCommandRegistryInput) => CommandRegistry;
313
-
314
- declare interface CreateCommandRegistryInput {
315
- context?: ContextKeyService;
316
- }
317
-
318
- export declare const createContextKeyService: () => ContextKeyService;
319
-
320
- export declare const createControlsRendererRegistry: (input: CreateControlsRendererRegistryInput) => ControlsRendererRegistry;
321
-
322
- export declare interface CreateControlsRendererRegistryInput {
323
- rendererRegistry: WorkbenchRendererRegistry;
324
- }
325
-
326
- export declare const createDataRendererRegistry: (input: CreateDataRendererRegistryInput) => DataRendererRegistry;
327
-
328
- export declare interface CreateDataRendererRegistryInput {
329
- rendererRegistry: WorkbenchRendererRegistry;
330
- }
331
-
332
- export declare const createDefaultWorkbenchLayout: () => WorkbenchLayout;
333
-
334
- export declare const createFileIconThemeRegistry: () => FileIconThemeRegistry;
335
-
336
- export declare const createFileRendererRegistry: (input: CreateFileRendererRegistryInput) => FileRendererRegistry;
337
-
338
- export declare interface CreateFileRendererRegistryInput {
339
- rendererRegistry: WorkbenchRendererRegistry;
340
- }
341
-
342
- export declare const createHistoryController: (input: CreateHistoryControllerInput) => HistoryController;
343
-
344
- export declare interface CreateHistoryControllerInput {
345
- layout: LayoutModel;
346
- modes?: Pick<WorkbenchModeRegistry, "getActiveModeId" | "getMode" | "onDidChangeActive" | "setActiveMode">;
347
- resources: ResourceRegistry;
348
- maxEntries?: number;
349
- }
350
-
351
- export declare const createKeybindingRegistry: (deps: KeybindingRegistryDeps) => KeybindingRegistry;
352
-
353
- export declare const createLayoutModel: (input?: CreateLayoutModelInput) => LayoutModel;
354
-
355
- export declare interface CreateLayoutModelInput {
356
- persistence?: LayoutPersistenceAdapter;
357
- }
358
-
359
- export declare const createMenuRegistry: (deps: MenuRegistryDeps) => MenuRegistry;
360
-
361
- export declare const createNavigationRegistry: (input?: CreateNavigationRegistryInput) => NavigationRegistry;
362
-
363
- export declare interface CreateNavigationRegistryInput {
364
- resolveDispatcher?(): NavigationDispatcherContext;
365
- }
366
-
367
- export declare const createNotificationRegistry: () => NotificationRegistry;
368
-
369
- export declare const createPreferenceRegistry: (input?: CreatePreferenceRegistryInput) => PreferenceRegistry;
370
-
371
- export declare interface CreatePreferenceRegistryInput {
372
- persistence?: PreferencePersistenceAdapter;
373
- }
374
-
375
- export declare const createResourceRegistry: (input?: CreateResourceRegistryInput) => ResourceRegistry;
376
-
377
- export declare interface CreateResourceRegistryInput {
378
- getPrimary?: () => ResourceRef | undefined;
379
- }
380
-
381
- export declare const createSettingsRegistry: () => SettingsRegistry;
382
-
383
- export declare const createThemeRegistry: () => ThemeRegistry;
384
-
385
- export declare const createTreeRendererRegistry: (input: CreateTreeRendererRegistryInput) => TreeRendererRegistry;
386
-
387
- export declare interface CreateTreeRendererRegistryInput {
388
- rendererRegistry: WorkbenchRendererRegistry;
389
- persistence?: TreeRendererPersistenceAdapter;
390
- }
391
-
392
- export declare const createWorkbenchBreadcrumbController: () => WorkbenchBreadcrumbController;
393
-
394
- export declare const createWorkbenchCommandPaletteController: (input?: CreateWorkbenchCommandPaletteControllerInput) => WorkbenchCommandPaletteController;
395
-
396
- export declare interface CreateWorkbenchCommandPaletteControllerInput {
397
- initialOpen?: boolean;
398
- }
286
+ export declare const createResourceBreadcrumbItems: (resources: ResourceRegistry, resource: ResourceRef | undefined) => WorkbenchBreadcrumbItem[];
399
287
 
400
288
  export declare const createWorkbenchCore: (input?: CreateWorkbenchCoreInput) => WorkbenchCore;
401
289
 
402
290
  export declare interface CreateWorkbenchCoreInput {
403
291
  isInScope?: (resource: ResourceRef, primary: ResourceRef | undefined) => boolean;
404
292
  layoutPersistence?: LayoutPersistenceAdapter;
293
+ persistence?: WorkbenchPersistenceAdapter;
294
+ historyPersistence?: WorkbenchHistoryPersistence;
405
295
  preferencePersistence?: PreferencePersistenceAdapter;
406
296
  treePersistence?: TreeRendererPersistenceAdapter;
407
297
  panelsPersistence?: WorkbenchPanelsPersistenceAdapter;
298
+ defaultPanelOpenByRegionId?: Partial<Record<WorkbenchRegion, boolean>>;
408
299
  lastResourcePersistence?: LastResourcePersistenceAdapter;
409
- initialSessionPanelMode?: WorkbenchSessionPanelMode;
300
+ initialSidePanelMode?: WorkbenchSidePanelMode;
410
301
  renderers?: CreateWorkbenchRendererRegistryInput;
411
302
  }
412
303
 
413
- export declare const createWorkbenchFocusController: (input: CreateWorkbenchFocusControllerInput) => WorkbenchFocusController;
414
-
415
- export declare interface CreateWorkbenchFocusControllerInput {
416
- context: ContextKeyService;
417
- }
418
-
419
- export declare const createWorkbenchLastResourceController: (input: CreateWorkbenchLastResourceControllerInput) => WorkbenchLastResourceController;
420
-
421
- export declare interface CreateWorkbenchLastResourceControllerInput {
422
- persistence?: LastResourcePersistenceAdapter;
423
- openResource(resource: ResourceRef): Promise<unknown>;
424
- }
425
-
426
- export declare const createWorkbenchModeRegistry: (input: CreateWorkbenchModeRegistryInput) => WorkbenchModeRegistry;
427
-
428
- declare interface CreateWorkbenchModeRegistryInput {
429
- resolveContext(): WorkbenchModeActivationContext;
430
- }
431
-
432
- export declare const createWorkbenchPanelsController: (input?: CreateWorkbenchPanelsControllerInput) => WorkbenchPanelsController;
433
-
434
- export declare interface CreateWorkbenchPanelsControllerInput {
435
- persistence?: WorkbenchPanelsPersistenceAdapter;
436
- }
437
-
438
- export declare const createWorkbenchRendererRegistry: (input?: CreateWorkbenchRendererRegistryInput) => WorkbenchRendererRegistry;
439
-
440
- export declare interface CreateWorkbenchRendererRegistryInput {
304
+ declare interface CreateWorkbenchRendererRegistryInput {
441
305
  initialRenderers?: WorkbenchRendererRegistration[];
442
306
  createHost?: () => HTMLElement;
443
307
  }
@@ -448,129 +312,119 @@ export declare const createWorkbenchSelectionResourceMetadata: (resource: Pick<R
448
312
  "workbench.selectionResourceUri": string;
449
313
  };
450
314
 
451
- export declare const createWorkbenchSessionPanelController: (input?: CreateWorkbenchSessionPanelControllerInput) => WorkbenchSessionPanelController;
452
-
453
- export declare interface CreateWorkbenchSessionPanelControllerInput {
454
- initialMode?: WorkbenchSessionPanelMode;
455
- }
456
-
457
- export declare const createWorkbenchStore: <TState>(input: CreateWorkbenchStoreInput<TState>) => InternalWorkbenchStore<TState>;
458
-
459
- export declare interface CreateWorkbenchStoreInput<TState> {
460
- name?: string;
461
- initialState: TState;
462
- }
463
-
464
- export declare const createWorkbenchTerminalController: () => WorkbenchTerminalController;
465
-
466
315
  /**
467
316
  * Renders its own page. `render` returns `unknown` so core stays React-free — the
468
317
  * React layer treats the result as a node, exactly like WorkbenchRendererRegistration.
469
318
  */
470
319
  export declare interface CustomSettingsPanel extends SettingsPanelBase {
471
320
  kind: "custom";
472
- render(input: WorkbenchWidgetRenderInput): unknown;
321
+ render(input: WorkbenchPanelRenderInput): unknown;
322
+ }
323
+
324
+ export declare interface DataTableRendererColumn {
325
+ id: string;
326
+ label?: string;
327
+ description?: string;
328
+ icon?: unknown;
329
+ hidden?: boolean;
330
+ stat?: DataTableRendererColumnStat;
331
+ renderer?: DataTableRendererColumnRenderer;
473
332
  }
474
333
 
475
- export declare interface DataRendererContribution<TRow extends DataRendererRow = DataRendererRow> {
334
+ export declare type DataTableRendererColumnRenderer = {
335
+ type: "json";
336
+ } | {
337
+ type: "color-scale";
338
+ stops: Array<{
339
+ value: number;
340
+ color: DataTableRendererThemeColor;
341
+ }>;
342
+ } | {
343
+ type: "categorical-color";
344
+ categories: Array<{
345
+ value: string | number | boolean | null;
346
+ color: DataTableRendererThemeColor;
347
+ }>;
348
+ };
349
+
350
+ export declare type DataTableRendererColumnStat = {
351
+ type: "unique";
352
+ } | {
353
+ type: "histogram";
354
+ bins?: number;
355
+ } | {
356
+ type: "top-values";
357
+ limit?: number;
358
+ };
359
+
360
+ export declare interface DataTableRendererContribution {
476
361
  id: string;
477
362
  title: string;
478
363
  resourceKind?: string;
479
- /**
480
- * Declarative attribute schema. The renderer dispatches filter / group /
481
- * sort / display / inline-edit behavior on each descriptor's `type.kind`.
482
- *
483
- * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
484
- * static array to let the contribution mutate its schema at runtime —
485
- * `WorkbenchDataView` subscribes so additions / removals / kind changes
486
- * propagate live without re-registering the renderer.
487
- */
488
- attributes: AttributeDescriptor[] | AttributesSource;
489
- /** Per-board-column overrides (color, drag/create rules, custom actions). */
490
- getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
491
- hideToolbar?: boolean;
364
+ columns?: DataTableRendererColumn[];
365
+ rowActions?: DataTableRendererRowAction[];
366
+ initialPageSize?: number;
367
+ pageSizeOptions?: number[];
492
368
  emptyTitle?: string;
493
369
  emptyDescription?: string;
494
- /** Initial settings/filters applied when the data renderer mounts. */
495
- defaultSettings?: Partial<DataRendererSettings>;
496
- defaultFilters?: DataRendererFilterState;
497
- /**
498
- * Data source. Receives the current display state so backends can paginate
499
- * / filter / sort. The renderer re-applies filter / sort / group locally,
500
- * so this can return unfiltered rows in simple cases.
501
- */
502
- executeQuery(state: DataRendererQueryState): Promise<TRow[]> | TRow[];
370
+ executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
503
371
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
504
- /** Row interactions surfaced by the renderer (mirrored from <DataRenderer>). */
505
- onRowClick?: (row: TRow) => void;
506
- /** Per-row right-click context menu actions (mirrored from <DataRenderer>). */
507
- getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
508
- /**
509
- * Fires for inline attribute edits AND for cross-column drag-to-reorder on
510
- * the board (the renderer passes the grouping attribute id + the target
511
- * column value).
512
- */
513
- onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
514
- /** Manual within-column reorder (only fires when ordering is manual). */
515
- onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
516
- onCreateRow?: (columnId: string) => void;
517
- onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
372
+ onRowClick?: (row: DataTableRendererRow) => void;
518
373
  }
519
374
 
520
- export declare type DataRendererFilterState = Record<string, string[]>;
521
-
522
- export declare type DataRendererImplementation = (input: WorkbenchWidgetRenderInput & {
523
- dataRendererId: string;
375
+ export declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
376
+ dataTableRendererId: string;
524
377
  }) => unknown;
525
378
 
526
- export declare interface DataRendererOrdering {
527
- attributeId: string | typeof MANUAL_ORDERING;
528
- direction: SortDirection;
379
+ export declare interface DataTableRendererQueryContext {
380
+ resource?: ResourceRef;
381
+ modeId?: string;
529
382
  }
530
383
 
531
- export declare interface DataRendererQueryState {
532
- settings: DataRendererSettings;
533
- filters: DataRendererFilterState;
384
+ export declare interface DataTableRendererQueryResult {
385
+ rows: DataTableRendererRow[];
386
+ columns?: DataTableRendererColumn[];
534
387
  }
535
388
 
536
- declare interface DataRendererRefreshEvent {
537
- dataRendererId: string;
389
+ export declare interface DataTableRendererRefreshEvent {
390
+ dataTableRendererId: string;
538
391
  }
539
392
 
540
- declare type DataRendererRefreshListener = (event: DataRendererRefreshEvent) => void;
393
+ export declare interface DataTableRendererRegistry {
394
+ dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
395
+ registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
396
+ setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
397
+ getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
398
+ listDataTableRenderers(): RegisteredDataTableRendererContribution[];
399
+ refreshDataTableRenderer(id: string): void;
400
+ onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
401
+ }
541
402
 
542
- export declare interface DataRendererRegistry {
543
- dataStore: WorkbenchStore<DataRendererStoreState>;
544
- registerDataRenderer<TRow extends DataRendererRow = DataRendererRow>(contribution: DataRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
545
- setDataRendererImplementation(impl: DataRendererImplementation): void;
546
- getDataRenderer(id: string): RegisteredDataRendererContribution | undefined;
547
- listDataRenderers(): RegisteredDataRendererContribution[];
548
- refreshDataRenderer(id: string): void;
549
- onDidRefreshDataRenderer(listener: DataRendererRefreshListener): Disposable_2;
403
+ export declare interface DataTableRendererRow {
404
+ id: string;
405
+ values: Record<string, unknown>;
406
+ resource?: ResourceRef;
550
407
  }
551
408
 
552
- export declare interface DataRendererRow {
409
+ export declare interface DataTableRendererRowAction {
553
410
  id: string;
554
- title: string;
555
- /**
556
- * Optional navigation handle. When set, the renderer's default click handler
557
- * routes through the contribution's onRowClick (which typically opens the
558
- * resource via the workbench).
559
- */
560
- resource?: unknown;
561
- attributes: Record<string, unknown>;
411
+ label: string;
412
+ icon?: unknown;
413
+ destructive?: boolean;
414
+ run(row: DataTableRendererRow): Promise<void> | void;
562
415
  }
563
416
 
564
- export declare interface DataRendererSettings {
565
- viewMode: ViewMode;
566
- columnGrouping: string | typeof NO_GROUPING;
567
- rowGrouping: string | typeof NO_GROUPING;
568
- ordering: DataRendererOrdering;
569
- displayProperties: string[];
417
+ declare interface DataTableRendererStoreState {
418
+ renderers: Record<string, RegisteredDataTableRendererContribution>;
570
419
  }
571
420
 
572
- export declare interface DataRendererStoreState {
573
- renderers: Record<string, RegisteredDataRendererContribution>;
421
+ export declare interface DataTableRendererThemeColor {
422
+ light: string;
423
+ dark: string;
424
+ foreground?: {
425
+ light: string;
426
+ dark: string;
427
+ };
574
428
  }
575
429
 
576
430
  declare interface Disposable_2 {
@@ -649,7 +503,7 @@ export declare interface FileRendererContribution {
649
503
  save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
650
504
  }
651
505
 
652
- export declare type FileRendererImplementation = (input: WorkbenchWidgetRenderInput & {
506
+ export declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
653
507
  fileRendererId: string;
654
508
  }) => unknown;
655
509
 
@@ -669,21 +523,19 @@ export declare interface FileRendererRegistry {
669
523
  onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
670
524
  }
671
525
 
672
- export declare interface FileRendererStoreState {
526
+ declare interface FileRendererStoreState {
673
527
  renderers: Record<string, RegisteredFileRendererContribution>;
674
528
  }
675
529
 
676
- export declare const getAnchorResource: (layout: WorkbenchLayout, anchorId: AnchorId) => ResourceRef | undefined;
677
-
678
530
  export declare const getKeybindingSteps: (keybinding: KeybindingSequence) => string[];
679
531
 
680
- export declare const getSurface: (area: WorkbenchArea) => SurfaceDescriptor;
532
+ export declare const getWorkbenchModePanelForRegion: (region: WorkbenchRegion) => "main" | "secondary" | "side" | undefined;
681
533
 
682
534
  export declare const getWorkbenchSelectionResourceUris: (resource: ResourceRef | undefined) => string[];
683
535
 
684
- export declare const headerLeadingMenuPath: (area: string) => MenuPath;
536
+ export declare const headerLeadingMenuPath: (region: string) => MenuPath;
685
537
 
686
- export declare const headerTrailingMenuPath: (area: string) => MenuPath;
538
+ export declare const headerTrailingMenuPath: (region: string) => MenuPath;
687
539
 
688
540
  export declare interface HistoryController {
689
541
  store: WorkbenchStore<HistoryStoreState>;
@@ -692,29 +544,175 @@ export declare interface HistoryController {
692
544
  goPrevious(): HistoryEntry | undefined;
693
545
  recentlyClosed(): readonly HistoryEntry[];
694
546
  reopenLastClosed(): HistoryEntry | undefined;
547
+ setPersistenceScope(scope: string | undefined): void;
548
+ getPersistenceScope(): string | undefined;
549
+ restore(): HistoryEntry | undefined;
550
+ flush(): void;
695
551
  clear(): void;
696
552
  }
697
553
 
698
- export declare interface HistoryEntry {
699
- entryId: string;
700
- recordedAt: number;
701
- kind: "resource" | "widget" | "mode";
702
- modeId?: string;
703
- resource?: ResourceRef;
704
- widgetId?: string;
705
- contributionId?: string;
706
- title?: string;
707
- }
554
+ export declare type HistoryEntry = WorkbenchNavigationEntry;
708
555
 
709
- export declare interface HistoryStoreState {
710
- entries: readonly HistoryEntry[];
556
+ declare interface HistoryStoreState {
557
+ entries: readonly WorkbenchNavigationEntry[];
711
558
  cursor: number;
712
- recentlyClosed: readonly HistoryEntry[];
559
+ recentlyClosed: readonly WorkbenchNavigationEntry[];
560
+ hydrating: boolean;
561
+ }
562
+
563
+ export declare const isWorkbenchModePanelAvailable: (mode: WorkbenchModeContribution | undefined, panel: WorkbenchPanelRegion) => boolean;
564
+
565
+ export declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
566
+ id: string;
567
+ title: string;
568
+ resourceKind?: string;
569
+ /**
570
+ * Declarative attribute schema. The renderer dispatches filter / group /
571
+ * sort / display / inline-edit behavior on each descriptor's `type.kind`.
572
+ *
573
+ * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
574
+ * static array to let the contribution mutate its schema at runtime —
575
+ * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
576
+ * propagate live without re-registering the renderer.
577
+ */
578
+ attributes: AttributeDescriptor[] | AttributesSource;
579
+ /** Per-board-column overrides (color, drag/create rules, custom actions). */
580
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
581
+ hideToolbar?: boolean;
582
+ emptyTitle?: string;
583
+ emptyDescription?: string;
584
+ /** Initial settings/filters applied when the kanban renderer mounts. */
585
+ defaultSettings?: Partial<KanbanRendererSettings>;
586
+ defaultFilters?: KanbanRendererFilterState;
587
+ defaultViews?: KanbanRendererSavedView[];
588
+ defaultActiveViewId?: string;
589
+ /**
590
+ * Data source. Receives the current display state so backends can paginate
591
+ * / filter / sort. The renderer re-applies filter / sort / group locally,
592
+ * so this can return unfiltered rows in simple cases.
593
+ */
594
+ executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
595
+ subscribe?: (listener: () => void) => Disposable_2 | (() => void);
596
+ /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
597
+ onRowClick?: (row: TRow) => void;
598
+ /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
599
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
600
+ /**
601
+ * Fires for inline attribute edits AND for cross-column drag-to-reorder on
602
+ * the board (the renderer passes the grouping attribute id + the target
603
+ * column value).
604
+ */
605
+ onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
606
+ /** Manual within-column reorder (only fires when ordering is manual). */
607
+ onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
608
+ createRow?: KanbanRendererCreateRowConfig;
609
+ onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;
610
+ onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
611
+ }
612
+
613
+ export declare interface KanbanRendererCreateField {
614
+ id: string;
615
+ label: string;
616
+ description?: string;
617
+ placeholder?: string;
618
+ type: KanbanRendererCreateFieldType;
619
+ required?: boolean;
620
+ defaultValue?: unknown;
621
+ options?: EnumOption[];
622
+ /** `files` fields only. */
623
+ multiple?: boolean;
624
+ accept?: string;
625
+ }
626
+
627
+ export declare type KanbanRendererCreateFieldType = "text" | "longtext" | "markdown" | "number" | "boolean" | "select" | "multi-select" | "files";
628
+
629
+ /** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */
630
+ declare interface KanbanRendererCreateLabels {
631
+ cancel: string;
632
+ properties: string;
633
+ submitError: string;
634
+ removeFile: string;
635
+ }
636
+
637
+ export declare interface KanbanRendererCreateRowConfig {
638
+ title: string;
639
+ submitLabel: string;
640
+ fields: KanbanRendererCreateField[];
641
+ labels: KanbanRendererCreateLabels;
642
+ }
643
+
644
+ export declare interface KanbanRendererCreateSubmission {
645
+ columnId: string;
646
+ columnAttributeId?: string;
647
+ /** Declared field values, excluding `files` fields — those arrive as `files`. */
648
+ values: Record<string, unknown>;
649
+ /** Every editable attribute the user set, keyed by attribute id. */
650
+ attributeValues: Record<string, unknown>;
651
+ files: File[];
652
+ }
653
+
654
+ export declare type KanbanRendererFilterState = Record<string, string[]>;
655
+
656
+ export declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
657
+ kanbanRendererId: string;
658
+ }) => unknown;
659
+
660
+ export declare interface KanbanRendererOrdering {
661
+ attributeId: string | typeof MANUAL_ORDERING;
662
+ direction: SortDirection;
663
+ }
664
+
665
+ export declare interface KanbanRendererQueryState {
666
+ settings: KanbanRendererSettings;
667
+ filters: KanbanRendererFilterState;
713
668
  }
714
669
 
715
- declare interface InternalWorkbenchStore<TState> extends WorkbenchStore<TState> {
716
- setState: NamedSet<TState>;
717
- api: StoreApi<TState>;
670
+ declare interface KanbanRendererRefreshEvent {
671
+ kanbanRendererId: string;
672
+ }
673
+
674
+ declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
675
+
676
+ export declare interface KanbanRendererRegistry {
677
+ dataStore: WorkbenchStore<KanbanRendererStoreState>;
678
+ registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
679
+ setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
680
+ getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
681
+ listKanbanRenderers(): RegisteredKanbanRendererContribution[];
682
+ refreshKanbanRenderer(id: string): void;
683
+ onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
684
+ }
685
+
686
+ export declare interface KanbanRendererRow {
687
+ id: string;
688
+ title: string;
689
+ /**
690
+ * Optional navigation handle. When set, the renderer's default click handler
691
+ * routes through the contribution's onRowClick (which typically opens the
692
+ * resource via the workbench).
693
+ */
694
+ resource?: unknown;
695
+ attributes: Record<string, unknown>;
696
+ }
697
+
698
+ declare interface KanbanRendererSavedView {
699
+ id: string;
700
+ title: string;
701
+ settings: KanbanRendererSettings;
702
+ filters: KanbanRendererFilterState;
703
+ isDefault?: boolean;
704
+ }
705
+
706
+ export declare interface KanbanRendererSettings {
707
+ viewMode: ViewMode;
708
+ columnGrouping: string | typeof NO_GROUPING;
709
+ rowGrouping: string | typeof NO_GROUPING;
710
+ ordering: KanbanRendererOrdering;
711
+ displayProperties: string[];
712
+ }
713
+
714
+ declare interface KanbanRendererStoreState {
715
+ renderers: Record<string, RegisteredKanbanRendererContribution>;
718
716
  }
719
717
 
720
718
  export declare interface Keybinding {
@@ -731,11 +729,6 @@ export declare interface KeybindingRegistry {
731
729
  listActiveKeybindings(): RegisteredKeybinding[];
732
730
  }
733
731
 
734
- declare interface KeybindingRegistryDeps {
735
- commands: CommandRegistry;
736
- context: ContextKeyService;
737
- }
738
-
739
732
  declare interface KeybindingRegistryStoreState {
740
733
  keybindings: RegisteredKeybinding[];
741
734
  }
@@ -747,55 +740,80 @@ export declare interface LastResourcePersistenceAdapter {
747
740
  setLastResource(resource: ResourceRef | undefined): void;
748
741
  }
749
742
 
750
- export declare interface LayoutModel {
743
+ declare interface LayoutModel {
751
744
  store: WorkbenchStore<WorkbenchLayoutStoreState>;
752
745
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
753
746
  dispose(): void;
754
747
  };
748
+ registerPanel(panel: WorkbenchPanelContribution, metadata?: ContributionMetadata): {
749
+ dispose(): void;
750
+ };
755
751
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
756
752
  dispose(): void;
757
753
  };
754
+ registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
755
+ dispose(): void;
756
+ };
757
+ registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
758
+ dispose(): void;
759
+ };
760
+ registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
761
+ dispose(): void;
762
+ };
758
763
  unregisterWidget(id: string, options?: {
759
764
  removePlacements?: boolean;
760
765
  persist?: boolean;
761
766
  }): void;
762
- getPlaceholder(areaId: WorkbenchArea): RegisteredPlaceholderContribution | undefined;
767
+ getPlaceholder(regionId: WorkbenchRegion): RegisteredPlaceholderContribution | undefined;
763
768
  getWidget(id: string): RegisteredWidgetContribution | undefined;
764
- getAreaSize(areaId: WorkbenchArea): WorkbenchAreaSize | undefined;
765
- getAreaCollapsible(areaId: WorkbenchArea): boolean;
766
- getAreaHeaderBorderBottom(areaId: WorkbenchArea): boolean;
767
- setAreaVisible(areaId: WorkbenchArea, visible: boolean): void;
768
- setAreaSize(areaId: WorkbenchArea, size: number): void;
769
+ getPanel(id: string): WorkbenchPanelContribution | undefined;
770
+ getRegionSize(regionId: WorkbenchRegion): WorkbenchRegionSize | undefined;
771
+ getRegionCollapsible(regionId: WorkbenchRegion): boolean;
772
+ getRegionHeaderBorderBottom(regionId: WorkbenchRegion): boolean;
773
+ setRegionVisible(regionId: WorkbenchRegion, visible: boolean): void;
774
+ setRegionSize(regionId: WorkbenchRegion, size: number): void;
769
775
  listPlaceholders(): RegisteredPlaceholderContribution[];
770
776
  listWidgets(): RegisteredWidgetContribution[];
777
+ listPanels(): WorkbenchPanelContribution[];
778
+ listPanelInstances(region?: WorkbenchRegion): WorkbenchPanelInstance[];
779
+ getActivePanel(region?: WorkbenchRegion): WorkbenchPanelInstance | undefined;
771
780
  openWidget(id: string, input?: OpenWidgetInput): WorkbenchWidgetPlacement;
781
+ openPanel(id: string, input?: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
782
+ updatePanel(instanceId: string, input: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
783
+ reorderPanel(instanceId: string, position: WorkbenchTabPosition): void;
784
+ activatePanel(instanceId: string): WorkbenchPanelInstance;
785
+ closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
772
786
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
787
+ reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
788
+ expirePreviewTabs(ownerResourceUri?: string): void;
773
789
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
790
+ setRegionActiveWidget(regionId: WorkbenchRegion, widgetId: string | undefined): void;
774
791
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
775
792
  removeWidgetPlacement(widgetId: string): WorkbenchWidgetPlacement | undefined;
776
- clearArea(areaId: WorkbenchArea): void;
777
- resetAreas(): void;
793
+ clearRegion(regionId: WorkbenchRegion): void;
794
+ resetRegions(): void;
778
795
  getLayout(): WorkbenchLayout;
779
796
  restoreLayout(layout: WorkbenchLayout): void;
780
- setPersistenceScope(scope: LayoutScope | undefined): void;
797
+ setPersistenceScope(scope: LayoutScope | undefined, input?: {
798
+ carryRegionState?: readonly WorkbenchRegion[];
799
+ }): void;
781
800
  getPersistenceScope(): LayoutScope | undefined;
801
+ onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
802
+ dispose(): void;
803
+ };
782
804
  onDidChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
783
805
  dispose(): void;
784
806
  };
785
807
  }
786
808
 
787
- export declare interface LayoutPersistenceAdapter {
809
+ declare interface LayoutPersistenceAdapter {
788
810
  getLayout(scope?: LayoutScope): WorkbenchLayout | undefined;
789
811
  setLayout(layout: WorkbenchLayout, scope?: LayoutScope): void;
812
+ flush?(): void;
813
+ dispose?(): void;
790
814
  }
791
815
 
792
- export declare type LayoutScope = string;
793
-
794
- export declare const listAnchorAreas: () => ("status" | "secondary" | "main" | "nav" | "activity" | "left-header" | "left" | "main-header" | "main-left" | "main-right" | "secondary-header" | "overlay" | "floating-header" | "floating")[];
795
-
796
- export declare const listProjectionAreas: () => ("status" | "secondary" | "main" | "nav" | "activity" | "left-header" | "left" | "main-header" | "main-left" | "main-right" | "secondary-header" | "overlay" | "floating-header" | "floating")[];
797
-
798
- export declare const listProjectionsReading: (anchorId: AnchorReadId) => ("status" | "secondary" | "main" | "nav" | "activity" | "left-header" | "left" | "main-header" | "main-left" | "main-right" | "secondary-header" | "overlay" | "floating-header" | "floating")[];
816
+ declare type LayoutScope = string;
799
817
 
800
818
  declare const MANUAL_ORDERING = "manual";
801
819
 
@@ -803,6 +821,7 @@ export declare const matchesContextExpression: (values: Record<string, ContextKe
803
821
 
804
822
  export declare interface MenuItem {
805
823
  commandId: string;
824
+ sourceCommandId?: string;
806
825
  label?: string;
807
826
  description?: string;
808
827
  icon?: string;
@@ -825,21 +844,17 @@ export declare interface MenuRegistry {
825
844
  listMenuItems(path: MenuPath): RegisteredMenuItem[];
826
845
  }
827
846
 
828
- declare interface MenuRegistryDeps {
829
- commands: CommandRegistry;
830
- }
831
-
832
847
  declare interface MenuRegistryStoreState {
833
848
  itemsByPath: Record<string, RegisteredMenuItem[]>;
834
849
  }
835
850
 
836
851
  export declare interface NavigationDispatcherContext {
837
852
  canOpenResource?(resource: ResourceRef): boolean;
838
- canOpenWidget?(widgetId: string): boolean;
853
+ canOpenPanel?(panelId: string): boolean;
839
854
  canExecuteCommand?(commandId: string): boolean;
840
855
  createCheckpoint?(): undefined | (() => void);
841
856
  openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
842
- openWidget(widgetId: string, input?: OpenWidgetInput): unknown;
857
+ openPanel(panelId: string, input?: OpenWorkbenchPanelInput): unknown;
843
858
  executeCommand(commandId: string, args?: unknown): Promise<unknown> | unknown;
844
859
  }
845
860
 
@@ -881,7 +896,13 @@ export declare interface NavigationTargetCompound {
881
896
  targets: readonly NavigationTargetItem[];
882
897
  }
883
898
 
884
- export declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetCommand;
899
+ export declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
900
+
901
+ export declare interface NavigationTargetPanel {
902
+ kind: "panel";
903
+ panelId: string;
904
+ input?: OpenWorkbenchPanelInput;
905
+ }
885
906
 
886
907
  export declare interface NavigationTargetResource {
887
908
  kind: "resource";
@@ -889,12 +910,6 @@ export declare interface NavigationTargetResource {
889
910
  input?: OpenResourceInput;
890
911
  }
891
912
 
892
- export declare interface NavigationTargetView {
893
- kind: "view";
894
- widgetId: string;
895
- input?: OpenWidgetInput;
896
- }
897
-
898
913
  declare const NO_GROUPING = "none";
899
914
 
900
915
  export declare interface NotificationRegistry {
@@ -913,31 +928,50 @@ export declare interface OpenResourceInput {
913
928
  declare interface OpenWidgetInput {
914
929
  resource?: ResourceRef;
915
930
  title?: string;
916
- area?: WorkbenchArea;
931
+ region?: WorkbenchRegion;
917
932
  ownerId?: string;
918
933
  source?: ContributionSource;
919
934
  pinned?: boolean;
920
935
  closable?: boolean;
921
936
  mountStrategy?: WidgetMountStrategy;
922
937
  hiddenByDefault?: boolean;
938
+ tabRetention?: WorkbenchTabRetention;
939
+ tabPosition?: WorkbenchTabPosition;
940
+ tab?: WorkbenchWidgetTab;
923
941
  replaceActive?: boolean;
942
+ replaceWidgetId?: string;
943
+ }
944
+
945
+ export declare interface OpenWorkbenchPanelInput {
946
+ resource?: ResourceRef;
947
+ title?: string;
948
+ region?: WorkbenchRegion;
949
+ pinned?: boolean;
950
+ mountStrategy?: WorkbenchPanelMountStrategy;
951
+ hiddenByDefault?: boolean;
952
+ tab?: WorkbenchPanelTab;
953
+ strategy?: WorkbenchPanelOpenStrategy;
924
954
  }
925
955
 
926
956
  export declare interface PersistedTreeRendererStates {
927
957
  statesByTreeId: Record<string, TreeRendererState>;
928
958
  }
929
959
 
930
- export declare interface PersistedWorkbenchPanels {
931
- openByAreaId: Record<string, boolean>;
960
+ export declare interface PersistedWorkbenchHistory extends Omit<HistoryStoreState, "hydrating"> {
961
+ version: 1;
962
+ }
963
+
964
+ declare interface PersistedWorkbenchPanels {
965
+ openByRegionId: Record<string, boolean>;
932
966
  }
933
967
 
934
- export declare interface PlaceholderContribution {
968
+ declare interface PlaceholderContribution {
935
969
  id: string;
936
970
  title: string;
937
- area: WorkbenchArea;
971
+ region: WorkbenchRegion;
938
972
  rendererId: string;
939
- areaSize?: WorkbenchAreaSize;
940
- areaCollapsible?: boolean;
973
+ regionSize?: WorkbenchRegionSize;
974
+ regionCollapsible?: boolean;
941
975
  config?: unknown;
942
976
  priority?: number;
943
977
  }
@@ -980,80 +1014,71 @@ export declare interface PreferenceScopeRef {
980
1014
 
981
1015
  export declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
982
1016
 
983
- declare interface ProjectionSurface {
984
- role: "projection";
985
- reads: AnchorReadId[];
986
- navigator?: boolean;
987
- }
988
-
989
- export declare const reconcileAnchors: ({ layout, primary, isInScope }: ReconcileAnchorsInput) => AnchorReconcileAction[];
990
-
991
- export declare interface ReconcileAnchorsInput {
992
- layout: WorkbenchLayout;
993
- primary: ResourceRef | undefined;
994
- isInScope: (resource: ResourceRef, primary: ResourceRef | undefined) => boolean;
995
- }
996
-
997
- export declare interface RegisteredCommand extends RegisteredContributionMetadata {
1017
+ declare interface RegisteredCommand extends RegisteredContributionMetadata {
998
1018
  command: Command;
999
1019
  handler: CommandHandler;
1000
1020
  }
1001
1021
 
1002
- export declare interface RegisteredContributionMetadata {
1022
+ declare interface RegisteredContributionMetadata {
1003
1023
  source: ContributionSource;
1004
1024
  ownerId: string;
1005
1025
  priority: number;
1006
1026
  }
1007
1027
 
1008
- export declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
1028
+ declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
1029
+ }
1030
+
1031
+ declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
1009
1032
  }
1010
1033
 
1011
- export declare interface RegisteredDataRendererContribution<TRow extends DataRendererRow = DataRendererRow> extends DataRendererContribution<TRow>, RegisteredContributionMetadata {
1034
+ declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
1012
1035
  }
1013
1036
 
1014
- export declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
1037
+ declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1015
1038
  }
1016
1039
 
1017
- export declare interface RegisteredKeepAliveHost {
1040
+ declare interface RegisteredKeepAliveHost {
1018
1041
  rendererId: string;
1019
1042
  host: HTMLElement;
1020
1043
  attachedTo?: HTMLElement;
1021
1044
  }
1022
1045
 
1023
- export declare interface RegisteredKeybinding extends Keybinding, RegisteredContributionMetadata {
1046
+ declare interface RegisteredKeybinding extends Keybinding, RegisteredContributionMetadata {
1024
1047
  }
1025
1048
 
1026
- export declare interface RegisteredMenuItem extends MenuItem, RegisteredContributionMetadata {
1049
+ declare interface RegisteredMenuItem extends MenuItem, RegisteredContributionMetadata {
1027
1050
  path: MenuPath;
1028
1051
  }
1029
1052
 
1030
- export declare type RegisteredNavigationParser = Omit<NavigationParser, "priority"> & RegisteredContributionMetadata;
1053
+ declare type RegisteredNavigationParser = Omit<NavigationParser, "priority"> & RegisteredContributionMetadata;
1031
1054
 
1032
- export declare type RegisteredPlaceholderContribution = Omit<PlaceholderContribution, "priority"> & RegisteredContributionMetadata;
1055
+ declare type RegisteredPlaceholderContribution = Omit<PlaceholderContribution, "priority"> & RegisteredContributionMetadata;
1033
1056
 
1034
1057
  declare type RegisteredPreferenceSchema = PreferencePropertySchema & {
1035
1058
  ownerId: string;
1036
1059
  source: string;
1037
1060
  };
1038
1061
 
1039
- export declare interface RegisteredResourceKind extends ResourceKindContribution, RegisteredContributionMetadata {
1062
+ declare interface RegisteredResourceKind extends ResourceKindContribution, RegisteredContributionMetadata {
1040
1063
  }
1041
1064
 
1042
- export declare type RegisteredResourceNavigator = Omit<ResourceNavigator, "priority"> & RegisteredContributionMetadata;
1065
+ declare type RegisteredResourceNavigator = Omit<ResourceNavigator, "priority"> & RegisteredContributionMetadata;
1043
1066
 
1044
- export declare type RegisteredSettingsPanel = SettingsPanelContribution & RegisteredContributionMetadata;
1067
+ declare type RegisteredSettingsPanel = SettingsPanelContribution & RegisteredContributionMetadata;
1045
1068
 
1046
- export declare type RegisteredSettingsSection = SettingsSectionContribution & RegisteredContributionMetadata;
1069
+ declare type RegisteredSettingsSection = SettingsSectionContribution & RegisteredContributionMetadata;
1047
1070
 
1048
- export declare interface RegisteredTreeRendererContribution extends TreeRendererContribution, RegisteredContributionMetadata {
1071
+ declare interface RegisteredTreeRendererContribution extends TreeRendererContribution, RegisteredContributionMetadata {
1049
1072
  }
1050
1073
 
1051
- export declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1074
+ declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1075
+ ownedPanelMenuIds?: readonly string[];
1052
1076
  singleton: boolean;
1053
1077
  reuse: WidgetReusePolicy;
1078
+ role: WorkbenchWidgetRole;
1054
1079
  } & RegisteredContributionMetadata;
1055
1080
 
1056
- export declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
1081
+ declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
1057
1082
  id: string;
1058
1083
  level: WorkbenchNotificationLevel;
1059
1084
  title: string;
@@ -1064,9 +1089,11 @@ export declare interface RegisteredWorkbenchNotification extends RegisteredContr
1064
1089
  metadata?: Record<string, unknown>;
1065
1090
  }
1066
1091
 
1067
- export declare const resolveAnchorArea: (anchorId: AnchorId) => "status" | "secondary" | "main" | "nav" | "activity" | "left-header" | "left" | "main-header" | "main-left" | "main-right" | "secondary-header" | "overlay" | "floating-header" | "floating";
1092
+ 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";
1093
+
1094
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1068
1095
 
1069
- declare type ResolvedResourceOpener = Required<ResourceOpener>;
1096
+ declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
1070
1097
 
1071
1098
  export declare interface ResourceBrowseEntry {
1072
1099
  resource: ResourceRef;
@@ -1090,6 +1117,13 @@ export declare interface ResourceContextAction {
1090
1117
 
1091
1118
  export declare const resourceContextMenuPath: (resourceKind: string) => MenuPath;
1092
1119
 
1120
+ export declare interface ResourceHierarchyProvider {
1121
+ id: string;
1122
+ priority?: number;
1123
+ canResolve(resource: ResourceRef): boolean;
1124
+ getParent(resource: ResourceRef): ResourceRef | undefined;
1125
+ }
1126
+
1093
1127
  export declare interface ResourceKindContribution {
1094
1128
  kind: string;
1095
1129
  label: string;
@@ -1102,7 +1136,7 @@ export declare interface ResourceListContext {
1102
1136
  primary?: ResourceRef;
1103
1137
  }
1104
1138
 
1105
- export declare interface ResourceNavigator<TResult = unknown> {
1139
+ declare interface ResourceNavigator<TResult = unknown> {
1106
1140
  id: string;
1107
1141
  priority?: number;
1108
1142
  canNavigate(resource: ResourceRef): boolean;
@@ -1110,11 +1144,11 @@ export declare interface ResourceNavigator<TResult = unknown> {
1110
1144
  navigate(resource: ResourceRef): TResult | Promise<TResult>;
1111
1145
  }
1112
1146
 
1113
- export declare interface ResourceOpener<TResult = unknown> {
1147
+ export declare interface ResourcePresenter {
1114
1148
  id: string;
1115
1149
  priority?: number;
1116
1150
  canOpen(resource: ResourceRef): boolean;
1117
- open(resource: ResourceRef, input: OpenResourceInput): TResult | Promise<TResult>;
1151
+ open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1118
1152
  }
1119
1153
 
1120
1154
  export declare interface ResourceProvider {
@@ -1138,19 +1172,24 @@ export declare interface ResourceRegistry {
1138
1172
  getKind(kind: string): RegisteredResourceKind | undefined;
1139
1173
  getSurface(resource: ResourceRef): ResourceSurface | undefined;
1140
1174
  listKinds(): RegisteredResourceKind[];
1141
- registerOpener(opener: ResourceOpener): Disposable_2;
1142
- listOpeners(): ResolvedResourceOpener[];
1175
+ registerPresenter(presenter: ResourcePresenter): Disposable_2;
1176
+ listPresenters(): ResolvedResourcePresenter[];
1143
1177
  registerProvider(provider: ResourceProvider): Disposable_2;
1144
1178
  listProviders(): ResourceProvider[];
1145
1179
  listResources(query: string): readonly ResourceBrowseEntry[];
1146
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
1180
+ registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1181
+ listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1182
+ walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1183
+ isOpeningResource(): boolean;
1184
+ openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1147
1185
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1148
1186
  }
1149
1187
 
1150
1188
  declare interface ResourceRegistryStoreState {
1151
1189
  kinds: Record<string, RegisteredResourceKind>;
1152
- openers: Record<string, ResolvedResourceOpener>;
1190
+ presenters: Record<string, ResolvedResourcePresenter>;
1153
1191
  providers: Record<string, ResourceProvider>;
1192
+ hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1154
1193
  }
1155
1194
 
1156
1195
  export declare type ResourceSurface = "primary" | "secondary" | "attached";
@@ -1211,7 +1250,7 @@ export declare interface SettingsRegistry {
1211
1250
  refresh(): void;
1212
1251
  }
1213
1252
 
1214
- export declare interface SettingsRegistryStoreState {
1253
+ declare interface SettingsRegistryStoreState {
1215
1254
  sections: Record<string, RegisteredSettingsSection>;
1216
1255
  panels: Record<string, RegisteredSettingsPanel>;
1217
1256
  /** Bumped by refresh() so the surface re-reads collection items() after backing data changes. */
@@ -1221,7 +1260,7 @@ export declare interface SettingsRegistryStoreState {
1221
1260
  /** Settings are stored either per-user (global) or per-project. Projectless surfaces show only global entries. */
1222
1261
  export declare type SettingsScope = "global" | "project";
1223
1262
 
1224
- /** An ordered sidebar container. Headerless when `title` is omitted. */
1263
+ /** An ordered sidenav container. Headerless when `title` is omitted. */
1225
1264
  export declare interface SettingsSectionContribution {
1226
1265
  id: string;
1227
1266
  title?: string;
@@ -1239,13 +1278,9 @@ export declare const standardResourceIcons: {
1239
1278
  readonly workspace: "computer";
1240
1279
  readonly worktree: "git-pull-request-draft";
1241
1280
  readonly settings: "settings";
1242
- readonly dataRenderer: "table-properties";
1281
+ readonly kanbanRenderer: "table-properties";
1243
1282
  };
1244
1283
 
1245
- export declare type SurfaceDescriptor = AnchorSurface | ProjectionSurface | ChromeSurface | TransientSurface;
1246
-
1247
- export declare const surfaceMap: Record<WorkbenchArea, SurfaceDescriptor>;
1248
-
1249
1284
  /**
1250
1285
  * Core-owned contract for theme registrations. Structurally identical to
1251
1286
  * @pstdio/ui's ThemePreferenceOption; the React layer bridges the two so core
@@ -1271,10 +1306,6 @@ export declare interface ThemeRegistry {
1271
1306
  listThemes(): readonly ThemePreferenceOption[];
1272
1307
  }
1273
1308
 
1274
- declare interface TransientSurface {
1275
- role: "transient";
1276
- }
1277
-
1278
1309
  export declare interface TreeAction {
1279
1310
  id: string;
1280
1311
  label?: string;
@@ -1321,6 +1352,8 @@ export declare interface TreeNode {
1321
1352
  hiddenByDefault?: boolean;
1322
1353
  /** When true, the node (e.g. a header/footer row) opts in to the tree's hide/show customization menu. */
1323
1354
  canHide?: boolean;
1355
+ /** When false, the node stays fixed within its Sidenav group. */
1356
+ canReorder?: boolean;
1324
1357
  }
1325
1358
 
1326
1359
  declare type TreeNodeRowVariant = "empty-state";
@@ -1338,7 +1371,7 @@ export declare interface TreeRendererContribution {
1338
1371
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1339
1372
  }
1340
1373
 
1341
- export declare type TreeRendererImplementation = (input: WorkbenchWidgetRenderInput & {
1374
+ export declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1342
1375
  treeId: string;
1343
1376
  }) => unknown;
1344
1377
 
@@ -1379,7 +1412,7 @@ export declare interface TreeRendererState {
1379
1412
  loading?: boolean;
1380
1413
  }
1381
1414
 
1382
- export declare interface TreeRendererStoreState {
1415
+ declare interface TreeRendererStoreState {
1383
1416
  trees: Record<string, RegisteredTreeRendererContribution>;
1384
1417
  statesByTreeId: Record<string, TreeRendererState>;
1385
1418
  refreshKeysByTreeId: Record<string, number>;
@@ -1401,61 +1434,50 @@ export declare interface TreeViewSection {
1401
1434
  hiddenByDefault?: boolean;
1402
1435
  /** When true, the section (category) opts in to the tree's hide/show customization menu. */
1403
1436
  canHide?: boolean;
1437
+ /** When false, the section stays fixed within the Sidenav main region. */
1438
+ canReorder?: boolean;
1404
1439
  }
1405
1440
 
1406
1441
  /**
1407
- * Core-owned contracts for data renderer contributions. @pstdio/ui's
1408
- * DataRenderer props are structurally identical; the React layer bridges the
1442
+ * Core-owned contracts for kanban renderer contributions. @pstdio/ui's
1443
+ * KanbanRenderer props are structurally identical; the React layer bridges the
1409
1444
  * two, so drift surfaces as a compile error there instead of coupling core's
1410
1445
  * API shape to UI package ownership.
1411
1446
  */
1412
1447
  export declare type ViewMode = "board" | "list";
1413
1448
 
1414
- export declare interface WidgetContribution {
1449
+ declare interface WidgetContribution {
1415
1450
  id: string;
1416
1451
  title: string;
1417
- area: WorkbenchArea;
1418
- fallbackArea?: WorkbenchArea;
1452
+ icon?: string;
1453
+ region: WorkbenchRegion;
1454
+ fallbackRegion?: WorkbenchRegion;
1419
1455
  singleton?: boolean;
1420
1456
  reuse?: WidgetReusePolicy;
1421
1457
  mountStrategy?: WidgetMountStrategy;
1422
1458
  closable?: boolean;
1423
1459
  hiddenByDefault?: boolean;
1424
- areaSize?: WorkbenchAreaSize;
1425
- areaCollapsible?: boolean;
1460
+ regionSize?: WorkbenchRegionSize;
1461
+ regionCollapsible?: boolean;
1426
1462
  headerBorderBottom?: boolean;
1463
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1427
1464
  resourceKinds?: string[];
1428
1465
  priority?: number;
1429
1466
  rendererId: string;
1467
+ openCommandId?: string;
1468
+ role?: WorkbenchWidgetRole;
1469
+ eligibleLocations?: WorkbenchLocationEligibility;
1470
+ panelMenuOwner?: WorkbenchPanelMenuOwner;
1471
+ tab?: WorkbenchWidgetTab;
1430
1472
  config?: unknown;
1431
1473
  canOpen?(resource: ResourceRef): boolean;
1432
1474
  }
1433
1475
 
1434
- export declare type WidgetMountStrategy = "active" | "keep-mounted";
1435
-
1436
- export declare type WidgetReusePolicy = "resource" | "none";
1437
-
1438
- export declare type WorkbenchArea = (typeof workbenchAreas)[number];
1439
-
1440
- export declare const workbenchAreas: readonly ["nav", "activity", "left-header", "left", "main-header", "main-left", "main", "main-right", "secondary-header", "secondary", "status", "overlay", "floating-header", "floating"];
1441
-
1442
- export declare interface WorkbenchAreaSize {
1443
- defaultPx?: number;
1444
- minPx?: number;
1445
- maxPx?: number;
1446
- }
1447
-
1448
- export declare interface WorkbenchAreaState {
1449
- id: WorkbenchArea;
1450
- visible: boolean;
1451
- size?: number;
1452
- widgets: WorkbenchWidgetPlacement[];
1453
- activeWidgetId?: string;
1454
- }
1476
+ declare type WidgetMountStrategy = "active" | "keep-mounted";
1455
1477
 
1456
- export declare const workbenchAreaTabLeadingMenuPath: (area: string) => MenuPath;
1478
+ declare type WidgetReusePolicy = "resource" | "none";
1457
1479
 
1458
- export declare type WorkbenchBreadcrumbChangeListener = () => void;
1480
+ declare type WorkbenchBreadcrumbChangeListener = () => void;
1459
1481
 
1460
1482
  export declare interface WorkbenchBreadcrumbController {
1461
1483
  store: WorkbenchStore<WorkbenchBreadcrumbState>;
@@ -1468,6 +1490,7 @@ export declare interface WorkbenchBreadcrumbController {
1468
1490
  export declare interface WorkbenchBreadcrumbItem {
1469
1491
  title: unknown;
1470
1492
  icon?: string;
1493
+ indicator?: "session-status";
1471
1494
  url?: string;
1472
1495
  onClick?: () => void;
1473
1496
  resource?: ResourceRef;
@@ -1477,8 +1500,16 @@ declare interface WorkbenchBreadcrumbState {
1477
1500
  items: WorkbenchBreadcrumbItem[] | undefined;
1478
1501
  }
1479
1502
 
1503
+ declare interface WorkbenchClosedSubPanel {
1504
+ region: WorkbenchPanelRegion;
1505
+ reference: WorkbenchSubPanelRef;
1506
+ resource?: ResourceRef;
1507
+ title?: string;
1508
+ }
1509
+
1480
1510
  export declare interface WorkbenchCommandExecutionContext {
1481
1511
  resource?: ResourceRef;
1512
+ source?: "panel-add";
1482
1513
  }
1483
1514
 
1484
1515
  export declare interface WorkbenchCommandExecutionError {
@@ -1487,9 +1518,9 @@ export declare interface WorkbenchCommandExecutionError {
1487
1518
  error: unknown;
1488
1519
  }
1489
1520
 
1490
- export declare type WorkbenchCommandExecutionErrorListener = (event: WorkbenchCommandExecutionError) => void;
1521
+ declare type WorkbenchCommandExecutionErrorListener = (event: WorkbenchCommandExecutionError) => void;
1491
1522
 
1492
- export declare type WorkbenchCommandPaletteChangeListener = (open: boolean) => void;
1523
+ declare type WorkbenchCommandPaletteChangeListener = (open: boolean) => void;
1493
1524
 
1494
1525
  export declare interface WorkbenchCommandPaletteController {
1495
1526
  store: WorkbenchStore<WorkbenchCommandPaletteState>;
@@ -1512,14 +1543,14 @@ export declare interface WorkbenchCommandPaletteOpenInput {
1512
1543
  initialQuery?: string;
1513
1544
  }
1514
1545
 
1515
- export declare interface WorkbenchCommandPaletteState {
1546
+ declare interface WorkbenchCommandPaletteState {
1516
1547
  open: boolean;
1517
1548
  view: WorkbenchCommandPaletteView;
1518
1549
  initialQuery: string;
1519
1550
  paramsRequest: WorkbenchCommandParamsRequest | null;
1520
1551
  }
1521
1552
 
1522
- export declare type WorkbenchCommandPaletteView = "main" | "theme" | "mode";
1553
+ declare type WorkbenchCommandPaletteView = "main" | "theme" | "mode";
1523
1554
 
1524
1555
  declare interface WorkbenchCommandParamsRequest {
1525
1556
  record: {
@@ -1535,11 +1566,12 @@ declare interface WorkbenchCommandParamsRequest {
1535
1566
  }
1536
1567
 
1537
1568
  export declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1569
+ host: WorkbenchHost;
1538
1570
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1539
1571
  unregisterModule(moduleId: string): void;
1540
1572
  }
1541
1573
 
1542
- export declare interface WorkbenchCoreContributionContext {
1574
+ declare interface WorkbenchCoreContributionContext {
1543
1575
  breadcrumbs: WorkbenchBreadcrumbController;
1544
1576
  commandPalette: WorkbenchCommandPaletteController;
1545
1577
  commandPaletteResources: CommandPaletteResourceRegistry;
@@ -1558,7 +1590,8 @@ export declare interface WorkbenchCoreContributionContext {
1558
1590
  renderers: WorkbenchRenderers;
1559
1591
  resources: ResourceRegistry;
1560
1592
  settings: SettingsRegistry;
1561
- sessionPanel: WorkbenchSessionPanelController;
1593
+ shell: WorkbenchShellController;
1594
+ sidePanel: WorkbenchSidePanelController;
1562
1595
  terminal: WorkbenchTerminalController;
1563
1596
  themes: ThemeRegistry;
1564
1597
  fileIconThemes: FileIconThemeRegistry;
@@ -1568,46 +1601,82 @@ export declare interface WorkbenchCoreContributionContext {
1568
1601
  onDidChangeActiveResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1569
1602
  }
1570
1603
 
1571
- export declare interface WorkbenchFileIconThemeStoreState {
1604
+ declare interface WorkbenchFileIconThemeStoreState {
1572
1605
  themes: readonly FileIconThemePreferenceOption[];
1573
1606
  }
1574
1607
 
1575
- export declare type WorkbenchFocusArea = (typeof workbenchFocusAreas)[number];
1608
+ export declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1576
1609
 
1577
- export declare const workbenchFocusAreas: readonly ["activityBar", "sideBar", "main", "panel", "statusBar"];
1578
-
1579
- export declare type WorkbenchFocusChangeListener = (area: WorkbenchFocusArea | undefined) => void;
1610
+ declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1580
1611
 
1581
1612
  export declare interface WorkbenchFocusController {
1582
1613
  store: WorkbenchStore<WorkbenchFocusState>;
1583
- setActiveArea(area: WorkbenchFocusArea): void;
1614
+ setActiveRegion(region: WorkbenchFocusRegionId): void;
1584
1615
  clearFocus(): void;
1585
- getActiveArea(): WorkbenchFocusArea | undefined;
1616
+ getActiveRegion(): WorkbenchFocusRegionId | undefined;
1586
1617
  onDidChange(listener: WorkbenchFocusChangeListener): Disposable_2;
1587
1618
  }
1588
1619
 
1589
- export declare interface WorkbenchFocusState {
1590
- activeArea: WorkbenchFocusArea | undefined;
1620
+ export declare type WorkbenchFocusRegionId = (typeof workbenchFocusRegions)[number];
1621
+
1622
+ declare const workbenchFocusRegions: readonly ["activity", "sidenav", "main", "secondary", "side", "status"];
1623
+
1624
+ declare interface WorkbenchFocusState {
1625
+ activeRegion: WorkbenchFocusRegionId | undefined;
1626
+ }
1627
+
1628
+ declare interface WorkbenchHistoryPersistence {
1629
+ getHistory(scope?: string): PersistedWorkbenchHistory | undefined;
1630
+ setHistory(state: PersistedWorkbenchHistory, scope?: string): void;
1591
1631
  }
1592
1632
 
1593
- export declare interface WorkbenchLastResourceController {
1633
+ export declare interface WorkbenchHost {
1634
+ getSnapshot(): WorkbenchSnapshot;
1635
+ restoreSnapshot(snapshot: WorkbenchSnapshot): void;
1636
+ setPersistenceScope(scope: string | undefined, input?: {
1637
+ carryRegions?: readonly WorkbenchRegion[];
1638
+ }): void;
1639
+ getPersistenceScope(): string | undefined;
1640
+ }
1641
+
1642
+ declare interface WorkbenchLastResourceController {
1594
1643
  get(): ResourceRef | undefined;
1595
1644
  set(resource: ResourceRef | undefined): void;
1596
1645
  restore(): Promise<boolean>;
1597
1646
  }
1598
1647
 
1599
1648
  export declare interface WorkbenchLayout {
1600
- areas: Record<WorkbenchArea, WorkbenchAreaState>;
1649
+ regions: Record<WorkbenchRegion, WorkbenchRegionState>;
1650
+ locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1601
1651
  activeWidgetId?: string;
1652
+ activeLocationWidgetId?: string;
1602
1653
  activeResourceUri?: string;
1603
1654
  }
1604
1655
 
1605
- export declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1656
+ declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1606
1657
 
1607
- export declare interface WorkbenchLayoutStoreState {
1658
+ declare interface WorkbenchLayoutStoreState {
1608
1659
  layout: WorkbenchLayout;
1609
1660
  widgets: Record<string, RegisteredWidgetContribution>;
1610
- placeholders: Partial<Record<WorkbenchArea, RegisteredPlaceholderContribution>>;
1661
+ placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
1662
+ }
1663
+
1664
+ declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1665
+
1666
+ export declare interface WorkbenchLocationEligibility {
1667
+ modeIds?: string[];
1668
+ resourceKinds?: string[];
1669
+ resourceIds?: string[];
1670
+ canOpen?(resource: ResourceRef): boolean;
1671
+ }
1672
+
1673
+ declare interface WorkbenchLocationRef {
1674
+ key: string;
1675
+ modeId?: string;
1676
+ resource?: ResourceRef;
1677
+ contributionId?: string;
1678
+ instanceKey?: string;
1679
+ title?: string;
1611
1680
  }
1612
1681
 
1613
1682
  export declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
@@ -1619,16 +1688,24 @@ declare type WorkbenchModeChangeListener = () => void;
1619
1688
  export declare interface WorkbenchModeContribution {
1620
1689
  id: string;
1621
1690
  label?: string;
1691
+ panels?: readonly WorkbenchPanelRegion[];
1622
1692
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1693
+ seed?(ctx: WorkbenchModeActivationContext): void;
1694
+ enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1623
1695
  }
1624
1696
 
1625
1697
  export declare interface WorkbenchModeRegistry {
1626
1698
  store: WorkbenchStore<WorkbenchModeStoreState>;
1699
+ dispose(): void;
1627
1700
  registerMode(mode: WorkbenchModeContribution): Disposable_2;
1628
1701
  getMode(id: string): WorkbenchModeContribution | undefined;
1629
1702
  listModes(): WorkbenchModeContribution[];
1630
1703
  getActiveModeId(): string | undefined;
1631
- setActiveMode(id: string | undefined): void;
1704
+ isTransitioning(): boolean;
1705
+ setActiveMode(id: string | undefined, input?: {
1706
+ deferSeed?: boolean;
1707
+ }): void;
1708
+ seedActiveMode(): void;
1632
1709
  onDidChangeActive(listener: WorkbenchModeChangeListener): Disposable_2;
1633
1710
  }
1634
1711
 
@@ -1639,6 +1716,8 @@ declare interface WorkbenchModeStoreState {
1639
1716
 
1640
1717
  declare type WorkbenchModuleActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1641
1718
 
1719
+ export declare type WorkbenchModuleContext = WorkbenchCoreContributionContext;
1720
+
1642
1721
  export declare interface WorkbenchModuleContribution {
1643
1722
  id: string;
1644
1723
  source?: ContributionSource;
@@ -1646,7 +1725,21 @@ export declare interface WorkbenchModuleContribution {
1646
1725
  activate(ctx: WorkbenchModuleContributionContext): WorkbenchModuleActivationResult;
1647
1726
  }
1648
1727
 
1649
- export declare type WorkbenchModuleContributionContext = WorkbenchCoreContributionContext;
1728
+ export declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1729
+
1730
+ declare interface WorkbenchNavigationEntry {
1731
+ entryId: string;
1732
+ recordedAt: number;
1733
+ location: WorkbenchLocationRef;
1734
+ selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1735
+ kind: "resource" | "widget" | "mode";
1736
+ modeId?: string;
1737
+ resource?: ResourceRef;
1738
+ widgetId?: string;
1739
+ contributionId?: string;
1740
+ title?: string;
1741
+ closedSubPanel?: WorkbenchClosedSubPanel;
1742
+ }
1650
1743
 
1651
1744
  export declare interface WorkbenchNotification {
1652
1745
  id?: string;
@@ -1682,31 +1775,190 @@ declare interface WorkbenchNotificationStoreState {
1682
1775
  notifications: Record<string, RegisteredWorkbenchNotification>;
1683
1776
  }
1684
1777
 
1685
- export declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1778
+ export declare interface WorkbenchPanelContribution {
1779
+ id: string;
1780
+ title: string;
1781
+ icon?: string;
1782
+ region: WorkbenchRegion;
1783
+ fallbackRegion?: WorkbenchRegion;
1784
+ rendererId: string;
1785
+ closable: boolean;
1786
+ singleton?: boolean;
1787
+ reuse?: WorkbenchPanelReusePolicy;
1788
+ mountStrategy?: WorkbenchPanelMountStrategy;
1789
+ hiddenByDefault?: boolean;
1790
+ regionSize?: WorkbenchRegionSize;
1791
+ regionCollapsible?: boolean;
1792
+ headerBorderBottom?: boolean;
1793
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1794
+ resourceKinds?: string[];
1795
+ eligibleLocations?: WorkbenchLocationEligibility;
1796
+ priority?: number;
1797
+ openCommandId?: string;
1798
+ tab?: WorkbenchPanelTab;
1799
+ config?: unknown;
1800
+ canOpen?(resource: ResourceRef): boolean;
1801
+ ownerId?: string;
1802
+ source?: ContributionSource;
1803
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
1804
+ }
1805
+
1806
+ export declare interface WorkbenchPanelInstance {
1807
+ instanceId: string;
1808
+ panelId: string;
1809
+ ownerId?: string;
1810
+ source?: ContributionSource;
1811
+ resource?: ResourceRef;
1812
+ resourceUri?: string;
1813
+ ownerResourceUri?: string;
1814
+ title?: string;
1815
+ pinned?: boolean;
1816
+ closable: boolean;
1817
+ mountStrategy?: WorkbenchPanelMountStrategy;
1818
+ hiddenByDefault?: boolean;
1819
+ tabRetention?: WorkbenchTabRetention;
1820
+ tab?: WorkbenchPanelTab;
1821
+ }
1822
+
1823
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
1824
+ region: WorkbenchPanelMenuRegion;
1825
+ fallbackRegion?: WorkbenchPanelMenuRegion;
1826
+ };
1827
+
1828
+ export declare interface WorkbenchPanelMenuDefinition {
1829
+ id: string;
1830
+ title: string;
1831
+ icon?: string;
1832
+ side: WorkbenchPanelMenuSide;
1833
+ singleton?: boolean;
1834
+ reuse?: WorkbenchPanelReusePolicy;
1835
+ mountStrategy?: WorkbenchPanelMountStrategy;
1836
+ hiddenByDefault?: boolean;
1837
+ regionSize?: WorkbenchRegionSize;
1838
+ regionCollapsible?: boolean;
1839
+ headerBorderBottom?: boolean;
1840
+ rendererId: string;
1841
+ priority?: number;
1842
+ config?: unknown;
1843
+ }
1844
+
1845
+ declare type WorkbenchPanelMenuOwner = {
1846
+ level: "panel";
1847
+ contributionId?: string;
1848
+ } | {
1849
+ level: "sub-panel";
1850
+ contributionId: string;
1851
+ };
1852
+
1853
+ export declare type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];
1854
+
1855
+ declare const workbenchPanelMenuRegions: {
1856
+ readonly main: {
1857
+ readonly left: "main-left-menu";
1858
+ readonly right: "main-right-menu";
1859
+ };
1860
+ readonly secondary: {
1861
+ readonly left: "secondary-left-menu";
1862
+ readonly right: "secondary-right-menu";
1863
+ };
1864
+ readonly side: {
1865
+ readonly left: "side-left-menu";
1866
+ readonly right: "side-right-menu";
1867
+ };
1868
+ };
1869
+
1870
+ declare interface WorkbenchPanelMenusContribution {
1871
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
1872
+ }
1873
+
1874
+ export declare type WorkbenchPanelMenuSide = "left" | "right";
1875
+
1876
+ export declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
1877
+
1878
+ export declare type WorkbenchPanelOpenStrategy = {
1879
+ kind: "activate-or-open";
1880
+ position?: WorkbenchTabPosition;
1881
+ } | {
1882
+ kind: "replace-active";
1883
+ } | {
1884
+ kind: "replace-panel";
1885
+ instanceId: string;
1886
+ } | {
1887
+ kind: "preview";
1888
+ position?: WorkbenchTabPosition;
1889
+ };
1890
+
1891
+ declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
1892
+
1893
+ declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
1894
+
1895
+ export declare interface WorkbenchPanelRenderInput {
1896
+ workbench: WorkbenchCore;
1897
+ panel: WorkbenchPanelContribution | PlaceholderContribution | RegisteredPlaceholderContribution;
1898
+ instance: WorkbenchPanelInstance;
1899
+ refresh: () => void;
1900
+ }
1901
+
1902
+ export declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
1686
1903
 
1687
- export declare interface WorkbenchPanelsController {
1904
+ declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1905
+
1906
+ declare interface WorkbenchPanelsController {
1688
1907
  store: WorkbenchStore<WorkbenchPanelsState>;
1689
- isOpen(areaId: string): boolean;
1690
- setOpen(areaId: string, open: boolean): void;
1691
- toggle(areaId: string): void;
1908
+ isOpen(regionId: string): boolean;
1909
+ setOpen(regionId: string, open: boolean): void;
1910
+ toggle(regionId: string): void;
1911
+ setPersistenceScope(scope: string | undefined): void;
1912
+ getPersistenceScope(): string | undefined;
1692
1913
  onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
1693
1914
  }
1694
1915
 
1695
- export declare interface WorkbenchPanelsPersistenceAdapter {
1696
- getPanelStates(): PersistedWorkbenchPanels | undefined;
1697
- setPanelStates(state: PersistedWorkbenchPanels): void;
1916
+ declare interface WorkbenchPanelsPersistenceAdapter {
1917
+ getPanelStates(scope?: string): PersistedWorkbenchPanels | undefined;
1918
+ setPanelStates(state: PersistedWorkbenchPanels, scope?: string): void;
1919
+ }
1920
+
1921
+ declare interface WorkbenchPanelsState {
1922
+ openByRegionId: Record<string, boolean>;
1923
+ }
1924
+
1925
+ export declare type WorkbenchPanelTab = WorkbenchWidgetTab;
1926
+
1927
+ export declare interface WorkbenchPersistenceAdapter {
1928
+ getSnapshot(scope?: string): WorkbenchSnapshot | undefined;
1929
+ setSnapshot(snapshot: WorkbenchSnapshot, scope?: string): void;
1930
+ flush?(): void;
1931
+ dispose?(): void;
1932
+ }
1933
+
1934
+ export declare type WorkbenchRegion = (typeof workbenchRegions)[number];
1935
+
1936
+ 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"];
1937
+
1938
+ export declare interface WorkbenchRegionSize {
1939
+ defaultPx?: number;
1940
+ minPx?: number;
1941
+ maxPx?: number;
1698
1942
  }
1699
1943
 
1700
- export declare interface WorkbenchPanelsState {
1701
- openByAreaId: Record<string, boolean>;
1944
+ declare interface WorkbenchRegionState {
1945
+ id: WorkbenchRegion;
1946
+ visible: boolean;
1947
+ size?: number;
1948
+ widgets: WorkbenchWidgetPlacement[];
1949
+ activeWidgetId?: string;
1702
1950
  }
1703
1951
 
1952
+ export declare const workbenchRegionTabAddMenuPath: (region: string) => MenuPath;
1953
+
1954
+ export declare const workbenchRegionTabLeadingMenuPath: (region: string) => MenuPath;
1955
+
1704
1956
  declare type WorkbenchRendererChangeListener = () => void;
1705
1957
 
1706
1958
  export declare type WorkbenchRendererRegistration = {
1707
1959
  id: string;
1708
1960
  keepAlive?: false;
1709
- render: (input: WorkbenchWidgetRenderInput) => unknown;
1961
+ render: (input: WorkbenchPanelRenderInput) => unknown;
1710
1962
  } | {
1711
1963
  id: string;
1712
1964
  keepAlive: true;
@@ -1719,17 +1971,17 @@ export declare interface WorkbenchRendererRegistry {
1719
1971
  getRenderer(id: string): WorkbenchRendererRegistration | undefined;
1720
1972
  listRenderers(): WorkbenchRendererRegistration[];
1721
1973
  onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
1722
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchWidgetRenderInput): Disposable_2;
1974
+ claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
1723
1975
  getHost(rendererId: string): HTMLElement | undefined;
1724
- getClaim(rendererId: string): WorkbenchWidgetRenderInput | undefined;
1976
+ getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
1725
1977
  }
1726
1978
 
1727
- export declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & DataRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1979
+ declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1728
1980
 
1729
- export declare interface WorkbenchRendererStoreState {
1981
+ declare interface WorkbenchRendererStoreState {
1730
1982
  renderers: Record<string, WorkbenchRendererRegistration>;
1731
1983
  hosts: Record<string, RegisteredKeepAliveHost>;
1732
- claims: Record<string, WorkbenchWidgetRenderInput>;
1984
+ claims: Record<string, WorkbenchPanelRenderInput>;
1733
1985
  }
1734
1986
 
1735
1987
  export declare const workbenchResourceIdContextKey = "workbench.resource.id";
@@ -1740,22 +1992,44 @@ export declare const workbenchResourceMetadataContextKey: (key: string) => strin
1740
1992
 
1741
1993
  export declare const workbenchSelectionResourceUriMetadataKey = "workbench.selectionResourceUri";
1742
1994
 
1743
- export declare type WorkbenchSessionPanelChangeListener = (mode: WorkbenchSessionPanelMode) => void;
1995
+ export declare interface WorkbenchShellController {
1996
+ getRegionState(region: WorkbenchRegion): WorkbenchShellRegionState;
1997
+ setRegionOpen(region: WorkbenchShellOpenRegion, open: boolean): void;
1998
+ setRegionSize(region: WorkbenchRegion, size: number): void;
1999
+ getSidePanelPresentation(): WorkbenchSidePanelPresentation;
2000
+ setSidePanelPresentation(presentation: WorkbenchSidePanelPresentation): void;
2001
+ onDidChange(listener: () => void): Disposable_2;
2002
+ }
2003
+
2004
+ export declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
1744
2005
 
1745
- export declare interface WorkbenchSessionPanelController {
1746
- store: WorkbenchStore<WorkbenchSessionPanelState>;
1747
- getMode(): WorkbenchSessionPanelMode;
1748
- setMode(mode: WorkbenchSessionPanelMode): void;
1749
- onDidChange(listener: WorkbenchSessionPanelChangeListener): Disposable_2;
2006
+ export declare interface WorkbenchShellRegionState {
2007
+ open: boolean;
2008
+ size?: number;
1750
2009
  }
1751
2010
 
1752
- export declare type WorkbenchSessionPanelMode = "bubble" | "closed" | "attached";
2011
+ declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
2012
+
2013
+ declare interface WorkbenchSidePanelController {
2014
+ store: WorkbenchStore<WorkbenchSidePanelState>;
2015
+ getMode(): WorkbenchSidePanelMode;
2016
+ setMode(mode: WorkbenchSidePanelMode): void;
2017
+ onDidChange(listener: WorkbenchSidePanelChangeListener): Disposable_2;
2018
+ }
2019
+
2020
+ declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2021
+
2022
+ export declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
2023
+
2024
+ declare interface WorkbenchSidePanelState {
2025
+ mode: WorkbenchSidePanelMode;
2026
+ }
1753
2027
 
1754
- export declare interface WorkbenchSessionPanelState {
1755
- mode: WorkbenchSessionPanelMode;
2028
+ export declare interface WorkbenchSnapshot {
2029
+ layout: WorkbenchLayout;
1756
2030
  }
1757
2031
 
1758
- export declare interface WorkbenchStore<TState> {
2032
+ declare interface WorkbenchStore<TState> {
1759
2033
  getState(): TState;
1760
2034
  getInitialState(): TState;
1761
2035
  subscribe(listener: WorkbenchStoreListener<TState>): () => void;
@@ -1765,11 +2039,30 @@ export declare interface WorkbenchStore<TState> {
1765
2039
  }): () => void;
1766
2040
  }
1767
2041
 
1768
- export declare type WorkbenchStoreListener<TState> = (state: TState, previousState: TState) => void;
2042
+ declare type WorkbenchStoreListener<TState> = (state: TState, previousState: TState) => void;
2043
+
2044
+ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2045
+
2046
+ declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2047
+
2048
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2049
+ region: WorkbenchPanelRegion;
2050
+ fallbackRegion?: WorkbenchPanelRegion;
2051
+ } & WorkbenchPanelMenusContribution;
2052
+
2053
+ declare interface WorkbenchSubPanelRef {
2054
+ contributionId: string;
2055
+ resourceUri?: string;
2056
+ instanceKey?: string;
2057
+ }
1769
2058
 
1770
- export declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2059
+ export declare type WorkbenchTabPosition = "start" | "end" | {
2060
+ beforeWidgetId: string;
2061
+ } | {
2062
+ afterWidgetId: string;
2063
+ };
1771
2064
 
1772
- export declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2065
+ export declare type WorkbenchTabRetention = "preview" | "persistent";
1773
2066
 
1774
2067
  export declare interface WorkbenchTerminalController {
1775
2068
  store: WorkbenchStore<WorkbenchTerminalState>;
@@ -1853,7 +2146,7 @@ export declare interface WorkbenchTerminalState {
1853
2146
  sessionsById: Record<string, WorkbenchTerminalSessionModel>;
1854
2147
  }
1855
2148
 
1856
- export declare interface WorkbenchThemeStoreState {
2149
+ declare interface WorkbenchThemeStoreState {
1857
2150
  themes: readonly ThemePreferenceOption[];
1858
2151
  }
1859
2152
 
@@ -1861,25 +2154,30 @@ export declare const workbenchTopHeaderLeadingMenuPath: MenuPath;
1861
2154
 
1862
2155
  export declare const workbenchTopHeaderTrailingMenuPath: MenuPath;
1863
2156
 
1864
- export declare interface WorkbenchWidgetPlacement {
2157
+ declare interface WorkbenchWidgetPlacement {
1865
2158
  widgetId: string;
1866
2159
  contributionId: string;
1867
2160
  ownerId?: string;
1868
2161
  source?: ContributionSource;
1869
2162
  resource?: ResourceRef;
1870
2163
  resourceUri?: string;
2164
+ ownerResourceUri?: string;
1871
2165
  title?: string;
1872
2166
  pinned?: boolean;
1873
2167
  closable?: boolean;
1874
2168
  mountStrategy?: WidgetMountStrategy;
1875
2169
  hiddenByDefault?: boolean;
2170
+ tabRetention?: WorkbenchTabRetention;
2171
+ tab?: WorkbenchWidgetTab;
2172
+ role?: WorkbenchWidgetRole;
1876
2173
  }
1877
2174
 
1878
- export declare interface WorkbenchWidgetRenderInput {
1879
- workbench: WorkbenchCore;
1880
- widget: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
1881
- placement: WorkbenchWidgetPlacement;
1882
- refresh: () => void;
2175
+ declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2176
+
2177
+ declare interface WorkbenchWidgetTab {
2178
+ contentRendererId?: string;
2179
+ /** Custom actions shown when the user activates an already-active tab. */
2180
+ customMenuRendererId?: string;
1883
2181
  }
1884
2182
 
1885
2183
  export { }