From 3d4b046cb446829bb8870d23806baf65ef74bad5 Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Thu, 14 Nov 2024 02:53:56 -0500 Subject: [PATCH] Improves trials and messaging - Adds incremental feature preview system (graph only) - Extends trial period from 7 to 14 days - Improves clarity around Community vs Pro features Co-authored-by: Sergio --- README.md | 6 +- package.json | 125 ++++----- src/@types/global.d.ts | 2 + src/commands/quickCommand.steps.ts | 4 +- src/commands/resets.ts | 38 +++ src/constants.commands.ts | 1 + src/constants.context.ts | 2 +- src/constants.storage.ts | 10 +- src/constants.subscription.ts | 6 +- src/constants.telemetry.ts | 11 +- src/errors.ts | 2 +- src/features.ts | 35 +++ src/plus/gk/account/__debug__accountDebug.ts | 71 ++++- src/plus/gk/account/promos.ts | 2 +- src/plus/gk/account/subscription.ts | 2 +- src/plus/gk/account/subscriptionService.ts | 253 ++++++++++++++---- src/plus/utils.ts | 6 +- src/plus/webviews/graph/graphWebview.ts | 49 +++- src/plus/webviews/graph/protocol.ts | 12 + src/plus/workspaces/workspacesService.ts | 8 +- src/quickpicks/items/directive.ts | 12 +- src/system/vscode/storage.ts | 9 +- src/system/webview.ts | 2 +- src/uris/deepLinks/deepLinkService.ts | 2 +- src/views/nodes/worktreesNode.ts | 2 +- .../apps/media/graph-commit-search.png | Bin 0 -> 92232 bytes src/webviews/apps/media/graph-minimap.png | Bin 0 -> 98154 bytes src/webviews/apps/plus/graph/GraphWrapper.tsx | 20 ++ src/webviews/apps/plus/graph/graph.scss | 4 +- src/webviews/apps/plus/graph/graph.tsx | 7 +- .../components/feature-gate-plus-state.ts | 240 +++++++++++++---- .../shared/components/home-account-content.ts | 28 +- .../apps/plus/shared/components/vscode.css.ts | 9 +- .../apps/shared/components/feature-badge.ts | 18 +- .../apps/shared/components/feature-gate.ts | 172 ++++++------ walkthroughs/welcome/get-started-community.md | 2 +- .../welcome-in-trial-expired-eligible.md | 2 +- 37 files changed, 860 insertions(+), 314 deletions(-) create mode 100644 src/webviews/apps/media/graph-commit-search.png create mode 100644 src/webviews/apps/media/graph-minimap.png diff --git a/README.md b/README.md index d99d0bc52ebee..9d90ed6407cf1 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ GitLens isn’t just for solo developers—it’s designed to enhance team colla ## Cloud Patches `Preview` -Easily and securely share code changes by creating a Cloud Patch from your work-in-progress, commit, or stash, and sharing a link with teammates or other developers. Cloud Patches enable early collaboration for feedback on direction and approach, reducing rework and streamlining your workflow. [Learn more](https://gitkraken.com/solutions/cloud-patches?utm_source=gitlens-extension&utm_medium=in-app-links) +Privately and securely share code changes by creating a Cloud Patch from your work-in-progress, commit, or stash, and sharing a link with specific teammates and other developers. Cloud Patches enable early collaboration for feedback on direction and approach, reducing rework and streamlining your workflow, without adding noise to your repositories. [Learn more](https://gitkraken.com/solutions/cloud-patches?utm_source=gitlens-extension&utm_medium=in-app-links) ## Code Suggest `Preview` @@ -192,7 +192,7 @@ An x-ray or developer tools Inspect into your code, focused on providing context Quick access to many GitLens features. Also the home of GitKraken teams and collaboration services (e.g. Cloud Patches, Cloud Workspaces), help, and support. - **Home** — Quick access to many features. -- [**Cloud Patches `Preview`**](#cloud-patches-preview) — Easily and securely share code with your teammates +- [**Cloud Patches `Preview`**](#cloud-patches-preview) — Privately and securely share code with specific teammates - [**Cloud Workspaces `Preview`**](#gitkraken-workspaces-preview) — Easily group and manage multiple repositories together, accessible from anywhere, streamlining your workflow. ### Source Control @@ -282,7 +282,7 @@ Use the `Generate Commit Message` command from the Source Control view's context When you're ready to unlock the full potential of GitLens and enjoy all the benefits, consider [upgrading to GitLens Pro](https://gitkraken.dev/register?product=gitlens&source=marketing_page&redirect_uri=vscode%3A%2F%2Feamodio.gitlens%2Flogin&flow=gitlens_web). With GitLens Pro, you'll gain access to [Pro features](https://gitkraken.com/gitlens/pro-features?utm_source=gitlens-extension&utm_medium=in-app-links) on privately-hosted repos. -To learn more about the additional features offered with Pro, visit the [GitLens Community vs GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/?utm_source=gitlens-extension&utm_medium=in-app-links&utm_campaign=readme&utm_term=ready-for-gitlens-pro) page. +To learn more about the additional features offered with Pro, visit the [GitLens Community vs GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/?utm_source=gitlens-extension&utm_medium=in-app-links&utm_campaign=readme&utm_term=ready-for-gitlens-pro) page. # Support and Community diff --git a/package.json b/package.json index 10f180c44e71a..f85114c681c52 100644 --- a/package.json +++ b/package.json @@ -1397,7 +1397,7 @@ "gitlens.cloudPatches.enabled": { "type": "boolean", "default": true, - "markdownDescription": "Specifies whether to enable the preview of _Cloud Patches_, which allow you to easily and securely share code with your teammates or other developers", + "markdownDescription": "Specifies whether to enable the preview of _Cloud Patches_, which allow you to privately and securely share code with specific teammates and other developers", "scope": "window", "order": 10, "tags": [ @@ -5019,7 +5019,7 @@ "gitlens.plusFeatures.enabled": { "type": "boolean", "default": true, - "markdownDescription": "Specifies whether to hide or show features that require a trial or paid plan and are not accessible given the opened repositories and current trial or plan", + "markdownDescription": "Specifies whether to hide or show features that require a trial or GitLens Pro and are not accessible given the opened repositories and current trial or plan", "scope": "window", "order": 60 }, @@ -10278,7 +10278,7 @@ }, { "command": "gitlens.plus.startPreviewTrial", - "when": "!gitlens:plus" + "when": "false && !gitlens:plus" }, { "command": "gitlens.plus.reactivateProTrial", @@ -19322,7 +19322,7 @@ }, { "view": "gitlens.views.drafts", - "contents": "Cloud Patches ᴘʀᴇᴠɪᴇᴡ — easily and securely share code with your teammates or other developers, accessible from anywhere, streamlining your workflow with better collaboration." + "contents": "Cloud Patches ᴘʀᴇᴠɪᴇᴡ — privately and securely share code with specific teammates and other developers, accessible from anywhere. Enhance collaboration without adding noise to your repositories." }, { "view": "gitlens.views.drafts", @@ -19331,12 +19331,13 @@ }, { "view": "gitlens.views.drafts", - "contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22cloud-patches%22%7D)\n\nStart your free 7-day Pro trial to try Cloud Patches and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22cloud-patches%22%7D).", + "contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22cloud-patches%22%7D)\n\nGet 14 days of GitLens Pro for free — no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22cloud-patches%22%7D).", "when": "!gitlens:plus" }, { "view": "gitlens.views.drafts", - "contents": "Preview feature ☁️ — requires an account and may require a paid plan in the future." + "contents": "An account is required and may require [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/) in the future.", + "when": "gitlens:plus:state != 6" }, { "view": "gitlens.views.launchpad", @@ -19369,23 +19370,23 @@ }, { "view": "gitlens.views.launchpad", - "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nContinuing gives you 3 days to preview Launchpad and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D) for full access to Pro features.", - "when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 0" + "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nContinuing gives you 3 days to preview Launchpad and other local Pro features for 3 days. [Start 14-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D) for full access to Pro features.", + "when": "false && !gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 0" }, { "view": "gitlens.views.scm.grouped", - "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nContinuing gives you 3 days to preview Launchpad and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D) for full access to Pro features.", - "when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 0 && gitlens:views:scm:grouped:view == launchpad" + "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nContinuing gives you 3 days to preview Launchpad and other local Pro features for 3 days. [Start 14-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D) for full access to Pro features.", + "when": "false && !gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 0 && gitlens:views:scm:grouped:view == launchpad" }, { "view": "gitlens.views.launchpad", - "contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nStart your free 7-day Pro trial to try Launchpad and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).", - "when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 2" + "contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nGet 14 days of GitLens Pro for free — no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).", + "when": "!gitlens:launchpad:connect && gitlens:plus:required && (gitlens:plus:state == 0 || gitlens:plus:state == 2)" }, { "view": "gitlens.views.scm.grouped", - "contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nStart your free 7-day Pro trial to try Launchpad and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).", - "when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 2 && gitlens:views:scm:grouped:view == launchpad" + "contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nGet 14 days of GitLens Pro for free — no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22launchpad-view%22%7D).", + "when": "!gitlens:launchpad:connect && gitlens:plus:required && (gitlens:plus:state == 0 || gitlens:plus:state == 2) && gitlens:views:scm:grouped:view == launchpad" }, { "view": "gitlens.views.launchpad", @@ -19429,24 +19430,14 @@ }, { "view": "gitlens.views.launchpad", - "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 7 days!", + "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 14 days!", "when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 5" }, { "view": "gitlens.views.scm.grouped", - "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 7 days!", + "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22launchpad-view%22%7D)\n\nReactivate your Pro trial and experience Launchpad and all the new Pro features — free for another 14 days!", "when": "!gitlens:launchpad:connect && gitlens:plus:required && gitlens:plus:state == 5 && gitlens:views:scm:grouped:view == launchpad" }, - { - "view": "gitlens.views.launchpad", - "contents": "Pro feature — requires a paid plan for use on privately-hosted repos.", - "when": "!gitlens:launchpad:connect" - }, - { - "view": "gitlens.views.scm.grouped", - "contents": "Pro feature — requires a paid plan for use on privately-hosted repos.", - "when": "!gitlens:launchpad:connect && gitlens:views:scm:grouped:view == launchpad" - }, { "view": "gitlens.views.workspaces", "contents": "Workspaces ᴘʀᴇᴠɪᴇᴡ — group and manage multiple repositories together, accessible from anywhere, streamlining your workflow.\n\nCreate workspaces just for yourself or share (coming soon in GitLens) them with your team for faster onboarding and better collaboration." @@ -19458,16 +19449,17 @@ }, { "view": "gitlens.views.workspaces", - "contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22workspaces%22%7D)\n\nStart your free 7-day Pro trial to try GitKraken (GK) Workspaces and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22workspaces%22%7D).", + "contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22workspaces%22%7D)\n\nGet 14 days of GitLens Pro for free — no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22workspaces%22%7D).", "when": "!gitlens:plus" }, { "view": "gitlens.views.workspaces", - "contents": "Preview feature ☁️ — requires an account and may require a paid plan in the future." + "contents": "An account is required and may require [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/) in the future.", + "when": "gitlens:plus:state != 6" }, { "view": "gitlens.views.worktrees", - "contents": "[Worktrees](https://help.gitkraken.com/gitlens/side-bar/#worktrees-view-pro) ᴾᴿᴼ — minimize context switching by allowing you to work on multiple branches simultaneously." + "contents": "[Worktrees](https://help.gitkraken.com/gitlens/side-bar/#worktrees-view-pro) ᴾᴿᴼ — minimize context switching by working on multiple branches simultaneously." }, { "view": "gitlens.views.scm.grouped", @@ -19496,23 +19488,23 @@ }, { "view": "gitlens.views.worktrees", - "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nContinuing gives you 3 days to preview Worktrees and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D) for full access to Pro features.", - "when": "gitlens:plus:required && gitlens:plus:state == 0" + "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nContinuing gives you 3 days to preview Worktrees and other local Pro features for 3 days. [Start 14-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D) for full access to Pro features.", + "when": "false && gitlens:plus:required && gitlens:plus:state == 0" }, { "view": "gitlens.views.scm.grouped", - "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nContinuing gives you 3 days to preview Worktrees and other local Pro features for 3 days. [Start 7-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D) for full access to Pro features.", - "when": "gitlens:plus:required && gitlens:plus:state == 0 && gitlens:views:scm:grouped:view == worktrees" + "contents": "[Continue](command:gitlens.plus.startPreviewTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nContinuing gives you 3 days to preview Worktrees and other local Pro features for 3 days. [Start 14-day Pro trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D) or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D) for full access to Pro features.", + "when": "false && gitlens:plus:required && gitlens:plus:state == 0 && gitlens:views:scm:grouped:view == worktrees" }, { "view": "gitlens.views.worktrees", - "contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nStart your free 7-day Pro trial to try Worktrees and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).", - "when": "gitlens:plus:required && gitlens:plus:state == 2" + "contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nGet 14 days of GitLens Pro for free — no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).", + "when": "gitlens:plus:required && (gitlens:plus:state == 0 || gitlens:plus:state == 2)" }, { "view": "gitlens.views.scm.grouped", - "contents": "[Start Pro Trial](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nStart your free 7-day Pro trial to try Worktrees and other Pro features, or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).", - "when": "gitlens:plus:required && gitlens:plus:state == 2 && gitlens:views:scm:grouped:view == worktrees" + "contents": "[Try GitLens Pro](command:gitlens.plus.signUp?%7B%22source%22%3A%22worktrees%22%7D)\n\nGet 14 days of GitLens Pro for free — no credit card required. Or [sign in](command:gitlens.plus.login?%7B%22source%22%3A%22worktrees%22%7D).", + "when": "gitlens:plus:required && (gitlens:plus:state == 0 || gitlens:plus:state == 2) && gitlens:views:scm:grouped:view == worktrees" }, { "view": "gitlens.views.worktrees", @@ -19556,22 +19548,23 @@ }, { "view": "gitlens.views.worktrees", - "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 7 days!", + "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 14 days!", "when": "gitlens:plus:required && gitlens:plus:state == 5" }, { "view": "gitlens.views.scm.grouped", - "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 7 days!", + "contents": "[Continue](command:gitlens.plus.reactivateProTrial?%7B%22source%22%3A%22worktrees%22%7D)\n\nReactivate your Pro trial and experience Worktrees and all the new Pro features — free for another 14 days!", "when": "gitlens:plus:required && gitlens:plus:state == 5 && gitlens:views:scm:grouped:view == worktrees" }, { "view": "gitlens.views.worktrees", - "contents": "Pro feature — requires a paid plan for use on privately-hosted repos." + "contents": "Use on privately-hosted repos require [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/).", + "when": "gitlens:plus:state != 6" }, { "view": "gitlens.views.scm.grouped", - "contents": "Pro feature — requires a paid plan for use on privately-hosted repos.", - "when": "gitlens:views:scm:grouped:view == worktrees" + "contents": "Use on privately-hosted repos require [GitLens Pro](https://help.gitkraken.com/gitlens/gitlens-community-vs-gitlens-pro/).", + "when": "gitlens:plus:state != 6 && gitlens:views:scm:grouped:view == worktrees" } ], "views": { @@ -19785,6 +19778,18 @@ "title": "Get Started With GitLens", "description": "Supercharge Git and unlock untapped knowledge within your repo to better understand, write, and review code.", "steps": [ + { + "id": "get-started-community", + "title": "Welcome to GitLens", + "description": "Thank you for installing GitLens—the most popular Git extension for VS Code!\n\n**Community vs. Pro**\n\nYou're using **GitLens Community** edition: Track code changes and see who made them with features like in-editor blame annotations, hovers, CodeLens, and more—completely free.\n\n**Leverage powerful workflows with GitLens Pro**\n\nThe **GitLens Pro** edition unlocks advanced features to accelerate PR reviews, gain actionable insights with rich code visuals, and streamline team collaboration to boost productivity.\n\n[Get Started with GitLens Pro](command:gitlens.walkthrough.plus.signUp)", + "media": { + "markdown": "walkthroughs/welcome/get-started-community.md" + }, + "completionEvents": [ + "onContext:gitlens:walkthroughState:gettingStarted == true" + ], + "when": "!gitlens:plus:state || gitlens:plus:state <= 2" + }, { "id": "welcome-in-trial", "title": "Welcome to GitLens Pro", @@ -19795,24 +19800,24 @@ "completionEvents": [ "onContext:gitlens:walkthroughState:gettingStarted == true" ], - "when": "(gitlens:plus:state == 1 || gitlens:plus:state == 3)" + "when": "gitlens:plus:state == 3" }, { - "id": "welcome-paid", - "title": "Discover the Benefits of GitLens Pro", - "description": "As a **GitLens Pro** user, you have access to powerful tools that accelerate PR reviews, provide deeper code history visualizations, and streamline collaboration across your team.\n\n[Continue the Walkthrough](command:gitlens.walkthrough.openWalkthrough)\n\nTo get the most out of your **GitLens Pro** experience, complete the walkthrough and visit our Help Center for in-depth guides.\n\n**[Learn more in the Help Center](command:gitlens.walkthrough.openHelpCenter)**", + "id": "welcome-in-trial-expired", + "title": "Get the most out of GitLens", + "description": "Thanks for installing GitLens and trying out GitLens Pro.\n\nYou're now on the GitLens Community edition, our free extension that helps you track code changes and who made them, with features like in-editor blame annotations, hovers, CodeLens, and more.\n\nLearn more about the [difference between GitLens Community vs. Pro](command:gitlens.walkthrough.openCommunityVsPro).\n\n**Unlock more powerful tools with GitLens Pro**\n\n[Upgrade to GitLens Pro](command:gitlens.walkthrough.plus.upgrade)\n\nWith GitLens Pro, you can accelerate PR reviews, visualize code history in-depth, and enhance collaboration across your team. It's the perfect upgrade to streamline your VS Code workflow.", "media": { - "markdown": "walkthroughs/welcome/welcome-paid.md" + "markdown": "walkthroughs/welcome/welcome-in-trial-expired.md" }, "completionEvents": [ "onContext:gitlens:walkthroughState:gettingStarted == true" ], - "when": "gitlens:plus:state == 6" + "when": "gitlens:plus:state == 4" }, { "id": "welcome-in-trial-expired-eligible", "title": "Get the most out of GitLens ", - "description": "Thanks for installing GitLens, the #1 most downloaded Git extension in VS Code.\n\nYou're currently using **GitLens Community**, our free extension that helps you track code changes and who made them, with features like in-editor blame annotations, hovers, CodeLens, and more.\n\n**Unlock more powerful tools - Try GitLens Pro again free for 14 days.**\n\n[Get Started with GitLens Pro](command:gitlens.walkthrough.plus.upgrade)\n\nWith GitLens Pro, you can accelerate PR reviews, visualize code history in-depth, and enhance collaboration across your team. It's the perfect upgrade to streamline your VS Code workflow.", + "description": "Thanks for installing GitLens, the #1 most downloaded Git extension in VS Code.\n\nYou're currently using **GitLens Community**, our free extension that helps you track code changes and who made them, with features like in-editor blame annotations, hovers, CodeLens, and more.\n\n**Unlock more powerful tools — Try GitLens Pro again free for 14 days.**\n\n[Get Started with GitLens Pro](command:gitlens.walkthrough.plus.upgrade)\n\nWith GitLens Pro, you can accelerate PR reviews, visualize code history in-depth, and enhance collaboration across your team. It's the perfect upgrade to streamline your VS Code workflow.", "media": { "markdown": "walkthroughs/welcome/welcome-in-trial-expired-eligible.md" }, @@ -19822,28 +19827,16 @@ "when": "gitlens:plus:state == 5" }, { - "id": "welcome-in-trial-expired", - "title": "Get the most out of GitLens", - "description": "Thanks for installing GitLens and trying out GitLens Pro.\n\nYou're now on the GitLens Community edition, our free extension that helps you track code changes and who made them, with features like in-editor blame annotations, hovers, CodeLens, and more.\n\nLearn more about the [difference between GitLens Community vs. Pro](command:gitlens.walkthrough.openCommunityVsPro).\n\n**Unlock more powerful tools with GitLens Pro**\n\n[Upgrade to GitLens Pro](command:gitlens.walkthrough.plus.upgrade)\n\nWith GitLens Pro, you can accelerate PR reviews, visualize code history in-depth, and enhance collaboration across your team. It's the perfect upgrade to streamline your VS Code workflow.", - "media": { - "markdown": "walkthroughs/welcome/welcome-in-trial-expired.md" - }, - "completionEvents": [ - "onContext:gitlens:walkthroughState:gettingStarted == true" - ], - "when": "gitlens:plus:state == 4 || gitlens:plus:state == 2" - }, - { - "id": "get-started-community", - "title": "Welcome to GitLens", - "description": "Thank you for installing GitLens—the most popular Git extension for VS Code!\n\n**Community vs. Pro**\n\nYou're using **GitLens Community** edition: Track code changes and see who made them with features like in-editor blame annotations, hovers, CodeLens, and more—completely free.\n\n**Leverage powerful workflows with GitLens Pro**\n\nThe **GitLens Pro** edition unlocks advanced features to accelerate PR reviews, gain actionable insights with rich code visuals, and streamline team collaboration to boost productivity.\n\n[Get Started with GitLens Pro](command:gitlens.walkthrough.plus.signUp)", + "id": "welcome-paid", + "title": "Discover the Benefits of GitLens Pro", + "description": "As a **GitLens Pro** user, you have access to powerful tools that accelerate PR reviews, provide deeper code history visualizations, and streamline collaboration across your team.\n\n[Continue the Walkthrough](command:gitlens.walkthrough.openWalkthrough)\n\nTo get the most out of your **GitLens Pro** experience, complete the walkthrough and visit our Help Center for in-depth guides.\n\n**[Learn more in the Help Center](command:gitlens.walkthrough.openHelpCenter)**", "media": { - "markdown": "walkthroughs/welcome/get-started-community.md" + "markdown": "walkthroughs/welcome/welcome-paid.md" }, "completionEvents": [ "onContext:gitlens:walkthroughState:gettingStarted == true" ], - "when": "!gitlens:plus:state || gitlens:plus:state <= 0" + "when": "gitlens:plus:state == 6" }, { "id": "visualize-code-history", diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 808d4f2a15332..a27c74db4e095 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -8,6 +8,8 @@ export declare global { export type Mutable = { -readonly [P in keyof T]: T[P] }; export type PickMutable = Omit & { -readonly [P in K]: T[P] }; + export type EntriesType = T extends Record ? [K, V] : never; + export type ExcludeSome = Omit & { [P in K]-?: Exclude }; export type ExtractAll = { [K in keyof T]: T[K] extends U ? T[K] : never }; diff --git a/src/commands/quickCommand.steps.ts b/src/commands/quickCommand.steps.ts index 5fe9a2eb954ed..f22e25915e6cf 100644 --- a/src/commands/quickCommand.steps.ts +++ b/src/commands/quickCommand.steps.ts @@ -2648,9 +2648,9 @@ export async function* ensureAccessStep< const promo = getApplicablePromo(access.subscription.current.state, 'gate'); const detail = promo?.quickpick.detail; - placeholder = 'Pro feature — requires a trial or paid plan for use on privately-hosted repos'; + placeholder = 'Pro feature — requires a trial or GitLens Pro for use on privately-hosted repos'; if (isSubscriptionPaidPlan(access.subscription.required) && access.subscription.current.account != null) { - placeholder = 'Pro feature — requires a paid plan for use on privately-hosted repos'; + placeholder = 'Pro feature — requires GitLens Pro for use on privately-hosted repos'; directives.push( createDirectiveQuickPickItem(Directive.RequiresPaidSubscription, true, { detail: detail }), createQuickPickSeparator(), diff --git a/src/commands/resets.ts b/src/commands/resets.ts index 3c4c1429e4c49..02322b41db826 100644 --- a/src/commands/resets.ts +++ b/src/commands/resets.ts @@ -13,7 +13,9 @@ const resetTypes = [ 'ai', 'avatars', 'integrations', + 'previews', 'repositoryAccess', + 'subscription', 'suppressedWarnings', 'usageTracking', 'workspace', @@ -73,6 +75,22 @@ export class ResetCommand extends Command { }, ]; + if (DEBUG) { + items.push( + createQuickPickSeparator('DEBUG'), + { + label: 'Reset Subscription...', + detail: 'Resets the stored subscription', + item: 'subscription', + }, + { + label: 'Reset Feature Previews...', + detail: 'Resets the stored state for feature previews', + item: 'previews', + }, + ); + } + // create a quick pick with options to clear all the different resets that GitLens supports const pick = await window.showQuickPick(items, { title: 'Reset Stored Data', @@ -102,10 +120,18 @@ export class ResetCommand extends Command { confirmationMessage = 'Are you sure you want to reset all of the stored integrations?'; confirm.title = 'Reset Integrations'; break; + case 'previews': + confirmationMessage = 'Are you sure you want to reset the stored state for feature previews?'; + confirm.title = 'Reset Feature Previews'; + break; case 'repositoryAccess': confirmationMessage = 'Are you sure you want to reset the repository access cache?'; confirm.title = 'Reset Repository Access'; break; + case 'subscription': + confirmationMessage = 'Are you sure you want to reset the stored subscription?'; + confirm.title = 'Reset Subscription'; + break; case 'suppressedWarnings': confirmationMessage = 'Are you sure you want to reset all of the suppressed warnings?'; confirm.title = 'Reset Suppressed Warnings'; @@ -170,6 +196,18 @@ export class ResetCommand extends Command { case 'workspace': await this.container.storage.resetWorkspace(); break; + default: + if (DEBUG) { + switch (reset) { + case 'subscription': + await this.container.storage.delete('premium:subscription'); + break; + case 'previews': + await this.container.storage.deleteWithPrefix('plus:preview'); + break; + } + } + break; } } } diff --git a/src/constants.commands.ts b/src/constants.commands.ts index 1e9424933e90d..13339d3d7621c 100644 --- a/src/constants.commands.ts +++ b/src/constants.commands.ts @@ -150,6 +150,7 @@ export const enum Commands { PlusShowPlans = 'gitlens.plus.showPlans', PlusSignUp = 'gitlens.plus.signUp', PlusStartPreviewTrial = 'gitlens.plus.startPreviewTrial', + PlusContinueFeaturePreview = 'gitlens.plus.continueFeaturePreview', PlusUpgrade = 'gitlens.plus.upgrade', PlusValidate = 'gitlens.plus.validate', PlusSimulateSubscription = 'gitlens.plus.simulateSubscription', diff --git a/src/constants.context.ts b/src/constants.context.ts index 231db51cc9fd5..096aef6cab852 100644 --- a/src/constants.context.ts +++ b/src/constants.context.ts @@ -19,7 +19,7 @@ export type ContextKeys = { 'gitlens:newInstall': boolean; /** Indicates that this is a new install of GitLens (anywhere for this user -- if synced settings is on) */ 'gitlens:newUserInstall': boolean; - 'gitlens:plus': SubscriptionPlanId; + 'gitlens:plus': Exclude; 'gitlens:plus:disallowedRepos': string[]; 'gitlens:plus:enabled': boolean; 'gitlens:plus:required': boolean; diff --git a/src/constants.storage.ts b/src/constants.storage.ts index faada399620b4..f6dece94467b0 100644 --- a/src/constants.storage.ts +++ b/src/constants.storage.ts @@ -4,6 +4,7 @@ import type { IntegrationId } from './constants.integrations'; import type { TrackedUsage, TrackedUsageKeys } from './constants.telemetry'; import type { GroupableTreeViewTypes } from './constants.views'; import type { Environment } from './container'; +import type { FeaturePreviews } from './features'; import type { Subscription } from './plus/gk/account/subscription'; import type { Integration } from './plus/integrations/integration'; import type { DeepLinkServiceState } from './uris/deepLinks/deepLink'; @@ -77,7 +78,9 @@ export type GlobalStorage = { 'launchpadView:groups:expanded': StoredLaunchpadGroup[]; 'graph:searchMode': StoredGraphSearchMode; 'views:scm:grouped:welcome:dismissed': boolean; -} & { [key in `confirm:ai:tos:${AIProviders}`]: boolean } & { +} & { [key in `plus:preview:${FeaturePreviews}:usages`]: StoredFeaturePreviewUsagePeriod[] } & { + [key in `confirm:ai:tos:${AIProviders}`]: boolean; +} & { [key in `provider:authentication:skip:${string}`]: boolean; } & { [key in `gk:${string}:checkin`]: Stored } & { [key in `gk:${string}:organizations`]: Stored; @@ -309,3 +312,8 @@ export type StoredLaunchpadGroup = | 'draft' | 'other' | 'snoozed'; + +export interface StoredFeaturePreviewUsagePeriod { + startedOn: string; + expiresOn: string; +} diff --git a/src/constants.subscription.ts b/src/constants.subscription.ts index a7fc5e5349e36..96274b393491b 100644 --- a/src/constants.subscription.ts +++ b/src/constants.subscription.ts @@ -1,5 +1,7 @@ -export const proPreviewLengthInDays = 3; -export const proTrialLengthInDays = 7; +export const proFeaturePreviewUsages = 3; +export const proFeaturePreviewUsageDurationInDays = 1; +export const proPreviewLengthInDays = 0; +export const proTrialLengthInDays = 14; export type PromoKeys = 'gitlens16' | 'pro50'; diff --git a/src/constants.telemetry.ts b/src/constants.telemetry.ts index f9483f00af88d..d48880080f04c 100644 --- a/src/constants.telemetry.ts +++ b/src/constants.telemetry.ts @@ -5,6 +5,7 @@ import type { Commands } from './constants.commands'; import type { IntegrationId, SupportedCloudIntegrationIds } from './constants.integrations'; import type { SubscriptionState } from './constants.subscription'; import type { CustomEditorTypes, TreeViewTypes, WebviewTypes, WebviewViewTypes } from './constants.views'; +import type { FeaturePreviews } from './features'; import type { GitContributionTiers } from './git/models/contributor'; import type { StartWorkType } from './plus/startWork/startWork'; import type { Period } from './plus/webviews/timeline/protocol'; @@ -418,7 +419,8 @@ export type TelemetryEvents = { | { action: 'visibility'; visible: boolean; - }; + } + | FeaturePreviewActionEventData; /** Sent when the subscription changes */ 'subscription/changed': SubscriptionEventData; @@ -698,3 +700,10 @@ export type TrackedUsageFeatures = | `${TreeViewTypes | WebviewViewTypes}View` | `${CustomEditorTypes}Editor`; export type TrackedUsageKeys = `${TrackedUsageFeatures}:shown` | CommandExecutionTrackedFeatures | WalkthroughUsageKeys; + +export type FeaturePreviewActionsDayEventData = Record<`day.${number}.startedOn`, string>; +export type FeaturePreviewActionEventData = { + action: `start-preview-trial:${FeaturePreviews}`; + startedOn: string; + day: number; +} & FeaturePreviewActionsDayEventData; diff --git a/src/errors.ts b/src/errors.ts index 677df91435e63..f77f170537351 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -14,7 +14,7 @@ export class AccessDeniedError extends Error { if (subscription.account?.verified === false) { message = 'Email verification required'; } else if (required != null && isSubscriptionPaidPlan(required)) { - message = 'Paid plan required'; + message = 'GitLens Pro required'; } else { message = 'Plan required'; } diff --git a/src/features.ts b/src/features.ts index b7b4d2bd8d6d8..e4238393b50a5 100644 --- a/src/features.ts +++ b/src/features.ts @@ -1,5 +1,8 @@ +import type { StoredFeaturePreviewUsagePeriod } from './constants.storage'; +import { proFeaturePreviewUsages } from './constants.subscription'; import type { RepositoryVisibility } from './git/gitProvider'; import type { RequiredSubscriptionPlans, Subscription } from './plus/gk/account/subscription'; +import { capitalize } from './system/string'; export const enum Features { Stashes = 'stashes', @@ -39,3 +42,35 @@ export const enum PlusFeatures { Graph = 'graph', Launchpad = 'launchpad', } + +export type FeaturePreviews = 'graph'; +export const featurePreviews: FeaturePreviews[] = ['graph']; + +export interface FeaturePreview { + feature: FeaturePreviews; + usages: StoredFeaturePreviewUsagePeriod[]; +} + +export function getFeaturePreviewLabel(feature: FeaturePreviews) { + switch (feature) { + case 'graph': + return 'Commit Graph'; + default: + return capitalize(feature); + } +} + +export function isFeaturePreviewActive(featurePreview?: FeaturePreview) { + const usages = featurePreview?.usages; + if (usages == null || usages.length === 0) return false; + + return usages.length <= proFeaturePreviewUsages && new Date(usages[usages.length - 1].expiresOn) > new Date(); +} + +export function isFeaturePreviewExpired(featurePreview: FeaturePreview) { + const usages = featurePreview.usages; + return ( + usages.length > proFeaturePreviewUsages || + (usages.length === proFeaturePreviewUsages && new Date(usages[usages.length - 1].expiresOn) < new Date()) + ); +} diff --git a/src/plus/gk/account/__debug__accountDebug.ts b/src/plus/gk/account/__debug__accountDebug.ts index 67bdbefe81ea8..2e448bcf0085e 100644 --- a/src/plus/gk/account/__debug__accountDebug.ts +++ b/src/plus/gk/account/__debug__accountDebug.ts @@ -1,7 +1,12 @@ import type { Disposable } from 'vscode'; import { ThemeIcon, window } from 'vscode'; import { Commands } from '../../../constants.commands'; -import { proTrialLengthInDays, SubscriptionPlanId, SubscriptionState } from '../../../constants.subscription'; +import { + proFeaturePreviewUsages, + proTrialLengthInDays, + SubscriptionPlanId, + SubscriptionState, +} from '../../../constants.subscription'; import type { Container } from '../../../container'; import type { QuickPickItemOfT } from '../../../quickpicks/items/common'; import { createQuickPickSeparator } from '../../../quickpicks/items/common'; @@ -14,7 +19,9 @@ import type { SubscriptionService } from './subscriptionService'; type SubscriptionServiceFacade = { getSubscription: () => SubscriptionService['_subscription']; + overrideFeaturePreviews: (featurePreviews: SimulatedFeaturePreviews) => void; overrideSession: (session: SubscriptionService['_session']) => void; + restoreFeaturePreviews: () => void; restoreSession: () => void; onDidCheckIn: SubscriptionService['_onDidCheckIn']; changeSubscription: SubscriptionService['changeSubscription']; @@ -25,25 +32,40 @@ export function registerAccountDebug(container: Container, service: Subscription new AccountDebug(container, service); } +interface SimulatedFeaturePreviews { + day: number; + durationSeconds: number; +} + type SimulateQuickPickItem = QuickPickItemOfT< - | { state: null; reactivatedTrial?: never; expiredPaid?: never; planId?: never } + | { state: null; reactivatedTrial?: never; expiredPaid?: never; planId?: never; featurePreview?: never } + | { + state: SubscriptionState.Community; + reactivatedTrial?: never; + expiredPaid?: never; + planId?: never; + featurePreviews?: SimulatedFeaturePreviews; + } | { state: Exclude; reactivatedTrial?: never; expiredPaid?: never; planId?: never; + featurePreviews?: never; } | { state: SubscriptionState.ProTrial; reactivatedTrial?: boolean; expiredPaid?: never; planId?: never; + featurePreviews?: never; } | { state: SubscriptionState.Paid; reactivatedTrial?: never; expiredPaid?: boolean; planId?: SubscriptionPlanId.Pro | SubscriptionPlanId.Teams | SubscriptionPlanId.Enterprise; + featurePreviews?: never; } >; @@ -69,21 +91,42 @@ class AccountDebug { label: 'Community', description: 'Community, no account', iconPath: new ThemeIcon('blank'), - item: { state: SubscriptionState.Community }, + item: { state: SubscriptionState.Community, featurePreviews: { day: 0, durationSeconds: 30 } }, + }, + { + label: 'Community: Feature Previews (Start Day 2)', + description: 'Community, no account', + iconPath: new ThemeIcon('blank'), + item: { state: SubscriptionState.Community, featurePreviews: { day: 1, durationSeconds: 30 } }, }, - createQuickPickSeparator('Preview'), { - label: 'Pro Preview', - description: 'Pro, no account', + label: 'Community: Feature Previews (Start Day 3)', + description: 'Community, no account', iconPath: new ThemeIcon('blank'), - item: { state: SubscriptionState.ProPreview }, + item: { state: SubscriptionState.Community, featurePreviews: { day: 2, durationSeconds: 30 } }, }, { - label: 'Pro Preview (Expired)', + label: 'Community: Feature Previews (Expired)', description: 'Community, no account', iconPath: new ThemeIcon('blank'), - item: { state: SubscriptionState.ProPreviewExpired }, + item: { + state: SubscriptionState.Community, + featurePreviews: { day: proFeaturePreviewUsages, durationSeconds: 30 }, + }, }, + // createQuickPickSeparator('Preview'), + // { + // label: 'Pro Preview', + // description: 'Pro, no account', + // iconPath: new ThemeIcon('blank'), + // item: { state: SubscriptionState.ProPreview }, + // }, + // { + // label: 'Pro Preview (Expired)', + // description: 'Community, no account', + // iconPath: new ThemeIcon('blank'), + // item: { state: SubscriptionState.ProPreviewExpired }, + // }, createQuickPickSeparator('Account'), { label: 'Verification Required', @@ -213,6 +256,7 @@ class AccountDebug { private endSimulation() { this.simulatingPick = undefined; + this.service.restoreFeaturePreviews(); this.service.restoreSession(); this.service.changeSubscription(this.service.getStoredSubscription(), { store: false }); } @@ -226,13 +270,18 @@ class AccountDebug { return true; } - const { state, reactivatedTrial, expiredPaid, planId } = item; + const { state, reactivatedTrial, expiredPaid, planId, featurePreviews } = item; switch (state) { case SubscriptionState.Community: case SubscriptionState.ProPreview: case SubscriptionState.ProPreviewExpired: this.service.overrideSession(null); + if (featurePreviews != null) { + this.service.overrideFeaturePreviews(featurePreviews); + } else { + this.service.restoreFeaturePreviews(); + } this.service.changeSubscription( state === SubscriptionState.Community @@ -240,9 +289,11 @@ class AccountDebug { : getPreviewSubscription(state === SubscriptionState.ProPreviewExpired ? 0 : 3), { store: false }, ); + return false; } + this.service.restoreFeaturePreviews(); this.service.restoreSession(); const subscription = this.service.getStoredSubscription(); diff --git a/src/plus/gk/account/promos.ts b/src/plus/gk/account/promos.ts index bd04d6d69f311..aa2b6dd8b004e 100644 --- a/src/plus/gk/account/promos.ts +++ b/src/plus/gk/account/promos.ts @@ -32,7 +32,7 @@ const promos: Promo[] = [ SubscriptionState.ProTrialReactivationEligible, ], startsOn: new Date('2024-11-11T06:59:00.000Z').getTime(), - expiresOn: new Date('2024-11-22T06:59:00.000Z').getTime(), + expiresOn: new Date('2024-11-24T06:59:00.000Z').getTime(), command: { tooltip: 'Save more than 55% during our GitLens 16 sale!' }, locations: ['account', 'badge', 'gate'], quickpick: { diff --git a/src/plus/gk/account/subscription.ts b/src/plus/gk/account/subscription.ts index bf5c009ad2d36..11ccb3f799d98 100644 --- a/src/plus/gk/account/subscription.ts +++ b/src/plus/gk/account/subscription.ts @@ -176,7 +176,7 @@ export function getSubscriptionPlan( export function getSubscriptionPlanName(id: SubscriptionPlanId) { switch (id) { case SubscriptionPlanId.CommunityWithAccount: - return 'GitLens Free'; + return 'GitLens Community'; case SubscriptionPlanId.Pro: return 'GitLens Pro'; case SubscriptionPlanId.Teams: diff --git a/src/plus/gk/account/subscriptionService.ts b/src/plus/gk/account/subscriptionService.ts index b5cd8912ed1aa..86da8524ebbf3 100644 --- a/src/plus/gk/account/subscriptionService.ts +++ b/src/plus/gk/account/subscriptionService.ts @@ -24,17 +24,32 @@ import type { OpenWalkthroughCommandArgs } from '../../../commands/walkthroughs' import { urls } from '../../../constants'; import type { CoreColors } from '../../../constants.colors'; import { Commands } from '../../../constants.commands'; +import type { StoredFeaturePreviewUsagePeriod } from '../../../constants.storage'; import { + proFeaturePreviewUsageDurationInDays, + proFeaturePreviewUsages, proPreviewLengthInDays, proTrialLengthInDays, SubscriptionPlanId, SubscriptionState, } from '../../../constants.subscription'; -import type { Source, TrackingContext } from '../../../constants.telemetry'; +import type { + FeaturePreviewActionEventData, + FeaturePreviewActionsDayEventData, + Source, + TrackingContext, +} from '../../../constants.telemetry'; import type { Container } from '../../../container'; import { AccountValidationError, RequestsAreBlockedTemporarilyError } from '../../../errors'; +import type { FeaturePreview, FeaturePreviews } from '../../../features'; +import { + featurePreviews, + getFeaturePreviewLabel, + isFeaturePreviewActive, + isFeaturePreviewExpired, +} from '../../../features'; import type { RepositoriesChangeEvent } from '../../../git/gitProviderService'; -import { fromNow } from '../../../system/date'; +import { createFromDateDelta, fromNow } from '../../../system/date'; import { gate } from '../../../system/decorators/gate'; import { debug, log } from '../../../system/decorators/log'; import { take } from '../../../system/event'; @@ -76,6 +91,8 @@ import { SubscriptionUpdatedUriPathPrefix, } from './subscription'; +export type FeaturePreviewChangeEvent = FeaturePreview; + export interface SubscriptionChangeEvent { readonly current: Subscription; readonly previous: Subscription; @@ -88,6 +105,11 @@ export class SubscriptionService implements Disposable { return this._onDidChange.event; } + private _onDidChangeFeaturePreview = new EventEmitter(); + get onDidChangeFeaturePreview(): Event { + return this._onDidChangeFeaturePreview.event; + } + private _onDidCheckIn = new EventEmitter(); get onDidCheckIn(): Event { return this._onDidCheckIn.event; @@ -181,9 +203,9 @@ export class SubscriptionService implements Disposable { if (DEBUG) { void import(/* webpackChunkName: "__debug__" */ './__debug__accountDebug').then(m => { - let restore: { session: AuthenticationSession | null | undefined } | undefined; + let savedSession: { session: AuthenticationSession | null | undefined } | undefined; - function setSession(this: SubscriptionService, session: AuthenticationSession | null | undefined) { + const setSession = (session: AuthenticationSession | null | undefined) => { this._sessionPromise = undefined; if (session === this._session) return; @@ -203,20 +225,104 @@ export class SubscriptionService implements Disposable { removed: previous != null && session == null ? [previous] : [], changed: previous != null && session != null ? [session] : [], }); - } + }; + + let savedFeaturePreviewOverrides: + | { + getFn: SubscriptionService['getStoredFeaturePreview'] | undefined; + setFn: SubscriptionService['storeFeaturePreview'] | undefined; + } + | undefined; m.registerAccountDebug(this.container, { getSubscription: () => this._subscription, + overrideFeaturePreviews: ({ day, durationSeconds }) => { + savedFeaturePreviewOverrides ??= { + getFn: this.getStoredFeaturePreview, + setFn: this.storeFeaturePreview, + }; + + const map = new Map(); + + this.getStoredFeaturePreview = (feature: FeaturePreviews) => { + let featurePreview = map.get(feature); + if (featurePreview == null) { + featurePreview = { + feature: feature, + usages: [], + }; + map.set(feature, featurePreview); + + if (!day) return featurePreview; + + const expired = new Date(0).toISOString(); + for (let i = 1; i <= day; i++) { + featurePreview.usages.push({ startedOn: expired, expiresOn: expired }); + } + } + + return featurePreview; + }; + + this.storeFeaturePreview = (feature: FeaturePreviews) => { + let featurePreview = map.get(feature); + if (featurePreview == null) { + featurePreview = { + feature: feature, + usages: [], + }; + map.set(feature, featurePreview); + } + + day++; + + const now = new Date(); + const expired = new Date(0).toISOString(); + + for (let i = 1; i <= day; i++) { + if (i !== day) { + featurePreview.usages.push({ startedOn: expired, expiresOn: expired }); + continue; + } + + featurePreview.usages.push({ + startedOn: now.toISOString(), + expiresOn: createFromDateDelta(now, { + seconds: durationSeconds, + }).toISOString(), + }); + } + + return Promise.resolve(); + }; + + // Fire a change for all feature previews + for (const feature of featurePreviews) { + this._onDidChangeFeaturePreview.fire(this.getStoredFeaturePreview(feature)); + } + }, + restoreFeaturePreviews: () => { + if (savedFeaturePreviewOverrides) { + this.getStoredFeaturePreview = savedFeaturePreviewOverrides.getFn!; + this.storeFeaturePreview = savedFeaturePreviewOverrides.setFn!; + savedFeaturePreviewOverrides = undefined; + + // Fire a change for all feature previews + for (const feature of featurePreviews) { + this._onDidChangeFeaturePreview.fire(this.getStoredFeaturePreview(feature)); + } + } + }, overrideSession: (session: AuthenticationSession | null | undefined) => { - restore ??= { session: this._session }; + savedSession ??= { session: this._session }; - setSession.call(this, session); + setSession(session); }, restoreSession: () => { - if (restore == null) return; + if (savedSession == null) return; - const { session } = restore; - restore = undefined; + const { session } = savedSession; + savedSession = undefined; setSession.call(this, session); }, @@ -250,6 +356,10 @@ export class SubscriptionService implements Disposable { registerCommand(Commands.PlusRestore, (src?: Source) => this.setProFeaturesVisibility(true, src)), registerCommand(Commands.PlusValidate, (src?: Source) => this.validate({ force: true }, src)), + + registerCommand(Commands.PlusContinueFeaturePreview, ({ feature }: { feature: FeaturePreviews }) => + this.continueFeaturePreview(feature), + ), ]; } @@ -265,6 +375,56 @@ export class SubscriptionService implements Disposable { return this._subscription; } + @gate() + @log() + async continueFeaturePreview(feature: FeaturePreviews) { + const featurePreview = this.getStoredFeaturePreview(feature); + // If the current iteration is still active, don't do anything + if (isFeaturePreviewActive(featurePreview)) return; + if (isFeaturePreviewExpired(featurePreview)) { + void window.showInformationMessage( + `Your ${proFeaturePreviewUsages}-day preview of the ${getFeaturePreviewLabel(feature)} has expired.`, + ); + return; + } + + const now = new Date(); + const usages = [ + ...featurePreview.usages, + { + startedOn: now.toISOString(), + expiresOn: createFromDateDelta(now, { + days: proFeaturePreviewUsageDurationInDays, + }).toISOString(), + }, + ]; + + await this.storeFeaturePreview(feature, usages); + + this._onDidChangeFeaturePreview.fire({ feature: feature, usages: usages }); + + if (this.container.telemetry.enabled) { + const days: FeaturePreviewActionsDayEventData = Object.fromEntries( + usages.map>((d, i) => [ + `day.${i + 1}.startedOn`, + d.startedOn, + ]), + ); + const data: FeaturePreviewActionEventData = { + action: `start-preview-trial:${feature}`, + startedOn: usages[0].startedOn, + day: usages.length, + ...days, + }; + + this.container.telemetry.sendEvent('subscription/action', data, { source: feature }); + } + } + + getFeaturePreview(feature: FeaturePreviews): FeaturePreview { + return this.getStoredFeaturePreview(feature); + } + @debug() async learnAboutPro(source: Source, originalSource: Source | undefined): Promise { if (originalSource != null) { @@ -315,46 +475,27 @@ export class SubscriptionService implements Disposable { } = this._subscription; if (account?.verified === false) { - const days = getSubscriptionTimeRemaining(this._subscription, 'days') ?? proTrialLengthInDays; - const verify: MessageItem = { title: 'Resend Email' }; - const learn: MessageItem = { title: 'See Pro Features' }; const confirm: MessageItem = { title: 'Continue', isCloseAffordance: true }; + const result = await window.showInformationMessage( - isSubscriptionPaid(this._subscription) - ? `You are now on the ${actual.name} plan. \n\nYou must first verify your email. Once verified, you will have full access to Pro features.` - : `Welcome to your ${ - effective.name - } Trial.\n\nYou must first verify your email. Once verified, you will have full access to Pro features for ${ - days < 1 ? '<1 more day' : pluralize('day', days, { infix: ' more ' }) - }.`, - { - modal: true, - detail: `Your ${ - isSubscriptionPaid(this._subscription) ? 'plan' : 'trial' - } also includes access to the GitKraken DevEx platform, unleashing powerful Git visualization & productivity capabilities everywhere you work: IDE, desktop, browser, and terminal.`, - }, + 'Welcome to GitLens', + { modal: true, detail: 'Verify the email we just sent you to start your Pro trial.' }, verify, - learn, confirm, ); if (result === verify) { void this.resendVerification(source); - } else if (result === learn) { - void this.learnAboutPro({ source: 'prompt', detail: { action: 'trial-started-verify-email' } }, source); } } else if (isSubscriptionPaid(this._subscription)) { - const learn: MessageItem = { title: 'See Pro Features' }; + const learn: MessageItem = { title: 'Learn More' }; const confirm: MessageItem = { title: 'Continue', isCloseAffordance: true }; const result = await window.showInformationMessage( - `You are now on the ${actual.name} plan and have full access to Pro features.`, - { - modal: true, - detail: 'Your plan also includes access to the GitKraken DevEx platform, unleashing powerful Git visualization & productivity capabilities everywhere you work: IDE, desktop, browser, and terminal.', - }, - learn, + `You are now on the ${actual.name} plan and have full access to all GitLens Pro features.`, + { modal: true }, confirm, + learn, ); if (result === learn) { @@ -363,10 +504,10 @@ export class SubscriptionService implements Disposable { } else if (isSubscriptionTrial(this._subscription)) { const days = getSubscriptionTimeRemaining(this._subscription, 'days') ?? 0; - const learn: MessageItem = { title: 'See Pro Features' }; + const learn: MessageItem = { title: 'Learn More' }; const confirm: MessageItem = { title: 'Continue', isCloseAffordance: true }; const result = await window.showInformationMessage( - `Welcome to your ${effective.name} Trial.\n\nYou now have full access to Pro features for ${ + `Welcome to your ${effective.name} Trial.\n\nYou now have full access to all GitLens Pro features for ${ days < 1 ? '<1 more day' : pluralize('day', days, { infix: ' more ' }) }.`, { @@ -382,13 +523,13 @@ export class SubscriptionService implements Disposable { } } else { const upgrade: MessageItem = { title: 'Upgrade to Pro' }; - const learn: MessageItem = { title: 'See Pro Features' }; + const learn: MessageItem = { title: 'Community vs. Pro' }; const confirm: MessageItem = { title: 'Continue', isCloseAffordance: true }; const result = await window.showInformationMessage( `You are now on the ${actual.name} plan.`, { modal: true, - detail: 'You only have access to Pro features on publicly-hosted repos. For full access to Pro features, please upgrade to a paid plan.\nA paid plan also includes access to the GitKraken DevEx platform, unleashing powerful Git visualization & productivity capabilities everywhere you work: IDE, desktop, browser, and terminal.', + detail: 'You only have access to Pro features on publicly-hosted repos. For full access to all Pro features, please upgrade to GitLens Pro.', }, upgrade, learn, @@ -684,11 +825,11 @@ export class SubscriptionService implements Disposable { void this.showAccountView(); if (plan.effective.id === SubscriptionPlanId.Community) { - const signUp: MessageItem = { title: 'Start Pro Trial' }; + const signUp: MessageItem = { title: 'Try GitLens Pro' }; const signIn: MessageItem = { title: 'Sign In' }; const cancel: MessageItem = { title: 'Cancel', isCloseAffordance: true }; const result = await window.showInformationMessage( - `Do you want to start your free ${proTrialLengthInDays}-day Pro trial for full access to Pro features?`, + `Do you want to start your free ${proTrialLengthInDays}-day Pro trial for full access to all GitLens Pro features?`, { modal: true }, signUp, signIn, @@ -712,11 +853,11 @@ export class SubscriptionService implements Disposable { setTimeout(async () => { const confirm: MessageItem = { title: 'Continue' }; - const learn: MessageItem = { title: 'See Pro Features' }; + const learn: MessageItem = { title: 'Learn More' }; const result = await window.showInformationMessage( `You can now preview local Pro features for ${ days < 1 ? '1 day' : pluralize('day', days) - }, or [start your free ${proTrialLengthInDays}-day Pro trial](command:gitlens.plus.signUp "Start Pro Trial") for full access to Pro features.`, + }, or for full access to all GitLens Pro features, [start your free ${proTrialLengthInDays}-day Pro trial](command:gitlens.plus.signUp "Try GitLens Pro") — no credit card required.`, confirm, learn, ); @@ -1288,6 +1429,17 @@ export class SubscriptionService implements Disposable { (subscription.plan.effective as Mutable).name = getSubscriptionPlanName( subscription.plan.effective.id, ); + // Deprecate (expire) the preview trial + if ( + subscription.previewTrial?.expiresOn == null || + new Date(subscription.previewTrial.expiresOn) >= new Date() + ) { + subscription.previewTrial = { + startedOn: subscription.previewTrial?.startedOn ?? new Date(0).toISOString(), + ...subscription.previewTrial, + expiresOn: new Date(0).toISOString(), + }; + } } return subscription; @@ -1300,6 +1452,17 @@ export class SubscriptionService implements Disposable { }); } + private getStoredFeaturePreview(feature: FeaturePreviews): FeaturePreview { + return { + feature: feature, + usages: this.container.storage.get(`plus:preview:${feature}:usages`, []), + }; + } + + private storeFeaturePreview(feature: FeaturePreviews, usages: StoredFeaturePreviewUsagePeriod[]): Promise { + return this.container.storage.store(`plus:preview:${feature}:usages`, usages); + } + private _cancellationSource: CancellationTokenSource | undefined; private _updateAccessContextDebounced: Deferrable | undefined; @@ -1411,7 +1574,7 @@ export class SubscriptionService implements Disposable { infix: ' more ', })} in your **${effective.name}** trial.` : `You have ${pluralize('day', remaining ?? 0)} remaining in your **${effective.name}** trial.` - } Once your trial ends, you'll need a paid plan for full access to [Pro features](command:gitlens.openWalkthrough?%7B%22step%22%3A%22pro-trial%22,%22source%22%3A%22prompt%22%7D).\n\nYour trial also includes access to the [GitKraken DevEx platform](${ + } Once your trial ends, you'll need [GitLens Pro](command:gitlens.openWalkthrough?%7B%22step%22%3A%22pro-trial%22,%22source%22%3A%22prompt%22%7D) for full access to Pro features.\n\nYour trial also includes access to the [GitKraken DevEx platform](${ urls.platform }), unleashing powerful Git visualization & productivity capabilities everywhere you work: IDE, desktop, browser, and terminal.`, true, diff --git a/src/plus/utils.ts b/src/plus/utils.ts index f1fd1fffafbc2..d4bb44e5b4aba 100644 --- a/src/plus/utils.ts +++ b/src/plus/utils.ts @@ -52,11 +52,11 @@ export async function ensurePaidPlan( void container.subscription.startPreviewTrial(source); break; } else if (subscription.account == null) { - const signUp = { title: 'Start Pro Trial' }; + const signUp = { title: 'Try GitLens Pro' }; const signIn = { title: 'Sign In' }; const cancel = { title: 'Cancel', isCloseAffordance: true }; const result = await window.showWarningMessage( - `${title}\n\nDo you want to start your free ${proTrialLengthInDays}-day Pro trial for full access to Pro features?`, + `${title}\n\nDo you want to start your free ${proTrialLengthInDays}-day Pro trial for full access to all GitLens Pro features?`, { modal: true }, signUp, signIn, @@ -72,7 +72,7 @@ export async function ensurePaidPlan( const upgrade = { title: 'Upgrade to Pro' }; const cancel = { title: 'Cancel', isCloseAffordance: true }; const result = await window.showWarningMessage( - `${title}\n\nDo you want to upgrade for full access to Pro features?`, + `${title}\n\nDo you want to upgrade for full access to all GitLens Pro features?`, { modal: true }, upgrade, cancel, diff --git a/src/plus/webviews/graph/graphWebview.ts b/src/plus/webviews/graph/graphWebview.ts index 4a69e82a51d0d..635a8570e47ba 100644 --- a/src/plus/webviews/graph/graphWebview.ts +++ b/src/plus/webviews/graph/graphWebview.ts @@ -24,7 +24,8 @@ import type { GraphShownTelemetryContext, GraphTelemetryContext, TelemetryEvents import type { Container } from '../../../container'; import { CancellationError } from '../../../errors'; import type { CommitSelectedEvent } from '../../../eventBus'; -import { PlusFeatures } from '../../../features'; +import type { FeaturePreview } from '../../../features'; +import { isFeaturePreviewActive, PlusFeatures } from '../../../features'; import { executeGitCommand } from '../../../git/actions'; import * as BranchActions from '../../../git/actions/branch'; import { @@ -126,7 +127,7 @@ import type { IpcCallMessageType, IpcMessage, IpcNotification } from '../../../w import type { WebviewHost, WebviewProvider, WebviewShowingArgs } from '../../../webviews/webviewProvider'; import type { WebviewPanelShowCommandArgs, WebviewShowOptions } from '../../../webviews/webviewsController'; import { isSerializedState } from '../../../webviews/webviewsController'; -import type { SubscriptionChangeEvent } from '../../gk/account/subscriptionService'; +import type { FeaturePreviewChangeEvent, SubscriptionChangeEvent } from '../../gk/account/subscriptionService'; import type { ConnectionStateChangeEvent } from '../../integrations/integrationService'; import { remoteProviderIdToIntegrationId } from '../../integrations/integrationService'; import { getPullRequestBranchDeepLink } from '../../launchpad/launchpadProvider'; @@ -206,6 +207,7 @@ import { DidChangeWorkingTreeNotification, DidFetchNotification, DidSearchNotification, + DidStartFeaturePreviewNotification, DoubleClickedCommandType, EnsureRowRequest, GetCountsRequest, @@ -294,6 +296,7 @@ export class GraphWebviewProvider implements WebviewProvider | null | undefined; private _search: GitSearch | undefined; @@ -317,6 +320,7 @@ export class GraphWebviewProvider implements WebviewProvider { if (this._etag !== this.container.git.etag) { if (this._discovering != null) { @@ -916,6 +920,17 @@ export class GraphWebviewProvider implements WebviewProvider({ args: { 0: e => e.toString() } }) private onRepositoryChanged(e: RepositoryChangeEvent) { if ( @@ -1874,6 +1889,21 @@ export class GraphWebviewProvider implements WebviewProvider>[0] | undefined, + featurePreview: FeaturePreview, + ) { + return (access?.allowed ?? false) !== false || isFeaturePreviewActive(featurePreview); + } + private getGraphItemContext(context: unknown): unknown | undefined { const item = typeof context === 'string' ? JSON.parse(context) : context; // Add the `webview` prop to the context if its missing (e.g. when this context doesn't come through via the context menus) @@ -2516,8 +2553,11 @@ export class GraphWebviewProvider implements WebviewProvider(scope, 'didFetch'); +export interface DidStartFeaturePreviewParams { + featurePreview: FeaturePreview; + allowed: boolean; +} +export const DidStartFeaturePreviewNotification = new IpcNotification( + scope, + 'featurePreview/didStart', +); + export interface ShowInCommitGraphCommandArgs { ref: GitReference; preserveFocus?: boolean; diff --git a/src/plus/workspaces/workspacesService.ts b/src/plus/workspaces/workspacesService.ts index d22de86f38a82..7b88a3d586c50 100644 --- a/src/plus/workspaces/workspacesService.ts +++ b/src/plus/workspaces/workspacesService.ts @@ -1,7 +1,6 @@ import { getSupportedWorkspacesPathMappingProvider } from '@env/providers'; import type { CancellationToken, Event, MessageItem, QuickPickItem } from 'vscode'; import { Disposable, EventEmitter, ProgressLocation, Uri, window, workspace } from 'vscode'; -import { SubscriptionState } from '../../constants.subscription'; import type { Container } from '../../container'; import type { GitRemote } from '../../git/models/remote'; import { RemoteResourceType } from '../../git/models/remoteResource'; @@ -11,6 +10,7 @@ import { log } from '../../system/decorators/log'; import { normalizePath } from '../../system/path'; import type { OpenWorkspaceLocation } from '../../system/vscode/utils'; import { openWorkspace } from '../../system/vscode/utils'; +import { isSubscriptionStatePaidOrTrial } from '../gk/account/subscription'; import type { SubscriptionChangeEvent } from '../gk/account/subscriptionService'; import type { ServerConnection } from '../gk/serverConnection'; import type { @@ -115,11 +115,7 @@ export class WorkspacesService implements Disposable { } let filteredSharedWorkspaceCount = 0; - const isPlusEnabled = - subscription.state === SubscriptionState.ProPreview || - subscription.state === SubscriptionState.ProTrial || - subscription.state === SubscriptionState.Paid; - + const isPlusEnabled = isSubscriptionStatePaidOrTrial(subscription.state); if (workspaces?.length) { for (const workspace of workspaces) { const localPath = await this._workspacesPathProvider.getCloudWorkspaceCodeWorkspacePath(workspace.id); diff --git a/src/quickpicks/items/directive.ts b/src/quickpicks/items/directive.ts index ba5b010f0dc62..74fd024935288 100644 --- a/src/quickpicks/items/directive.ts +++ b/src/quickpicks/items/directive.ts @@ -1,5 +1,6 @@ import type { QuickPickItem, ThemeIcon, Uri } from 'vscode'; import { proPreviewLengthInDays, proTrialLengthInDays } from '../../constants.subscription'; +import { pluralize } from '../../system/string'; export enum Directive { Back, @@ -64,8 +65,11 @@ export function createDirectiveQuickPickItem( detail = `Continuing gives you ${proPreviewLengthInDays} days to preview this and other local Pro features`; break; case Directive.StartProTrial: - label = 'Start Pro Trial'; - detail = `Start your free ${proTrialLengthInDays}-day Pro trial for full access to Pro features`; + label = 'Try GitLens Pro'; + detail = `Get ${pluralize( + 'day', + proTrialLengthInDays, + )} of GitLens Pro for free — no credit card required.`; break; case Directive.RequiresVerification: label = 'Resend Email'; @@ -74,9 +78,9 @@ export function createDirectiveQuickPickItem( case Directive.RequiresPaidSubscription: label = 'Upgrade to Pro'; if (detail != null) { - description ??= ' \u2014\u00a0\u00a0 a paid plan is required to use this Pro feature'; + description ??= ' \u2014\u00a0\u00a0 GitLens Pro is required to use this feature'; } else { - detail = 'Upgrading to a paid plan is required to use this Pro feature'; + detail = 'Upgrading to GitLens Pro is required to use this feature'; } break; } diff --git a/src/system/vscode/storage.ts b/src/system/vscode/storage.ts index 6e6d686f92edb..10f249c984a89 100644 --- a/src/system/vscode/storage.ts +++ b/src/system/vscode/storage.ts @@ -69,10 +69,7 @@ export class Storage implements Disposable { return this.deleteWithPrefixCore(prefix); } - async deleteWithPrefixCore( - prefix?: ExtractPrefixes, - exclude?: GlobalStorageKeys[], - ): Promise { + async deleteWithPrefixCore(prefix?: ExtractPrefixes, exclude?: RegExp): Promise { const qualifiedKeyPrefix = `${extensionPrefix}:`; for (const qualifiedKey of this.context.globalState.keys() as `${typeof extensionPrefix}:${GlobalStorageKeys}`[]) { @@ -80,7 +77,7 @@ export class Storage implements Disposable { const key = qualifiedKey.substring(qualifiedKeyPrefix.length) as GlobalStorageKeys; if (prefix == null || key === prefix || key.startsWith(`${prefix}:`)) { - if (exclude?.includes(key)) continue; + if (exclude?.test(key)) continue; await this.context.globalState.update(qualifiedKey, undefined); this._onDidChange.fire({ key: key, workspace: false }); @@ -90,7 +87,7 @@ export class Storage implements Disposable { @debug({ logThreshold: 250 }) async reset(): Promise { - return this.deleteWithPrefixCore(undefined, ['premium:subscription']); + return this.deleteWithPrefixCore(undefined, /^(premium:subscription|plus:preview:.*)$/); } @debug({ args: { 1: false }, logThreshold: 250 }) diff --git a/src/system/webview.ts b/src/system/webview.ts index 7687fc69ea2ec..4cbcc27b8e50f 100644 --- a/src/system/webview.ts +++ b/src/system/webview.ts @@ -1,7 +1,7 @@ import type { WebviewIds, WebviewViewIds } from '../constants.views'; export function createWebviewCommandLink( - command: `${WebviewIds | WebviewViewIds}.${string}`, + command: `${WebviewIds | WebviewViewIds}.${string}` | `gitlens.plus.${string}`, webviewId: WebviewIds | WebviewViewIds, webviewInstanceId: string | undefined, args?: T, diff --git a/src/uris/deepLinks/deepLinkService.ts b/src/uris/deepLinks/deepLinkService.ts index 4b1124f2f1a1c..e073d3d2316d7 100644 --- a/src/uris/deepLinks/deepLinkService.ts +++ b/src/uris/deepLinks/deepLinkService.ts @@ -647,7 +647,7 @@ export class DeepLinkService implements Disposable { )) ) { action = DeepLinkServiceAction.DeepLinkErrored; - message = 'Paid plan required to open link'; + message = 'GitLens Pro is required to open link'; break; } diff --git a/src/views/nodes/worktreesNode.ts b/src/views/nodes/worktreesNode.ts index 3d7772e4b81d0..46c6d0b8f105f 100644 --- a/src/views/nodes/worktreesNode.ts +++ b/src/views/nodes/worktreesNode.ts @@ -76,7 +76,7 @@ export class WorktreesNode extends CacheableChildrenViewNode<'worktrees', ViewsW item.contextValue = ContextValues.Worktrees; item.description = access.allowed ? undefined - : ` ${GlyphChars.Warning} Requires a trial or paid plan for use on privately-hosted repos`; + : ` ${GlyphChars.Warning} Use on privately-hosted repos requires GitLens Pro`; // TODO@eamodio `folder` icon won't work here for some reason item.iconPath = new ThemeIcon('folder-opened'); return item; diff --git a/src/webviews/apps/media/graph-commit-search.png b/src/webviews/apps/media/graph-commit-search.png new file mode 100644 index 0000000000000000000000000000000000000000..b2cf3e00fc1be8bcce2ee2ed068b9be179606332 GIT binary patch literal 92232 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

