@pstdio/workbench 0.4.0 → 0.6.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 (34) hide show
  1. package/README.md +66 -72
  2. package/dist/composition-resolver-types-CWykPyEK.js +241 -0
  3. package/dist/composition-resolver-types-CWykPyEK.js.map +1 -0
  4. package/dist/extensions.d.ts +359 -43
  5. package/dist/extensions.js +1595 -1044
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-zpunbE4I.js +432 -0
  8. package/dist/file-renderer-view-zpunbE4I.js.map +1 -0
  9. package/dist/file-section-navigation-CfYqVObc.js +30 -0
  10. package/dist/file-section-navigation-CfYqVObc.js.map +1 -0
  11. package/dist/index.d.ts +287 -19
  12. package/dist/index.js +2323 -2011
  13. package/dist/index.js.map +1 -1
  14. package/dist/layout-types-DMoZz38-.js.map +1 -1
  15. package/dist/react.d.ts +157 -16
  16. package/dist/react.js +2675 -2736
  17. package/dist/react.js.map +1 -1
  18. package/dist/storage.d.ts +96 -2
  19. package/dist/storage.js +173 -115
  20. package/dist/storage.js.map +1 -1
  21. package/dist/testing.d.ts +146 -14
  22. package/dist/webview-runtime.js +1 -1
  23. package/dist/webview-runtime.js.map +1 -1
  24. package/dist/workbench-built-ins-BtgeB274.js +1171 -0
  25. package/dist/workbench-built-ins-BtgeB274.js.map +1 -0
  26. package/dist/workbench-menu-paths-Bb0ICxeG.js +20 -0
  27. package/dist/workbench-menu-paths-Bb0ICxeG.js.map +1 -0
  28. package/package.json +3 -3
  29. package/dist/context-key-service-W4QEfVdN.js +0 -1031
  30. package/dist/context-key-service-W4QEfVdN.js.map +0 -1
  31. package/dist/file-renderer-view-DrrhYnb_.js +0 -171
  32. package/dist/file-renderer-view-DrrhYnb_.js.map +0 -1
  33. package/dist/workbench-menu-paths-B_QJzcNU.js +0 -12
  34. package/dist/workbench-menu-paths-B_QJzcNU.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -155,6 +155,7 @@ export declare interface CommandParamDescriptor {
155
155
  export declare interface CommandParamOption {
156
156
  label: string;
157
157
  value: string;
158
+ icon?: string;
158
159
  }
159
160
 
160
161
  export declare type CommandParamSchema = Record<string, CommandParamDescriptor>;
@@ -175,6 +176,70 @@ declare interface CommandRegistryStoreState {
175
176
  commands: Record<string, RegisteredCommand>;
176
177
  }
177
178
 
179
+ export declare interface CompositionDiagnostic {
180
+ code: "extension_resource_kind_missing" | "extension_resource_slot_missing" | "extension_resource_slot_closed" | "extension_panel_missing" | "extension_panel_placement_unresolvable" | "extension_mode_resource_unsupported" | "extension_placement_required_invalid" | "extension_resource_primary_invalid";
181
+ message: string;
182
+ panelId?: string;
183
+ slot?: string;
184
+ }
185
+
186
+ export declare interface CompositionModeDefinition {
187
+ id: string;
188
+ extensionId?: string;
189
+ resources?: Record<string, CompositionModeRecipe>;
190
+ modePanels?: Record<string, CompositionPlacementPolicy>;
191
+ }
192
+
193
+ export declare interface CompositionModeRecipe {
194
+ slots?: Record<string, CompositionPlacementPolicy>;
195
+ panels?: Record<string, CompositionPlacementPolicy>;
196
+ }
197
+
198
+ export declare interface CompositionPanelDefinition {
199
+ id: string;
200
+ extensionId: string;
201
+ title: string;
202
+ icon?: string;
203
+ show?: CompositionPanelPlacement | readonly CompositionPanelPlacement[];
204
+ }
205
+
206
+ declare interface CompositionPanelPlacement extends CompositionPlacementPolicy {
207
+ resourceKind?: string;
208
+ }
209
+
210
+ export declare interface CompositionPlacementPolicy {
211
+ region: DockedCompositionRegion;
212
+ allowedRegions?: readonly DockedCompositionRegion[];
213
+ required?: boolean;
214
+ defaultOpen?: boolean;
215
+ pinned?: boolean;
216
+ }
217
+
218
+ declare interface CompositionResolutionContext {
219
+ modeId: string;
220
+ resourceKind?: string;
221
+ }
222
+
223
+ export declare interface CompositionResourceKindDefinition {
224
+ id: string;
225
+ extensionId: string;
226
+ surface: "primary" | "secondary" | "attached";
227
+ slots: Record<string, CompositionSlotDefinition>;
228
+ }
229
+
230
+ export declare interface CompositionResourcePanelEdge {
231
+ id: string;
232
+ extensionId: string;
233
+ resourceKind: string;
234
+ panel: string;
235
+ slot: string;
236
+ }
237
+
238
+ export declare interface CompositionSlotDefinition {
239
+ cardinality: "one" | "many";
240
+ external: boolean;
241
+ }
242
+
178
243
  export declare interface ContextKeyScope extends Disposable_2 {
179
244
  ownerId: string;
180
245
  set(key: string, value: ContextKeyValue): void;
@@ -297,6 +362,7 @@ export declare interface CreateWorkbenchCoreInput {
297
362
  panelsPersistence?: WorkbenchPanelsPersistenceAdapter;
298
363
  defaultPanelOpenByRegionId?: Partial<Record<WorkbenchRegion, boolean>>;
299
364
  lastResourcePersistence?: LastResourcePersistenceAdapter;
365
+ sidePanelPersistence?: WorkbenchSidePanelPersistenceAdapter;
300
366
  initialSidePanelMode?: WorkbenchSidePanelMode;
301
367
  renderers?: CreateWorkbenchRendererRegistryInput;
302
368
  }
@@ -371,7 +437,7 @@ export declare interface DataTableRendererContribution {
371
437
  emptyDescription?: string;
372
438
  executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
373
439
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
374
- onRowClick?: (row: DataTableRendererRow) => void;
440
+ onRowActivate?: (row: DataTableRendererRow) => Promise<void> | void;
375
441
  }
376
442
 
377
443
  export declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
@@ -442,6 +508,10 @@ declare interface Disposable_2 {
442
508
  }
443
509
  export { Disposable_2 as Disposable }
444
510
 
511
+ export declare type DockedCompositionRegion = (typeof dockedCompositionRegions)[number];
512
+
513
+ export declare const dockedCompositionRegions: readonly ["sidenav", "main", "secondary", "side"];
514
+
445
515
  export declare interface EnumOption {
446
516
  value: string;
447
517
  label: string;
@@ -501,6 +571,8 @@ export declare interface FileRendererContent {
501
571
  content?: string;
502
572
  dataUrl?: string;
503
573
  placeholder?: string;
574
+ /** Ordered backing-store revision when one is available. */
575
+ revision?: string;
504
576
  }
505
577
 
506
578
  export declare interface FileRendererContribution {
@@ -510,35 +582,53 @@ export declare interface FileRendererContribution {
510
582
  /** Resolve the file's content (and identity) for the bound resource. */
511
583
  load(resource: ResourceRef | undefined): Promise<FileRendererContent> | FileRendererContent;
512
584
  /** Persist edited text. Absent ⇒ read-only. Never called for images. */
513
- save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
585
+ save?(resource: ResourceRef | undefined, content: string, origin?: FileRendererRefreshOrigin): Promise<FileRendererSaveResult | undefined> | FileRendererSaveResult | void;
514
586
  }
515
587
 
516
588
  export declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
517
589
  fileRendererId: string;
518
590
  }) => unknown;
519
591
 
520
- declare interface FileRendererRefreshEvent {
592
+ export declare interface FileRendererRefreshEnvelope {
593
+ resourceUri?: string;
594
+ origin?: FileRendererRefreshOrigin;
595
+ revision?: string;
596
+ }
597
+
598
+ export declare interface FileRendererRefreshEvent extends FileRendererRefreshEnvelope {
521
599
  fileRendererId: string;
522
600
  }
523
601
 
524
602
  declare type FileRendererRefreshListener = (event: FileRendererRefreshEvent) => void;
525
603
 
604
+ export declare interface FileRendererRefreshOrigin {
605
+ rendererId: string;
606
+ instanceId: string;
607
+ operationId: string;
608
+ }
609
+
526
610
  export declare interface FileRendererRegistry {
527
611
  fileRendererStore: WorkbenchStore<FileRendererStoreState>;
528
612
  registerFileRenderer(contribution: FileRendererContribution, metadata?: ContributionMetadata): Disposable_2;
529
613
  setFileRendererImplementation(impl: FileRendererImplementation): void;
530
614
  getFileRenderer(id: string): RegisteredFileRendererContribution | undefined;
531
615
  listFileRenderers(): RegisteredFileRendererContribution[];
532
- refreshFileRenderer(id: string): void;
616
+ refreshFileRenderer(id: string, event?: FileRendererRefreshEnvelope): void;
533
617
  onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
534
618
  }
535
619
 
620
+ export declare interface FileRendererSaveResult {
621
+ revision?: string;
622
+ }
623
+
536
624
  declare interface FileRendererStoreState {
537
625
  renderers: Record<string, RegisteredFileRendererContribution>;
538
626
  }
539
627
 
540
628
  export declare const getKeybindingSteps: (keybinding: KeybindingSequence) => string[];
541
629
 
630
+ export declare const getSwitchModeNavigationTargetModeId: (target: NavigationTarget) => string | undefined;
631
+
542
632
  export declare const getWorkbenchModePanelForRegion: (region: WorkbenchRegion) => "main" | "secondary" | "side" | undefined;
543
633
 
544
634
  export declare const getWorkbenchSelectionResourceUris: (resource: ResourceRef | undefined) => string[];
@@ -549,6 +639,8 @@ export declare const headerTrailingMenuPath: (region: string) => MenuPath;
549
639
 
550
640
  export declare interface HistoryController {
551
641
  store: WorkbenchStore<HistoryStoreState>;
642
+ /** Snapshot the history for a compound navigation; the returned function restores it. */
643
+ createCheckpoint(): () => void;
552
644
  goBack(): HistoryEntry | undefined;
553
645
  goForward(): HistoryEntry | undefined;
554
646
  goPrevious(): HistoryEntry | undefined;
@@ -576,6 +668,8 @@ export declare interface KanbanRendererContribution<TRow extends KanbanRendererR
576
668
  id: string;
577
669
  title: string;
578
670
  resourceKind?: string;
671
+ /** Host-owned scope for persisted display settings. */
672
+ storageScope?: string;
579
673
  /**
580
674
  * Declarative attribute schema. The renderer dispatches filter / group /
581
675
  * sort / display / inline-edit behavior on each descriptor's `type.kind`.
@@ -603,8 +697,8 @@ export declare interface KanbanRendererContribution<TRow extends KanbanRendererR
603
697
  */
604
698
  executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
605
699
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
606
- /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
607
- onRowClick?: (row: TRow) => void;
700
+ /** Row activation surfaced by the renderer (mirrored from <KanbanRenderer>). */
701
+ onRowActivate?: (row: TRow) => Promise<void> | void;
608
702
  /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
609
703
  getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
610
704
  /**
@@ -698,7 +792,7 @@ export declare interface KanbanRendererRow {
698
792
  title: string;
699
793
  /**
700
794
  * Optional navigation handle. When set, the renderer's default click handler
701
- * routes through the contribution's onRowClick (which typically opens the
795
+ * routes through the contribution's onRowActivate (which typically opens the
702
796
  * resource via the workbench).
703
797
  */
704
798
  resource?: unknown;
@@ -808,6 +902,16 @@ declare interface LayoutModel {
808
902
  carryRegionState?: readonly WorkbenchRegion[];
809
903
  }): void;
810
904
  getPersistenceScope(): LayoutScope | undefined;
905
+ /** True when the current persistence scope already stores a layout. A new scope returns false. */
906
+ /** Whether anything is stored for the active scope right now. */
907
+ hasPersistedLayout(): boolean;
908
+ /**
909
+ * Whether the active scope was entered with a layout the user already had. Unlike
910
+ * `hasPersistedLayout`, writes made while entering a mode do not change the answer.
911
+ */
912
+ enteredWithPersistedLayout(): boolean;
913
+ /** Moves owned panel menus beside their owner's current region and removes orphan menus. */
914
+ reconcilePanelMenus(): void;
811
915
  onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
812
916
  dispose(): void;
813
917
  };
@@ -816,9 +920,14 @@ declare interface LayoutModel {
816
920
  };
817
921
  }
818
922
 
819
- declare interface LayoutPersistenceAdapter {
923
+ export declare interface LayoutPersistenceAdapter {
820
924
  getLayout(scope?: LayoutScope): WorkbenchLayout | undefined;
821
925
  setLayout(layout: WorkbenchLayout, scope?: LayoutScope): void;
926
+ listScopes?(projectId: string): LayoutScope[];
927
+ transformLayouts?(projectId: string, transform: (layout: WorkbenchLayout, scope: LayoutScope) => WorkbenchLayout | undefined): void;
928
+ getCompatibilityMarker?(key: string): string | undefined;
929
+ setCompatibilityMarker?(key: string, value: string): void;
930
+ advanceWriteGeneration?(): number;
822
931
  flush?(): void;
823
932
  dispose?(): void;
824
933
  }
@@ -939,6 +1048,7 @@ declare interface OpenWidgetInput {
939
1048
  resource?: ResourceRef;
940
1049
  title?: string;
941
1050
  region?: WorkbenchRegion;
1051
+ role?: WorkbenchWidgetRole;
942
1052
  ownerId?: string;
943
1053
  source?: ContributionSource;
944
1054
  pinned?: boolean;
@@ -956,13 +1066,24 @@ export declare interface OpenWorkbenchPanelInput {
956
1066
  resource?: ResourceRef;
957
1067
  title?: string;
958
1068
  region?: WorkbenchRegion;
1069
+ role?: WorkbenchWidgetRole;
959
1070
  pinned?: boolean;
1071
+ closable?: boolean;
960
1072
  mountStrategy?: WorkbenchPanelMountStrategy;
961
1073
  hiddenByDefault?: boolean;
962
1074
  tab?: WorkbenchPanelTab;
963
1075
  strategy?: WorkbenchPanelOpenStrategy;
964
1076
  }
965
1077
 
1078
+ export declare interface PersistedCompositionLayout {
1079
+ regions: Partial<Record<DockedCompositionRegion, PersistedCompositionRegionState>>;
1080
+ }
1081
+
1082
+ declare interface PersistedCompositionRegionState {
1083
+ order: readonly string[];
1084
+ activePanelId?: string;
1085
+ }
1086
+
966
1087
  export declare interface PersistedTreeRendererStates {
967
1088
  statesByTreeId: Record<string, TreeRendererState>;
968
1089
  }
@@ -1085,7 +1206,6 @@ declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority"
1085
1206
  ownedPanelMenuIds?: readonly string[];
1086
1207
  singleton: boolean;
1087
1208
  reuse: WidgetReusePolicy;
1088
- role: WorkbenchWidgetRole;
1089
1209
  } & RegisteredContributionMetadata;
1090
1210
 
1091
1211
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -1101,6 +1221,44 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
1101
1221
 
1102
1222
  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";
1103
1223
 
1224
+ export declare const resolveComposition: (input: ResolveCompositionInput) => ResolvedComposition;
1225
+
1226
+ declare interface ResolveCompositionInput {
1227
+ context: CompositionResolutionContext;
1228
+ mode: CompositionModeDefinition;
1229
+ composition: WorkbenchComposition;
1230
+ persisted?: PersistedCompositionLayout;
1231
+ }
1232
+
1233
+ export declare interface ResolvedComposition {
1234
+ placements: readonly ResolvedCompositionPlacement[];
1235
+ regionOrder: Partial<Record<DockedCompositionRegion, readonly string[]>>;
1236
+ activePanelIds: Partial<Record<DockedCompositionRegion, string>>;
1237
+ addablePanels: readonly ResolvedCompositionAddablePanel[];
1238
+ diagnostics: readonly CompositionDiagnostic[];
1239
+ requiredFallback?: {
1240
+ panelId: string;
1241
+ };
1242
+ }
1243
+
1244
+ export declare interface ResolvedCompositionAddablePanel {
1245
+ panelId: string;
1246
+ region: DockedCompositionRegion;
1247
+ allowedRegions: readonly DockedCompositionRegion[];
1248
+ pinned?: boolean;
1249
+ }
1250
+
1251
+ export declare interface ResolvedCompositionPlacement {
1252
+ panelId: string;
1253
+ region: DockedCompositionRegion;
1254
+ slot?: string;
1255
+ required: boolean;
1256
+ defaultOpen: boolean;
1257
+ pinned?: boolean;
1258
+ allowedRegions: readonly DockedCompositionRegion[];
1259
+ origin: "persisted" | "required" | "default";
1260
+ }
1261
+
1104
1262
  declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1105
1263
 
1106
1264
  declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
@@ -1127,6 +1285,14 @@ export declare interface ResourceContextAction {
1127
1285
 
1128
1286
  export declare const resourceContextMenuPath: (resourceKind: string) => MenuPath;
1129
1287
 
1288
+ export declare interface ResourceHierarchyCycle {
1289
+ code: typeof resourceHierarchyCycleCode;
1290
+ path: ResourceRef[];
1291
+ repeatedUri: string;
1292
+ }
1293
+
1294
+ export declare const resourceHierarchyCycleCode = "resource_hierarchy_cycle";
1295
+
1130
1296
  export declare interface ResourceHierarchyProvider {
1131
1297
  id: string;
1132
1298
  priority?: number;
@@ -1190,6 +1356,7 @@ export declare interface ResourceRegistry {
1190
1356
  registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1191
1357
  listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1192
1358
  walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1359
+ onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
1193
1360
  isOpeningResource(): boolean;
1194
1361
  openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1195
1362
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
@@ -1467,6 +1634,7 @@ declare interface WidgetContribution {
1467
1634
  mountStrategy?: WidgetMountStrategy;
1468
1635
  closable?: boolean;
1469
1636
  hiddenByDefault?: boolean;
1637
+ subPanelsOnly?: boolean;
1470
1638
  regionSize?: WorkbenchRegionSize;
1471
1639
  regionCollapsible?: boolean;
1472
1640
  headerBorderBottom?: boolean;
@@ -1475,7 +1643,6 @@ declare interface WidgetContribution {
1475
1643
  priority?: number;
1476
1644
  rendererId: string;
1477
1645
  openCommandId?: string;
1478
- role?: WorkbenchWidgetRole;
1479
1646
  eligibleLocations?: WorkbenchLocationEligibility;
1480
1647
  panelMenuOwner?: WorkbenchPanelMenuOwner;
1481
1648
  tab?: WorkbenchWidgetTab;
@@ -1575,6 +1742,26 @@ declare interface WorkbenchCommandParamsRequest {
1575
1742
  context?: WorkbenchCommandExecutionContext;
1576
1743
  }
1577
1744
 
1745
+ export declare interface WorkbenchComposition {
1746
+ resourceKinds: readonly CompositionResourceKindDefinition[];
1747
+ panels: readonly CompositionPanelDefinition[];
1748
+ resourcePanels: readonly CompositionResourcePanelEdge[];
1749
+ }
1750
+
1751
+ declare interface WorkbenchCompositionAddablePanel extends WorkbenchModeAddablePanel {
1752
+ contribution: RegisteredWidgetContribution;
1753
+ }
1754
+
1755
+ declare interface WorkbenchCompositionController {
1756
+ panelsFor(region: WorkbenchPanelRegion): WorkbenchCompositionRegionPanels;
1757
+ }
1758
+
1759
+ declare interface WorkbenchCompositionRegionPanels {
1760
+ open: readonly WorkbenchWidgetPlacement[];
1761
+ addable: readonly WorkbenchCompositionAddablePanel[];
1762
+ closable: readonly string[];
1763
+ }
1764
+
1578
1765
  export declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1579
1766
  host: WorkbenchHost;
1580
1767
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
@@ -1586,6 +1773,7 @@ declare interface WorkbenchCoreContributionContext {
1586
1773
  commandPalette: WorkbenchCommandPaletteController;
1587
1774
  commandPaletteResources: CommandPaletteResourceRegistry;
1588
1775
  commands: CommandRegistry;
1776
+ composition: WorkbenchCompositionController;
1589
1777
  context: ContextKeyService;
1590
1778
  focus: WorkbenchFocusController;
1591
1779
  history: HistoryController;
@@ -1594,6 +1782,7 @@ declare interface WorkbenchCoreContributionContext {
1594
1782
  layout: WorkbenchLayoutModel;
1595
1783
  modes: WorkbenchModeRegistry;
1596
1784
  navigation: NavigationRegistry;
1785
+ navigator: WorkbenchNavigator;
1597
1786
  notifications: NotificationRegistry;
1598
1787
  panels: WorkbenchPanelsController;
1599
1788
  preferences: PreferenceRegistry;
@@ -1671,7 +1860,7 @@ declare interface WorkbenchLayoutStoreState {
1671
1860
  placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
1672
1861
  }
1673
1862
 
1674
- declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
1863
+ declare type WorkbenchLocationContribution = WidgetContribution & WorkbenchPanelMenusContribution;
1675
1864
 
1676
1865
  export declare interface WorkbenchLocationEligibility {
1677
1866
  modeIds?: string[];
@@ -1693,15 +1882,31 @@ export declare type WorkbenchModeActivationContext = WorkbenchCoreContributionCo
1693
1882
 
1694
1883
  export declare type WorkbenchModeActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1695
1884
 
1885
+ export declare interface WorkbenchModeAddablePanel {
1886
+ panelId: string;
1887
+ region: WorkbenchPanelRegion;
1888
+ allowedRegions?: readonly WorkbenchRegion[];
1889
+ pinned?: boolean;
1890
+ }
1891
+
1892
+ export declare interface WorkbenchModeAddablePanelContext {
1893
+ layout: WorkbenchLayout;
1894
+ resource?: ResourceRef;
1895
+ }
1896
+
1696
1897
  declare type WorkbenchModeChangeListener = () => void;
1697
1898
 
1698
1899
  export declare interface WorkbenchModeContribution {
1699
1900
  id: string;
1700
1901
  label?: string;
1701
1902
  panels?: readonly WorkbenchPanelRegion[];
1903
+ resourceKinds?: readonly string[];
1904
+ defaultResource?: ResourceRef | (() => Promise<ResourceRef | undefined> | ResourceRef | undefined);
1905
+ listAddablePanels?(context: WorkbenchModeAddablePanelContext): readonly WorkbenchModeAddablePanel[];
1702
1906
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1703
1907
  seed?(ctx: WorkbenchModeActivationContext): void;
1704
1908
  enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1909
+ reconcile?(ctx: WorkbenchModeActivationContext): void;
1705
1910
  }
1706
1911
 
1707
1912
  export declare interface WorkbenchModeRegistry {
@@ -1737,6 +1942,14 @@ export declare interface WorkbenchModuleContribution {
1737
1942
 
1738
1943
  export declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1739
1944
 
1945
+ declare interface WorkbenchNavigationCommit {
1946
+ modeId: string | undefined;
1947
+ resource: ResourceRef | undefined;
1948
+ replaceActive: boolean;
1949
+ }
1950
+
1951
+ declare type WorkbenchNavigationDiagnosticCode = "navigation_mode_missing" | "navigation_resource_missing" | "navigation_resource_incompatible" | "navigation_default_missing" | "navigation_target_stale";
1952
+
1740
1953
  declare interface WorkbenchNavigationEntry {
1741
1954
  entryId: string;
1742
1955
  recordedAt: number;
@@ -1751,6 +1964,53 @@ declare interface WorkbenchNavigationEntry {
1751
1964
  closedSubPanel?: WorkbenchClosedSubPanel;
1752
1965
  }
1753
1966
 
1967
+ declare type WorkbenchNavigationResult = {
1968
+ ok: true;
1969
+ modeId: string | undefined;
1970
+ resource: ResourceRef | undefined;
1971
+ } | {
1972
+ ok: false;
1973
+ code: WorkbenchNavigationDiagnosticCode;
1974
+ message: string;
1975
+ };
1976
+
1977
+ declare interface WorkbenchNavigationTarget {
1978
+ modeId?: string;
1979
+ resource?: ResourceRef;
1980
+ replaceActive?: boolean;
1981
+ }
1982
+
1983
+ declare interface WorkbenchNavigator {
1984
+ configure(hooks: WorkbenchNavigatorHostHooks): void;
1985
+ getSelectedResource(): ResourceRef | undefined;
1986
+ open(target: WorkbenchNavigationTarget): Promise<WorkbenchNavigationResult>;
1987
+ commitContext(input: WorkbenchNavigatorCommitInput): WorkbenchNavigationResult;
1988
+ getLastResource(projectId: string | undefined, modeId: string): ResourceRef | undefined;
1989
+ forgetResource(uri: string): void;
1990
+ onDidCommit(listener: (commit: WorkbenchNavigationCommit) => void): {
1991
+ dispose(): void;
1992
+ };
1993
+ }
1994
+
1995
+ declare interface WorkbenchNavigatorCommitInput {
1996
+ modeId?: string | null;
1997
+ resource?: ResourceRef | null;
1998
+ replaceActive?: boolean;
1999
+ present?: boolean;
2000
+ }
2001
+
2002
+ declare interface WorkbenchNavigatorHostHooks {
2003
+ getProjectId?(): string | undefined;
2004
+ getSelectedResource?(): ResourceRef | undefined;
2005
+ interpretSelection?(resource: ResourceRef): ResourceRef | undefined;
2006
+ applySelection?(resource: ResourceRef | undefined): void;
2007
+ applyScope?(commit: WorkbenchNavigationCommit): void;
2008
+ applyBreadcrumb?(resource: ResourceRef | undefined): void;
2009
+ presentResource?(resource: ResourceRef, input: {
2010
+ replaceActive: boolean;
2011
+ }): Promise<unknown> | unknown;
2012
+ }
2013
+
1754
2014
  export declare interface WorkbenchNotification {
1755
2015
  id?: string;
1756
2016
  level: WorkbenchNotificationLevel;
@@ -1792,11 +2052,11 @@ export declare interface WorkbenchPanelContribution {
1792
2052
  region: WorkbenchRegion;
1793
2053
  fallbackRegion?: WorkbenchRegion;
1794
2054
  rendererId: string;
1795
- closable: boolean;
1796
2055
  singleton?: boolean;
1797
2056
  reuse?: WorkbenchPanelReusePolicy;
1798
2057
  mountStrategy?: WorkbenchPanelMountStrategy;
1799
2058
  hiddenByDefault?: boolean;
2059
+ subPanelsOnly?: boolean;
1800
2060
  regionSize?: WorkbenchRegionSize;
1801
2061
  regionCollapsible?: boolean;
1802
2062
  headerBorderBottom?: boolean;
@@ -1830,7 +2090,7 @@ export declare interface WorkbenchPanelInstance {
1830
2090
  tab?: WorkbenchPanelTab;
1831
2091
  }
1832
2092
 
1833
- declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2093
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
1834
2094
  region: WorkbenchPanelMenuRegion;
1835
2095
  fallbackRegion?: WorkbenchPanelMenuRegion;
1836
2096
  };
@@ -1886,21 +2146,22 @@ export declare type WorkbenchPanelMenuSide = "left" | "right";
1886
2146
  export declare type WorkbenchPanelMountStrategy = WidgetMountStrategy;
1887
2147
 
1888
2148
  export declare type WorkbenchPanelOpenStrategy = {
1889
- kind: "activate-or-open";
2149
+ kind: "persistent";
1890
2150
  position?: WorkbenchTabPosition;
1891
2151
  } | {
1892
2152
  kind: "replace-active";
1893
2153
  } | {
1894
2154
  kind: "replace-panel";
1895
2155
  instanceId: string;
2156
+ retention?: WorkbenchTabRetention;
1896
2157
  } | {
1897
2158
  kind: "preview";
1898
2159
  position?: WorkbenchTabPosition;
1899
2160
  };
1900
2161
 
1901
- declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
2162
+ export declare type WorkbenchPanelRegion = (typeof workbenchPanelRegions)[number];
1902
2163
 
1903
- declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
2164
+ export declare const workbenchPanelRegions: readonly ["main", "secondary", "side"];
1904
2165
 
1905
2166
  export declare interface WorkbenchPanelRenderInput {
1906
2167
  workbench: WorkbenchCore;
@@ -2027,7 +2288,12 @@ declare interface WorkbenchSidePanelController {
2027
2288
  onDidChange(listener: WorkbenchSidePanelChangeListener): Disposable_2;
2028
2289
  }
2029
2290
 
2030
- declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2291
+ export declare type WorkbenchSidePanelMode = "floating" | "closed" | "attached";
2292
+
2293
+ export declare interface WorkbenchSidePanelPersistenceAdapter {
2294
+ getMode(): WorkbenchSidePanelMode | undefined;
2295
+ setMode(mode: WorkbenchSidePanelMode): void;
2296
+ }
2031
2297
 
2032
2298
  export declare type WorkbenchSidePanelPresentation = WorkbenchSidePanelMode;
2033
2299
 
@@ -2055,7 +2321,7 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2055
2321
 
2056
2322
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2057
2323
 
2058
- declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2324
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2059
2325
  region: WorkbenchPanelRegion;
2060
2326
  fallbackRegion?: WorkbenchPanelRegion;
2061
2327
  } & WorkbenchPanelMenusContribution;
@@ -2066,6 +2332,8 @@ declare interface WorkbenchSubPanelRef {
2066
2332
  instanceKey?: string;
2067
2333
  }
2068
2334
 
2335
+ export declare const workbenchSwitchModeCommandId = "workbench.action.switchMode";
2336
+
2069
2337
  export declare type WorkbenchTabPosition = "start" | "end" | {
2070
2338
  beforeWidgetId: string;
2071
2339
  } | {
@@ -2164,7 +2432,7 @@ export declare const workbenchTopHeaderLeadingMenuPath: MenuPath;
2164
2432
 
2165
2433
  export declare const workbenchTopHeaderTrailingMenuPath: MenuPath;
2166
2434
 
2167
- declare interface WorkbenchWidgetPlacement {
2435
+ export declare interface WorkbenchWidgetPlacement {
2168
2436
  widgetId: string;
2169
2437
  contributionId: string;
2170
2438
  ownerId?: string;