@codingame/monaco-vscode-walkthrough-service-override 24.2.0 → 25.0.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 (22) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.js +20 -20
  3. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.d.ts +2 -0
  4. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.js +80 -42
  5. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedAccessibleView.js +3 -3
  6. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedColors.js +7 -7
  7. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.js +37 -37
  8. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedIcons.js +2 -2
  9. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedInput.js +1 -1
  10. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService._contribution.js +3 -3
  11. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.js +1 -1
  12. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css +43 -0
  13. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/startupPage.js +2 -2
  14. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.js +151 -151
  15. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/notebookProfile.js +3 -3
  16. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/theme_picker.js +5 -5
  17. package/vscode/src/vs/workbench/contrib/welcomeGettingStarted/common/media/theme_picker_small.js +4 -4
  18. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/editorWalkThrough.js +3 -3
  19. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css +1 -0
  20. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThrough.contribution.js +2 -2
  21. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/browser/walkThroughPart.js +2 -2
  22. package/vscode/src/vs/workbench/contrib/welcomeWalkthrough/common/walkThroughUtils.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-walkthrough-service-override",
3
- "version": "24.2.0",
3
+ "version": "25.0.0",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor - walkthrough service-override",
6
6
  "keywords": [],
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-api": "24.2.0",
18
+ "@codingame/monaco-vscode-api": "25.0.0",
19
19
  "marked": "14.0.0"
20
20
  },
21
21
  "main": "index.js",
