@pstdio/workbench 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +100 -88
  2. package/dist/context-key-service-W4QEfVdN.js +1031 -0
  3. package/dist/context-key-service-W4QEfVdN.js.map +1 -0
  4. package/dist/extensions.d.ts +749 -256
  5. package/dist/extensions.js +900 -694
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-DrrhYnb_.js.map +1 -1
  8. package/dist/index.d.ts +756 -448
  9. package/dist/index.js +2974 -60
  10. package/dist/index.js.map +1 -1
  11. package/dist/layout-types-DMoZz38-.js +100 -0
  12. package/dist/layout-types-DMoZz38-.js.map +1 -0
  13. package/dist/react.d.ts +745 -231
  14. package/dist/react.js +3494 -2493
  15. package/dist/react.js.map +1 -1
  16. package/dist/storage.d.ts +109 -14
  17. package/dist/storage.js +142 -47
  18. package/dist/storage.js.map +1 -1
  19. package/dist/surface-map-C1pOTUmF.js +52 -0
  20. package/dist/surface-map-C1pOTUmF.js.map +1 -0
  21. package/dist/testing.d.ts +695 -198
  22. package/dist/testing.js +46 -34
  23. package/dist/testing.js.map +1 -1
  24. package/dist/webview-runtime.js +5 -1
  25. package/dist/webview-runtime.js.map +1 -1
  26. package/dist/workbench-menu-paths-B_QJzcNU.js +12 -0
  27. package/dist/workbench-menu-paths-B_QJzcNU.js.map +1 -0
  28. package/package.json +6 -7
  29. package/dist/context-key-service-C--cHa0B.js +0 -447
  30. package/dist/context-key-service-C--cHa0B.js.map +0 -1
  31. package/dist/core.d.ts +0 -1885
  32. package/dist/core.js +0 -64
  33. package/dist/core.js.map +0 -1
  34. package/dist/surface-reconcile-DkRf01ro.js +0 -260
  35. package/dist/surface-reconcile-DkRf01ro.js.map +0 -1
  36. package/dist/workbench-core-DFpwi8Lo.js +0 -2264
  37. package/dist/workbench-core-DFpwi8Lo.js.map +0 -1
  38. package/dist/workbench-menu-paths-CQVH6z4_.js +0 -11
  39. package/dist/workbench-menu-paths-CQVH6z4_.js.map +0 -1
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,129 @@ 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;
473
322
  }
474
323
 
475
- export declare interface DataRendererContribution<TRow extends DataRendererRow = DataRendererRow> {
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;
332
+ }
333
+
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
+ selectionMode?: "none" | "multiple";
366
+ selectionActions?: DataTableRendererSelectionAction[];
367
+ rowActions?: DataTableRendererRowAction[];
368
+ initialPageSize?: number;
369
+ pageSizeOptions?: number[];
492
370
  emptyTitle?: string;
493
371
  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[];
372
+ executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
503
373
  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;
374
+ onRowClick?: (row: DataTableRendererRow) => void;
518
375
  }
519
376
 
520
- export declare type DataRendererFilterState = Record<string, string[]>;
521
-
522
- export declare type DataRendererImplementation = (input: WorkbenchWidgetRenderInput & {
523
- dataRendererId: string;
377
+ export declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
378
+ dataTableRendererId: string;
524
379
  }) => unknown;
525
380
 
