WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
2a55368
Adds welcome page webview for first-time installs
sergeibbb Dec 1, 2025
0f225f6
Layout of the header of the welcome page
sergeibbb Dec 2, 2025
5329333
Add interactive features carousel to Welcome view
sergeibbb Dec 4, 2025
56741fb
Makes header of the welcome page responsive to the panel width
sergeibbb Dec 4, 2025
684e5be
Refines features carousel styling.
sergeibbb Dec 4, 2025
eeb68f7
Enhances welcome UI for better scaling and narrow view support
sergeibbb Dec 5, 2025
cc1bc09
Separates feature card to a new file
sergeibbb Dec 5, 2025
008fc34
Adds Pro trial action button for welcome webview
sergeibbb Dec 5, 2025
b8eab5b
Removes dummy text from welcome screen
sergeibbb Dec 5, 2025
b1e0bc8
Improves typography styling
sergeibbb Dec 5, 2025
d888907
Refines cards layout
sergeibbb Dec 5, 2025
074700d
Adds initial layout of scrollable cards
sergeibbb Dec 5, 2025
f789853
Adds shadows to the sides of the scrollable narrow feature cards
sergeibbb Dec 9, 2025
d302faf
Revamps welcome UI with new feature cards and visuals
sergeibbb Dec 9, 2025
f87ef76
Adds light and dark theme support for feature images
sergeibbb Dec 9, 2025
aef8d48
Implements welcome overlay over Homve View for new users in Cursor
sergeibbb Dec 10, 2025
7b74724
Uses Welcome View as an overlay over the Home View.
sergeibbb Dec 10, 2025
97b9334
Removes welcome webview and integrates into home
sergeibbb Dec 11, 2025
998825c
Improves layout of the welcome page in the sidebar (Home View)
sergeibbb Dec 11, 2025
d996d8c
Upgrades carousel layout for narrow views to make it more "vertically…
sergeibbb Dec 11, 2025
9bc612b
Makes scrollable features vertically oriented on narrow sizes
sergeibbb Dec 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions contributions.json
Original file line number Diff line number Diff line change
Expand Up @@ -5767,6 +5767,11 @@
"label": "Show Visual File History View",
"commandPalette": "gitlens:enabled"
},
"gitlens.showWelcomePage": {
"label": "Show Welcome",
"icon": "$(heart)",
"commandPalette": "gitlens:enabled"
},
"gitlens.showWorkspacesView": {
"label": "Show Cloud Workspaces View",
"commandPalette": "gitlens:enabled && !gitlens:hasVirtualFolders"
Expand Down
111 changes: 87 additions & 24 deletions docs/telemetry-events.md

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8404,6 +8404,12 @@
"title": "Show Visual File History View",
"category": "GitLens"
},
{
"command": "gitlens.showWelcomePage",
"title": "Show Welcome",
"category": "GitLens",
"icon": "$(heart)"
},
{
"command": "gitlens.showWorkspacesView",
"title": "Show Cloud Workspaces View",
Expand Down Expand Up @@ -13280,6 +13286,10 @@
"command": "gitlens.showTimelineView",
"when": "gitlens:enabled"
},
{
"command": "gitlens.showWelcomePage",
"when": "gitlens:enabled"
},
{
"command": "gitlens.showWorkspacesView",
"when": "gitlens:enabled && !gitlens:hasVirtualFolders"
Expand Down
1 change: 1 addition & 0 deletions src/constants.commands.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1010,6 +1010,7 @@ export type ContributedPaletteCommands =
| 'gitlens.showTagsView'
| 'gitlens.showTimelinePage'
| 'gitlens.showTimelineView'
| 'gitlens.showWelcomePage'
| 'gitlens.showWorkspacesView'
| 'gitlens.showWorktreesView'
| 'gitlens.startWork'
Expand Down
10 changes: 10 additions & 0 deletions src/constants.telemetry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,9 @@ export interface TelemetryEvents extends WebviewShowAbortedEvents, WebviewShownE
/** Sent when the walkthrough is opened */
'walkthrough/action': WalkthroughActionEvent;
'walkthrough/completion': WalkthroughCompletionEvent;

/** Sent when an action is taken in the welcome webview */
'welcome/action': WelcomeActionEvent;
}

