@codingame/monaco-vscode-welcome-service-override 31.0.0 → 32.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-welcome-service-override",
3
- "version": "31.0.0",
3
+ "version": "32.0.0",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor - welcome service-override",
6
6
  "keywords": [],
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-api": "31.0.0"
18
+ "@codingame/monaco-vscode-api": "32.0.0"
19
19
  },
20
20
  "main": "index.js",
21
21
  "module": "index.js",
@@ -42,6 +42,7 @@
42
42
  display: flex;
43
43
  flex-direction: column;
44
44
  overflow: hidden;
45
+ position: relative;
45
46
  transform: scale(0.96) translateY(8px);
46
47
  transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
47
48
  }
@@ -61,6 +62,36 @@
61
62
  padding: 20px 28px 0;
62
63
  }
63
64
 
65
+ .onboarding-a-close-btn {
66
+ position: absolute;
67
+ top: 16px;
68
+ right: 16px;
69
+ z-index: 1;
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ width: 28px;
74
+ height: 28px;
75
+ border: none;
76
+ border-radius: 6px;
77
+ background: transparent;
78
+ color: var(--vscode-descriptionForeground);
79
+ cursor: pointer;
80
+ padding: 0;
81
+ flex-shrink: 0;
82
+ transition: background 0.15s ease, color 0.15s ease;
83
+ }
84
+
85
+ .onboarding-a-close-btn:hover {
86
+ background: var(--vscode-toolbar-hoverBackground, rgba(255, 255, 255, 0.1));
87
+ color: var(--vscode-editor-foreground);
88
+ }
89
+
90
+ .onboarding-a-close-btn:focus-visible {
91
+ outline: 2px solid var(--vscode-focusBorder);
92
+ outline-offset: 2px;
93
+ }
94
+
64
95
  .onboarding-a-progress {
65
96
  display: flex;
66
97
  align-items: center;
@@ -692,11 +723,33 @@
692
723
  }
693
724
 
694
725
  .onboarding-a-sessions-features {
726
+ display: flex;
727
+ flex-direction: column;
728
+ gap: 14px;
729
+ flex: 1;
730
+ }
731
+
732
+ .onboarding-a-sessions-group {
733
+ display: flex;
734
+ flex-direction: column;
735
+ gap: 6px;
736
+ }
737
+
738
+ .onboarding-a-sessions-group-label {
739
+ font-size: 11px;
740
+ font-weight: 600;
741
+ text-transform: uppercase;
742
+ letter-spacing: 0.5px;
743
+ color: var(--vscode-descriptionForeground);
744
+ }
745
+
746
+ .onboarding-a-sessions-grid {
695
747
  display: grid;
696
- grid-template-columns: repeat(2, minmax(0, 1fr));
697
748
  gap: 10px;
698
- flex: 1;
699
- align-content: start;
749
+ }
750
+
751
+ .onboarding-a-sessions-grid-2 {
752
+ grid-template-columns: repeat(2, minmax(0, 1fr));
700
753
  }
701
754
 
702
755
  .onboarding-a-feature-card {
@@ -951,7 +1004,7 @@
951
1004
  grid-template-columns: repeat(2, minmax(0, 1fr));
952
1005
  }
953
1006
 