526
- export declare interface DataRendererOrdering {
527
- attributeId: string | typeof MANUAL_ORDERING;
528
- direction: SortDirection;
381
+ export declare interface DataTableRendererQueryContext {
382
+ resource?: ResourceRef;
383
+ modeId?: string;
529
384
  }
530
385
 
531
- export declare interface DataRendererQueryState {
532
- settings: DataRendererSettings;
533
- filters: DataRendererFilterState;
386
+ export declare interface DataTableRendererQueryResult {
387
+ rows: DataTableRendererRow[];
388
+ columns?: DataTableRendererColumn[];
534
389
  }
535
390
 
536
- declare interface DataRendererRefreshEvent {
537
- dataRendererId: string;
391
+ export declare interface DataTableRendererRefreshEvent {
392
+ dataTableRendererId: string;
538
393
  }
539
394
 
540
- declare type DataRendererRefreshListener = (event: DataRendererRefreshEvent) => void;
395
+ export declare interface DataTableRendererRegistry {
396
+ dataTableStore: WorkbenchStore<DataTableRendererStoreState>;
397
+ registerDataTableRenderer(contribution: DataTableRendererContribution, metadata?: ContributionMetadata): Disposable_2;
398
+ setDataTableRendererImplementation(implementation: DataTableRendererImplementation): void;
399
+ getDataTableRenderer(id: string): RegisteredDataTableRendererContribution | undefined;
400
+ listDataTableRenderers(): RegisteredDataTableRendererContribution[];
401
+ refreshDataTableRenderer(id: string): void;
402
+ onDidRefreshDataTableRenderer(listener: (event: DataTableRendererRefreshEvent) => void): Disposable_2;
403
+ }
541
404
 
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;
405
+ export declare interface DataTableRendererRow {
406
+ id: string;
407
+ values: Record<string, unknown>;
408
+ resource?: ResourceRef;
550
409
  }
551
410
 
552
- export declare interface DataRendererRow {
411
+ export declare interface DataTableRendererRowAction {
553
412
  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>;
413
+ label: string;
414
+ icon?: unknown;
415
+ destructive?: boolean;
416
+ run(row: DataTableRendererRow): Promise<void> | void;
562
417
  }
563
418
 
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[];
419
+ export declare interface DataTableRendererSelectionAction {
420
+ id: string;
421
+ label: string;
422
+ icon?: unknown;
423
+ destructive?: boolean;
424
+ run(rows: DataTableRendererRow[]): Promise<void> | void;
570
425
  }
571
426
 
572
- export declare interface DataRendererStoreState {
573
- renderers: Record<string, RegisteredDataRendererContribution>;
427
+ declare interface DataTableRendererStoreState {
428
+ renderers: Record<string, RegisteredDataTableRendererContribution>;
429
+ }
430
+
431
+ export declare interface DataTableRendererThemeColor {
432
+ light: string;
433
+ dark: string;
434
+ foreground?: {
435
+ light: string;
436
+ dark: string;
437
+ };
574
438
  }
575
439
 
576
440
  declare interface Disposable_2 {
@@ -649,7 +513,7 @@ export declare interface FileRendererContribution {
649
513
  save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
650
514
  }
651
515
 
652
- export declare type FileRendererImplementation = (input: WorkbenchWidgetRenderInput & {
516
+ export declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
653
517
  fileRendererId: string;
654
518
  }) => unknown;
655
519
 
@@ -669,21 +533,19 @@ export declare interface FileRendererRegistry {
669
533
  onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
670
534
  }
671
535
 
672
- export declare interface FileRendererStoreState {
536
+ declare interface FileRendererStoreState {
673
537
  renderers: Record<string, RegisteredFileRendererContribution>;
674
538
  }
675
539
 
676
- export declare const getAnchorResource: (layout: WorkbenchLayout, anchorId: AnchorId) => ResourceRef | undefined;
677
-
678
540
  export declare const getKeybindingSteps: (keybinding: KeybindingSequence) => string[];
679
541
 
680
- export declare const getSurface: (area: WorkbenchArea) => SurfaceDescriptor;
542
+ export declare const getWorkbenchModePanelForRegion: (region: WorkbenchRegion) => "main" | "secondary" | "side" | undefined;
681
543
 
682
544
  export declare const getWorkbenchSelectionResourceUris: (resource: ResourceRef | undefined) => string[];
683
545
 
684
- export declare const headerLeadingMenuPath: (area: string) => MenuPath;
546
+ export declare const headerLeadingMenuPath: (region: string) => MenuPath;
685
547
 
686
- export declare const headerTrailingMenuPath: (area: string) => MenuPath;
548
+ export declare const headerTrailingMenuPath: (region: string) => MenuPath;
687
549
 
688
550
  export declare interface HistoryController {
689
551
  store: WorkbenchStore<HistoryStoreState>;
@@ -692,29 +554,175 @@ export declare interface HistoryController {
692
554
  goPrevious(): HistoryEntry | undefined;
693
555
  recentlyClosed(): readonly HistoryEntry[];
694
556
  reopenLastClosed(): HistoryEntry | undefined;
557
+ setPersistenceScope(scope: string | undefined): void;
558
+ getPersistenceScope(): string | undefined;
559
+ restore(): HistoryEntry | undefined;
560
+ flush(): void;
695
561
  clear(): void;
696
562
  }
697
563
 
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
- }
564
+ export declare type HistoryEntry = WorkbenchNavigationEntry;
708
565
 
709
- export declare interface HistoryStoreState {
710
- entries: readonly HistoryEntry[];
566
+ declare interface HistoryStoreState {
567
+ entries: readonly WorkbenchNavigationEntry[];
711
568
  cursor: number;
712
- recentlyClosed: readonly HistoryEntry[];
569
+ recentlyClosed: readonly WorkbenchNavigationEntry[];
570
+ hydrating: boolean;
713
571
  }
714
572
 
715
- declare interface InternalWorkbenchStore<TState> extends WorkbenchStore<TState> {
716
- setState: NamedSet<TState>;
717
- api: StoreApi<TState>;
573
+ export declare const isWorkbenchModePanelAvailable: (mode: WorkbenchModeContribution | undefined, panel: WorkbenchPanelRegion) => boolean;
574
+
575
+ export declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
576
+ id: string;
577
+ title: string;
578
+ resourceKind?: string;
579
+ /**
580
+ * Declarative attribute schema. The renderer dispatches filter / group /
581
+ * sort / display / inline-edit behavior on each descriptor's `type.kind`.
582
+ *
583
+ * Pass an `AttributesSource` ({ subscribe, getSnapshot }) instead of a
584
+ * static array to let the contribution mutate its schema at runtime —
585
+ * `WorkbenchKanbanView` subscribes so additions / removals / kind changes
586
+ * propagate live without re-registering the renderer.
587
+ */
588
+ attributes: AttributeDescriptor[] | AttributesSource;
589
+ /** Per-board-column overrides (color, drag/create rules, custom actions). */
590
+ getBoardColumnConfig?: (groupKey: string) => BoardColumnConfig;
591
+ hideToolbar?: boolean;
592
+ emptyTitle?: string;
593
+ emptyDescription?: string;
594
+ /** Initial settings/filters applied when the kanban renderer mounts. */
595
+ defaultSettings?: Partial<KanbanRendererSettings>;
596
+ defaultFilters?: KanbanRendererFilterState;
597
+ defaultViews?: KanbanRendererSavedView[];
598
+ defaultActiveViewId?: string;
599
+ /**
600
+ * Data source. Receives the current display state so backends can paginate
601
+ * / filter / sort. The renderer re-applies filter / sort / group locally,
602
+ * so this can return unfiltered rows in simple cases.
603
+ */
604
+ executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
605
+ subscribe?: (listener: () => void) => Disposable_2 | (() => void);
606
+ /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
607
+ onRowClick?: (row: TRow) => void;
608
+ /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
609
+ getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
610
+ /**
611
+ * Fires for inline attribute edits AND for cross-column drag-to-reorder on
612
+ * the board (the renderer passes the grouping attribute id + the target
613
+ * column value).
614
+ */
615
+ onAttributeChange?: (rowId: string, attributeId: string, value: unknown) => Promise<void> | void;
616
+ /** Manual within-column reorder (only fires when ordering is manual). */
617
+ onReorder?: (rowId: string, beforeRowId?: string) => Promise<void> | void;
618
+ createRow?: KanbanRendererCreateRowConfig;
619
+ onCreateRow?: (submission: KanbanRendererCreateSubmission) => Promise<void> | void;
620
+ onColumnAction?: (columnId: string, actionId: string) => Promise<void> | void;
621
+ }
622
+
623
+ export declare interface KanbanRendererCreateField {
624
+ id: string;
625
+ label: string;
626
+ description?: string;
627
+ placeholder?: string;
628
+ type: KanbanRendererCreateFieldType;
629
+ required?: boolean;
630
+ defaultValue?: unknown;
631
+ options?: EnumOption[];
632
+ /** `files` fields only. */
633
+ multiple?: boolean;
634
+ accept?: string;
635
+ }
636
+
637
+ export declare type KanbanRendererCreateFieldType = "text" | "longtext" | "markdown" | "number" | "boolean" | "select" | "multi-select" | "files";
638
+
639
+ /** Chrome copy is supplied by the caller so the dialog ships no strings of its own. */
640
+ declare interface KanbanRendererCreateLabels {
641
+ cancel: string;
642
+ properties: string;
643
+ submitError: string;
644
+ removeFile: string;
645
+ }
646
+
647
+ export declare interface KanbanRendererCreateRowConfig {
648
+ title: string;
649
+ submitLabel: string;
650
+ fields: KanbanRendererCreateField[];
651
+ labels: KanbanRendererCreateLabels;
652
+ }
653
+
654
+ export declare interface KanbanRendererCreateSubmission {
655
+ columnId: string;
656
+ columnAttributeId?: string;
657
+ /** Declared field values, excluding `files` fields — those arrive as `files`. */
658
+ values: Record<string, unknown>;
659
+ /** Every editable attribute the user set, keyed by attribute id. */
660
+ attributeValues: Record<string, unknown>;
661
+ files: File[];
662
+ }
663
+
664
+ export declare type KanbanRendererFilterState = Record<string, string[]>;
665
+
666
+ export declare type KanbanRendererImplementation = (input: WorkbenchPanelRenderInput & {
667
+ kanbanRendererId: string;
668
+ }) => unknown;
669
+
670
+ export declare interface KanbanRendererOrdering {
671
+ attributeId: string | typeof MANUAL_ORDERING;
672
+ direction: SortDirection;
673
+ }
674
+
675
+ export declare interface KanbanRendererQueryState {
676
+ settings: KanbanRendererSettings;
677
+ filters: KanbanRendererFilterState;
678
+ }
679
+
680
+ declare interface KanbanRendererRefreshEvent {
681
+ kanbanRendererId: string;
682
+ }
683
+
684
+ declare type KanbanRendererRefreshListener = (event: KanbanRendererRefreshEvent) => void;
685
+
686
+ export declare interface KanbanRendererRegistry {
687
+ dataStore: WorkbenchStore<KanbanRendererStoreState>;
688
+ registerKanbanRenderer<TRow extends KanbanRendererRow = KanbanRendererRow>(contribution: KanbanRendererContribution<TRow>, metadata?: ContributionMetadata): Disposable_2;
689
+ setKanbanRendererImplementation(impl: KanbanRendererImplementation): void;
690
+ getKanbanRenderer(id: string): RegisteredKanbanRendererContribution | undefined;
691
+ listKanbanRenderers(): RegisteredKanbanRendererContribution[];
692
+ refreshKanbanRenderer(id: string): void;
693
+ onDidRefreshKanbanRenderer(listener: KanbanRendererRefreshListener): Disposable_2;
694
+ }
695
+
696
+ export declare interface KanbanRendererRow {
697
+ id: string;
698
+ title: string;
699
+ /**
700
+ * Optional navigation handle. When set, the renderer's default click handler
701
+ * routes through the contribution's onRowClick (which typically opens the
702
+ * resource via the workbench).
703
+ */
704
+ resource?: unknown;
705
+ attributes: Record<string, unknown>;
706
+ }
707
+
708
+ declare interface KanbanRendererSavedView {
709
+ id: string;
710
+ title: string;
711
+ settings: KanbanRendererSettings;
712
+ filters: KanbanRendererFilterState;
713
+ isDefault?: boolean;
714
+ }
715
+
716
+ export declare interface KanbanRendererSettings {
717
+ viewMode: ViewMode;
718
+ columnGrouping: string | typeof NO_GROUPING;
719
+ rowGrouping: string | typeof NO_GROUPING;
720
+ ordering: KanbanRendererOrdering;
721
+ displayProperties: string[];
722
+ }
723
+
724
+ declare interface KanbanRendererStoreState {
725
+ renderers: Record<string, RegisteredKanbanRendererContribution>;
718
726
  }
719
727
 
720
728
  export declare interface Keybinding {
@@ -731,11 +739,6 @@ export declare interface KeybindingRegistry {
731
739
  listActiveKeybindings(): RegisteredKeybinding[];
732
740
  }
733
741
 
734
- declare interface KeybindingRegistryDeps {
735
- commands: CommandRegistry;
736
- context: ContextKeyService;
737
- }
738
-
739
742
  declare interface KeybindingRegistryStoreState {
740
743
  keybindings: RegisteredKeybinding[];
741
744
  }
@@ -747,55 +750,80 @@ export declare interface LastResourcePersistenceAdapter {
747
750
  setLastResource(resource: ResourceRef | undefined): void;
748
751
  }
749
752
 
750
- export declare interface LayoutModel {
753
+ declare interface LayoutModel {
751
754
  store: WorkbenchStore<WorkbenchLayoutStoreState>;
752
755
  registerPlaceholder(placeholder: PlaceholderContribution, metadata?: ContributionMetadata): {
753
756
  dispose(): void;
754
757
  };
758
+ registerPanel(panel: WorkbenchPanelContribution, metadata?: ContributionMetadata): {
759
+ dispose(): void;
760
+ };
755
761
  registerWidget(widget: WidgetContribution, metadata?: ContributionMetadata): {
756
762
  dispose(): void;
757
763
  };
764
+ registerLocation(location: WorkbenchLocationContribution, metadata?: ContributionMetadata): {
765
+ dispose(): void;
766
+ };
767
+ registerSubPanel(subPanel: WorkbenchSubPanelContribution, metadata?: ContributionMetadata): {
768
+ dispose(): void;
769
+ };
770
+ registerPanelMenu(panelMenu: WorkbenchPanelMenuContribution, metadata?: ContributionMetadata): {
771
+ dispose(): void;
772
+ };
758
773
  unregisterWidget(id: string, options?: {
759
774
  removePlacements?: boolean;
760
775
  persist?: boolean;
761
776
  }): void;
762
- getPlaceholder(areaId: WorkbenchArea): RegisteredPlaceholderContribution | undefined;
777
+ getPlaceholder(regionId: WorkbenchRegion): RegisteredPlaceholderContribution | undefined;
763
778
  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;
779
+ getPanel(id: string): WorkbenchPanelContribution | undefined;
780
+ getRegionSize(regionId: WorkbenchRegion): WorkbenchRegionSize | undefined;
781
+ getRegionCollapsible(regionId: WorkbenchRegion): boolean;
782
+ getRegionHeaderBorderBottom(regionId: WorkbenchRegion): boolean;
783
+ setRegionVisible(regionId: WorkbenchRegion, visible: boolean): void;
784
+ setRegionSize(regionId: WorkbenchRegion, size: number): void;
769
785
  listPlaceholders(): RegisteredPlaceholderContribution[];
770
786
  listWidgets(): RegisteredWidgetContribution[];
787
+ listPanels(): WorkbenchPanelContribution[];
788
+ listPanelInstances(region?: WorkbenchRegion): WorkbenchPanelInstance[];
789
+ getActivePanel(region?: WorkbenchRegion): WorkbenchPanelInstance | undefined;
771
790
  openWidget(id: string, input?: OpenWidgetInput): WorkbenchWidgetPlacement;
791
+ openPanel(id: string, input?: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
792
+ updatePanel(instanceId: string, input: OpenWorkbenchPanelInput): WorkbenchPanelInstance;
793
+ reorderPanel(instanceId: string, position: WorkbenchTabPosition): void;
794
+ activatePanel(instanceId: string): WorkbenchPanelInstance;
795
+ closePanel(instanceId: string): WorkbenchPanelInstance | undefined;
772
796
  updateWidgetPlacement(widgetId: string, input: OpenWidgetInput): WorkbenchWidgetPlacement;
797
+ reorderWidget(widgetId: string, position: WorkbenchTabPosition): void;
798
+ expirePreviewTabs(ownerResourceUri?: string): void;
773
799
  activateWidget(widgetId: string): WorkbenchWidgetPlacement;
800
+ setRegionActiveWidget(regionId: WorkbenchRegion, widgetId: string | undefined): void;
774
801
  closeWidget(widgetId: string): WorkbenchWidgetPlacement | undefined;
775
802
  removeWidgetPlacement(widgetId: string): WorkbenchWidgetPlacement | undefined;
776
- clearArea(areaId: WorkbenchArea): void;
777
- resetAreas(): void;
803
+ clearRegion(regionId: WorkbenchRegion): void;
804
+ resetRegions(): void;
778
805
  getLayout(): WorkbenchLayout;
779
806
  restoreLayout(layout: WorkbenchLayout): void;
780
- setPersistenceScope(scope: LayoutScope | undefined): void;
807
+ setPersistenceScope(scope: LayoutScope | undefined, input?: {
808
+ carryRegionState?: readonly WorkbenchRegion[];
809
+ }): void;
781
810
  getPersistenceScope(): LayoutScope | undefined;
811
+ onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
812
+ dispose(): void;
813
+ };
782
814
  onDidChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
783
815
  dispose(): void;
784
816
  };
785
817
  }
786
818
 
787
- export declare interface LayoutPersistenceAdapter {
819
+ declare interface LayoutPersistenceAdapter {
788
820
  getLayout(scope?: LayoutScope): WorkbenchLayout | undefined;
789
821
  setLayout(layout: WorkbenchLayout, scope?: LayoutScope): void;
822
+ flush?(): void;
823
+ dispose?(): void;
790
824
  }
791
825
 
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")[];
826
+ declare type LayoutScope = string;
799
827
 
800
828
  declare const MANUAL_ORDERING = "manual";
801
829
 
@@ -803,6 +831,7 @@ export declare const matchesContextExpression: (values: Record<string, ContextKe
803
831
 
804
832
  export declare interface MenuItem {
805
833
  commandId: string;
834
+ sourceCommandId?: string;
806
835
  label?: string;
807
836
  description?: string;
808
837
  icon?: string;
@@ -825,21 +854,17 @@ export declare interface MenuRegistry {
825
854
  listMenuItems(path: MenuPath): RegisteredMenuItem[];
826
855
  }
827
856
 
828
- declare interface MenuRegistryDeps {
829
- commands: CommandRegistry;
830
- }
831
-
832
857
  declare interface MenuRegistryStoreState {
833
858
  itemsByPath: Record<string, RegisteredMenuItem[]>;
834
859
  }
835
860
 
836
861
  export declare interface NavigationDispatcherContext {
837
862
  canOpenResource?(resource: ResourceRef): boolean;
838
- canOpenWidget?(widgetId: string): boolean;
863
+ canOpenPanel?(panelId: string): boolean;
839
864
  canExecuteCommand?(commandId: string): boolean;
840
865
  createCheckpoint?(): undefined | (() => void);
841
866
  openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
842
- openWidget(widgetId: string, input?: OpenWidgetInput): unknown;
867
+ openPanel(panelId: string, input?: OpenWorkbenchPanelInput): unknown;
843
868
  executeCommand(commandId: string, args?: unknown): Promise<unknown> | unknown;
844
869
  }
845
870
 
@@ -881,7 +906,13 @@ export declare interface NavigationTargetCompound {
881
906
  targets: readonly NavigationTargetItem[];
882
907
  }
883
908
 
884
- export declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetCommand;
909
+ export declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
910
+
911
+ export declare interface NavigationTargetPanel {
912
+ kind: "panel";
913
+ panelId: string;
914
+ input?: OpenWorkbenchPanelInput;
915
+ }
885
916
 
886
917
  export declare interface NavigationTargetResource {
887
918
  kind: "resource";
@@ -889,12 +920,6 @@ export declare interface NavigationTargetResource {
889
920
  input?: OpenResourceInput;
890
921
  }
891
922
 
892
- export declare interface NavigationTargetView {
893
- kind: "view";
894
- widgetId: string;
895
- input?: OpenWidgetInput;
896
- }
897
-
898
923
  declare const NO_GROUPING = "none";
899
924
 
900
925
  export declare interface NotificationRegistry {
@@ -913,31 +938,50 @@ export declare interface OpenResourceInput {
913
938
  declare interface OpenWidgetInput {
914
939
  resource?: ResourceRef;
915
940
  title?: string;
916
- area?: WorkbenchArea;
941
+ region?: WorkbenchRegion;
917
942
  ownerId?: string;
918
943
  source?: ContributionSource;
919
944
  pinned?: boolean;
920
945
  closable?: boolean;
921
946
  mountStrategy?: WidgetMountStrategy;
922
947
  hiddenByDefault?: boolean;
948
+ tabRetention?: WorkbenchTabRetention;
949
+ tabPosition?: WorkbenchTabPosition;
950
+ tab?: WorkbenchWidgetTab;
923
951
  replaceActive?: boolean;
952
+ replaceWidgetId?: string;
953
+ }
954
+
955
+ export declare interface OpenWorkbenchPanelInput {
956
+ resource?: ResourceRef;
957
+ title?: string;
958
+ region?: WorkbenchRegion;
959
+ pinned?: boolean;
960
+ mountStrategy?: WorkbenchPanelMountStrategy;
961
+ hiddenByDefault?: boolean;
962
+ tab?: WorkbenchPanelTab;
963
+ strategy?: WorkbenchPanelOpenStrategy;
924
964
  }
925
965
 
926
966
  export declare interface PersistedTreeRendererStates {
927
967
  statesByTreeId: Record<string, TreeRendererState>;
928
968
  }
929
969
 
930
- export declare interface PersistedWorkbenchPanels {
931
- openByAreaId: Record<string, boolean>;
970
+ export declare interface PersistedWorkbenchHistory extends Omit<HistoryStoreState, "hydrating"> {
971
+ version: 1;
972
+ }
973
+
974
+ declare interface PersistedWorkbenchPanels {
975
+ openByRegionId: Record<string, boolean>;
932
976
  }
933
977
 
934
- export declare interface PlaceholderContribution {
978
+ declare interface PlaceholderContribution {
935
979
  id: string;
936
980
  title: string;
937
- area: WorkbenchArea;
981
+ region: WorkbenchRegion;
938
982
  rendererId: string;
939
- areaSize?: WorkbenchAreaSize;
940
- areaCollapsible?: boolean;
983
+ regionSize?: WorkbenchRegionSize;
984
+ regionCollapsible?: boolean;
941
985
  config?: unknown;
942
986
  priority?: number;
943
987
  }
@@ -980,80 +1024,71 @@ export declare interface PreferenceScopeRef {
980
1024
 
981
1025
  export declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
982
1026
 
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 {
1027
+ declare interface RegisteredCommand extends RegisteredContributionMetadata {
998
1028
  command: Command;
999
1029
  handler: CommandHandler;
1000
1030
  }
1001
1031
 
1002
- export declare interface RegisteredContributionMetadata {
1032
+ declare interface RegisteredContributionMetadata {
1003
1033
  source: ContributionSource;
1004
1034
  ownerId: string;
1005
1035
  priority: number;
1006
1036
  }
1007
1037
 
1008
- export declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
1038
+ declare interface RegisteredControlsRendererContribution extends ControlsRendererContribution, RegisteredContributionMetadata {
1009
1039
  }
1010
1040
 
1011
- export declare interface RegisteredDataRendererContribution<TRow extends DataRendererRow = DataRendererRow> extends DataRendererContribution<TRow>, RegisteredContributionMetadata {
1041
+ declare interface RegisteredDataTableRendererContribution extends DataTableRendererContribution, RegisteredContributionMetadata {
1012
1042
  }
1013
1043
 
1014
- export declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
1044
+ declare interface RegisteredFileRendererContribution extends FileRendererContribution, RegisteredContributionMetadata {
1015
1045
  }
1016
1046
 
1017
- export declare interface RegisteredKeepAliveHost {
1047
+ declare interface RegisteredKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> extends KanbanRendererContribution<TRow>, RegisteredContributionMetadata {
1048
+ }
1049
+
1050
+ declare interface RegisteredKeepAliveHost {
1018
1051
  rendererId: string;
1019
1052
  host: HTMLElement;
1020
1053
  attachedTo?: HTMLElement;
1021
1054
  }
1022
1055
 
1023
- export declare interface RegisteredKeybinding extends Keybinding, RegisteredContributionMetadata {
1056
+ declare interface RegisteredKeybinding extends Keybinding, RegisteredContributionMetadata {
1024
1057
  }
1025
1058
 
1026
- export declare interface RegisteredMenuItem extends MenuItem, RegisteredContributionMetadata {
1059
+ declare interface RegisteredMenuItem extends MenuItem, RegisteredContributionMetadata {
1027
1060
  path: MenuPath;
1028
1061
  }
1029
1062
 
1030
- export declare type RegisteredNavigationParser = Omit<NavigationParser, "priority"> & RegisteredContributionMetadata;
1063
+ declare type RegisteredNavigationParser = Omit<NavigationParser, "priority"> & RegisteredContributionMetadata;
1031
1064
 
1032
- export declare type RegisteredPlaceholderContribution = Omit<PlaceholderContribution, "priority"> & RegisteredContributionMetadata;
1065
+ declare type RegisteredPlaceholderContribution = Omit<PlaceholderContribution, "priority"> & RegisteredContributionMetadata;
1033
1066
 
1034
1067
  declare type RegisteredPreferenceSchema = PreferencePropertySchema & {
1035
1068
  ownerId: string;
1036
1069
  source: string;
1037
1070
  };
1038
1071
 
1039
- export declare interface RegisteredResourceKind extends ResourceKindContribution, RegisteredContributionMetadata {
1072
+ declare interface RegisteredResourceKind extends ResourceKindContribution, RegisteredContributionMetadata {
1040
1073
  }
1041
1074
 
1042
- export declare type RegisteredResourceNavigator = Omit<ResourceNavigator, "priority"> & RegisteredContributionMetadata;
1075
+ declare type RegisteredResourceNavigator = Omit<ResourceNavigator, "priority"> & RegisteredContributionMetadata;
1043
1076
 
1044
- export declare type RegisteredSettingsPanel = SettingsPanelContribution & RegisteredContributionMetadata;
1077
+ declare type RegisteredSettingsPanel = SettingsPanelContribution & RegisteredContributionMetadata;
1045
1078
 
1046
- export declare type RegisteredSettingsSection = SettingsSectionContribution & RegisteredContributionMetadata;
1079
+ declare type RegisteredSettingsSection = SettingsSectionContribution & RegisteredContributionMetadata;
1047
1080
 
1048
- export declare interface RegisteredTreeRendererContribution extends TreeRendererContribution, RegisteredContributionMetadata {
1081
+ declare interface RegisteredTreeRendererContribution extends TreeRendererContribution, RegisteredContributionMetadata {
1049
1082
  }
1050
1083
 
1051
- export declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1084
+ declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority" | "singleton" | "reuse"> & {
1085
+ ownedPanelMenuIds?: readonly string[];
1052
1086
  singleton: boolean;
1053
1087
  reuse: WidgetReusePolicy;
1088
+ role: WorkbenchWidgetRole;
1054
1089
  } & RegisteredContributionMetadata;
1055
1090
 
1056
- export declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
1091
+ declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
1057
1092
  id: string;
1058
1093
  level: WorkbenchNotificationLevel;
1059
1094
  title: string;
@@ -1064,9 +1099,11 @@ export declare interface RegisteredWorkbenchNotification extends RegisteredContr
1064
1099
  metadata?: Record<string, unknown>;
1065
1100
  }
1066
1101
 
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";
1102
+ 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";
1068
1103
 
1069
- declare type ResolvedResourceOpener = Required<ResourceOpener>;
1104
+ declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1105
+
1106
+ declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
1070
1107
 
1071
1108
  export declare interface ResourceBrowseEntry {
1072
1109
  resource: ResourceRef;
@@ -1090,6 +1127,13 @@ export declare interface ResourceContextAction {
1090
1127
 
1091
1128
  export declare const resourceContextMenuPath: (resourceKind: string) => MenuPath;
1092
1129
 
1130
+ export declare interface ResourceHierarchyProvider {
1131
+ id: string;
1132
+ priority?: number;
1133
+ canResolve(resource: ResourceRef): boolean;
1134
+ getParent(resource: ResourceRef): ResourceRef | undefined;
1135
+ }
1136
+
1093
1137
  export declare interface ResourceKindContribution {
1094
1138
  kind: string;
1095
1139
  label: string;
@@ -1102,7 +1146,7 @@ export declare interface ResourceListContext {
1102
1146
  primary?: ResourceRef;
1103
1147
  }
1104
1148
 
1105
- export declare interface ResourceNavigator<TResult = unknown> {
1149
+ declare interface ResourceNavigator<TResult = unknown> {
1106
1150
  id: string;
1107
1151
  priority?: number;
1108
1152
  canNavigate(resource: ResourceRef): boolean;
@@ -1110,11 +1154,11 @@ export declare interface ResourceNavigator<TResult = unknown> {
1110
1154
  navigate(resource: ResourceRef): TResult | Promise<TResult>;
1111
1155
  }
1112
1156
 
1113
- export declare interface ResourceOpener<TResult = unknown> {
1157
+ export declare interface ResourcePresenter {
1114
1158
  id: string;
1115
1159
  priority?: number;
1116
1160
  canOpen(resource: ResourceRef): boolean;
1117
- open(resource: ResourceRef, input: OpenResourceInput): TResult | Promise<TResult>;
1161
+ open(resource: ResourceRef, input: OpenResourceInput): WorkbenchPanelInstance | Promise<WorkbenchPanelInstance>;
1118
1162
  }
1119
1163
 
1120
1164
  export declare interface ResourceProvider {
@@ -1138,19 +1182,24 @@ export declare interface ResourceRegistry {
1138
1182
  getKind(kind: string): RegisteredResourceKind | undefined;
1139
1183
  getSurface(resource: ResourceRef): ResourceSurface | undefined;
1140
1184
  listKinds(): RegisteredResourceKind[];
1141
- registerOpener(opener: ResourceOpener): Disposable_2;
1142
- listOpeners(): ResolvedResourceOpener[];
1185
+ registerPresenter(presenter: ResourcePresenter): Disposable_2;
1186
+ listPresenters(): ResolvedResourcePresenter[];
1143
1187
  registerProvider(provider: ResourceProvider): Disposable_2;
1144
1188
  listProviders(): ResourceProvider[];
1145
1189
  listResources(query: string): readonly ResourceBrowseEntry[];
1146
- openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<unknown>;
1190
+ registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1191
+ listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1192
+ walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1193
+ isOpeningResource(): boolean;
1194
+ openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1147
1195
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
1148
1196
  }
1149
1197
 
1150
1198
  declare interface ResourceRegistryStoreState {
1151
1199
  kinds: Record<string, RegisteredResourceKind>;
1152
- openers: Record<string, ResolvedResourceOpener>;
1200
+ presenters: Record<string, ResolvedResourcePresenter>;
1153
1201
  providers: Record<string, ResourceProvider>;
1202
+ hierarchyProviders: Record<string, ResolvedResourceHierarchyProvider>;
1154
1203
  }
1155
1204
 
1156
1205
  export declare type ResourceSurface = "primary" | "secondary" | "attached";
@@ -1211,7 +1260,7 @@ export declare interface SettingsRegistry {
1211
1260
  refresh(): void;
1212
1261
  }
1213
1262
 
1214
- export declare interface SettingsRegistryStoreState {
1263
+ declare interface SettingsRegistryStoreState {
1215
1264
  sections: Record<string, RegisteredSettingsSection>;
1216
1265
  panels: Record<string, RegisteredSettingsPanel>;
1217
1266
  /** Bumped by refresh() so the surface re-reads collection items() after backing data changes. */
@@ -1221,7 +1270,7 @@ export declare interface SettingsRegistryStoreState {
1221
1270
  /** Settings are stored either per-user (global) or per-project. Projectless surfaces show only global entries. */
1222
1271
  export declare type SettingsScope = "global" | "project";
1223
1272
 
1224
- /** An ordered sidebar container. Headerless when `title` is omitted. */
1273
+ /** An ordered sidenav container. Headerless when `title` is omitted. */
1225
1274
  export declare interface SettingsSectionContribution {
1226
1275
  id: string;
1227
1276
  title?: string;
@@ -1239,13 +1288,9 @@ export declare const standardResourceIcons: {
1239
1288
  readonly workspace: "computer";
1240
1289
  readonly worktree: "git-pull-request-draft";
1241
1290
  readonly settings: "settings";
1242
- readonly dataRenderer: "table-properties";
1291
+ readonly kanbanRenderer: "table-properties";
1243
1292
  };
1244
1293
 
1245
- export declare type SurfaceDescriptor = AnchorSurface | ProjectionSurface | ChromeSurface | TransientSurface;
1246
-
1247
- export declare const surfaceMap: Record<WorkbenchArea, SurfaceDescriptor>;
1248
-
1249
1294
  /**
1250
1295
  * Core-owned contract for theme registrations. Structurally identical to
1251
1296
  * @pstdio/ui's ThemePreferenceOption; the React layer bridges the two so core
@@ -1271,10 +1316,6 @@ export declare interface ThemeRegistry {
1271
1316
  listThemes(): readonly ThemePreferenceOption[];
1272
1317
  }
1273
1318
 
1274
- declare interface TransientSurface {
1275
- role: "transient";
1276
- }
1277
-
1278
1319
  export declare interface TreeAction {
1279
1320
  id: string;
1280
1321
  label?: string;
@@ -1321,6 +1362,8 @@ export declare interface TreeNode {
1321
1362
  hiddenByDefault?: boolean;
1322
1363
  /** When true, the node (e.g. a header/footer row) opts in to the tree's hide/show customization menu. */
1323
1364
  canHide?: boolean;
1365
+ /** When false, the node stays fixed within its Sidenav group. */
1366
+ canReorder?: boolean;
1324
1367
  }
1325
1368
 
1326
1369
  declare type TreeNodeRowVariant = "empty-state";
@@ -1338,7 +1381,7 @@ export declare interface TreeRendererContribution {
1338
1381
  getChildren(node: TreeNode, ctx: TreeContext): Promise<TreeNode[]> | TreeNode[];
1339
1382
  }
1340
1383
 
1341
- export declare type TreeRendererImplementation = (input: WorkbenchWidgetRenderInput & {
1384
+ export declare type TreeRendererImplementation = (input: WorkbenchPanelRenderInput & {
1342
1385
  treeId: string;
1343
1386
  }) => unknown;
1344
1387
 
@@ -1379,7 +1422,7 @@ export declare interface TreeRendererState {
1379
1422
  loading?: boolean;
1380
1423
  }
1381
1424
 
1382
- export declare interface TreeRendererStoreState {
1425
+ declare interface TreeRendererStoreState {
1383
1426
  trees: Record<string, RegisteredTreeRendererContribution>;
1384
1427
  statesByTreeId: Record<string, TreeRendererState>;
1385
1428
  refreshKeysByTreeId: Record<string, number>;
@@ -1401,61 +1444,50 @@ export declare interface TreeViewSection {
1401
1444
  hiddenByDefault?: boolean;
1402
1445
  /** When true, the section (category) opts in to the tree's hide/show customization menu. */
1403
1446
  canHide?: boolean;
1447
+ /** When false, the section stays fixed within the Sidenav main region. */
1448
+ canReorder?: boolean;
1404
1449
  }
1405
1450
 
1406
1451
  /**
1407
- * Core-owned contracts for data renderer contributions. @pstdio/ui's
1408
- * DataRenderer props are structurally identical; the React layer bridges the
1452
+ * Core-owned contracts for kanban renderer contributions. @pstdio/ui's
1453
+ * KanbanRenderer props are structurally identical; the React layer bridges the
1409
1454
  * two, so drift surfaces as a compile error there instead of coupling core's
1410
1455
  * API shape to UI package ownership.
1411
1456
  */
1412
1457
  export declare type ViewMode = "board" | "list";
1413
1458
 
1414
- export declare interface WidgetContribution {
1459
+ declare interface WidgetContribution {
1415
1460
  id: string;
1416
1461
  title: string;
1417
- area: WorkbenchArea;
1418
- fallbackArea?: WorkbenchArea;
1462
+ icon?: string;
1463
+ region: WorkbenchRegion;
1464
+ fallbackRegion?: WorkbenchRegion;
1419
1465
  singleton?: boolean;
1420
1466
  reuse?: WidgetReusePolicy;
1421
1467
  mountStrategy?: WidgetMountStrategy;
1422
1468
  closable?: boolean;
1423
1469
  hiddenByDefault?: boolean;
1424
- areaSize?: WorkbenchAreaSize;
1425
- areaCollapsible?: boolean;
1470
+ regionSize?: WorkbenchRegionSize;
1471
+ regionCollapsible?: boolean;
1426
1472
  headerBorderBottom?: boolean;
1473
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1427
1474
  resourceKinds?: string[];
1428
1475
  priority?: number;
1429
1476
  rendererId: string;
1477
+ openCommandId?: string;
1478
+ role?: WorkbenchWidgetRole;
1479
+ eligibleLocations?: WorkbenchLocationEligibility;
1480
+ panelMenuOwner?: WorkbenchPanelMenuOwner;
1481
+ tab?: WorkbenchWidgetTab;
1430
1482
  config?: unknown;
1431
1483
  canOpen?(resource: ResourceRef): boolean;
1432
1484
  }
1433
1485
 
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
- }
1486
+ declare type WidgetMountStrategy = "active" | "keep-mounted";
1455
1487
 
1456
- export declare const workbenchAreaTabLeadingMenuPath: (area: string) => MenuPath;
1488
+ declare type WidgetReusePolicy = "resource" | "none";
1457
1489
 
1458
- export declare type WorkbenchBreadcrumbChangeListener = () => void;
1490
+ declare type WorkbenchBreadcrumbChangeListener = () => void;
1459
1491
 
1460
1492
  export declare interface WorkbenchBreadcrumbController {
1461
1493
  store: WorkbenchStore<WorkbenchBreadcrumbState>;
@@ -1468,6 +1500,7 @@ export declare interface WorkbenchBreadcrumbController {
1468
1500
  export declare interface WorkbenchBreadcrumbItem {
1469
1501
  title: unknown;
1470
1502
  icon?: string;
1503
+ indicator?: "session-status";
1471
1504
  url?: string;
1472
1505
  onClick?: () => void;
1473
1506
  resource?: ResourceRef;
@@ -1477,8 +1510,16 @@ declare interface WorkbenchBreadcrumbState {
1477
1510
  items: WorkbenchBreadcrumbItem[] | undefined;
1478
1511
  }
1479
1512
 
1513
+ declare interface WorkbenchClosedSubPanel {
1514
+ region: WorkbenchPanelRegion;
1515
+ reference: WorkbenchSubPanelRef;
1516
+ resource?: ResourceRef;
1517
+ title?: string;
1518
+ }
1519
+
1480
1520
  export declare interface WorkbenchCommandExecutionContext {
1481
1521
  resource?: ResourceRef;
1522
+ source?: "panel-add";
1482
1523
  }
1483
1524
 
1484
1525
  export declare interface WorkbenchCommandExecutionError {
@@ -1487,9 +1528,9 @@ export declare interface WorkbenchCommandExecutionError {
1487
1528
  error: unknown;
1488
1529
  }
1489
1530
 
1490
- export declare type WorkbenchCommandExecutionErrorListener = (event: WorkbenchCommandExecutionError) => void;
1531
+ declare type WorkbenchCommandExecutionErrorListener = (event: WorkbenchCommandExecutionError) => void;
1491
1532
 
1492
- export declare type WorkbenchCommandPaletteChangeListener = (open: boolean) => void;
1533
+ declare type WorkbenchCommandPaletteChangeListener = (open: boolean) => void;
1493
1534
 
1494
1535
  export declare interface WorkbenchCommandPaletteController {
1495
1536
  store: WorkbenchStore<WorkbenchCommandPaletteState>;
@@ -1512,14 +1553,14 @@ export declare interface WorkbenchCommandPaletteOpenInput {
1512
1553
  initialQuery?: string;
1513
1554
  }
1514
1555
 
1515
- export declare interface WorkbenchCommandPaletteState {
1556
+ declare interface WorkbenchCommandPaletteState {
1516
1557
  open: boolean;
1517
1558
  view: WorkbenchCommandPaletteView;
1518
1559
  initialQuery: string;
1519
1560
  paramsRequest: WorkbenchCommandParamsRequest | null;
1520
1561
  }
1521
1562
 
1522
- export declare type WorkbenchCommandPaletteView = "main" | "theme" | "mode";
1563
+ declare type WorkbenchCommandPaletteView = "main" | "theme" | "mode";
1523
1564
 
1524
1565
  declare interface WorkbenchCommandParamsRequest {
1525
1566
  record: {
@@ -1535,11 +1576,12 @@ declare interface WorkbenchCommandParamsRequest {
1535
1576
  }
1536
1577
 
1537
1578
  export declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1579
+ host: WorkbenchHost;
1538
1580
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1539
1581
  unregisterModule(moduleId: string): void;
1540
1582
  }
1541
1583
 
1542
- export declare interface WorkbenchCoreContributionContext {
1584
+ declare interface WorkbenchCoreContributionContext {
1543
1585
  breadcrumbs: WorkbenchBreadcrumbController;
1544
1586
  commandPalette: WorkbenchCommandPaletteController;
1545
1587
  commandPaletteResources: CommandPaletteResourceRegistry;
@@ -1558,7 +1600,8 @@ export declare interface WorkbenchCoreContributionContext {
1558
1600
  renderers: WorkbenchRenderers;
1559
1601
  resources: ResourceRegistry;
1560
1602
  settings: SettingsRegistry;
1561
- sessionPanel: WorkbenchSessionPanelController;
1603
+ shell: WorkbenchShellController;
1604
+ sidePanel: WorkbenchSidePanelController;
1562
1605
  terminal: WorkbenchTerminalController;
1563
1606
  themes: ThemeRegistry;
1564
1607
  fileIconThemes: FileIconThemeRegistry;
@@ -1568,46 +1611,82 @@ export declare interface WorkbenchCoreContributionContext {
1568
1611
  onDidChangeActiveResource(listener: (resource: ResourceRef | undefined) => void): Disposable_2;
1569
1612
  }
1570
1613
 
1571
- export declare interface WorkbenchFileIconThemeStoreState {
1614
+ declare interface WorkbenchFileIconThemeStoreState {
1572
1615
  themes: readonly FileIconThemePreferenceOption[];
1573
1616
  }
1574
1617
 
1575
- export declare type WorkbenchFocusArea = (typeof workbenchFocusAreas)[number];
1576
-
1577
- export declare const workbenchFocusAreas: readonly ["activityBar", "sideBar", "main", "panel", "statusBar"];
1618
+ export declare type WorkbenchFloatingPanelVisibility = "visible" | "hidden";
1578
1619
 
1579
- export declare type WorkbenchFocusChangeListener = (area: WorkbenchFocusArea | undefined) => void;
1620
+ declare type WorkbenchFocusChangeListener = (region: WorkbenchFocusRegionId | undefined) => void;
1580
1621
 
1581
1622
  export declare interface WorkbenchFocusController {
1582
1623
  store: WorkbenchStore<WorkbenchFocusState>;
1583
- setActiveArea(area: WorkbenchFocusArea): void;
1624
+ setActiveRegion(region: WorkbenchFocusRegionId): void;
1584
1625
  clearFocus(): void;
1585
- getActiveArea(): WorkbenchFocusArea | undefined;
1626
+ getActiveRegion(): WorkbenchFocusRegionId | undefined;
1586
1627
  onDidChange(listener: WorkbenchFocusChangeListener): Disposable_2;
1587
1628
  }
1588
1629
 
1589
- export declare interface WorkbenchFocusState {
1590
- activeArea: WorkbenchFocusArea | undefined;
1630
+ export declare type WorkbenchFocusRegionId = (typeof workbenchFocusRegions)[number];
1631
+
1632
+ declare const workbenchFocusRegions: readonly ["activity", "sidenav", "main", "secondary", "side", "status"];
1633
+
1634
+ declare interface WorkbenchFocusState {
1635
+ activeRegion: WorkbenchFocusRegionId | undefined;
1636
+ }
1637
+
1638
+ declare interface WorkbenchHistoryPersistence {
1639
+ getHistory(scope?: string): PersistedWorkbenchHistory | undefined;
1640
+ setHistory(state: PersistedWorkbenchHistory, scope?: string): void;
1641
+ }
1642
+
1643
+ export declare interface WorkbenchHost {
1644
+ getSnapshot(): WorkbenchSnapshot;
1645
+ restoreSnapshot(snapshot: WorkbenchSnapshot): void;
1646
+ setPersistenceScope(scope: string | undefined, input?: {
1647
+ carryRegions?: readonly WorkbenchRegion[];
1648
+ }): void;
1649
+ getPersistenceScope(): string | undefined;
1591
1650
  }
1592
1651
 
1593
- export declare interface WorkbenchLastResourceController {
1652
+ declare interface WorkbenchLastResourceController {
1594
1653
  get(): ResourceRef | undefined;
1595
1654
  set(resource: ResourceRef | undefined): void;
1596
1655
  restore(): Promise<boolean>;
1597
1656
  }
1598
1657
 
1599
1658
  export declare interface WorkbenchLayout {
1600
- areas: Record<WorkbenchArea, WorkbenchAreaState>;
1659
+ regions: Record<WorkbenchRegion, WorkbenchRegionState>;
1660
+ locationSubPanelSelections?: Record<string, Partial<Record<WorkbenchPanelRegion, string>>>;
1601
1661
  activeWidgetId?: string;
1662
+ activeLocationWidgetId?: string;
1602
1663
  activeResourceUri?: string;
1603
1664
  }
1604
1665
 
1605
- export declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1666
+ declare type WorkbenchLayoutModel = LayoutModel & MenuRegistry;
1606
1667
 
1607
- export declare interface WorkbenchLayoutStoreState {
1668
+ declare interface WorkbenchLayoutStoreState {
1608
1669
  layout: WorkbenchLayout;
1609
1670
  widgets: Record<string, RegisteredWidgetContribution>;
1610
- placeholders: Partial<Record<WorkbenchArea, RegisteredPlaceholderContribution>>;
1671
+ placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
1672
+ }
1673
+
1674
+ declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1675
+
1676
+ export declare interface WorkbenchLocationEligibility {
1677
+ modeIds?: string[];
1678
+ resourceKinds?: string[];
1679
+ resourceIds?: string[];
1680
+ canOpen?(resource: ResourceRef): boolean;
1681
+ }
1682
+
1683
+ declare interface WorkbenchLocationRef {
1684
+ key: string;
1685
+ modeId?: string;
1686
+ resource?: ResourceRef;
1687
+ contributionId?: string;
1688
+ instanceKey?: string;
1689
+ title?: string;
1611
1690
  }
1612
1691
 
1613
1692
  export declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
@@ -1619,16 +1698,24 @@ declare type WorkbenchModeChangeListener = () => void;
1619
1698
  export declare interface WorkbenchModeContribution {
1620
1699
  id: string;
1621
1700
  label?: string;
1701
+ panels?: readonly WorkbenchPanelRegion[];
1622
1702
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1703
+ seed?(ctx: WorkbenchModeActivationContext): void;
1704
+ enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1623
1705
  }
1624
1706
 
1625
1707
  export declare interface WorkbenchModeRegistry {
1626
1708
  store: WorkbenchStore<WorkbenchModeStoreState>;
1709
+ dispose(): void;
1627
1710
  registerMode(mode: WorkbenchModeContribution): Disposable_2;
1628
1711
  getMode(id: string): WorkbenchModeContribution | undefined;
1629
1712
  listModes(): WorkbenchModeContribution[];
1630
1713
  getActiveModeId(): string | undefined;
1631
- setActiveMode(id: string | undefined): void;
1714
+ isTransitioning(): boolean;
1715
+ setActiveMode(id: string | undefined, input?: {
1716
+ deferSeed?: boolean;
1717
+ }): void;
1718
+ seedActiveMode(): void;
1632
1719
  onDidChangeActive(listener: WorkbenchModeChangeListener): Disposable_2;
1633
1720
  }
1634
1721
 
@@ -1639,6 +1726,8 @@ declare interface WorkbenchModeStoreState {
1639
1726
 
1640
1727
  declare type WorkbenchModuleActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1641
1728
 
1729
+ export declare type WorkbenchModuleContext = WorkbenchCoreContributionContext;
1730
+
1642
1731
  export declare interface WorkbenchModuleContribution {
1643
1732
  id: string;
1644
1733
  source?: ContributionSource;
@@ -1646,7 +1735,21 @@ export declare interface WorkbenchModuleContribution {
1646
1735
  activate(ctx: WorkbenchModuleContributionContext): WorkbenchModuleActivationResult;
1647
1736
  }
1648
1737
 
1649
- export declare type WorkbenchModuleContributionContext = WorkbenchCoreContributionContext;
1738
+ export declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1739
+
1740
+ declare interface WorkbenchNavigationEntry {
1741
+ entryId: string;
1742
+ recordedAt: number;
1743
+ location: WorkbenchLocationRef;
1744
+ selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
1745
+ kind: "resource" | "widget" | "mode";
1746
+ modeId?: string;
1747
+ resource?: ResourceRef;
1748
+ widgetId?: string;
1749
+ contributionId?: string;
1750
+ title?: string;
1751
+ closedSubPanel?: WorkbenchClosedSubPanel;
1752
+ }
1650
1753
 
1651
1754
  export declare interface WorkbenchNotification {
1652
1755
  id?: string;
@@ -1682,31 +1785,190 @@ declare interface WorkbenchNotificationStoreState {
1682
1785
  notifications: Record<string, RegisteredWorkbenchNotification>;
1683
1786
  }
1684
1787
 
1685
- export declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1788
+ export declare interface WorkbenchPanelContribution {
1789
+ id: string;
1790
+ title: string;
1791
+ icon?: string;
1792
+ region: WorkbenchRegion;
1793
+ fallbackRegion?: WorkbenchRegion;
1794
+ rendererId: string;
1795
+ closable: boolean;
1796
+ singleton?: boolean;
1797
+ reuse?: WorkbenchPanelReusePolicy;
1798
+ mountStrategy?: WorkbenchPanelMountStrategy;
1799
+ hiddenByDefault?: boolean;
1800
+ regionSize?: WorkbenchRegionSize;
1801
+ regionCollapsible?: boolean;
1802
+ headerBorderBottom?: boolean;
1803
+ floatingPanels?: WorkbenchFloatingPanelVisibility;
1804
+ resourceKinds?: string[];
1805
+ eligibleLocations?: WorkbenchLocationEligibility;
1806
+ priority?: number;
1807
+ openCommandId?: string;
1808
+ tab?: WorkbenchPanelTab;
1809
+ config?: unknown;
1810
+ canOpen?(resource: ResourceRef): boolean;
1811
+ ownerId?: string;
1812
+ source?: ContributionSource;
1813
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
1814
+ }
1815
+
1816
+ export declare interface WorkbenchPanelInstance {
1817
+ instanceId: string;
1818
+ panelId: string;
1819
+ ownerId?: string;
1820
+ source?: ContributionSource;
1821
+ resource?: ResourceRef;
1822
+ resourceUri?: string;
1823
+ ownerResourceUri?: string;
1824
+ title?: string;
1825
+ pinned?: boolean;
1826
+ closable: boolean;
1827
+ mountStrategy?: WorkbenchPanelMountStrategy;
1828
+ hiddenByDefault?: boolean;
1829
+ tabRetention?: WorkbenchTabRetention;
1830
+ tab?: WorkbenchPanelTab;
1831
+ }
1832
+
1833
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
1834
+ region: WorkbenchPanelMenuRegion;
1835
+ fallbackRegion?: WorkbenchPanelMenuRegion;
1836
+ };
1837
+
1838
+ export declare interface WorkbenchPanelMenuDefinition {
1839
+ id: string;
1840
+ title: string;
1841
+ icon?: string;
1842
+ side: WorkbenchPanelMenuSide;
1843
+ singleton?: boolean;
1844
+ reuse?: WorkbenchPanelReusePolicy;
1845
+ mountStrategy?: WorkbenchPanelMountStrategy;
1846
+ hiddenByDefault?: boolean;
1847
+ regionSize?: WorkbenchRegionSize;
1848
+ regionCollapsible?: boolean;
1849
+ headerBorderBottom?: boolean;
1850
+ rendererId: string;
1851
+ priority?: number;
1852
+ config?: unknown;
1853
+ }
1854
+
1855
+ declare type WorkbenchPanelMenuOwner = {
1856
+ level: "panel";
1857
+ contributionId?: string;
1858
+ } | {
1859
+ level: "sub-panel";
1860
+ contributionId: string;
1861
+ };
1862
+
1863
+ export declare type WorkbenchPanelMenuRegion = (typeof workbenchPanelMenuRegions)[WorkbenchPanelRegion][WorkbenchPanelMenuSide];
1864
+
1865
+ declare const workbenchPanelMenuRegions: {
1866
+ readonly main: {
1867
+ readonly left: "main-left-menu";
1868
+ readonly right: "main-right-menu";
1869
+ };
1870
+ readonly secondary: {
1871
+ readonly left: "secondary-left-menu";
1872
+ readonly right: "secondary-right-menu";
1873
+ };
1874
+ readonly side: {
1875
+ readonly left: "side-left-menu";
1876
+ readonly right: "side-right-menu";
1877
+ };
1878
+ };
1879
+
1880
+ declare interface WorkbenchPanelMenusContribution {
1881
+ panelMenus?: readonly WorkbenchPanelMenuDefinition[];
1882
+ }
1686
1883
 
1687
- export declare interface WorkbenchPanelsController {
1884
+ export declare type WorkbenchPanelMenuSide = "left" | "right";
1885
+
1886
+ export declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
1887
+
1888
+ export declare type WorkbenchPanelOpenStrategy = {
1889
+ kind: "activate-or-open";
1890
+ position?: WorkbenchTabPosition;
1891
+ } | {
1892
+ kind: "replace-active";
1893
+ } | {
1894
+ kind: "replace-panel";
1895
+ instanceId: string;
1896
+ } | {
1897
+ kind: "preview";
1898
+ position?: WorkbenchTabPosition;
1899
+ };
1900
+
1901
+ declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
1902
+
1903
+ declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
1904
+
1905
+ export declare interface WorkbenchPanelRenderInput {
1906
+ workbench: WorkbenchCore;
1907
+ panel: WorkbenchPanelContribution | PlaceholderContribution | RegisteredPlaceholderContribution;
1908
+ instance: WorkbenchPanelInstance;
1909
+ refresh: () => void;
1910
+ }
1911
+
1912
+ export declare type WorkbenchPanelReusePolicy = WidgetReusePolicy;
1913
+
1914
+ declare type WorkbenchPanelsChangeListener = (state: WorkbenchPanelsState) => void;
1915
+
1916
+ declare interface WorkbenchPanelsController {
1688
1917
  store: WorkbenchStore<WorkbenchPanelsState>;
1689
- isOpen(areaId: string): boolean;
1690
- setOpen(areaId: string, open: boolean): void;
1691
- toggle(areaId: string): void;
1918
+ isOpen(regionId: string): boolean;
1919
+ setOpen(regionId: string, open: boolean): void;
1920
+ toggle(regionId: string): void;
1921
+ setPersistenceScope(scope: string | undefined): void;
1922
+ getPersistenceScope(): string | undefined;
1692
1923
  onDidChange(listener: WorkbenchPanelsChangeListener): Disposable_2;
1693
1924
  }
1694
1925
 
1695
- export declare interface WorkbenchPanelsPersistenceAdapter {
1696
- getPanelStates(): PersistedWorkbenchPanels | undefined;
1697
- setPanelStates(state: PersistedWorkbenchPanels): void;
1926
+ declare interface WorkbenchPanelsPersistenceAdapter {
1927
+ getPanelStates(scope?: string): PersistedWorkbenchPanels | undefined;
1928
+ setPanelStates(state: PersistedWorkbenchPanels, scope?: string): void;
1929
+ }
1930
+
1931
+ declare interface WorkbenchPanelsState {
1932
+ openByRegionId: Record<string, boolean>;
1933
+ }
1934
+
1935
+ export declare type WorkbenchPanelTab = WorkbenchWidgetTab;
1936
+
1937
+ export declare interface WorkbenchPersistenceAdapter {
1938
+ getSnapshot(scope?: string): WorkbenchSnapshot | undefined;
1939
+ setSnapshot(snapshot: WorkbenchSnapshot, scope?: string): void;
1940
+ flush?(): void;
1941
+ dispose?(): void;
1942
+ }
1943
+
1944
+ export declare type WorkbenchRegion = (typeof workbenchRegions)[number];
1945
+
1946
+ 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"];
1947
+
1948
+ export declare interface WorkbenchRegionSize {
1949
+ defaultPx?: number;
1950
+ minPx?: number;
1951
+ maxPx?: number;
1698
1952
  }
1699
1953
 
1700
- export declare interface WorkbenchPanelsState {
1701
- openByAreaId: Record<string, boolean>;
1954
+ declare interface WorkbenchRegionState {
1955
+ id: WorkbenchRegion;
1956
+ visible: boolean;
1957
+ size?: number;
1958
+ widgets: WorkbenchWidgetPlacement[];
1959
+ activeWidgetId?: string;
1702
1960
  }
1703
1961
 
1962
+ export declare const workbenchRegionTabAddMenuPath: (region: string) => MenuPath;
1963
+
1964
+ export declare const workbenchRegionTabLeadingMenuPath: (region: string) => MenuPath;
1965
+
1704
1966
  declare type WorkbenchRendererChangeListener = () => void;
1705
1967
 
1706
1968
  export declare type WorkbenchRendererRegistration = {
1707
1969
  id: string;
1708
1970
  keepAlive?: false;
1709
- render: (input: WorkbenchWidgetRenderInput) => unknown;
1971
+ render: (input: WorkbenchPanelRenderInput) => unknown;
1710
1972
  } | {
1711
1973
  id: string;
1712
1974
  keepAlive: true;
@@ -1719,17 +1981,17 @@ export declare interface WorkbenchRendererRegistry {
1719
1981
  getRenderer(id: string): WorkbenchRendererRegistration | undefined;
1720
1982
  listRenderers(): WorkbenchRendererRegistration[];
1721
1983
  onDidChange(listener: WorkbenchRendererChangeListener): Disposable_2;
1722
- claim(rendererId: string, slot: HTMLElement, input: WorkbenchWidgetRenderInput): Disposable_2;
1984
+ claim(rendererId: string, slot: HTMLElement, input: WorkbenchPanelRenderInput): Disposable_2;
1723
1985
  getHost(rendererId: string): HTMLElement | undefined;
1724
- getClaim(rendererId: string): WorkbenchWidgetRenderInput | undefined;
1986
+ getClaim(rendererId: string): WorkbenchPanelRenderInput | undefined;
1725
1987
  }
1726
1988
 
1727
- export declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & DataRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1989
+ declare type WorkbenchRenderers = WorkbenchRendererRegistry & TreeRendererRegistry & KanbanRendererRegistry & DataTableRendererRegistry & FileRendererRegistry & ControlsRendererRegistry;
1728
1990
 
1729
- export declare interface WorkbenchRendererStoreState {
1991
+ declare interface WorkbenchRendererStoreState {
1730
1992
  renderers: Record<string, WorkbenchRendererRegistration>;
1731
1993
  hosts: Record<string, RegisteredKeepAliveHost>;
1732
- claims: Record<string, WorkbenchWidgetRenderInput>;
1994
+ claims: Record<string, WorkbenchPanelRenderInput>;
1733
1995
  }
1734
1996
 
1735
1997
  export declare const workbenchResourceIdContextKey = "workbench.resource.id";
@@ -1740,22 +2002,44 @@ export declare const workbenchResourceMetadataContextKey: (key: string) => strin
1740
2002
 
1741
2003
  export declare const workbenchSelectionResourceUriMetadataKey = "workbench.selectionResourceUri";
1742
2004
 
1743
- export declare type WorkbenchSessionPanelChangeListener = (mode: WorkbenchSessionPanelMode) => void;
2005
+ export declare interface WorkbenchShellController {
2006
+ getRegionState(region: WorkbenchRegion): WorkbenchShellRegionState;
2007
+ setRegionOpen(region: WorkbenchShellOpenRegion, open: boolean): void;
2008
+ setRegionSize(region: WorkbenchRegion, size: number): void;
2009
+ getSidePanelPresentation(): WorkbenchSidePanelPresentation;
2010
+ setSidePanelPresentation(presentation: WorkbenchSidePanelPresentation): void;
2011
+ onDidChange(listener: () => void): Disposable_2;
2012
+ }
2013
+
2014
+ export declare type WorkbenchShellOpenRegion = "sidenav" | "secondary" | WorkbenchPanelMenuRegion;
1744
2015
 
1745
- export declare interface WorkbenchSessionPanelController {
1746
- store: WorkbenchStore<WorkbenchSessionPanelState>;
1747
- getMode(): WorkbenchSessionPanelMode;
1748
- setMode(mode: WorkbenchSessionPanelMode): void;
1749
- onDidChange(listener: WorkbenchSessionPanelChangeListener): Disposable_2;
2016
+ export declare interface WorkbenchShellRegionState {
2017
+ open: boolean;
2018
+ size?: number;
1750
2019
  }
1751
2020
 
1752
- export declare type WorkbenchSessionPanelMode = "bubble" | "closed" | "attached";
2021
+ declare type WorkbenchSidePanelChangeListener = (mode: WorkbenchSidePanelMode) => void;
2022
+
2023
+ declare interface WorkbenchSidePanelController {
2024
+ store: WorkbenchStore<WorkbenchSidePanelState>;
2025
+ getMode(): WorkbenchSidePanelMode;
2026
+ setMode(mode: WorkbenchSidePanelMode): void;
2027
+ onDidChange(listener: WorkbenchSidePanelChangeListener): Disposable_2;
2028
+ }
2029
+
2030
+ declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2031
+
2032
+ export declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
2033
+
2034
+ declare interface WorkbenchSidePanelState {
2035
+ mode: WorkbenchSidePanelMode;
2036
+ }
1753
2037
 
1754
- export declare interface WorkbenchSessionPanelState {
1755
- mode: WorkbenchSessionPanelMode;
2038
+ export declare interface WorkbenchSnapshot {
2039
+ layout: WorkbenchLayout;
1756
2040
  }
1757
2041
 
1758
- export declare interface WorkbenchStore<TState> {
2042
+ declare interface WorkbenchStore<TState> {
1759
2043
  getState(): TState;
1760
2044
  getInitialState(): TState;
1761
2045
  subscribe(listener: WorkbenchStoreListener<TState>): () => void;
@@ -1765,11 +2049,30 @@ export declare interface WorkbenchStore<TState> {
1765
2049
  }): () => void;
1766
2050
  }
1767
2051
 
1768
- export declare type WorkbenchStoreListener<TState> = (state: TState, previousState: TState) => void;
2052
+ declare type WorkbenchStoreListener<TState> = (state: TState, previousState: TState) => void;
2053
+
2054
+ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2055
+
2056
+ declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2057
+
2058
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2059
+ region: WorkbenchPanelRegion;
2060
+ fallbackRegion?: WorkbenchPanelRegion;
2061
+ } & WorkbenchPanelMenusContribution;
2062
+
2063
+ declare interface WorkbenchSubPanelRef {
2064
+ contributionId: string;
2065
+ resourceUri?: string;
2066
+ instanceKey?: string;
2067
+ }
1769
2068
 
1770
- export declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2069
+ export declare type WorkbenchTabPosition = "start" | "end" | {
2070
+ beforeWidgetId: string;
2071
+ } | {
2072
+ afterWidgetId: string;
2073
+ };
1771
2074
 
1772
- export declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2075
+ export declare type WorkbenchTabRetention = "preview" | "persistent";
1773
2076
 
1774
2077
  export declare interface WorkbenchTerminalController {
1775
2078
  store: WorkbenchStore<WorkbenchTerminalState>;
@@ -1853,7 +2156,7 @@ export declare interface WorkbenchTerminalState {
1853
2156
  sessionsById: Record<string, WorkbenchTerminalSessionModel>;
1854
2157
  }
1855
2158
 
1856
- export declare interface WorkbenchThemeStoreState {
2159
+ declare interface WorkbenchThemeStoreState {
1857
2160
  themes: readonly ThemePreferenceOption[];
1858
2161
  }
1859
2162
 
@@ -1861,25 +2164,30 @@ export declare const workbenchTopHeaderLeadingMenuPath: MenuPath;
1861
2164
 
1862
2165
  export declare const workbenchTopHeaderTrailingMenuPath: MenuPath;
1863
2166
 
1864
- export declare interface WorkbenchWidgetPlacement {
2167
+ declare interface WorkbenchWidgetPlacement {
1865
2168
  widgetId: string;
1866
2169
  contributionId: string;
1867
2170
  ownerId?: string;
1868
2171
  source?: ContributionSource;
1869
2172
  resource?: ResourceRef;
1870
2173
  resourceUri?: string;
2174
+ ownerResourceUri?: string;
1871
2175
  title?: string;
1872
2176
  pinned?: boolean;
1873
2177
  closable?: boolean;
1874
2178
  mountStrategy?: WidgetMountStrategy;
1875
2179
  hiddenByDefault?: boolean;
2180
+ tabRetention?: WorkbenchTabRetention;
2181
+ tab?: WorkbenchWidgetTab;
2182
+ role?: WorkbenchWidgetRole;
1876
2183
  }
1877
2184
 
1878
- export declare interface WorkbenchWidgetRenderInput {
1879
- workbench: WorkbenchCore;
1880
- widget: RegisteredWidgetContribution | RegisteredPlaceholderContribution;
1881
- placement: WorkbenchWidgetPlacement;
1882
- refresh: () => void;
2185
+ declare type WorkbenchWidgetRole = "content" | "location" | "sub-panel" | "panel-menu";
2186
+
2187
+ declare interface WorkbenchWidgetTab {
2188
+ contentRendererId?: string;
2189
+ /** Custom actions shown when the user activates an already-active tab. */
2190
+ customMenuRendererId?: string;
1883
2191
  }
1884
2192
 
1885
2193
  export { }