type WebviewShowAbortedEvents = {
Expand Down Expand Up @@ -1219,6 +1222,12 @@ interface WalkthroughCompletionEvent {
'context.key': WalkthroughContextKeys;
}

type WelcomeActionNames = 'plus/sign-up';

type WelcomeActionEvent =
| { type: 'command'; name: WelcomeActionNames; command: string; detail?: string }
| { type: 'url'; name: WelcomeActionNames; url: string; detail?: string };

type WebviewContextEventData = {
'context.webview.id': string;
'context.webview.type': string;
Expand Down Expand Up @@ -1301,6 +1310,7 @@ export type Sources =
| 'view'
| 'view:hover'
| 'walkthrough'
| 'welcome'
| 'whatsnew'
| 'worktrees';

Expand Down
2 changes: 1 addition & 1 deletion src/constants.views.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export type GroupableTreeViewTypes = Extract<
>;
export type GroupableTreeViewIds<T extends GroupableTreeViewTypes = GroupableTreeViewTypes> = TreeViewIds<T>;

export type WebviewTypes = 'composer' | 'graph' | 'patchDetails' | 'settings' | 'timeline';
export type WebviewTypes = 'composer' | 'graph' | 'patchDetails' | 'settings' | 'timeline' | 'welcome';
export type WebviewIds = `gitlens.${WebviewTypes}`;

export type WebviewViewTypes = 'commitDetails' | 'graph' | 'graphDetails' | 'home' | 'patchDetails' | 'timeline';
Expand Down
6 changes: 6 additions & 0 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,12 @@ async function showWhatsNew(
if (previousVersion == null) {
Logger.log(`GitLens first-time install; window.focused=${window.state.focused}`);

// // Show welcome webview on first install for IDEs that don't support walkthroughs (e.g., Cursor)
// // For IDEs that support walkthroughs, the walkthrough will be shown instead
// if (window.state.focused && !container.walkthrough.isWalkthroughSupported) {
// void executeCommand('gitlens.showWelcomePage');
// }

return;
}

Expand Down
95 changes: 95 additions & 0 deletions src/webviews/apps/home/components/welcome-overlay.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import { consume } from '@lit/context';
import { css, html, LitElement, nothing } from 'lit';
import { customElement, property, state } from 'lit/decorators.js';
import type { State } from '../../../home/protocol';
import { CollapseSectionCommand } from '../../../home/protocol';
import { ipcContext } from '../../shared/contexts/ipc';
import type { HostIpc } from '../../shared/ipc';
import { stateContext } from '../context';
import './welcome-page';

declare global {
interface HTMLElementTagNameMap {
'gl-welcome-overlay': GlWelcomeOverlay;
}
}

@customElement('gl-welcome-overlay')
export class GlWelcomeOverlay extends LitElement {
static override shadowRootOptions: ShadowRootInit = {
...LitElement.shadowRootOptions,
delegatesFocus: true,
};

static override styles = [
css`
:host {
--background-color: var(--vscode-editor-background);
}
.overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
display: block;
background-color: var(--background-color);
}

gl-welcome-page {
--page-background-color: var(--background-color);
--page-margin-left: 1rem;
--page-margin-right: 0.5rem;
}

gl-welcome-page::part(page) {
padding: 0 0.5rem 0 1rem;
}
`,
];

@property({ type: String })
webroot?: string;

@property({ type: Boolean })
private isLightTheme = false;

@consume<State>({ context: stateContext, subscribe: true })
@state()
private _state!: State;

@consume<HostIpc>({ context: ipcContext, subscribe: true })
@state()
private _ipc!: HostIpc;

@state()
private closed = false;

override render(): unknown {
const { welcomeOverlayCollapsed, walkthroughSupported, newInstall } = this._state;
if (this.closed || welcomeOverlayCollapsed || walkthroughSupported || !newInstall) {
return nothing;
}

return html`
<div class="overlay">
<gl-welcome-page
.webroot=${this.webroot}
.isLightTheme=${this.isLightTheme}
closeable
@close=${() => this.onClose()}
></gl-welcome-page>
</div>
`;
}

private onClose() {
this.closed = true;

this._ipc.sendCommand(CollapseSectionCommand, {
section: 'welcomeOverlay',
collapsed: true,
});
}
}
Loading
Loading