954
- .onboarding-a-sessions-features {
1007
+ .onboarding-a-sessions-grid-2 {
955
1008
  grid-template-columns: 1fr;
956
1009
  }
957
1010
 
@@ -55,7 +55,7 @@ export declare class OnboardingVariationA extends Disposable implements IOnboard
55
55
  private contentEl;
56
56
  private backButton;
57
57
  private nextButton;
58
- private skipButton;
58
+ private closeButton;
59
59
  private footerLeft;
60
60
  private _footerSignInBtn;
61
61
  private currentStepIndex;
@@ -108,8 +108,12 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
108
108
  this.overlay = append(container, $(".onboarding-a-overlay"));
109
109
  this.overlay.setAttribute("role", "dialog");
110
110
  this.overlay.setAttribute("aria-modal", "true");
111
- this.overlay.setAttribute("aria-label", ( localize(15634, "Welcome to Visual Studio Code")));
111
+ this.overlay.setAttribute("aria-label", ( localize(15939, "Welcome to Visual Studio Code")));
112
112
  this.card = append(this.overlay, $(".onboarding-a-card"));
113
+ this.closeButton = append(this.card, $("button.onboarding-a-close-btn"));
114
+ this.closeButton.type = "button";
115
+ this.closeButton.setAttribute("aria-label", ( localize(15940, "Close")));
116
+ this.closeButton.appendChild(renderIcon(Codicon.close));
113
117
  const header = append(this.card, $(".onboarding-a-header"));
114
118
  this.progressContainer = append(header, $(".onboarding-a-progress"));
115
119
  this.stepLabelEl = append(this.progressContainer, $("span.onboarding-a-step-label"));
@@ -122,20 +126,16 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
122
126
  this._logStepView();
123
127
  const footer = append(this.card, $(".onboarding-a-footer"));
124
128
  this.footerLeft = append(footer, $(".onboarding-a-footer-left"));
125
- this.skipButton = append(this.footerLeft, $("button.onboarding-a-btn.onboarding-a-btn-ghost"));
126
- this.skipButton.textContent = ( localize(15635, "Skip"));
127
- this.skipButton.type = "button";
128
- this.footerFocusableElements.push(this.skipButton);
129
129
  const footerRight = append(footer, $(".onboarding-a-footer-right"));
130
130
  this.backButton = append(footerRight, $("button.onboarding-a-btn.onboarding-a-btn-secondary"));
131
- this.backButton.textContent = ( localize(15636, "Back"));
131
+ this.backButton.textContent = ( localize(15941, "Back"));
132
132
  this.backButton.type = "button";
133
133
  this.footerFocusableElements.push(this.backButton);
134
134
  this.nextButton = append(footerRight, $("button.onboarding-a-btn.onboarding-a-btn-primary"));
135
135
  this.nextButton.type = "button";
136
136
  this.footerFocusableElements.push(this.nextButton);
137
137
  this._updateButtonStates();
138
- this.disposables.add(addDisposableListener(this.skipButton, EventType.CLICK, () => {
138
+ this.disposables.add(addDisposableListener(this.closeButton, EventType.CLICK, () => {
139
139
  this._logAction("skip");
140
140
  this._dismiss("skip");
141
141
  }));
@@ -244,7 +244,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
244
244
  }
245
245
  }
246
246
  this.progressContainer.appendChild(this.stepLabelEl);
247
- this.stepLabelEl.textContent = ( localize(15637, "{0} of {1}", this.currentStepIndex + 1, this.steps.length));
247
+ this.stepLabelEl.textContent = ( localize(15942, "{0} of {1}", this.currentStepIndex + 1, this.steps.length));
248
248
  }
249
249
  _renderStep() {
250
250
  if (!this.titleEl || !this.subtitleEl || !this.contentEl) {
@@ -280,7 +280,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
280
280
  break;
281
281
  }
282
282
  this.bodyEl?.setAttribute("aria-label", ( localize(
283
- 15638,
283
+ 15943,
284
284
  "Step {0} of {1}: {2}",
285
285
  this.currentStepIndex + 1,
286
286
  this.steps.length,
@@ -294,27 +294,21 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
294
294
  if (this.nextButton) {
295
295
  if (this.currentStepIndex === 0) {
296
296
  this.nextButton.className = "onboarding-a-btn onboarding-a-btn-secondary";
297
- this.nextButton.textContent = ( localize(15639, "Continue without Signing In"));
297
+ this.nextButton.textContent = ( localize(15944, "Continue without Signing In"));
298
298
  } else if (this._isLastStep()) {
299
299
  this.nextButton.className = "onboarding-a-btn onboarding-a-btn-primary";
300
- this.nextButton.textContent = ( localize(15640, "Get Started"));
300
+ this.nextButton.textContent = ( localize(15945, "Get Started"));
301
301
  } else {
302
302
  this.nextButton.className = "onboarding-a-btn onboarding-a-btn-primary";
303
- this.nextButton.textContent = ( localize(15641, "Continue"));
303
+ this.nextButton.textContent = ( localize(15946, "Continue"));
304
304
  }
305
305
  }
306
- if (this.skipButton && this.footerLeft) {
307
- if (this.currentStepIndex === 0) {
308
- this.skipButton.className = "onboarding-a-btn onboarding-a-btn-ghost";
309
- } else {
310
- this.skipButton.className = "onboarding-a-btn onboarding-a-btn-ghost";
311
- }
306
+ if (this.footerLeft) {
312
307
  if (this._isLastStep()) {
313
- this.skipButton.style.display = "none";
314
308
  if (!this._footerSignInBtn && !this._userSignedIn) {
315
309
  this._footerSignInBtn = append(this.footerLeft, $("button.onboarding-a-signin-nudge-btn"));
316
310
  this._footerSignInBtn.type = "button";
317
- this._footerSignInBtn.textContent = ( localize(15642, "Sign in for AI Powered Features"));
311
+ this._footerSignInBtn.textContent = ( localize(15947, "Sign in for AI Powered Features"));
318
312
  this.stepDisposables.add(
319
313
  addDisposableListener(this._footerSignInBtn, EventType.CLICK, async () => {
320
314
  this._logAction("signInNudge");
@@ -326,7 +320,6 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
326
320
  );
327
321
  }
328
322
  } else {
329
- this.skipButton.style.display = "";
330
323
  if (this._footerSignInBtn) {
331
324
  this._footerSignInBtn.remove();
332
325
  this._footerSignInBtn = undefined;
@@ -343,37 +336,37 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
343
336
  const content = append(wrapper, $(".onboarding-a-signin-content"));
344
337
  const contentMain = append(content, $(".onboarding-a-signin-content-main"));
345
338
  const title = append(contentMain, $("h2.onboarding-a-signin-title"));
346
- title.textContent = ( localize(15643, "Welcome to VS Code"));
339
+ title.textContent = ( localize(15948, "Welcome to VS Code"));
347
340
  const subtitle = append(contentMain, $("p.onboarding-a-signin-subtitle"));
348
- subtitle.textContent = ( localize(15644, "Sign in to continue with AI-powered development."));
341
+ subtitle.textContent = ( localize(15949, "Sign in to continue with AI-powered development."));
349
342
  const actions = append(contentMain, $(".onboarding-a-signin-actions"));
350
- const githubBtn = this._registerStepFocusable(this._createSignInButton(actions, "github", ( localize(15645, "Continue with GitHub")), {
343
+ const githubBtn = this._registerStepFocusable(this._createSignInButton(actions, "github", ( localize(15950, "Continue with GitHub")), {
351
344
  emphasized: true,
352
- label: ( localize(15646, "Continue with GitHub"))
345
+ label: ( localize(15951, "Continue with GitHub"))
353
346
  }));
354
347
  this.stepDisposables.add(addDisposableListener(githubBtn, EventType.CLICK, () => {
355
348
  this._logAction("signIn", undefined, "github");
356
349
  this._handleSignIn();
357
350
  }));
358
- const googleBtn = this._registerStepFocusable(this._createSignInButton(actions, "google", ( localize(15647, "Continue with Google")), {
351
+ const googleBtn = this._registerStepFocusable(this._createSignInButton(actions, "google", ( localize(15952, "Continue with Google")), {
359
352
  iconOnly: true,
360
- label: ( localize(15647, "Continue with Google"))
353
+ label: ( localize(15952, "Continue with Google"))
361
354
  }));
362
355
  this.stepDisposables.add(addDisposableListener(googleBtn, EventType.CLICK, () => {
363
356
  this._logAction("signIn", undefined, "google");
364
357
  this._handleSignIn("google");
365
358
  }));
366
- const appleBtn = this._registerStepFocusable(this._createSignInButton(actions, "apple", ( localize(15648, "Continue with Apple")), {
359
+ const appleBtn = this._registerStepFocusable(this._createSignInButton(actions, "apple", ( localize(15953, "Continue with Apple")), {
367
360
  iconOnly: true,
368
- label: ( localize(15648, "Continue with Apple"))
361
+ label: ( localize(15953, "Continue with Apple"))
369
362
  }));
370
363
  this.stepDisposables.add(addDisposableListener(appleBtn, EventType.CLICK, () => {
371
364
  this._logAction("signIn", undefined, "apple");
372
365
  this._handleSignIn("apple");
373
366
  }));
374
- const gheBtn = this._registerStepFocusable(this._createSignInButton(actions, "github-enterprise", ( localize(15649, "GHE")), {
367
+ const gheBtn = this._registerStepFocusable(this._createSignInButton(actions, "github-enterprise", ( localize(15954, "GHE")), {
375
368
  textOnly: true,
376
- label: ( localize(15650, "Continue with GitHub Enterprise"))
369
+ label: ( localize(15955, "Continue with GitHub Enterprise"))
377
370
  }));
378
371
  this.stepDisposables.add(addDisposableListener(gheBtn, EventType.CLICK, () => {
379
372
  this._logAction("signIn", undefined, "github-enterprise");
@@ -383,20 +376,20 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
383
376
  const disclaimerCol = append(footer, $(".onboarding-a-signin-disclaimer-col"));
384
377
  const copilotDisclaimer = append(disclaimerCol, $(".onboarding-a-signin-disclaimer"));
385
378
  copilotDisclaimer.append(( localize(
386
- 15651,
379
+ 15956,
387
380
  "By signing in, you agree to {0}'s ",
388
381
  defaultChat.provider.default.name
389
382
  )));
390
- this._createInlineLink(copilotDisclaimer, ( localize(15652, "Terms")), defaultChat.termsStatementUrl);
391
- copilotDisclaimer.append(( localize(15653, " and ")));
392
- this._createInlineLink(copilotDisclaimer, ( localize(15654, "Privacy Statement")), defaultChat.privacyStatementUrl);
393
- copilotDisclaimer.append(( localize(15655, ". {0} Copilot may show ", defaultChat.provider.default.name)));
394
- this._createInlineLink(copilotDisclaimer, ( localize(15656, "public code")), defaultChat.publicCodeMatchesUrl);
395
- copilotDisclaimer.append(( localize(15657, " suggestions and use your data to improve the product.")));
383
+ this._createInlineLink(copilotDisclaimer, ( localize(15957, "Terms")), defaultChat.termsStatementUrl);
384
+ copilotDisclaimer.append(( localize(15958, " and ")));
385
+ this._createInlineLink(copilotDisclaimer, ( localize(15959, "Privacy Statement")), defaultChat.privacyStatementUrl);
386
+ copilotDisclaimer.append(( localize(15960, ". {0} Copilot may show ", defaultChat.provider.default.name)));
387
+ this._createInlineLink(copilotDisclaimer, ( localize(15961, "public code")), defaultChat.publicCodeMatchesUrl);
388
+ copilotDisclaimer.append(( localize(15962, " suggestions and use your data to improve the product.")));
396
389
  copilotDisclaimer.append(" ");
397
- copilotDisclaimer.append(( localize(15658, "You can change these ")));
398
- this._createInlineLink(copilotDisclaimer, ( localize(15659, "settings")), defaultChat.manageSettingsUrl);
399
- copilotDisclaimer.append(( localize(15660, " anytime.")));
390
+ copilotDisclaimer.append(( localize(15963, "You can change these ")));
391
+ this._createInlineLink(copilotDisclaimer, ( localize(15964, "settings")), defaultChat.manageSettingsUrl);
392
+ copilotDisclaimer.append(( localize(15965, " anytime.")));
400
393
  }
401
394
  _createSignInButton(parent, providerClass, label, options) {
402
395
  const isCompact = options?.iconOnly || options?.textOnly;
@@ -465,7 +458,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
465
458
  });
466
459
  this.notificationService.notify({
467
460
  severity: Severity.Error,
468
- message: ( localize(15661, "Sign-in failed. You can try again later from the Accounts menu."))
461
+ message: ( localize(15966, "Sign-in failed. You can try again later from the Accounts menu."))
469
462
  });
470
463
  }
471
464
  }
@@ -515,7 +508,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
515
508
  this.notificationService.notify({
516
509
  severity: Severity.Error,
517
510
  message: ( localize(
518
- 15662,
511
+ 15967,
519
512
  "GitHub Enterprise sign-in failed. Check your instance URL and try again."
520
513
  ))
521
514
  });
@@ -530,8 +523,8 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
530
523
  }
531
524
  let isSingleWord = false;
532
525
  const result = await this.quickInputService.input({
533
- prompt: ( localize(15663, "What is your {0} instance?", defaultChat.provider.enterprise.name)),
534
- placeHolder: ( localize(15664, "i.e. \"octocat\" or \"https://octocat.ghe.com\"...")),
526
+ prompt: ( localize(15968, "What is your {0} instance?", defaultChat.provider.enterprise.name)),
527
+ placeHolder: ( localize(15969, "i.e. \"octocat\" or \"https://octocat.ghe.com\"...")),
535
528
  ignoreFocusLost: true,
536
529
  value: uri,
537
530
  validateInput: async value => {
@@ -542,14 +535,14 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
542
535
  if (domainRegEx.test(value)) {
543
536
  isSingleWord = true;
544
537
  return {
545
- content: ( localize(15665, "Will resolve to {0}", `https://${value}.ghe.com`)),
538
+ content: ( localize(15970, "Will resolve to {0}", `https://${value}.ghe.com`)),
546
539
  severity: Severity.Info
547
540
  };
548
541
  }
549
542
  if (!fullUriRegEx.test(value)) {
550
543
  return {
551
544
  content: ( localize(
552
- 15666,
545
+ 15971,
553
546
  "You must enter a valid {0} instance (i.e. \"octocat\" or \"https://octocat.ghe.com\")",
554
547
  defaultChat.provider.enterprise.name
555
548
  )),
@@ -574,15 +567,15 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
574
567
  _renderPersonalizeStep(container) {
575
568
  const wrapper = append(container, $(".onboarding-a-personalize"));
576
569
  const themeLabel = append(wrapper, $("div.onboarding-a-section-label"));
577
- themeLabel.textContent = ( localize(15667, "Color Theme"));
570
+ themeLabel.textContent = ( localize(15972, "Color Theme"));
578
571
  const themeHint = append(wrapper, $("div.onboarding-a-theme-hint"));
579
572
  themeHint.textContent = ( localize(
580
- 15668,
573
+ 15973,
581
574
  "You can browse and install more themes later from the Extensions view."
582
575
  ));
583
576
  const themeGrid = append(wrapper, $(".onboarding-a-theme-grid"));
584
577
  themeGrid.setAttribute("role", "radiogroup");
585
- themeGrid.setAttribute("aria-label", ( localize(15669, "Choose a color theme")));
578
+ themeGrid.setAttribute("aria-label", ( localize(15974, "Choose a color theme")));
586
579
  const hasOtherEditors = this._hasOtherEditors();
587
580
  const allThemes = product.onboardingThemes ?? [];
588
581
  const themes = hasOtherEditors ? allThemes.filter(t => !t.id.startsWith("solarized")) : allThemes;
@@ -602,15 +595,15 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
602
595
  wrapper,
603
596
  $("div.onboarding-a-section-label.onboarding-a-section-label-keymap")
604
597
  );
605
- keymapLabel.textContent = ( localize(15670, "Keyboard Mapping"));
598
+ keymapLabel.textContent = ( localize(15975, "Keyboard Mapping"));
606
599
  const keymapHint = append(wrapper, $("div.onboarding-a-theme-hint"));
607
600
  keymapHint.textContent = ( localize(
608
- 15671,
601
+ 15976,
609
602
  "Coming from another editor? Import your keyboard mapping to feel right at home."
610
603
  ));
611
604
  const keymapList = append(wrapper, $(".onboarding-a-keymap-list"));
612
605
  keymapList.setAttribute("role", "radiogroup");
613
- keymapList.setAttribute("aria-label", ( localize(15672, "Choose a keyboard mapping")));
606
+ keymapList.setAttribute("aria-label", ( localize(15977, "Choose a keyboard mapping")));
614
607
  const keymapPills = [];
615
608
  for (const keymap of keymapOptions) {
616
609
  const pill = this._registerStepFocusable(append(keymapList, $("button.onboarding-a-keymap-pill")));
@@ -633,7 +626,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
633
626
  }
634
627
  pill.classList.add("selected");
635
628
  pill.setAttribute("aria-checked", "true");
636
- this.accessibilityService.alert(( localize(15673, "{0} keyboard mapping selected", keymap.label)));
629
+ this.accessibilityService.alert(( localize(15978, "{0} keyboard mapping selected", keymap.label)));
637
630
  }));
638
631
  }
639
632
  const selectedKeymapIndex = keymapOptions.findIndex(k => k.id === this.selectedKeymapId);
@@ -643,7 +636,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
643
636
  _renderPersonalizeSubtitle(container) {
644
637
  clearNode(container);
645
638
  const modifier = isMacintosh ? "Cmd" : "Ctrl";
646
- container.append(( localize(15674, "Tip: Press ")), this._createKbd(( localize(15675, "{0}", modifier))), "+", this._createKbd(( localize(15676, "Shift"))), "+", this._createKbd(( localize(15677, "P"))), ( localize(15678, " to access all VS Code commands.")));
639
+ container.append(( localize(15979, "Tip: Press ")), this._createKbd(( localize(15980, "{0}", modifier))), "+", this._createKbd(( localize(15981, "Shift"))), "+", this._createKbd(( localize(15982, "P"))), ( localize(15983, " to access all VS Code commands.")));
647
640
  }
648
641
  _createThemeCard(parent, theme, allCards) {
649
642
  const card = this._registerStepFocusable(append(parent, $("div.onboarding-a-theme-card")));
@@ -671,7 +664,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
671
664
  }
672
665
  card.classList.add("selected");
673
666
  card.setAttribute("aria-checked", "true");
674
- this.accessibilityService.alert(( localize(15679, "{0} theme selected", theme.label)));
667
+ this.accessibilityService.alert(( localize(15984, "{0} theme selected", theme.label)));
675
668
  }));
676
669
  this.stepDisposables.add(addDisposableListener(card, EventType.KEY_DOWN, e => {
677
670
  if (e.key === "Enter" || e.key === " ") {
@@ -708,7 +701,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
708
701
  this.notificationService.notify({
709
702
  severity: Severity.Warning,
710
703
  message: ( localize(
711
- 15680,
704
+ 15985,
712
705
  "Could not install {0} keymap. You can install it later from Extensions.",
713
706
  keymap.label
714
707
  ))
@@ -831,7 +824,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
831
824
  const wrapper = append(container, $(".onboarding-a-ai-pref"));
832
825
  const cards = append(wrapper, $(".onboarding-a-ai-pref-cards"));
833
826
  cards.setAttribute("role", "radiogroup");
834
- cards.setAttribute("aria-label", ( localize(15681, "Choose your AI collaboration style")));
827
+ cards.setAttribute("aria-label", ( localize(15986, "Choose your AI collaboration style")));
835
828
  const allCards = [];
836
829
  for (const option of ONBOARDING_AI_PREFERENCE_OPTIONS) {
837
830
  const card = this._registerStepFocusable(append(cards, $("button.onboarding-a-ai-pref-card")));
@@ -859,13 +852,13 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
859
852
  c.setAttribute("aria-checked", c.dataset.id === option.id ? "true" : "false");
860
853
  }
861
854
  this._applyAiPreference(option.id);
862
- this.accessibilityService.alert(( localize(15682, "{0} selected", option.label)));
855
+ this.accessibilityService.alert(( localize(15987, "{0} selected", option.label)));
863
856
  }));
864
857
  }
865
858
  const selectedAiIndex = ONBOARDING_AI_PREFERENCE_OPTIONS.findIndex(o => o.id === this.selectedAiMode);
866
859
  this._setupRadioGroupNavigation(allCards, Math.max(0, selectedAiIndex));
867
860
  const hint = append(wrapper, $("div.onboarding-a-ai-pref-hint"));
868
- hint.textContent = ( localize(15683, "You can change this anytime in Settings."));
861
+ hint.textContent = ( localize(15988, "You can change this anytime in Settings."));
869
862
  }
870
863
  _applyAiPreference(mode) {
871
864
  switch (mode) {
@@ -885,37 +878,43 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
885
878
  const keys = isMacintosh ?
886
879
  ["⌘", "⌃", "I"] : ["Ctrl", "Alt", "I"];
887
880
  const shortcut = ( keys.map(k => this._createKbd(k)));
888
- el.append(( localize(15684, "Tip: Press ")));
881
+ el.append(( localize(15989, "Open Chat anytime with ")));
889
882
  for (let i = 0; i < shortcut.length; i++) {
890
883
  if (i > 0) {
891
- el.append(" + ");
884
+ el.append("+");
892
885
  }
893
886
  el.append(shortcut[i]);
894
887
  }
895
- el.append(( localize(15685, " to open Chat")));
896
888
  }
897
889
  _renderAgentSessionsStep(container) {
898
890
  const wrapper = append(container, $(".onboarding-a-sessions"));
899
891
  const features = append(wrapper, $(".onboarding-a-sessions-features"));
900
- this._createFeatureCard(features, Codicon.deviceDesktop, ( localize(15686, "Local")), ( localize(
901
- 15687,
902
- "Run agents interactively in the editor with full access to your workspace, tools, and terminal. Best for hands-on work where you want to review changes as they happen."
892
+ const chatGroup = append(features, $(".onboarding-a-sessions-group"));
893
+ const chatLabel = append(chatGroup, $("div.onboarding-a-sessions-group-label"));
894
+ chatLabel.textContent = ( localize(15990, "Choose Your Agent"));
895
+ const chatGrid = append(chatGroup, $(".onboarding-a-sessions-grid.onboarding-a-sessions-grid-2"));
896
+ this._createFeatureCard(chatGrid, Codicon.listOrdered, ( localize(15991, "Plan")), ( localize(
897
+ 15992,
898
+ "Produce a structured implementation plan before any code changes, then hand it off to an implementation agent to execute."
899
+ )));
900
+ this._createFeatureCard(chatGrid, Codicon.commentDiscussion, ( localize(15993, "Agent")), ( localize(
901
+ 15994,
902
+ "Describe a goal. The agent plans the approach, edits files, runs commands, and self-corrects. You review and approve along the way."
903
903
  )));
904
- this._createFeatureCard(features, Codicon.cloud, ( localize(15688, "Cloud")), ( localize(
905
- 15689,
906
- "Delegate tasks to a cloud agent that creates a branch, implements changes, and opens a pull request. The agent continues working even if you close VS Code."
904
+ const moreGroup = append(features, $(".onboarding-a-sessions-group"));
905
+ const moreLabel = append(moreGroup, $("div.onboarding-a-sessions-group-label"));
906
+ moreLabel.textContent = ( localize(15995, "Agents That Work Your Way"));
907
+ const moreGrid = append(moreGroup, $(".onboarding-a-sessions-grid.onboarding-a-sessions-grid-2"));
908
+ this._createFeatureCard(moreGrid, Codicon.rocket, ( localize(15996, "Run Agents Anywhere")), ( localize(
909
+ 15997,
910
+ "Run agents locally for interactive work, in the background with Copilot CLI, or in the cloud with cloud agents that open a pull request your team can review."
907
911
  )));
908
- this._createFeatureCard(features, Codicon.worktree, ( localize(15690, "Copilot CLI")), ( localize(
909
- 15691,
910
- "Run agents autonomously in an isolated worktree on your machine. Work on something else while the agent builds, tests, and iterates in the background."
912
+ this._createFeatureCard(moreGrid, Codicon.settingsGear, ( localize(15998, "Customize Your Agents")), ( localize(
913
+ 15999,
914
+ "Tailor Copilot to your project with custom instructions and agents, skills, reusable prompts, and MCP servers that connect to the tools and context you rely on."
911
915
  )));
912
- const inlineDesc = this._createFeatureCard(features, Codicon.sparkle, ( localize(15692, "Inline Suggestions")));
913
- inlineDesc.append(( localize(
914
- 15693,
915
- "As you type, AI suggests completions and next edit predictions inline. Press "
916
- )), this._createKbd(( localize(15694, "Tab"))), ( localize(15695, " to accept or ")), this._createKbd(( localize(15696, "Esc"))), ( localize(15697, " to dismiss.")));
917
916
  const docsRow = append(wrapper, $(".onboarding-a-sessions-docs"));
918
- this._createDocLink(docsRow, ( localize(15698, "Agents tutorial")), "https://code.visualstudio.com/docs/copilot/agents/agents-tutorial", "agentsTutorial");
917
+ this._createDocLink(docsRow, ( localize(16000, "Agents tutorial")), "https://code.visualstudio.com/docs/copilot/agents/agents-tutorial", "agentsTutorial");
919
918
  }
920
919
  _createFeatureCard(parent, icon, title, description) {
921
920
  const card = this._registerStepFocusable(append(parent, $("div.onboarding-a-feature-card")));
@@ -1007,11 +1006,15 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
1007
1006
  }
1008
1007
  }
1009
1008
  _getFocusableElements() {
1010
- return [...this.stepFocusableElements, ...this.footerFocusableElements].filter(element => this._isTabbable(element));
1009
+ return [
1010
+ ...(this.closeButton ? [this.closeButton] : []),
1011
+ ...this.stepFocusableElements,
1012
+ ...this.footerFocusableElements
1013
+ ].filter(element => this._isTabbable(element));
1011
1014
  }
1012
1015
  _focusCurrentStepElement() {
1013
1016
  const stepFocusable = this.stepFocusableElements.find(element => this._isTabbable(element));
1014
- (stepFocusable ?? this.nextButton ?? this.skipButton)?.focus();
1017
+ (stepFocusable ?? this.nextButton ?? this.closeButton)?.focus();
1015
1018
  }
1016
1019
  _registerStepFocusable(element) {
1017
1020
  this.stepFocusableElements.push(element);
@@ -1052,7 +1055,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
1052
1055
  this.contentEl = undefined;
1053
1056
  this.backButton = undefined;
1054
1057
  this.nextButton = undefined;
1055
- this.skipButton = undefined;
1058
+ this.closeButton = undefined;
1056
1059
  this.footerLeft = undefined;
1057
1060
  this._footerSignInBtn = undefined;
1058
1061
  this.footerFocusableElements.length = 0;
@@ -13,7 +13,7 @@ registerAction2(class extends Action2 {
13
13
  constructor() {
14
14
  super({
15
15
  id: "workbench.action.welcomeOnboarding2026",
16
- title: ( localize2(15699, "Welcome Onboarding 2026")),
16
+ title: ( localize2(16001, "Welcome Onboarding 2026")),
17
17
  category: Categories.Developer,
18
18
  f1: true
19
19
  });
@@ -18,13 +18,13 @@ import { Extensions } from '@codingame/monaco-vscode-api/vscode/vs/workbench/com
18
18
  import { LifecyclePhase } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle';
19
19
 
20
20
  var NewFileTemplatesManager_1;
21
- const builtInSource = ( localize(15714, "Built-In"));
22
- const category = ( localize2(15715, "Create"));
21
+ const builtInSource = ( localize(16016, "Built-In"));
22
+ const category = ( localize2(16017, "Create"));
23
23
  registerAction2(class extends Action2 {
24
24
  constructor() {
25
25
  super({
26
26
  id: "welcome.showNewFileEntries",
27
- title: ( localize2(15716, "New File...")),
27
+ title: ( localize2(16018, "New File...")),
28
28
  category,
29
29
  f1: true,
30
30
  precondition: ( IsSessionsWindowContext.negate()),
@@ -108,8 +108,8 @@ let NewFileTemplatesManager = class NewFileTemplatesManager extends Disposable {
108
108
  const qp = this.quickInputService.createQuickPick({
109
109
  useSeparators: true
110
110
  });
111
- qp.title = ( localize(15717, "New File..."));
112
- qp.placeholder = ( localize(15718, "Select File Type or Enter File Name..."));
111
+ qp.title = ( localize(16019, "New File..."));
112
+ qp.placeholder = ( localize(16020, "Select File Type or Enter File Name..."));
113
113
  qp.sortByLabel = false;
114
114
  qp.matchOnDetail = true;
115
115
  qp.matchOnDescription = true;
@@ -136,8 +136,8 @@ let NewFileTemplatesManager = class NewFileTemplatesManager extends Disposable {
136
136
  return a.from.localeCompare(b.from);
137
137
  };
138
138
  const displayCategory = {
139
- "file": ( localize(15719, "File")),
140
- "notebook": ( localize(15720, "Notebook"))
139
+ "file": ( localize(16021, "File")),
140
+ "notebook": ( localize(16022, "Notebook"))
141
141
  };
142
142
  const refreshQp = entries => {
143
143
  const items = [];
@@ -159,7 +159,7 @@ let NewFileTemplatesManager = class NewFileTemplatesManager extends Disposable {
159
159
  keybinding,
160
160
  buttons: command ? [{
161
161
  iconClass: "codicon codicon-gear",
162
- tooltip: ( localize(15721, "Configure Keybinding"))
162
+ tooltip: ( localize(16023, "Configure Keybinding"))
163
163
  }] : [],
164
164
  detail: "",
165
165
  description: entry.from
@@ -181,7 +181,7 @@ let NewFileTemplatesManager = class NewFileTemplatesManager extends Disposable {
181
181
  viewType: undefined,
182
182
  fileName: val
183
183
  },
184
- title: ( localize(15722, "Create New File ({0})", val)),
184
+ title: ( localize(16024, "Create New File ({0})", val)),
185
185
  group: "file",
186
186
  from: builtInSource
187
187
  };
@@ -215,7 +215,7 @@ MenuRegistry.appendMenuItem(MenuId.NewFile, {
215
215
  group: "file",
216
216
  command: {
217
217
  id: "workbench.action.files.newUntitledFile",
218
- title: ( localize(15723, "Text File"))
218
+ title: ( localize(16025, "Text File"))
219
219
  },
220
220
  order: 1
221
221
  });
@@ -63,7 +63,7 @@ function parseGroupAndOrder(welcome, contribution) {
63
63
  if (welcome.group) {
64
64
  if (!isProposedApiEnabled(contribution.description)) {
65
65
  contribution.collector.warn(( localize(
66
- 15724,
66
+ 16026,
67
67
  "The viewsWelcome contribution in '{0}' requires 'enabledApiProposals: [\"contribViewsWelcome\"]' in order to use the 'group' proposed property.",
68
68
  contribution.description.identifier.value
69
69
  )));
@@ -20,12 +20,12 @@ const ViewIdentifierMap = {
20
20
  const viewsWelcomeExtensionPointSchema = ( Object.freeze({
21
21
  type: "array",
22
22
  description: ( localize(
23
- 15725,
23
+ 16027,
24
24
  "Contributed views welcome content. Welcome content will be rendered in tree based views whenever they have no meaningful content to display, ie. the File Explorer when no folder is open. Such content is useful as in-product documentation to drive users to use certain features before they are available. A good example would be a `Clone Repository` button in the File Explorer welcome view."
25
25
  )),
26
26
  items: {
27
27
  type: "object",
28
- description: ( localize(15726, "Contributed welcome content for a specific view.")),
28
+ description: ( localize(16028, "Contributed welcome content for a specific view.")),
29
29
  required: [
30
30
  ViewsWelcomeExtensionPointFields.view,
31
31
  ViewsWelcomeExtensionPointFields.contents
@@ -35,13 +35,13 @@ const viewsWelcomeExtensionPointSchema = ( Object.freeze({
35
35
  anyOf: [{
36
36
  type: "string",
37
37
  description: ( localize(
38
- 15727,
38
+ 16029,
39
39
  "Target view identifier for this welcome content. Only tree based views are supported."
40
40
  ))
41
41
  }, {
42
42
  type: "string",
43
43
  description: ( localize(
44
- 15727,
44
+ 16029,
45
45
  "Target view identifier for this welcome content. Only tree based views are supported."
46
46
  )),
47
47
  enum: ( Object.keys(ViewIdentifierMap))
@@ -50,22 +50,22 @@ const viewsWelcomeExtensionPointSchema = ( Object.freeze({
50
50
  [ViewsWelcomeExtensionPointFields.contents]: {
51
51
  type: "string",
52
52
  description: ( localize(
53
- 15728,
53
+ 16030,
54
54
  "Welcome content to be displayed. The format of the contents is a subset of Markdown, with support for links only."
55
55
  ))
56
56
  },
57
57
  [ViewsWelcomeExtensionPointFields.when]: {
58
58
  type: "string",
59
- description: ( localize(15729, "Condition when the welcome content should be displayed."))
59
+ description: ( localize(16031, "Condition when the welcome content should be displayed."))
60
60
  },
61
61
  [ViewsWelcomeExtensionPointFields.group]: {
62
62
  type: "string",
63
- description: ( localize(15730, "Group to which this welcome content belongs. Proposed API."))
63
+ description: ( localize(16032, "Group to which this welcome content belongs. Proposed API."))
64
64
  },
65
65
  [ViewsWelcomeExtensionPointFields.enablement]: {
66
66
  type: "string",
67
67
  description: ( localize(
68
- 15731,
68
+ 16033,
69
69
  "Condition when the welcome content buttons and command links should be enabled."
70
70
  ))
71
71
  }