@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 +2 -2
- package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/media/variationA.css +57 -4
- package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/onboardingVariationA.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/onboardingVariationA.js +84 -81
- package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/welcomeOnboarding.contribution.js +1 -1
- package/vscode/src/vs/workbench/contrib/welcomeViews/common/newFile.contribution.js +10 -10
- package/vscode/src/vs/workbench/contrib/welcomeViews/common/viewsWelcomeContribution.js +1 -1
- package/vscode/src/vs/workbench/contrib/welcomeViews/common/viewsWelcomeExtensionPoint.js +8 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-welcome-service-override",
|
|
3
|
-
"version": "
|
|
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": "
|
|
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
|
-
|
|
699
|
-
|
|
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-
|
|
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
|
|
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(
|
|
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(
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
303
|
+
this.nextButton.textContent = ( localize(15946, "Continue"));
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
|
-
if (this.
|
|
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(
|
|
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(
|
|
339
|
+
title.textContent = ( localize(15948, "Welcome to VS Code"));
|
|
347
340
|
const subtitle = append(contentMain, $("p.onboarding-a-signin-subtitle"));
|
|
348
|
-
subtitle.textContent = ( localize(
|
|
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(
|
|
343
|
+
const githubBtn = this._registerStepFocusable(this._createSignInButton(actions, "github", ( localize(15950, "Continue with GitHub")), {
|
|
351
344
|
emphasized: true,
|
|
352
|
-
label: ( localize(
|
|
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(
|
|
351
|
+
const googleBtn = this._registerStepFocusable(this._createSignInButton(actions, "google", ( localize(15952, "Continue with Google")), {
|
|
359
352
|
iconOnly: true,
|
|
360
|
-
label: ( localize(
|
|
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(
|
|
359
|
+
const appleBtn = this._registerStepFocusable(this._createSignInButton(actions, "apple", ( localize(15953, "Continue with Apple")), {
|
|
367
360
|
iconOnly: true,
|
|
368
|
-
label: ( localize(
|
|
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(
|
|
367
|
+
const gheBtn = this._registerStepFocusable(this._createSignInButton(actions, "github-enterprise", ( localize(15954, "GHE")), {
|
|
375
368
|
textOnly: true,
|
|
376
|
-
label: ( localize(
|
|
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
|
-
|
|
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(
|
|
391
|
-
copilotDisclaimer.append(( localize(
|
|
392
|
-
this._createInlineLink(copilotDisclaimer, ( localize(
|
|
393
|
-
copilotDisclaimer.append(( localize(
|
|
394
|
-
this._createInlineLink(copilotDisclaimer, ( localize(
|
|
395
|
-
copilotDisclaimer.append(( localize(
|
|
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(
|
|
398
|
-
this._createInlineLink(copilotDisclaimer, ( localize(
|
|
399
|
-
copilotDisclaimer.append(( localize(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
534
|
-
placeHolder: ( localize(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
570
|
+
themeLabel.textContent = ( localize(15972, "Color Theme"));
|
|
578
571
|
const themeHint = append(wrapper, $("div.onboarding-a-theme-hint"));
|
|
579
572
|
themeHint.textContent = ( localize(
|
|
580
|
-
|
|
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(
|
|
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(
|
|
598
|
+
keymapLabel.textContent = ( localize(15975, "Keyboard Mapping"));
|
|
606
599
|
const keymapHint = append(wrapper, $("div.onboarding-a-theme-hint"));
|
|
607
600
|
keymapHint.textContent = ( localize(
|
|
608
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
901
|
-
|
|
902
|
-
|
|
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
|
-
|
|
905
|
-
|
|
906
|
-
|
|
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(
|
|
909
|
-
|
|
910
|
-
"
|
|
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(
|
|
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 [
|
|
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.
|
|
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.
|
|
1058
|
+
this.closeButton = undefined;
|
|
1056
1059
|
this.footerLeft = undefined;
|
|
1057
1060
|
this._footerSignInBtn = undefined;
|
|
1058
1061
|
this.footerFocusableElements.length = 0;
|
package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/welcomeOnboarding.contribution.js
CHANGED
|
@@ -13,7 +13,7 @@ registerAction2(class extends Action2 {
|
|
|
13
13
|
constructor() {
|
|
14
14
|
super({
|
|
15
15
|
id: "workbench.action.welcomeOnboarding2026",
|
|
16
|
-
title: ( localize2(
|
|
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(
|
|
22
|
-
const category = ( localize2(
|
|
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(
|
|
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(
|
|
112
|
-
qp.placeholder = ( localize(
|
|
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(
|
|
140
|
-
"notebook": ( localize(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
68
|
+
16033,
|
|
69
69
|
"Condition when the welcome content buttons and command links should be enabled."
|
|
70
70
|
))
|
|
71
71
|
}
|