jHNd!5_au;~xU5wRt2}wa1vj)lig@ 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 ayM6;HXIVbojq8zc%5 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 a^Z@45&k^4A63~1CeAHfPE5Q_ANB$of^iJ9U literal 0 HcmV?d00001 diff --git a/src/webviews/apps/plus/graph/GraphWrapper.tsx b/src/webviews/apps/plus/graph/GraphWrapper.tsx index 9f95da0833fca..3bdc69196bc47 100644 --- a/src/webviews/apps/plus/graph/GraphWrapper.tsx +++ b/src/webviews/apps/plus/graph/GraphWrapper.tsx @@ -64,6 +64,7 @@ import { DidChangeWorkingTreeNotification, DidFetchNotification, DidSearchNotification, + DidStartFeaturePreviewNotification, } from '../../../../plus/webviews/graph/protocol'; import { createCommandLink } from '../../../../system/commands'; import { filterMap, first, groupByFilterMap, join } from '../../../../system/iterable'; @@ -282,6 +283,8 @@ export function GraphWrapper({ const [windowFocused, setWindowFocused] = useState(state.windowFocused); const [allowed, setAllowed] = useState(state.allowed ?? false); const [subscription, setSubscription] = useState(state.subscription); + const [featurePreview, setFeaturePreview] = useState(state.featurePreview); + // search state const searchEl = useRef(null); const [searchQuery, setSearchQuery] = useState(undefined); @@ -318,6 +321,10 @@ export function GraphWrapper({ setStyleProps(state.theming); } break; + case DidStartFeaturePreviewNotification: + setFeaturePreview(state.featurePreview); + setAllowed(state.allowed ?? false); + break; case DidChangeAvatarsNotification: setAvatars(state.avatars); break; @@ -420,6 +427,7 @@ export function GraphWrapper({ setRepo(repos.find(item => item.path === state.selectedRepository)); // setGraphDateFormatter(getGraphDateFormatter(config)); setSubscription(state.subscription); + setFeaturePreview(state.featurePreview); const { results, resultsError } = getSearchResultModel(state); setSearchResultsError(resultsError); @@ -1530,10 +1538,22 @@ export function GraphWrapper({

diff --git a/src/webviews/apps/plus/graph/graph.scss b/src/webviews/apps/plus/graph/graph.scss index 2791dea4325e0..4b1a08300d297 100644 --- a/src/webviews/apps/plus/graph/graph.scss +++ b/src/webviews/apps/plus/graph/graph.scss @@ -979,8 +979,8 @@ gl-feature-gate gl-feature-badge { } &__gate { - // top: 34px; /* height of the header bar */ - padding-top: 34px; + // top: 40px; /* height of the header bar */ + padding-top: 40px; } &__header { diff --git a/src/webviews/apps/plus/graph/graph.tsx b/src/webviews/apps/plus/graph/graph.tsx index f215c20b40da0..6e9aa518f819b 100644 --- a/src/webviews/apps/plus/graph/graph.tsx +++ b/src/webviews/apps/plus/graph/graph.tsx @@ -38,6 +38,7 @@ import { DidChangeWorkingTreeNotification, DidFetchNotification, DidSearchNotification, + DidStartFeaturePreviewNotification, DoubleClickedCommandType, EnsureRowRequest, GetMissingAvatarsCommand, @@ -165,7 +166,11 @@ export class GraphApp extends App { this.state.avatars = msg.params.avatars; this.setState(this.state, DidChangeAvatarsNotification); break; - + case DidStartFeaturePreviewNotification.is(msg): + this.state.featurePreview = msg.params.featurePreview; + this.state.allowed = msg.params.allowed; + this.setState(this.state, DidStartFeaturePreviewNotification); + break; case DidChangeBranchStateNotification.is(msg): this.state.branchState = msg.params.branchState; this.setState(this.state, DidChangeBranchStateNotification); diff --git a/src/webviews/apps/plus/shared/components/feature-gate-plus-state.ts b/src/webviews/apps/plus/shared/components/feature-gate-plus-state.ts index 0f995ad28fc07..f79de285e5a4e 100644 --- a/src/webviews/apps/plus/shared/components/feature-gate-plus-state.ts +++ b/src/webviews/apps/plus/shared/components/feature-gate-plus-state.ts @@ -1,8 +1,15 @@ import { css, html, LitElement, nothing } from 'lit'; import { customElement, property, query } from 'lit/decorators.js'; +import { urls } from '../../../../../constants'; import { Commands } from '../../../../../constants.commands'; -import { proTrialLengthInDays, SubscriptionState } from '../../../../../constants.subscription'; +import { + proFeaturePreviewUsages, + proTrialLengthInDays, + SubscriptionState, +} from '../../../../../constants.subscription'; import type { Source } from '../../../../../constants.telemetry'; +import type { FeaturePreview } from '../../../../../features'; +import { isFeaturePreviewExpired } from '../../../../../features'; import type { Promo } from '../../../../../plus/gk/account/promos'; import { getApplicablePromo } from '../../../../../plus/gk/account/promos'; import { pluralize } from '../../../../../system/string'; @@ -35,7 +42,7 @@ export class GlFeatureGatePlusState extends LitElement { } @container (max-width: 600px) { - :host([appearance='welcome']) gl-button { + :host([appearance='welcome']) gl-button:not(.inline) { display: block; margin-left: auto; margin-right: auto; @@ -60,6 +67,14 @@ export class GlFeatureGatePlusState extends LitElement { text-align: center; } + .actions-row { + display: flex; + gap: 0.6em; + align-items: baseline; + justify-content: center; + white-space: nowrap; + } + .hint { border-bottom: 1px dashed currentColor; } @@ -69,6 +84,12 @@ export class GlFeatureGatePlusState extends LitElement { @query('gl-button') private readonly button!: GlButton; + @property({ type: Object }) + featurePreview?: FeaturePreview; + + @property({ type: String }) + featurePreviewCommandLink?: string; + @property({ type: String }) appearance?: 'alert' | 'welcome'; @@ -81,6 +102,9 @@ export class GlFeatureGatePlusState extends LitElement { @property({ attribute: false, type: Number }) state?: SubscriptionState; + @property({ type: String }) + webroot?: string; + protected override firstUpdated() { if (this.appearance === 'alert') { queueMicrotask(() => this.button.focus()); @@ -100,6 +124,7 @@ export class GlFeatureGatePlusState extends LitElement { switch (this.state) { case SubscriptionState.VerificationRequired: return html` +

You must verify your email before you can continue.

`; + // case SubscriptionState.Community: + // return html` + // Continue + //

+ // Continuing gives you 3 days to preview + // ${this.featureWithArticleIfNeeded ? `${this.featureWithArticleIfNeeded} and other ` : ''}local + // Pro features.
+ // ${appearance !== 'alert' ? html`
` : ''} For full access to Pro features + // start your free ${proTrialLengthInDays}-day Pro trial + // or + // sign in. + //

+ // `; case SubscriptionState.Community: - return html` - Continue + case SubscriptionState.ProPreviewExpired: + if (this.featurePreview && !isFeaturePreviewExpired(this.featurePreview)) { + return html`${this.renderFeaturePreview(this.featurePreview)}`; + } + + return html`

- Continuing gives you 3 days to preview - ${this.featureWithArticleIfNeeded ? `${this.featureWithArticleIfNeeded} and other ` : ''}local - Pro features.
- ${appearance !== 'alert' ? html`
` : ''} For full access to Pro features - start your free ${proTrialLengthInDays}-day Pro trialGitLens Pro. +

+

+  Try GitLens Pro or + sign in - or - sign in.

- `; - - case SubscriptionState.ProPreviewExpired: - return html` - Start Pro Trial

- Start your free ${proTrialLengthInDays}-day Pro trial to try - ${this.featureWithArticleIfNeeded ? `${this.featureWithArticleIfNeeded} and other ` : ''}Pro - features, or - sign in. -

- `; + Get ${pluralize('day', proTrialLengthInDays)} of + GitLens Pro for free — no credit card required. +

`; case SubscriptionState.ProTrialExpired: - return html` Upgrade to Pro - ${this.renderPromo(promo)} -

- Your Pro trial has ended. Please upgrade for full access to - ${this.featureWithArticleIfNeeded ? `${this.featureWithArticleIfNeeded} and other ` : ''}Pro - features. -

`; + return html` +

Use on privately-hosted repos requires GitLens Pro.

+

+ Upgrade to Proor + sign in +

+

${this.renderPromo(promo)}

`; case SubscriptionState.ProTrialReactivationEligible: - return html` - Continue + return html` +

+ Continueor + sign in +

- Reactivate your Pro trial and experience + Reactivate your GitLens Pro trial and experience ${this.featureWithArticleIfNeeded ? `${this.featureWithArticleIfNeeded} and ` : ''}all the new Pro features — free for another ${pluralize('day', proTrialLengthInDays)}! -

- `; +

`; } return undefined; } + private renderFeaturePreview(featurePreview: FeaturePreview) { + const appearance = (this.appearance ?? 'alert') === 'alert' ? 'alert' : nothing; + const used = featurePreview.usages.length; + + if (used === 0) { + return html` + Continue +

+ Continue to preview + ${this.featureWithArticleIfNeeded ? `${this.featureWithArticleIfNeeded} on` : ''} privately-hosted + repos, or + sign in.
+ ${appearance !== 'alert' ? html`
` : ''} For full access to all GitLens Pro features, + start your free ${proTrialLengthInDays}-day Pro trial + — no credit card required. +

`; + } + + const left = proFeaturePreviewUsages - used; + + return html` + ${this.renderFeaturePreviewStep(featurePreview, used)} +

+ Continue Previewor + sign in +

+

+ After continuing, you will have ${pluralize('day', left, { infix: ' more ' })} to preview + ${this.featureWithArticleIfNeeded ? `${this.featureWithArticleIfNeeded} on` : ''} privately-hosted + repos.
+ ${appearance !== 'alert' ? html`
` : ''} For full access to all GitLens Pro features, + start your free ${proTrialLengthInDays}-day Pro trial + — no credit card required. +

+ `; + } + + private renderFeaturePreviewStep(featurePreview: FeaturePreview, used: number) { + switch (featurePreview.feature) { + case 'graph': + switch (used) { + case 1: + return html`

Try Commit Search

+

+ Search for commits in your repo by author, commit message, SHA, file, change, or type. + Turn on the commit filter to show only commits that match your query. +

+

+ Graph Commit Search +

`; + + case 2: + return html` +

Try the Graph Minimap

+

+ Visualize the amount of changes to a repository over time, and inspect specific points + in the history to locate branches, stashes, tags and pull requests. +

+

+ Graph Minimap +

+ `; + + default: + return html``; + } + + default: + return html``; + } + } + private renderPromo(promo: Promo | undefined) { return html``; } diff --git a/src/webviews/apps/plus/shared/components/home-account-content.ts b/src/webviews/apps/plus/shared/components/home-account-content.ts index cb7233a5f0dbb..28d57e1fc0544 100644 --- a/src/webviews/apps/plus/shared/components/home-account-content.ts +++ b/src/webviews/apps/plus/shared/components/home-account-content.ts @@ -316,10 +316,10 @@ export class GLHomeAccountContent extends LitElement { >

- Your ${getSubscriptionPlanName(this.planId)} plan provides full access to all Pro features - and the GitKraken DevEx platform, unleashing powerful Git - visualization & productivity capabilities everywhere you work: IDE, desktop, browser, - and terminal. + Your ${getSubscriptionPlanName(this.planId)} plan provides full access to all GitLens Pro + features and the GitKraken DevEx platform, unleashing + powerful Git visualization & productivity capabilities everywhere you work: IDE, + desktop, browser, and terminal.

`; @@ -367,11 +367,14 @@ export class GLHomeAccountContent extends LitElement { case SubscriptionState.ProTrialExpired: return html` `; @@ -401,15 +404,16 @@ export class GLHomeAccountContent extends LitElement { return html` `; } diff --git a/src/webviews/apps/plus/shared/components/vscode.css.ts b/src/webviews/apps/plus/shared/components/vscode.css.ts index c06e6459adb31..cd4f1d1babad1 100644 --- a/src/webviews/apps/plus/shared/components/vscode.css.ts +++ b/src/webviews/apps/plus/shared/components/vscode.css.ts @@ -2,11 +2,18 @@ import { css } from 'lit'; export const linkStyles = css` a { + border: 0; color: var(--link-foreground); + font-weight: 400; + outline: none; text-decoration: var(--link-decoration-default, none); } - a:focus { + a:focus, + a:focus-visible { outline-color: var(--focus-border); + outline-style: solid; + outline-width: 1px; + border-radius: 0.2rem; } a:hover { color: var(--link-foreground-active); diff --git a/src/webviews/apps/shared/components/feature-badge.ts b/src/webviews/apps/shared/components/feature-badge.ts index da5981a592614..59e6260d4f40b 100644 --- a/src/webviews/apps/shared/components/feature-badge.ts +++ b/src/webviews/apps/shared/components/feature-badge.ts @@ -176,13 +176,11 @@ export class GlFeatureBadge extends LitElement { } } - return this.cloud ? html`${text}☁️` : text; + return text; } private renderPopoverHeader() { - const text = html`${this.preview ? 'Preview feature' : 'Pro feature'}${this.cloud ? ' ☁️' : ''}`; + const text = html`${this.preview ? 'Preview feature' : 'Pro feature'}`; if (this.state === SubscriptionState.Paid) { return html``; @@ -192,24 +190,24 @@ export class GlFeatureBadge extends LitElement { if (this.preview) { return html``; } return html``; } if (this.preview) { return html``; } return html``; } @@ -265,7 +263,9 @@ export class GlFeatureBadge extends LitElement { content = html`

Your Pro trial has ended. You can now only use Pro features on publicly-hosted repos.

- ${this.renderUpgradeActions(html`

Please upgrade for full access to Pro features:

`)}`; + ${this.renderUpgradeActions( + html`

Please upgrade for full access to all GitLens Pro features:

`, + )}`; break; case SubscriptionState.ProTrialReactivationEligible: diff --git a/src/webviews/apps/shared/components/feature-gate.ts b/src/webviews/apps/shared/components/feature-gate.ts index 9bba2a5095de6..8dbc31bc4f3ad 100644 --- a/src/webviews/apps/shared/components/feature-gate.ts +++ b/src/webviews/apps/shared/components/feature-gate.ts @@ -2,8 +2,10 @@ import { css, html, LitElement } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import type { SubscriptionState } from '../../../../constants.subscription'; import type { Source } from '../../../../constants.telemetry'; +import type { FeaturePreview } from '../../../../features'; import { isSubscriptionStatePaidOrTrial } from '../../../../plus/gk/account/subscription'; import '../../plus/shared/components/feature-gate-plus-state'; +import { linkStyles } from '../../plus/shared/components/vscode.css'; declare global { interface HTMLElementTagNameMap { @@ -15,84 +17,94 @@ declare global { @customElement('gl-feature-gate') export class GlFeatureGate extends LitElement { - static override styles = css` - :host { - --background: var(--vscode-sideBar-background); - --foreground: var(--vscode-sideBar-foreground); - --link-foreground: var(--vscode-textLink-foreground); - --link-foreground-active: var(--vscode-textLink-activeForeground); - - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - overflow: auto; - z-index: 100; - - box-sizing: border-box; - } - - :host-context(body[data-placement='editor']), - :host([appearance='alert']) { - --background: transparent; - --foreground: var(--vscode-editor-foreground); - - backdrop-filter: blur(3px) saturate(0.8); - padding: 0 2rem; - } - - ::slotted(p) { - margin: revert !important; - } - - ::slotted(p:first-child) { - margin-top: 0 !important; - } - - section { - --section-foreground: var(--foreground); - --section-background: var(--background); - --section-border-color: transparent; - - display: flex; - flex-direction: column; - padding: 0 2rem 1.3rem 2rem; - background: var(--section-background); - color: var(--section-foreground); - border: 1px solid var(--section-border-color); - - height: min-content; - } - - :host-context(body[data-placement='editor']) section, - :host([appearance='alert']) section { - --section-foreground: var(--color-alert-foreground); - --section-background: var(--color-alert-infoBackground); - --section-border-color: var(--color-alert-infoBorder); - - --link-decoration-default: underline; - --link-foreground: var(--vscode-foreground); - --link-foreground-active: var(--vscode-foreground); - - border-radius: 0.3rem; - max-width: 600px; - max-height: min-content; - margin: 0.2rem auto; - padding: 1.3rem; - } - - :host-context(body[data-placement='editor']) section ::slotted(gl-button), - :host([appearance='alert']) section ::slotted(gl-button) { - display: block; - margin-left: auto; - margin-right: auto; - } - `; + static override styles = [ + linkStyles, + css` + :host { + --background: var(--vscode-sideBar-background); + --foreground: var(--vscode-sideBar-foreground); + + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + overflow: auto; + z-index: 100; + + box-sizing: border-box; + } + + :host-context(body[data-placement='editor']), + :host([appearance='alert']) { + --background: transparent; + --foreground: var(--vscode-editor-foreground); + + backdrop-filter: blur(3px) saturate(0.8); + padding: 0 2rem; + } + + ::slotted(p) { + margin: revert !important; + } + + ::slotted(p:first-child) { + margin-top: 0 !important; + } + + section { + --section-foreground: var(--foreground); + --section-background: var(--background); + --section-border-color: transparent; + + display: flex; + flex-direction: column; + padding: 0 2rem 1.3rem 2rem; + background: var(--section-background); + color: var(--section-foreground); + border: 1px solid var(--section-border-color); + + height: min-content; + } + + :host-context(body[data-placement='editor']) section, + :host([appearance='alert']) section { + --section-foreground: var(--color-alert-foreground); + --section-background: var(--color-alert-infoBackground); + --section-border-color: var(--color-alert-infoBorder); + + --link-decoration-default: underline; + --link-foreground: var(--vscode-foreground); + /* --link-foreground-active: var(--vscode-foreground); */ + + /* --link-foreground: var(--vscode-textLink-foreground); */ + --link-foreground-active: var(--vscode-textLink-activeForeground); + + border-radius: 0.3rem; + max-width: 600px; + max-height: min-content; + margin: 0.2rem auto; + padding: 1.3rem; + } + + :host-context(body[data-placement='editor']) section ::slotted(gl-button), + :host([appearance='alert']) section ::slotted(gl-button) { + display: block; + margin-left: auto; + margin-right: auto; + } + `, + ]; @property({ reflect: true }) appearance?: 'alert' | 'welcome'; + @property({ type: Object }) + featurePreview?: FeaturePreview; + + @property({ type: String }) + featurePreviewCommandLink?: string; + @property() featureWithArticleIfNeeded?: string; @@ -105,6 +117,9 @@ export class GlFeatureGate extends LitElement { @property({ type: Boolean }) visible?: boolean; + @property({ type: String }) + webroot?: string; + override render() { if (!this.visible || (this.state != null && isSubscriptionStatePaidOrTrial(this.state))) { this.hidden = true; @@ -117,16 +132,21 @@ export class GlFeatureGate extends LitElement { : 'welcome'; this.hidden = false; + return html`
- + .webroot=${this.webroot} + > + +
`; } diff --git a/walkthroughs/welcome/get-started-community.md b/walkthroughs/welcome/get-started-community.md index f0548b34acf5e..465a1051d777a 100644 --- a/walkthroughs/welcome/get-started-community.md +++ b/walkthroughs/welcome/get-started-community.md @@ -4,4 +4,4 @@ Accelerate PR reviews, gain actionable code insights with visualizations, and streamline collaboration to supercharge your Git and VS Code experience. Leverage powerful workflows with GitLens Pro that will increase productivity for you and your team. -[Get started with GitLens Pro](command:gitlens.walkthrough.plus.signUp) free for 14 days—no credit card required. +[Get started with GitLens Pro](command:gitlens.walkthrough.plus.signUp) free for 14 days — no credit card required. diff --git a/walkthroughs/welcome/welcome-in-trial-expired-eligible.md b/walkthroughs/welcome/welcome-in-trial-expired-eligible.md index c5d9de3762515..1f61654453639 100644 --- a/walkthroughs/welcome/welcome-in-trial-expired-eligible.md +++ b/walkthroughs/welcome/welcome-in-trial-expired-eligible.md @@ -6,4 +6,4 @@ Access features that accelerate PR reviews, provide actionable code visuals, and streamline collaboration to supercharge Git and VS Code. There are workflows in the walkthrough that utilize Pro features designed to further increase developer productivity for professional developers and teams. -[Get started with GitLens Pro](command:gitlens.walkthrough.plus.signUp) by creating for an account to receive 14 days free. No Credit Card Required. +[Get started with GitLens Pro](command:gitlens.walkthrough.plus.signUp) free for 14 days — no credit card required.