@@ -37,7 +37,7 @@ registerAction2(class extends Action2 {
37
37
  constructor() {
38
38
  super({
39
39
  id: 'workbench.action.openWalkthrough',
40
- title: ( localize2(13113, 'Welcome')),
40
+ title: ( localize2(13165, 'Welcome')),
41
41
  category: Categories.Help,
42
42
  f1: true,
43
43
  menu: {
@@ -46,7 +46,7 @@ registerAction2(class extends Action2 {
46
46
  order: 1,
47
47
  },
48
48
  metadata: {
49
- description: ( localize2(13114, 'Opens a Walkthrough to help you get started in VS Code.'))
49
+ description: ( localize2(13166, 'Opens a Walkthrough to help you get started in VS Code.'))
50
50
  }
51
51
  });
52
52
  }
@@ -91,15 +91,15 @@ registerAction2(class extends Action2 {
91
91
  }
92
92
  });
93
93
  ( Registry.as(EditorExtensions.EditorFactory)).registerEditorSerializer(GettingStartedInput.ID, GettingStartedInputSerializer);
94
- ( Registry.as(EditorExtensions.EditorPane)).registerEditorPane(EditorPaneDescriptor.create(GettingStartedPage, GettingStartedPage.ID, ( localize(13115, "Welcome"))), [
94
+ ( Registry.as(EditorExtensions.EditorPane)).registerEditorPane(EditorPaneDescriptor.create(GettingStartedPage, GettingStartedPage.ID, ( localize(13167, "Welcome"))), [
95
95
  ( new SyncDescriptor(GettingStartedInput))
96
96
  ]);
97
- const category = ( localize2(13115, "Welcome"));
97
+ const category = ( localize2(13167, "Welcome"));
98
98
  registerAction2(class extends Action2 {
99
99
  constructor() {
100
100
  super({
101
101
  id: 'welcome.goBack',
102
- title: ( localize2(13116, 'Go Back')),
102
+ title: ( localize2(13168, 'Go Back')),
103
103
  category,
104
104
  keybinding: {
105
105
  weight: KeybindingWeight.EditorContrib,
@@ -135,7 +135,7 @@ registerAction2(class extends Action2 {
135
135
  constructor() {
136
136
  super({
137
137
  id: 'welcome.markStepComplete',
138
- title: ( localize(13117, "Mark Step Complete")),
138
+ title: ( localize(13169, "Mark Step Complete")),
139
139
  category,
140
140
  });
141
141
  }
@@ -151,7 +151,7 @@ registerAction2(class extends Action2 {
151
151
  constructor() {
152
152
  super({
153
153
  id: 'welcome.markStepIncomplete',
154
- title: ( localize(13118, "Mark Step Incomplete")),
154
+ title: ( localize(13170, "Mark Step Incomplete")),
155
155
  category,
156
156
  });
157
157
  }
@@ -167,7 +167,7 @@ registerAction2(class extends Action2 {
167
167
  constructor() {
168
168
  super({
169
169
  id: 'welcome.showAllWalkthroughs',
170
- title: ( localize2(13119, 'Open Walkthrough...')),
170
+ title: ( localize2(13171, 'Open Walkthrough...')),
171
171
  category,
172
172
  f1: true,
173
173
  menu: {
@@ -199,7 +199,7 @@ registerAction2(class extends Action2 {
199
199
  quickPick.canSelectMany = false;
200
200
  quickPick.matchOnDescription = true;
201
201
  quickPick.matchOnDetail = true;
202
- quickPick.placeholder = ( localize(13120, 'Select a walkthrough to open'));
202
+ quickPick.placeholder = ( localize(13172, 'Select a walkthrough to open'));
203
203
  quickPick.items = await this.getQuickPickItems(contextService, gettingStartedService);
204
204
  quickPick.busy = true;
205
205
  disposables.add(quickPick.onDidAccept(() => {
@@ -226,7 +226,7 @@ CommandsRegistry.registerCommand({
226
226
  }
227
227
  });
228
228
  const WorkspacePlatform = ( new RawContextKey('workspacePlatform', undefined, ( localize(
229
- 13121,
229
+ 13173,
230
230
  "The platform of the current workspace, which in remote or serverless contexts may be different from the platform of the UI"
231
231
  ))));
232
232
  let WorkspacePlatformContribution = class WorkspacePlatformContribution {
@@ -278,7 +278,7 @@ configurationRegistry.registerConfiguration({
278
278
  type: 'boolean',
279
279
  default: true,
280
280
  description: ( localize(
281
- 13122,
281
+ 13174,
282
282
  "When enabled, an extension's walkthrough will open upon install of the extension."
283
283
  ))
284
284
  },
@@ -287,25 +287,25 @@ configurationRegistry.registerConfiguration({
287
287
  'type': 'string',
288
288
  'enum': ['none', 'welcomePage', 'readme', 'newUntitledFile', 'welcomePageInEmptyWorkbench', 'terminal'],
289
289
  'enumDescriptions': [
290
- ( localize(13123, "Start without an editor.")),
290
+ ( localize(13175, "Start without an editor.")),
291
291
  ( localize(
292
- 13124,
292
+ 13176,
293
293
  "Open the Welcome page, with content to aid in getting started with VS Code and extensions."
294
294
  )),
295
295
  ( localize(
296
- 13125,
296
+ 13177,
297
297
  "Open the README when opening a folder that contains one, fallback to 'welcomePage' otherwise. Note: This is only observed as a global configuration, it will be ignored if set in a workspace or folder configuration."
298
298
  )),
299
299
  ( localize(
300
- 13126,
300
+ 13178,
301
301
  "Open a new untitled text file (only applies when opening an empty window)."
302
302
  )),
303
- ( localize(13127, "Open the Welcome page when opening an empty workbench.")),
304
- ( localize(13128, "Open a new terminal in the editor area.")),
303
+ ( localize(13179, "Open the Welcome page when opening an empty workbench.")),
304
+ ( localize(13180, "Open a new terminal in the editor area.")),
305
305
  ],
306
306
  'default': 'welcomePage',
307
307
  'description': ( localize(
308
- 13129,
308
+ 13181,
309
309
  "Controls which editor is shown at startup, if none are restored from the previous session."
310
310
  ))
311
311
  },
@@ -313,8 +313,8 @@ configurationRegistry.registerConfiguration({
313
313
  scope: ConfigurationScope.APPLICATION,
314
314
  type: 'boolean',
315
315
  default: false,
316
- deprecationMessage: ( localize(13130, "Deprecated, use the global `workbench.reduceMotion`.")),
317
- description: ( localize(13131, "When enabled, reduce motion in welcome page."))
316
+ deprecationMessage: ( localize(13182, "Deprecated, use the global `workbench.reduceMotion`.")),
317
+ description: ( localize(13183, "When enabled, reduce motion in welcome page."))
318
318
  }
319
319
  }
320
320
  });
@@ -121,6 +121,8 @@ export declare class GettingStartedPage extends EditorPane {
121
121
  protected createEditor(parent: HTMLElement): void;
122
122
  private buildCategoriesSlide;
123
123
  private buildRecentlyOpenedList;
124
+ private filterRecentlyOpened;
125
+ private refreshRecentlyOpened;
124
126
  private buildStartList;
125
127
  private buildGettingStartedWalkthroughsList;
126
128
  layout(size: Dimension): void;
@@ -3,6 +3,7 @@ import { registerCss } from '@codingame/monaco-vscode-api/css';
3
3
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
4
4
  import { $, addDisposableListener, clearNode, reset, append, getActiveElement } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
5
5
  import { renderFormattedText } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/formattedTextRenderer';
6
+ import { status } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/aria/aria';
6
7
  import { StandardKeyboardEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/keyboardEvent';
7
8
  import { Button } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/button/button';
8
9
  import { renderLabelWithIcons } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/iconLabel/iconLabels';
@@ -134,7 +135,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
134
135
  this.container = $('.gettingStartedContainer', {
135
136
  role: 'document',
136
137
  tabindex: 0,
137
- 'aria-label': ( localize(13132, "Overview of how to get up to speed with your editor."))
138
+ 'aria-label': ( localize(13184, "Overview of how to get up to speed with your editor."))
138
139
  });
139
140
  this.stepMediaComponent = $('.getting-started-media');
140
141
  this.stepMediaComponent.id = generateUuid();
@@ -171,7 +172,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
171
172
  this.recentlyOpened = this.workspacesService.getRecentlyOpened();
172
173
  this._register(workspacesService.onDidChangeRecentlyOpened(() => {
173
174
  this.recentlyOpened = workspacesService.getRecentlyOpened();
174
- rerender();
175
+ this.refreshRecentlyOpened();
175
176
  }));
176
177
  this._register(this.gettingStartedService.onDidChangeWalkthrough(category => {
177
178
  const ourCategory = this.gettingStartedCategories.find(c => c.id === category.id);
@@ -210,16 +211,19 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
210
211
  badgeelement.parentElement?.setAttribute('aria-checked', 'true');
211
212
  badgeelement.classList.remove(...ThemeIcon.asClassNameArray(gettingStartedUncheckedCodicon));
212
213
  badgeelement.classList.add('complete', ...ThemeIcon.asClassNameArray(gettingStartedCheckedCodicon));
213
- badgeelement.setAttribute('aria-label', ( localize(13133, "Checkbox for Step {0}: Completed", step.title)));
214
+ badgeelement.setAttribute('aria-label', ( localize(13185, "Checkbox for Step {0}: Completed", step.title)));
214
215
  }
215
216
  else {
216
217
  badgeelement.setAttribute('aria-checked', 'false');
217
218
  badgeelement.parentElement?.setAttribute('aria-checked', 'false');
218
219
  badgeelement.classList.remove('complete', ...ThemeIcon.asClassNameArray(gettingStartedCheckedCodicon));
219
220
  badgeelement.classList.add(...ThemeIcon.asClassNameArray(gettingStartedUncheckedCodicon));
220
- badgeelement.setAttribute('aria-label', ( localize(13134, "Checkbox for Step {0}: Not completed", step.title)));
221
+ badgeelement.setAttribute('aria-label', ( localize(13186, "Checkbox for Step {0}: Not completed", step.title)));
221
222
  }
222
223
  });
224
+ if (step.done) {
225
+ status(( localize(13187, "Step {0} completed", step.title)));
226
+ }
223
227
  }
224
228
  this.updateCategoryProgress();
225
229
  }));
@@ -438,7 +442,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
438
442
  label: x.title,
439
443
  detail: x.description,
440
444
  description: x.source,
441
- }))), { canPickMany: false, matchOnDescription: true, matchOnDetail: true, title: ( localize(13135, "Open Walkthrough...")) });
445
+ }))), { canPickMany: false, matchOnDescription: true, matchOnDetail: true, title: ( localize(13188, "Open Walkthrough...")) });
442
446
  if (selection) {
443
447
  this.runDispatchCommand('selectCategory', selection.id);
444
448
  }
@@ -620,7 +624,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
620
624
  const themeType = this.themeService.getColorTheme().type;
621
625
  const videoPath = media.path[themeType];
622
626
  const videoPoster = media.poster ? media.poster[themeType] : undefined;
623
- const altText = media.altText ? media.altText : ( localize(13136, "Video for {0}", stepToExpand.title));
627
+ const altText = media.altText ? media.altText : ( localize(13189, "Video for {0}", stepToExpand.title));
624
628
  const rawHTML = await this.detailsRenderer.renderVideo(videoPath, videoPoster, altText);
625
629
  this.webview.setHtml(rawHTML);
626
630
  let isDisposed = false;
@@ -651,8 +655,8 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
651
655
  provideScreenReaderUpdate() {
652
656
  if (this.configurationService.getValue(AccessibilityVerbositySettingId.Walkthrough)) {
653
657
  const kbLabel = this.keybindingService.lookupKeybinding(AccessibleViewAction.id)?.getAriaLabel();
654
- return kbLabel ? ( localize(13137, "Inspect this in the accessible view ({0}).\n", kbLabel)) : ( localize(
655
- 13138,
658
+ return kbLabel ? ( localize(13190, "Inspect this in the accessible view ({0}).\n", kbLabel)) : ( localize(
659
+ 13191,
656
660
  "Inspect this in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding.\n"
657
661
  ));
658
662
  }
@@ -715,7 +719,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
715
719
  this.categoriesPageScrollbar.dispose();
716
720
  }
717
721
  this.categoriesSlide = $('.gettingStartedSlideCategories.gettingStartedSlide');
718
- const prevButton = $('button.prev-button.button-link', { 'x-dispatch': 'scrollPrev' }, $('span.scroll-button.codicon.codicon-chevron-left'), $('span.moreText', {}, ( localize(13139, "Go Back"))));
722
+ const prevButton = $('button.prev-button.button-link', { 'x-dispatch': 'scrollPrev' }, $('span.scroll-button.codicon.codicon-chevron-left'), $('span.moreText', {}, ( localize(13192, "Go Back"))));
719
723
  this.stepsSlide = $('.gettingStartedSlideDetails.gettingStartedSlide', {}, prevButton);
720
724
  this.stepsContent = $('.gettingStartedDetailsContent', {});
721
725
  this.detailsPageScrollbar = this._register(( new DomScrollableElement(
@@ -739,11 +743,11 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
739
743
  icon: Codicon.check,
740
744
  actionClassName: 'getting-started-checkbox',
741
745
  isChecked: this.configurationService.getValue(configurationKey) === 'welcomePage',
742
- title: ( localize(13140, "When checked, this page will be shown on startup.")),
746
+ title: ( localize(13193, "When checked, this page will be shown on startup.")),
743
747
  ...defaultToggleStyles
744
748
  }));
745
749
  showOnStartupCheckbox.domNode.id = 'showOnStartup';
746
- const showOnStartupLabel = $('label.caption', { for: 'showOnStartup' }, ( localize(13141, "Show welcome page on startup")));
750
+ const showOnStartupLabel = $('label.caption', { for: 'showOnStartup' }, ( localize(13194, "Show welcome page on startup")));
747
751
  const onShowOnStartupChanged = () => {
748
752
  if (showOnStartupCheckbox.checked) {
749
753
  this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'showOnStartupChecked', argument: undefined, walkthroughId: this.currentWalkthrough?.id });
@@ -762,7 +766,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
762
766
  showOnStartupCheckbox.checked = !showOnStartupCheckbox.checked;
763
767
  onShowOnStartupChanged();
764
768
  }));
765
- const header = $('.header', {}, $('h1.product-name.caption', {}, this.productService.nameLong), $('p.subtitle.description', {}, ( localize(13142, "Editing evolved"))));
769
+ const header = $('.header', {}, $('h1.product-name.caption', {}, this.productService.nameLong), $('p.subtitle.description', {}, ( localize(13195, "Editing evolved"))));
766
770
  const leftColumn = $('.categories-column.categories-column-left', {});
767
771
  const rightColumn = $('.categories-column.categories-column-right', {});
768
772
  const startList = this.buildStartList();
@@ -843,20 +847,23 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
843
847
  const renderRecent = (recent) => {
844
848
  let fullPath;
845
849
  let windowOpenable;
850
+ let resourceUri;
846
851
  if (isRecentFolder(recent)) {
847
852
  windowOpenable = { folderUri: recent.folderUri };
848
853
  fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.folderUri, { verbose: Verbosity.LONG });
854
+ resourceUri = recent.folderUri;
849
855
  }
850
856
  else {
851
857
  fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.workspace, { verbose: Verbosity.LONG });
852
858
  windowOpenable = { workspaceUri: recent.workspace.configPath };
859
+ resourceUri = recent.workspace.configPath;
853
860
  }
854
861
  const { name, parentPath } = splitRecentLabel(fullPath);
855
862
  const li = $('li');
856
863
  const link = $('button.button-link');
857
864
  link.innerText = name;
858
865
  link.title = fullPath;
859
- link.setAttribute('aria-label', ( localize(13143, "Open folder {0} with path {1}", name, parentPath)));
866
+ link.setAttribute('aria-label', ( localize(13196, "Open folder {0} with path {1}", name, parentPath)));
860
867
  link.addEventListener('click', e => {
861
868
  this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'openRecent', argument: undefined, walkthroughId: this.currentWalkthrough?.id });
862
869
  this.hostService.openWindow([windowOpenable], {
@@ -873,34 +880,49 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
873
880
  span.innerText = parentPath;
874
881
  span.title = fullPath;
875
882
  li.appendChild(span);
883
+ const deleteButton = $('a.codicon.codicon-close.hide-category-button.recently-opened-delete-button', {
884
+ 'tabindex': 0,
885
+ 'role': 'button',
886
+ 'title': ( localize(13197, "Remove from Recently Opened")),
887
+ 'aria-label': ( localize(13198, "Remove {0} from Recently Opened", name)),
888
+ });
889
+ const handleDelete = async (e) => {
890
+ e.preventDefault();
891
+ e.stopPropagation();
892
+ await this.workspacesService.removeRecentlyOpened([resourceUri]);
893
+ };
894
+ deleteButton.addEventListener('click', handleDelete);
895
+ deleteButton.addEventListener('keydown', async (e) => {
896
+ const event = ( new StandardKeyboardEvent(e));
897
+ if (event.keyCode === KeyCode.Enter || event.keyCode === KeyCode.Space) {
898
+ await handleDelete(e);
899
+ }
900
+ });
901
+ li.appendChild(deleteButton);
876
902
  return li;
877
903
  };
878
904
  if (this.recentlyOpenedList) {
879
905
  this.recentlyOpenedList.dispose();
880
906
  }
881
907
  const recentlyOpenedList = this.recentlyOpenedList = ( new GettingStartedIndexList({
882
- title: ( localize(13144, "Recent")),
908
+ title: ( localize(13199, "Recent")),
883
909
  klass: 'recently-opened',
884
910
  limit: 5,
885
- empty: $('.empty-recent', {}, ( localize(13145, "You have no recent folders,")), $('button.button-link', { 'x-dispatch': 'openFolder' }, ( localize(13146, "open a folder"))), ( localize(13147, "to start."))),
911
+ empty: $('.empty-recent', {}, ( localize(13200, "You have no recent folders,")), $('button.button-link', { 'x-dispatch': 'openFolder' }, ( localize(13201, "open a folder"))), ( localize(13202, "to start."))),
886
912
  more: $('.more', {}, $('button.button-link', {
887
913
  'x-dispatch': 'showMoreRecents',
888
914
  title: ( localize(
889
- 13148,
915
+ 13203,
890
916
  "Show All Recent Folders {0}",
891
917
  this.getKeybindingLabel(OpenRecentAction.ID)
892
918
  ))
893
- }, ( localize(13149, "More...")))),
919
+ }, ( localize(13204, "More...")))),
894
920
  renderElement: renderRecent,
895
921
  contextService: this.contextService
896
922
  }));
897
923
  recentlyOpenedList.onDidChange(() => this.registerDispatchListeners());
898
924
  this.recentlyOpened.then(({ workspaces }) => {
899
- const workspacesWithID = ( workspaces
900
- .filter(recent => !this.workspaceContextService.isCurrentWorkspace(isRecentWorkspace(recent) ? recent.workspace : recent.folderUri))
901
- .map(
902
- recent => ({ ...recent, id: isRecentWorkspace(recent) ? recent.workspace.id : ( recent.folderUri.toString()) })
903
- ));
925
+ const workspacesWithID = this.filterRecentlyOpened(workspaces);
904
926
  const updateEntries = () => {
905
927
  recentlyOpenedList.setEntries(workspacesWithID);
906
928
  };
@@ -909,6 +931,22 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
909
931
  }).catch(onUnexpectedError);
910
932
  return recentlyOpenedList;
911
933
  }
934
+ filterRecentlyOpened(workspaces) {
935
+ return ( workspaces
936
+ .filter(recent => !this.workspaceContextService.isCurrentWorkspace(isRecentWorkspace(recent) ? recent.workspace : recent.folderUri))
937
+ .map(
938
+ recent => ({ ...recent, id: isRecentWorkspace(recent) ? recent.workspace.id : ( recent.folderUri.toString()) })
939
+ ));
940
+ }
941
+ refreshRecentlyOpened() {
942
+ if (!this.recentlyOpenedList) {
943
+ return;
944
+ }
945
+ this.recentlyOpened.then(({ workspaces }) => {
946
+ const workspacesWithID = this.filterRecentlyOpened(workspaces);
947
+ this.recentlyOpenedList?.setEntries(workspacesWithID);
948
+ }).catch(onUnexpectedError);
949
+ }
912
950
  buildStartList() {
913
951
  const renderStartEntry = (entry) => $('li', {}, $('button.button-link', {
914
952
  'x-dispatch': 'selectStartEntry:' + entry.id,
@@ -918,7 +956,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
918
956
  this.startList.dispose();
919
957
  }
920
958
  const startList = this.startList = ( new GettingStartedIndexList({
921
- title: ( localize(13150, "Start")),
959
+ title: ( localize(13205, "Start")),
922
960
  klass: 'start-container',
923
961
  limit: 10,
924
962
  renderElement: renderStartEntry,
@@ -934,10 +972,10 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
934
972
  const renderNewBadge = (category.newItems || category.newEntry) && !category.isFeatured;
935
973
  const newBadge = $('.new-badge', {});
936
974
  if (category.newEntry) {
937
- reset(newBadge, $('.new-category', {}, ( localize(13151, "New"))));
975
+ reset(newBadge, $('.new-category', {}, ( localize(13206, "New"))));
938
976
  }
939
977
  else if (category.newItems) {
940
- reset(newBadge, $('.new-items', {}, ( localize(13152, "Updated"))));
978
+ reset(newBadge, $('.new-items', {}, ( localize(13207, "Updated"))));
941
979
  }
942
980
  const featuredBadge = $('.featured-badge', {});
943
981
  const descriptionContent = $('.description-content', {});
@@ -953,9 +991,9 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
953
991
  }, featuredBadge, $('.main-content', {}, this.iconWidgetFor(category), titleContent, renderNewBadge ? newBadge : $('.no-badge'), $('a.codicon.codicon-close.hide-category-button', {
954
992
  'tabindex': 0,
955
993
  'x-dispatch': 'hideCategory:' + category.id,
956
- 'title': ( localize(13153, "Hide")),
994
+ 'title': ( localize(13208, "Hide")),
957
995
  'role': 'button',
958
- 'aria-label': ( localize(13154, "Hide")),
996
+ 'aria-label': ( localize(13209, "Hide")),
959
997
  })), descriptionContent, $('.category-progress', { 'x-data-category-id': category.id, }, $('.progress-bar-outer', { 'role': 'progressbar' }, $('.progress-bar-inner'))));
960
998
  };
961
999
  if (this.gettingStartedList) {
@@ -981,10 +1019,10 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
981
1019
  return rank;
982
1020
  };
983
1021
  const gettingStartedList = this.gettingStartedList = ( new GettingStartedIndexList({
984
- title: ( localize(13155, "Walkthroughs")),
1022
+ title: ( localize(13210, "Walkthroughs")),
985
1023
  klass: 'getting-started',
986
1024
  limit: 5,
987
- footer: $('span.button-link.see-all-walkthroughs', { 'x-dispatch': 'seeAllWalkthroughs', 'tabindex': 0 }, ( localize(13149, "More..."))),
1025
+ footer: $('span.button-link.see-all-walkthroughs', { 'x-dispatch': 'seeAllWalkthroughs', 'tabindex': 0 }, ( localize(13204, "More..."))),
988
1026
  renderElement: renderGetttingStaredWalkthrough,
989
1027
  rankElement: rankWalkthrough,
990
1028
  contextService: this.contextService,
@@ -1037,10 +1075,10 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
1037
1075
  bar.style.width = `${progress}%`;
1038
1076
  element.parentElement.classList.toggle('no-progress', stats.stepsComplete === 0);
1039
1077
  if (stats.stepsTotal === stats.stepsComplete) {
1040
- bar.title = ( localize(13156, "All {0} steps complete!", stats.stepsComplete));
1078
+ bar.title = ( localize(13211, "All {0} steps complete!", stats.stepsComplete));
1041
1079
  }
1042
1080
  else {
1043
- bar.title = ( localize(13157, "{0} of {1} steps complete", stats.stepsComplete, stats.stepsTotal));
1081
+ bar.title = ( localize(13212, "{0} of {1} steps complete", stats.stepsComplete, stats.stepsTotal));
1044
1082
  }
1045
1083
  });
1046
1084
  }
@@ -1164,7 +1202,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
1164
1202
  if (isCommand) {
1165
1203
  const keybinding = this.getKeyBinding(command);
1166
1204
  if (keybinding) {
1167
- const shortcutMessage = $('span.shortcut-message', {}, ( localize(13158, 'Tip: Use keyboard shortcut ')));
1205
+ const shortcutMessage = $('span.shortcut-message', {}, ( localize(13213, 'Tip: Use keyboard shortcut ')));
1168
1206
  container.appendChild(shortcutMessage);
1169
1207
  const label = ( new KeybindingLabel(shortcutMessage, OS, { ...defaultKeybindingLabelStyles }));
1170
1208
  label.set(keybinding);
@@ -1255,8 +1293,8 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
1255
1293
  'role': 'checkbox',
1256
1294
  'aria-checked': step.done ? 'true' : 'false',
1257
1295
  'aria-label': step.done
1258
- ? ( localize(13133, "Checkbox for Step {0}: Completed", step.title))
1259
- : ( localize(13134, "Checkbox for Step {0}: Not completed", step.title)),
1296
+ ? ( localize(13185, "Checkbox for Step {0}: Completed", step.title))
1297
+ : ( localize(13186, "Checkbox for Step {0}: Not completed", step.title)),
1260
1298
  });
1261
1299
  const container = $('.step-description-container', { 'x-step-description-for': step.id });
1262
1300
  this.buildMarkdownDescription(container, step.description);
@@ -1264,10 +1302,10 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
1264
1302
  reset(stepTitle, ...renderLabelWithIcons(step.title));
1265
1303
  const stepDescription = $('.step-container', {}, stepTitle, container);
1266
1304
  if (step.media.type === 'image') {
1267
- stepDescription.appendChild($('.image-description', { 'aria-label': ( localize(13159, "Image showing {0}", step.media.altText)) }));
1305
+ stepDescription.appendChild($('.image-description', { 'aria-label': ( localize(13214, "Image showing {0}", step.media.altText)) }));
1268
1306
  }
1269
1307
  else if (step.media.type === 'video') {
1270
- stepDescription.appendChild($('.video-description', { 'aria-label': ( localize(13160, "Video showing {0}", step.media.altText)) }));
1308
+ stepDescription.appendChild($('.video-description', { 'aria-label': ( localize(13215, "Video showing {0}", step.media.altText)) }));
1271
1309
  }
1272
1310
  return $('button.getting-started-step', {
1273
1311
  'x-dispatch': 'selectTask:' + step.id,
@@ -1287,8 +1325,8 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
1287
1325
  }
1288
1326
  }));
1289
1327
  const showNextCategory = this.gettingStartedCategories.find(_category => _category.id === category.next);
1290
- const stepsContainer = $('.getting-started-detail-container', { 'role': 'list' }, stepListContainer, $('.done-next-container', {}, $('button.button-link.all-done', { 'x-dispatch': 'allDone' }, $('span.codicon.codicon-check-all'), ( localize(13161, "Mark Done"))), ...(showNextCategory
1291
- ? [$('button.button-link.next', { 'x-dispatch': 'nextSection' }, ( localize(13162, "Next Section")), $('span.codicon.codicon-arrow-right'))]
1328
+ const stepsContainer = $('.getting-started-detail-container', { 'role': 'list' }, stepListContainer, $('.done-next-container', {}, $('button.button-link.all-done', { 'x-dispatch': 'allDone' }, $('span.codicon.codicon-check-all'), ( localize(13216, "Mark Done"))), ...(showNextCategory
1329
+ ? [$('button.button-link.next', { 'x-dispatch': 'nextSection' }, ( localize(13217, "Next Section")), $('span.codicon.codicon-arrow-right'))]
1292
1330
  : [])));
1293
1331
  this.detailsScrollbar = this._register(( new DomScrollableElement(stepsContainer, { className: 'steps-container' })));
1294
1332
  const stepListComponent = this.detailsScrollbar.getDomNode();
@@ -1304,12 +1342,12 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
1304
1342
  this.registerDispatchListeners();
1305
1343
  }
1306
1344
  buildTelemetryFooter(parent) {
1307
- const privacyStatementCopy = ( localize(13163, "privacy statement"));
1345
+ const privacyStatementCopy = ( localize(13218, "privacy statement"));
1308
1346
  const privacyStatementButton = `[${privacyStatementCopy}](command:workbench.action.openPrivacyStatementUrl)`;
1309
- const optOutCopy = ( localize(13164, "opt out"));
1347
+ const optOutCopy = ( localize(13219, "opt out"));
1310
1348
  const optOutButton = `[${optOutCopy}](command:settings.filterByTelemetry)`;
1311
1349
  const text = ( localize(
1312
- 13165,
1350
+ 13220,
1313
1351
  "{0} collects usage data. Read our {1} and learn how to {2}.",
1314
1352
  this.productService.nameShort,
1315
1353
  privacyStatementButton,
@@ -1383,7 +1421,7 @@ let GettingStartedPage = class GettingStartedPage extends EditorPane {
1383
1421
  const prevButton = this.container.querySelector('.prev-button.button-link');
1384
1422
  prevButton.style.display = this.editorInput?.showWelcome || this.prevWalkthrough ? 'block' : 'none';
1385
1423
  const moreTextElement = prevButton.querySelector('.moreText');
1386
- moreTextElement.textContent = firstLaunch ? ( localize(13166, "Welcome")) : ( localize(13139, "Go Back"));
1424
+ moreTextElement.textContent = firstLaunch ? ( localize(13221, "Welcome")) : ( localize(13192, "Go Back"));
1387
1425
  this.container.querySelector('.gettingStartedSlideDetails').querySelectorAll('button').forEach(button => button.disabled = false);
1388
1426
  this.container.querySelector('.gettingStartedSlideCategories').querySelectorAll('button').forEach(button => button.disabled = true);
1389
1427
  this.container.querySelector('.gettingStartedSlideCategories').querySelectorAll('input').forEach(button => button.disabled = true);
@@ -116,11 +116,11 @@ class GettingStartedAccessibleProvider extends Disposable {
116
116
  }
117
117
  _getContent(waltkrough, step, includeTitle) {
118
118
  const description = ( step.description.map(lt => lt.nodes.filter(node => typeof node === 'string'))).join('\n');
119
- const stepsContent = ( localize(13167, '{0}\n{1}', step.title, description));
119
+ const stepsContent = ( localize(13222, '{0}\n{1}', step.title, description));
120
120
  if (includeTitle) {
121
121
  return [
122
- ( localize(13168, 'Title: {0}', waltkrough.title)),
123
- ( localize(13169, 'Description: {0}', waltkrough.description)),
122
+ ( localize(13223, 'Title: {0}', waltkrough.title)),
123
+ ( localize(13224, 'Description: {0}', waltkrough.description)),
124
124
  stepsContent
125
125
  ].join('\n');
126
126
  }
@@ -12,10 +12,10 @@ import '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colors/quic
12
12
  import '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colors/searchColors';
13
13
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
14
14
 
15
- registerColor('welcomePage.background', null, ( localize(13170, 'Background color for the Welcome page.')));
16
- registerColor('welcomePage.tileBackground', { dark: editorWidgetBackground, light: editorWidgetBackground, hcDark: '#000', hcLight: editorWidgetBackground }, ( localize(13171, 'Background color for the tiles on the Welcome page.')));
17
- registerColor('welcomePage.tileHoverBackground', { dark: ( lighten(editorWidgetBackground, .2)), light: ( darken(editorWidgetBackground, .1)), hcDark: null, hcLight: null }, ( localize(13172, 'Hover background color for the tiles on the Welcome.')));
18
- registerColor('welcomePage.tileBorder', { dark: '#ffffff1a', light: '#0000001a', hcDark: contrastBorder, hcLight: contrastBorder }, ( localize(13173, 'Border color for the tiles on the Welcome page.')));
19
- registerColor('welcomePage.progress.background', inputBackground, ( localize(13174, 'Foreground color for the Welcome page progress bars.')));
20
- registerColor('welcomePage.progress.foreground', textLinkForeground, ( localize(13175, 'Background color for the Welcome page progress bars.')));
21
- registerColor('walkthrough.stepTitle.foreground', { light: '#000000', dark: '#ffffff', hcDark: null, hcLight: null }, ( localize(13176, 'Foreground color of the heading of each walkthrough step')));
15
+ registerColor('welcomePage.background', null, ( localize(13225, 'Background color for the Welcome page.')));
16
+ registerColor('welcomePage.tileBackground', { dark: editorWidgetBackground, light: editorWidgetBackground, hcDark: '#000', hcLight: editorWidgetBackground }, ( localize(13226, 'Background color for the tiles on the Welcome page.')));
17
+ registerColor('welcomePage.tileHoverBackground', { dark: ( lighten(editorWidgetBackground, .2)), light: ( darken(editorWidgetBackground, .1)), hcDark: null, hcLight: null }, ( localize(13227, 'Hover background color for the tiles on the Welcome.')));
18
+ registerColor('welcomePage.tileBorder', { dark: '#ffffff1a', light: '#0000001a', hcDark: contrastBorder, hcLight: contrastBorder }, ( localize(13228, 'Border color for the tiles on the Welcome page.')));
19
+ registerColor('welcomePage.progress.background', inputBackground, ( localize(13229, 'Foreground color for the Welcome page progress bars.')));
20
+ registerColor('welcomePage.progress.foreground', textLinkForeground, ( localize(13230, 'Background color for the Welcome page progress bars.')));
21
+ registerColor('walkthrough.stepTitle.foreground', { light: '#000000', dark: '#ffffff', hcDark: null, hcLight: null }, ( localize(13231, 'Foreground color of the heading of each walkthrough step')));