@codingame/monaco-vscode-welcome-service-override 37.2.0 → 37.3.1
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/common.d.ts +2 -0
- package/common.js +15 -0
- package/index.js +3 -7
- package/package.json +11 -3
- package/session.d.ts +2 -0
- package/session.js +10 -0
- package/vscode/src/vs/workbench/contrib/onboarding/browser/onboarding.contribution.js +8 -8
- package/vscode/src/vs/workbench/contrib/onboarding/browser/onboardingService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/onboarding/browser/onboardingService.js +5 -5
- package/vscode/src/vs/workbench/contrib/onboarding/browser/sequence/sequencePresentation.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/onboarding/browser/sequence/sequencePresentation.js +2 -2
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/spotlightOverlay.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/spotlightOverlay.js +9 -9
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/spotlightPresentation.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/spotlightPresentation.js +7 -4
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingPresentation.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.js +21 -21
- package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/onboardingVariationA.js +55 -55
- package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/welcomeOnboarding.contribution.js +2 -2
- 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/vscode/src/vs/workbench/contrib/onboarding/browser/media/onboardingTarget.css +0 -28
- package/vscode/src/vs/workbench/contrib/onboarding/browser/sequence/runOnboardingStep.d.ts +0 -17
- package/vscode/src/vs/workbench/contrib/onboarding/browser/sequence/runOnboardingStep.js +0 -32
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/onboardingTarget.d.ts +0 -37
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/onboardingTarget.js +0 -29
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/spotlightTypes.d.ts +0 -67
- package/vscode/src/vs/workbench/contrib/onboarding/browser/spotlight/spotlightTypes.js +0 -5
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingRegistry.d.ts +0 -21
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingRegistry.js +0 -35
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingScenario.d.ts +0 -172
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingScenario.js +0 -20
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingScenarioService.d.ts +0 -48
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingScenarioService.js +0 -11
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingSequence.d.ts +0 -45
- package/vscode/src/vs/workbench/contrib/onboarding/common/onboardingSequence.js +0 -29
|
@@ -33,7 +33,7 @@ import product from '@codingame/monaco-vscode-api/vscode/vs/platform/product/com
|
|
|
33
33
|
import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
|
|
34
34
|
import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
|
|
35
35
|
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
36
|
-
import { ChatSetupStrategy } from '@codingame/monaco-vscode-
|
|
36
|
+
import { ChatSetupStrategy } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatSetup/chatSetup';
|
|
37
37
|
import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
|
|
38
38
|
import { IAccessibilityService } from '@codingame/monaco-vscode-api/vscode/vs/platform/accessibility/common/accessibility.service';
|
|
39
39
|
import { ONBOARDING_STEPS, AiCollaborationMode, OnboardingStepId, getOnboardingStepTitle, getOnboardingStepSubtitle, parseGheInstanceInput, GheParseResultKind, GHE_FULL_URI_REGEX, ONBOARDING_AI_PREFERENCE_OPTIONS } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/welcomeOnboarding/common/onboardingTypes';
|
|
@@ -116,11 +116,11 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
116
116
|
this.overlay = append(container, $(".onboarding-a-overlay"));
|
|
117
117
|
this.overlay.setAttribute("role", "dialog");
|
|
118
118
|
this.overlay.setAttribute("aria-modal", "true");
|
|
119
|
-
this.overlay.setAttribute("aria-label", ( localize(
|
|
119
|
+
this.overlay.setAttribute("aria-label", ( localize(21177, "Welcome to Visual Studio Code")));
|
|
120
120
|
this.card = append(this.overlay, $(".onboarding-a-card"));
|
|
121
121
|
this.closeButton = append(this.card, $("button.onboarding-a-close-btn"));
|
|
122
122
|
this.closeButton.type = "button";
|
|
123
|
-
this.closeButton.setAttribute("aria-label", ( localize(
|
|
123
|
+
this.closeButton.setAttribute("aria-label", ( localize(21178, "Close")));
|
|
124
124
|
this.closeButton.appendChild(renderIcon(Codicon.close));
|
|
125
125
|
const header = append(this.card, $(".onboarding-a-header"));
|
|
126
126
|
this.progressContainer = append(header, $(".onboarding-a-progress"));
|
|
@@ -136,7 +136,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
136
136
|
this.footerLeft = append(footer, $(".onboarding-a-footer-left"));
|
|
137
137
|
const footerRight = append(footer, $(".onboarding-a-footer-right"));
|
|
138
138
|
this.backButton = append(footerRight, $("button.onboarding-a-btn.onboarding-a-btn-secondary"));
|
|
139
|
-
this.backButton.textContent = ( localize(
|
|
139
|
+
this.backButton.textContent = ( localize(21179, "Back"));
|
|
140
140
|
this.backButton.type = "button";
|
|
141
141
|
this.footerFocusableElements.push(this.backButton);
|
|
142
142
|
this.nextButton = append(footerRight, $("button.onboarding-a-btn.onboarding-a-btn-primary"));
|
|
@@ -267,7 +267,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
this.progressContainer.appendChild(this.stepLabelEl);
|
|
270
|
-
this.stepLabelEl.textContent = ( localize(
|
|
270
|
+
this.stepLabelEl.textContent = ( localize(21180, "{0} of {1}", this.currentStepIndex + 1, this.steps.length));
|
|
271
271
|
}
|
|
272
272
|
_renderStep() {
|
|
273
273
|
if (!this.titleEl || !this.subtitleEl || !this.contentEl) {
|
|
@@ -298,7 +298,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
298
298
|
break;
|
|
299
299
|
}
|
|
300
300
|
this.bodyEl?.setAttribute("aria-label", ( localize(
|
|
301
|
-
|
|
301
|
+
21181,
|
|
302
302
|
"Step {0} of {1}: {2}",
|
|
303
303
|
this.currentStepIndex + 1,
|
|
304
304
|
this.steps.length,
|
|
@@ -314,17 +314,17 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
314
314
|
if (this.currentStepIndex === 0) {
|
|
315
315
|
if (this._userSignedIn) {
|
|
316
316
|
this.nextButton.className = "onboarding-a-btn onboarding-a-btn-primary";
|
|
317
|
-
this.nextButton.textContent = ( localize(
|
|
317
|
+
this.nextButton.textContent = ( localize(21182, "Continue"));
|
|
318
318
|
} else {
|
|
319
319
|
this.nextButton.className = "onboarding-a-btn onboarding-a-btn-secondary";
|
|
320
|
-
this.nextButton.textContent = ( localize(
|
|
320
|
+
this.nextButton.textContent = ( localize(21183, "Continue without Signing In"));
|
|
321
321
|
}
|
|
322
322
|
} else if (this._isLastStep()) {
|
|
323
323
|
this.nextButton.className = "onboarding-a-btn onboarding-a-btn-primary";
|
|
324
|
-
this.nextButton.textContent = ( localize(
|
|
324
|
+
this.nextButton.textContent = ( localize(21184, "Get Started"));
|
|
325
325
|
} else {
|
|
326
326
|
this.nextButton.className = "onboarding-a-btn onboarding-a-btn-primary";
|
|
327
|
-
this.nextButton.textContent = ( localize(
|
|
327
|
+
this.nextButton.textContent = ( localize(21185, "Continue"));
|
|
328
328
|
}
|
|
329
329
|
}
|
|
330
330
|
if (this.footerLeft) {
|
|
@@ -332,7 +332,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
332
332
|
if (!this._footerSignInBtn && !this._userSignedIn) {
|
|
333
333
|
this._footerSignInBtn = append(this.footerLeft, $("button.onboarding-a-signin-nudge-btn"));
|
|
334
334
|
this._footerSignInBtn.type = "button";
|
|
335
|
-
this._footerSignInBtn.textContent = ( localize(
|
|
335
|
+
this._footerSignInBtn.textContent = ( localize(21186, "Sign in to use GitHub Copilot"));
|
|
336
336
|
this.stepDisposables.add(
|
|
337
337
|
addDisposableListener(this._footerSignInBtn, EventType.CLICK, async () => {
|
|
338
338
|
this._logAction("signInNudge");
|
|
@@ -360,9 +360,9 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
360
360
|
const content = append(wrapper, $(".onboarding-a-signin-content"));
|
|
361
361
|
const contentMain = append(content, $(".onboarding-a-signin-content-main"));
|
|
362
362
|
const title = append(contentMain, $("h2.onboarding-a-signin-title"));
|
|
363
|
-
title.textContent = ( localize(
|
|
363
|
+
title.textContent = ( localize(21187, "Welcome to VS Code"));
|
|
364
364
|
const subtitle = append(contentMain, $("p.onboarding-a-signin-subtitle"));
|
|
365
|
-
subtitle.textContent = ( localize(
|
|
365
|
+
subtitle.textContent = ( localize(21188, "Sign in to use GitHub Copilot."));
|
|
366
366
|
const actions = append(contentMain, $(".onboarding-a-signin-actions"));
|
|
367
367
|
if (this._userSignedIn) {
|
|
368
368
|
const signedIn = append(actions, $(".onboarding-a-signin-confirmation"));
|
|
@@ -370,7 +370,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
370
370
|
icon.classList.add(...ThemeIcon.asClassNameArray(Codicon.check));
|
|
371
371
|
icon.setAttribute("aria-hidden", "true");
|
|
372
372
|
const text = append(signedIn, $("span"));
|
|
373
|
-
text.textContent = ( localize(
|
|
373
|
+
text.textContent = ( localize(21189, "You're signed in. You can continue to the next step."));
|
|
374
374
|
} else {
|
|
375
375
|
switch (this.enterpriseSignInUiState) {
|
|
376
376
|
case "instance":
|
|
@@ -388,49 +388,49 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
388
388
|
const disclaimerCol = append(footer, $(".onboarding-a-signin-disclaimer-col"));
|
|
389
389
|
const copilotDisclaimer = append(disclaimerCol, $(".onboarding-a-signin-disclaimer"));
|
|
390
390
|
copilotDisclaimer.append(( localize(
|
|
391
|
-
|
|
391
|
+
21190,
|
|
392
392
|
"By signing in, you agree to {0}'s ",
|
|
393
393
|
defaultChat.provider.default.name
|
|
394
394
|
)));
|
|
395
|
-
this._createInlineLink(copilotDisclaimer, ( localize(
|
|
396
|
-
copilotDisclaimer.append(( localize(
|
|
397
|
-
this._createInlineLink(copilotDisclaimer, ( localize(
|
|
398
|
-
copilotDisclaimer.append(( localize(
|
|
399
|
-
this._createInlineLink(copilotDisclaimer, ( localize(
|
|
400
|
-
copilotDisclaimer.append(( localize(
|
|
395
|
+
this._createInlineLink(copilotDisclaimer, ( localize(21191, "Terms")), defaultChat.termsStatementUrl);
|
|
396
|
+
copilotDisclaimer.append(( localize(21192, " and ")));
|
|
397
|
+
this._createInlineLink(copilotDisclaimer, ( localize(21193, "Privacy Statement")), defaultChat.privacyStatementUrl);
|
|
398
|
+
copilotDisclaimer.append(( localize(21194, ". {0} Copilot may show ", defaultChat.provider.default.name)));
|
|
399
|
+
this._createInlineLink(copilotDisclaimer, ( localize(21195, "public code")), defaultChat.publicCodeMatchesUrl);
|
|
400
|
+
copilotDisclaimer.append(( localize(21196, " suggestions and use your data to improve the product.")));
|
|
401
401
|
copilotDisclaimer.append(" ");
|
|
402
|
-
copilotDisclaimer.append(( localize(
|
|
403
|
-
this._createInlineLink(copilotDisclaimer, ( localize(
|
|
404
|
-
copilotDisclaimer.append(( localize(
|
|
402
|
+
copilotDisclaimer.append(( localize(21197, "You can change these ")));
|
|
403
|
+
this._createInlineLink(copilotDisclaimer, ( localize(21198, "settings")), this.defaultAccountService.resolveGitHubUrl(GitHubPaths.copilotSettings));
|
|
404
|
+
copilotDisclaimer.append(( localize(21199, " anytime.")));
|
|
405
405
|
}
|
|
406
406
|
_renderDefaultSignInActions(actions) {
|
|
407
|
-
const githubBtn = this._registerStepFocusable(this._createSignInButton(actions, "github", ( localize(
|
|
407
|
+
const githubBtn = this._registerStepFocusable(this._createSignInButton(actions, "github", ( localize(21200, "Continue with GitHub")), {
|
|
408
408
|
emphasized: true,
|
|
409
|
-
label: ( localize(
|
|
409
|
+
label: ( localize(21201, "Continue with GitHub"))
|
|
410
410
|
}));
|
|
411
411
|
this.stepDisposables.add(addDisposableListener(githubBtn, EventType.CLICK, () => {
|
|
412
412
|
this._logAction("signIn", undefined, "github");
|
|
413
413
|
this._handleSignIn();
|
|
414
414
|
}));
|
|
415
|
-
const googleBtn = this._registerStepFocusable(this._createSignInButton(actions, "google", ( localize(
|
|
415
|
+
const googleBtn = this._registerStepFocusable(this._createSignInButton(actions, "google", ( localize(21202, "Continue with Google")), {
|
|
416
416
|
iconOnly: true,
|
|
417
|
-
label: ( localize(
|
|
417
|
+
label: ( localize(21202, "Continue with Google"))
|
|
418
418
|
}));
|
|
419
419
|
this.stepDisposables.add(addDisposableListener(googleBtn, EventType.CLICK, () => {
|
|
420
420
|
this._logAction("signIn", undefined, "google");
|
|
421
421
|
this._handleSignIn("google");
|
|
422
422
|
}));
|
|
423
|
-
const appleBtn = this._registerStepFocusable(this._createSignInButton(actions, "apple", ( localize(
|
|
423
|
+
const appleBtn = this._registerStepFocusable(this._createSignInButton(actions, "apple", ( localize(21203, "Continue with Apple")), {
|
|
424
424
|
iconOnly: true,
|
|
425
|
-
label: ( localize(
|
|
425
|
+
label: ( localize(21203, "Continue with Apple"))
|
|
426
426
|
}));
|
|
427
427
|
this.stepDisposables.add(addDisposableListener(appleBtn, EventType.CLICK, () => {
|
|
428
428
|
this._logAction("signIn", undefined, "apple");
|
|
429
429
|
this._handleSignIn("apple");
|
|
430
430
|
}));
|
|
431
|
-
const gheBtn = this._registerStepFocusable(this._createSignInButton(actions, "github-enterprise", ( localize(
|
|
431
|
+
const gheBtn = this._registerStepFocusable(this._createSignInButton(actions, "github-enterprise", ( localize(21204, "GHE")), {
|
|
432
432
|
textOnly: true,
|
|
433
|
-
label: ( localize(
|
|
433
|
+
label: ( localize(21205, "Continue with GitHub Enterprise"))
|
|
434
434
|
}));
|
|
435
435
|
this.stepDisposables.add(addDisposableListener(gheBtn, EventType.CLICK, () => {
|
|
436
436
|
this._logAction("signIn", undefined, "github-enterprise");
|
|
@@ -443,9 +443,9 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
443
443
|
_renderEnterpriseInstanceForm(actions) {
|
|
444
444
|
const enterprisePromptLabel = this._getEnterpriseInstancePromptLabel();
|
|
445
445
|
const container = append(actions, $(".onboarding-a-signin-ghe-input"));
|
|
446
|
-
const submitAction = this.stepDisposables.add(( new Action("onboarding.signIn.enterprise.submit", ( localize(
|
|
446
|
+
const submitAction = this.stepDisposables.add(( new Action("onboarding.signIn.enterprise.submit", ( localize(21206, "Continue")), ThemeIcon.asClassName(Codicon.arrowRight), false)));
|
|
447
447
|
const inputBox = this.stepDisposables.add(( new InputBox(container, undefined, {
|
|
448
|
-
placeholder: ( localize(
|
|
448
|
+
placeholder: ( localize(21207, "i.e. \"octocat\" or \"https://octocat.ghe.com\"...")),
|
|
449
449
|
ariaLabel: enterprisePromptLabel,
|
|
450
450
|
actions: [submitAction],
|
|
451
451
|
inputBoxStyles: defaultInputBoxStyles
|
|
@@ -475,7 +475,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
475
475
|
return false;
|
|
476
476
|
case GheParseResultKind.SingleWord:
|
|
477
477
|
message.classList.add("info");
|
|
478
|
-
message.textContent = ( localize(
|
|
478
|
+
message.textContent = ( localize(21208, "Will resolve to {0}", result.resolvedUri));
|
|
479
479
|
submitAction.enabled = true;
|
|
480
480
|
return true;
|
|
481
481
|
case GheParseResultKind.FullUri:
|
|
@@ -486,7 +486,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
486
486
|
inputBox.element.classList.add("error");
|
|
487
487
|
message.classList.add("error");
|
|
488
488
|
message.textContent = ( localize(
|
|
489
|
-
|
|
489
|
+
21209,
|
|
490
490
|
"You must enter a valid {0} instance (i.e. \"octocat\" or \"https://octocat.ghe.com\")",
|
|
491
491
|
defaultChat.provider.enterprise.name
|
|
492
492
|
));
|
|
@@ -522,13 +522,13 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
522
522
|
spinner.setAttribute("aria-hidden", "true");
|
|
523
523
|
const message = append(container, $(".onboarding-a-signin-ghe-progress-message"));
|
|
524
524
|
message.textContent = ( localize(
|
|
525
|
-
|
|
525
|
+
21210,
|
|
526
526
|
"Waiting for {0} sign-in to complete...",
|
|
527
527
|
defaultChat.provider.enterprise.name
|
|
528
528
|
));
|
|
529
529
|
}
|
|
530
530
|
_getEnterpriseInstancePromptLabel() {
|
|
531
|
-
return localize(
|
|
531
|
+
return localize(21211, "What is your {0} instance?", defaultChat.provider.enterprise.name);
|
|
532
532
|
}
|
|
533
533
|
_setEnterpriseSignInUiState(state) {
|
|
534
534
|
this.enterpriseSignInUiState = state;
|
|
@@ -605,7 +605,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
605
605
|
});
|
|
606
606
|
this.notificationService.notify({
|
|
607
607
|
severity: Severity.Error,
|
|
608
|
-
message: ( localize(
|
|
608
|
+
message: ( localize(21212, "Sign-in failed. You can try again later from the Accounts menu."))
|
|
609
609
|
});
|
|
610
610
|
}
|
|
611
611
|
}
|
|
@@ -679,7 +679,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
679
679
|
this.notificationService.notify({
|
|
680
680
|
severity: Severity.Error,
|
|
681
681
|
message: ( localize(
|
|
682
|
-
|
|
682
|
+
21213,
|
|
683
683
|
"GitHub Enterprise sign-in failed. Check your instance URL and try again."
|
|
684
684
|
))
|
|
685
685
|
});
|
|
@@ -687,15 +687,15 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
687
687
|
_renderPersonalizeStep(container) {
|
|
688
688
|
const wrapper = append(container, $(".onboarding-a-personalize"));
|
|
689
689
|
const themeLabel = append(wrapper, $("div.onboarding-a-section-label"));
|
|
690
|
-
themeLabel.textContent = ( localize(
|
|
690
|
+
themeLabel.textContent = ( localize(21214, "Color Theme"));
|
|
691
691
|
const themeHint = append(wrapper, $("div.onboarding-a-theme-hint"));
|
|
692
692
|
themeHint.textContent = ( localize(
|
|
693
|
-
|
|
693
|
+
21215,
|
|
694
694
|
"You can browse and install more themes later from the Extensions view."
|
|
695
695
|
));
|
|
696
696
|
const themeGrid = append(wrapper, $(".onboarding-a-theme-grid"));
|
|
697
697
|
themeGrid.setAttribute("role", "radiogroup");
|
|
698
|
-
themeGrid.setAttribute("aria-label", ( localize(
|
|
698
|
+
themeGrid.setAttribute("aria-label", ( localize(21216, "Choose a color theme")));
|
|
699
699
|
const hasOtherEditors = this._hasOtherEditors();
|
|
700
700
|
const allThemes = product.onboardingThemes ?? [];
|
|
701
701
|
const themes = hasOtherEditors ? allThemes.filter(t => !t.id.startsWith("solarized")) : allThemes;
|
|
@@ -715,15 +715,15 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
715
715
|
wrapper,
|
|
716
716
|
$("div.onboarding-a-section-label.onboarding-a-section-label-keymap")
|
|
717
717
|
);
|
|
718
|
-
keymapLabel.textContent = ( localize(
|
|
718
|
+
keymapLabel.textContent = ( localize(21217, "Keyboard Mapping"));
|
|
719
719
|
const keymapHint = append(wrapper, $("div.onboarding-a-theme-hint"));
|
|
720
720
|
keymapHint.textContent = ( localize(
|
|
721
|
-
|
|
721
|
+
21218,
|
|
722
722
|
"Coming from another editor? Import your keyboard mapping to feel right at home."
|
|
723
723
|
));
|
|
724
724
|
const keymapList = append(wrapper, $(".onboarding-a-keymap-list"));
|
|
725
725
|
keymapList.setAttribute("role", "radiogroup");
|
|
726
|
-
keymapList.setAttribute("aria-label", ( localize(
|
|
726
|
+
keymapList.setAttribute("aria-label", ( localize(21219, "Choose a keyboard mapping")));
|
|
727
727
|
const keymapPills = [];
|
|
728
728
|
for (const keymap of keymapOptions) {
|
|
729
729
|
const pill = this._registerStepFocusable(append(keymapList, $("button.onboarding-a-keymap-pill")));
|
|
@@ -746,7 +746,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
746
746
|
}
|
|
747
747
|
pill.classList.add("selected");
|
|
748
748
|
pill.setAttribute("aria-checked", "true");
|
|
749
|
-
this.accessibilityService.alert(( localize(
|
|
749
|
+
this.accessibilityService.alert(( localize(21220, "{0} keyboard mapping selected", keymap.label)));
|
|
750
750
|
}));
|
|
751
751
|
}
|
|
752
752
|
const selectedKeymapIndex = keymapOptions.findIndex(k => k.id === this.selectedKeymapId);
|
|
@@ -756,7 +756,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
756
756
|
_renderPersonalizeSubtitle(container) {
|
|
757
757
|
clearNode(container);
|
|
758
758
|
const modifier = isMacintosh ? "Cmd" : "Ctrl";
|
|
759
|
-
container.append(( localize(
|
|
759
|
+
container.append(( localize(21221, "Tip: Press ")), this._createKbd(( localize(21222, "{0}", modifier))), "+", this._createKbd(( localize(21223, "Shift"))), "+", this._createKbd(( localize(21224, "P"))), ( localize(21225, " to access all VS Code commands.")));
|
|
760
760
|
}
|
|
761
761
|
_createThemeCard(parent, theme, allCards) {
|
|
762
762
|
const card = this._registerStepFocusable(append(parent, $("div.onboarding-a-theme-card")));
|
|
@@ -784,7 +784,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
784
784
|
}
|
|
785
785
|
card.classList.add("selected");
|
|
786
786
|
card.setAttribute("aria-checked", "true");
|
|
787
|
-
this.accessibilityService.alert(( localize(
|
|
787
|
+
this.accessibilityService.alert(( localize(21226, "{0} theme selected", theme.label)));
|
|
788
788
|
}));
|
|
789
789
|
this.stepDisposables.add(addDisposableListener(card, EventType.KEY_DOWN, e => {
|
|
790
790
|
if (e.key === "Enter" || e.key === " ") {
|
|
@@ -821,7 +821,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
821
821
|
this.notificationService.notify({
|
|
822
822
|
severity: Severity.Warning,
|
|
823
823
|
message: ( localize(
|
|
824
|
-
|
|
824
|
+
21227,
|
|
825
825
|
"Could not install {0} keymap. You can install it later from Extensions.",
|
|
826
826
|
keymap.label
|
|
827
827
|
))
|
|
@@ -928,7 +928,7 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
928
928
|
]
|
|
929
929
|
});
|
|
930
930
|
}
|
|
931
|
-
await Promise.all(
|
|
931
|
+
await Promise.all(checks.map(async check => {
|
|
932
932
|
for (const path of check.paths) {
|
|
933
933
|
try {
|
|
934
934
|
if (await this.fileService.exists(path)) {
|
|
@@ -937,14 +937,14 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
937
937
|
}
|
|
938
938
|
} catch {}
|
|
939
939
|
}
|
|
940
|
-
}))
|
|
940
|
+
}));
|
|
941
941
|
return detected;
|
|
942
942
|
}
|
|
943
943
|
_renderAiPreferenceStep(container) {
|
|
944
944
|
const wrapper = append(container, $(".onboarding-a-ai-pref"));
|
|
945
945
|
const cards = append(wrapper, $(".onboarding-a-ai-pref-cards"));
|
|
946
946
|
cards.setAttribute("role", "radiogroup");
|
|
947
|
-
cards.setAttribute("aria-label", ( localize(
|
|
947
|
+
cards.setAttribute("aria-label", ( localize(21228, "Choose your AI collaboration style")));
|
|
948
948
|
const allCards = [];
|
|
949
949
|
for (const option of ONBOARDING_AI_PREFERENCE_OPTIONS) {
|
|
950
950
|
const card = this._registerStepFocusable(append(cards, $("button.onboarding-a-ai-pref-card")));
|
|
@@ -972,13 +972,13 @@ let OnboardingVariationA = class OnboardingVariationA extends Disposable {
|
|
|
972
972
|
c.setAttribute("aria-checked", c.dataset.id === option.id ? "true" : "false");
|
|
973
973
|
}
|
|
974
974
|
this._applyAiPreference(option.id);
|
|
975
|
-
this.accessibilityService.alert(( localize(
|
|
975
|
+
this.accessibilityService.alert(( localize(21229, "{0} selected", option.label)));
|
|
976
976
|
}));
|
|
977
977
|
}
|
|
978
978
|
const selectedAiIndex = ONBOARDING_AI_PREFERENCE_OPTIONS.findIndex(o => o.id === this.selectedAiMode);
|
|
979
979
|
this._setupRadioGroupNavigation(allCards, Math.max(0, selectedAiIndex));
|
|
980
980
|
const hint = append(wrapper, $("div.onboarding-a-ai-pref-hint"));
|
|
981
|
-
hint.textContent = ( localize(
|
|
981
|
+
hint.textContent = ( localize(21230, "You can change this anytime in Settings."));
|
|
982
982
|
}
|
|
983
983
|
_applyAiPreference(mode) {
|
|
984
984
|
switch (mode) {
|
package/vscode/src/vs/workbench/contrib/welcomeOnboarding/browser/welcomeOnboarding.contribution.js
CHANGED
|
@@ -8,12 +8,12 @@ import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/ext
|
|
|
8
8
|
import { IOnboardingService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/welcomeOnboarding/common/onboardingService.service';
|
|
9
9
|
import './onboardingVariationA.js';
|
|
10
10
|
|
|
11
|
-
registerCss(variationA);
|
|
11
|
+
registerCss(variationA, 1);
|
|
12
12
|
registerAction2(class extends Action2 {
|
|
13
13
|
constructor() {
|
|
14
14
|
super({
|
|
15
15
|
id: "workbench.action.welcomeOnboarding2026",
|
|
16
|
-
title: ( localize2(
|
|
16
|
+
title: ( localize2(21231, "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(21244, "Built-In"));
|
|
22
|
+
const category = ( localize2(21245, "Create"));
|
|
23
23
|
registerAction2(class extends Action2 {
|
|
24
24
|
constructor() {
|
|
25
25
|
super({
|
|
26
26
|
id: "welcome.showNewFileEntries",
|
|
27
|
-
title: ( localize2(
|
|
27
|
+
title: ( localize2(21246, "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(21247, "New File..."));
|
|
112
|
+
qp.placeholder = ( localize(21248, "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(21249, "File")),
|
|
140
|
+
"notebook": ( localize(21250, "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(21251, "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(21252, "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(21253, "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, "contribViewsWelcome")) {
|
|
65
65
|
contribution.collector.warn(( localize(
|
|
66
|
-
|
|
66
|
+
21254,
|
|
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
|
+
21255,
|
|
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(21256, "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
|
+
21257,
|
|
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
|
+
21257,
|
|
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
|
+
21258,
|
|
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(21259, "Condition when the welcome content should be displayed."))
|
|
60
60
|
},
|
|
61
61
|
[ViewsWelcomeExtensionPointFields.group]: {
|
|
62
62
|
type: "string",
|
|
63
|
-
description: ( localize(
|
|
63
|
+
description: ( localize(21260, "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
|
+
21261,
|
|
69
69
|
"Condition when the welcome content buttons and command links should be enabled."
|
|
70
70
|
))
|
|
71
71
|
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
|
|
6
|
-
.onboarding-target-pulse {
|
|
7
|
-
animation: onboarding-target-pulse 1.4s ease-out infinite;
|
|
8
|
-
outline: var(--vscode-strokeThickness) solid var(--vscode-focusBorder);
|
|
9
|
-
outline-offset: 2px;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
@media (prefers-reduced-motion: reduce) {
|
|
13
|
-
.onboarding-target-pulse {
|
|
14
|
-
animation: none;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@keyframes onboarding-target-pulse {
|
|
19
|
-
0% {
|
|
20
|
-
box-shadow: 0 0 0 0 var(--vscode-focusBorder);
|
|
21
|
-
}
|
|
22
|
-
70% {
|
|
23
|
-
box-shadow: 0 0 0 6px transparent;
|
|
24
|
-
}
|
|
25
|
-
100% {
|
|
26
|
-
box-shadow: 0 0 0 0 transparent;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
|
|
2
|
-
import { IOnboardingSequenceStep, IOnboardingSequenceStepContext, IOnboardingSequenceStepPresentation, IOnboardingSequenceStepResult } from "../../common/onboardingSequence.js";
|
|
3
|
-
export declare const RUN_ONBOARDING_STEP_KIND = "run";
|
|
4
|
-
export interface IRunOnboardingStepResult {
|
|
5
|
-
readonly shown?: boolean;
|
|
6
|
-
}
|
|
7
|
-
/** Callback payload for a cancellable non-visual sequence step. */
|
|
8
|
-
export interface IRunOnboardingStepPayload {
|
|
9
|
-
readonly run: (token: CancellationToken) => Promise<IRunOnboardingStepResult | void> | IRunOnboardingStepResult | void;
|
|
10
|
-
}
|
|
11
|
-
/** Executes a run-step callback once and continues after reported errors. */
|
|
12
|
-
export declare class RunOnboardingStepPresentation implements IOnboardingSequenceStepPresentation {
|
|
13
|
-
readonly kind = "run";
|
|
14
|
-
readonly countsAsVisualStep = false;
|
|
15
|
-
readonly runOnce = true;
|
|
16
|
-
runStep(step: IOnboardingSequenceStep, context: IOnboardingSequenceStepContext): Promise<IOnboardingSequenceStepResult>;
|
|
17
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { raceCancellation } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
3
|
-
import { onUnexpectedError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
4
|
-
|
|
5
|
-
const RUN_ONBOARDING_STEP_KIND = 'run';
|
|
6
|
-
class RunOnboardingStepPresentation {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.kind = RUN_ONBOARDING_STEP_KIND;
|
|
9
|
-
this.countsAsVisualStep = false;
|
|
10
|
-
this.runOnce = true;
|
|
11
|
-
}
|
|
12
|
-
async runStep(step, context) {
|
|
13
|
-
if (context.cancellationToken.isCancellationRequested) {
|
|
14
|
-
return { action: 'abort', shown: false };
|
|
15
|
-
}
|
|
16
|
-
let result = undefined;
|
|
17
|
-
try {
|
|
18
|
-
const payload = step.payload;
|
|
19
|
-
result = await raceCancellation(Promise.resolve(payload.run(context.cancellationToken)), context.cancellationToken);
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
if (!context.cancellationToken.isCancellationRequested) {
|
|
23
|
-
onUnexpectedError(error);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return context.cancellationToken.isCancellationRequested
|
|
27
|
-
? { action: 'abort', shown: false }
|
|
28
|
-
: { action: 'next', shown: result?.shown === true };
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export { RUN_ONBOARDING_STEP_KIND, RunOnboardingStepPresentation };
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { IDisposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
2
|
-
/**
|
|
3
|
-
* Attribute used to mark a DOM element as an onboarding spotlight target.
|
|
4
|
-
*
|
|
5
|
-
* Components opt in by tagging their *own* element with this attribute. Tours
|
|
6
|
-
* reference the id; they never reach into another component's markup or CSS
|
|
7
|
-
* classes to locate a target (see the sessions "DOM Traversal & Intent" rule).
|
|
8
|
-
*/
|
|
9
|
-
export declare const ONBOARDING_TARGET_ATTR = "data-onboarding-id";
|
|
10
|
-
export declare const ONBOARDING_TARGET_PULSE_CLASS = "onboarding-target-pulse";
|
|
11
|
-
export interface IOnboardingTargetOptions {
|
|
12
|
-
/** Opens or expands the target before its spotlight step is shown. */
|
|
13
|
-
readonly open?: () => Promise<void> | void;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Marks `element` as the onboarding target identified by `id`.
|
|
17
|
-
*
|
|
18
|
-
* @returns A disposable that removes the attribute again.
|
|
19
|
-
*/
|
|
20
|
-
export declare function markOnboardingTarget(element: HTMLElement, id: string, options?: IOnboardingTargetOptions): IDisposable;
|
|
21
|
-
/** Opens or expands a target through the behavior registered by its owner. */
|
|
22
|
-
export declare function openOnboardingTarget(element: HTMLElement): Promise<void> | void;
|
|
23
|
-
/**
|
|
24
|
-
* Applies the standard onboarding pulse treatment to `element`.
|
|
25
|
-
*
|
|
26
|
-
* @returns A disposable that removes the pulse again.
|
|
27
|
-
*/
|
|
28
|
-
export declare function pulseOnboardingTarget(element: HTMLElement): IDisposable;
|
|
29
|
-
/**
|
|
30
|
-
* Resolves the element marked with the given onboarding target id within the
|
|
31
|
-
* provided window's document. Returns `undefined` if no such element exists
|
|
32
|
-
* (e.g. the feature is not currently rendered).
|
|
33
|
-
*
|
|
34
|
-
* This is the *only* place onboarding queries the DOM, and it matches solely on
|
|
35
|
-
* the onboarding attribute — never on foreign classes or structure.
|
|
36
|
-
*/
|
|
37
|
-
export declare function findOnboardingTarget(targetWindow: Window, id: string): HTMLElement | undefined;
|