diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json
index c1b7689848c..703d706bfb6 100644
--- a/apps/browser/src/_locales/en/messages.json
+++ b/apps/browser/src/_locales/en/messages.json
@@ -5201,6 +5201,12 @@
"changeAtRiskPassword": {
"message": "Change at-risk password"
},
+ "settingsVaultOptions": {
+ "message": "Vault options"
+ },
+ "emptyVaultDescription": {
+ "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here."
+ },
"introCarouselLabel": {
"message": "Welcome to Bitwarden"
},
@@ -5228,6 +5234,21 @@
"secureDevicesBody": {
"message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps."
},
+ "emptyVaultNudgeTitle": {
+ "message": "Import existing passwords"
+ },
+ "emptyVaultNudgeBody": {
+ "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them."
+ },
+ "emptyVaultNudgeButton": {
+ "message": "Import now"
+ },
+ "hasItemsVaultNudgeTitle": {
+ "message": "Welcome to your vault!"
+ },
+ "hasItemsVaultNudgeBody": {
+ "message": "Autofill items for the current page\nFavorite items for easy access\nSearch your vault for something else"
+ },
"phishingPageTitle":{
"message": "Phishing website"
},
diff --git a/apps/browser/src/autofill/content/components/cipher/cipher-info.ts b/apps/browser/src/autofill/content/components/cipher/cipher-info.ts
index e3d237b9bc6..df3f2d7fa16 100644
--- a/apps/browser/src/autofill/content/components/cipher/cipher-info.ts
+++ b/apps/browser/src/autofill/content/components/cipher/cipher-info.ts
@@ -14,7 +14,7 @@ export function CipherInfo({ cipher, theme }: { cipher: NotificationCipherData;
return html`
-
+
${[
name,
hasIndicatorIcons
diff --git a/apps/browser/src/popup/tabs-v2.component.ts b/apps/browser/src/popup/tabs-v2.component.ts
index 1392dc565ab..24ce9d8cb12 100644
--- a/apps/browser/src/popup/tabs-v2.component.ts
+++ b/apps/browser/src/popup/tabs-v2.component.ts
@@ -18,9 +18,9 @@ export class TabsV2Component {
protected navButtons$ = combineLatest([
this.configService.getFeatureFlag$(FeatureFlag.PM8851_BrowserOnboardingNudge),
- this.hasNudgeService.shouldShowNudge$(),
+ this.hasNudgeService.nudgeStatus$(),
]).pipe(
- map(([onboardingFeatureEnabled, showNudge]) => {
+ map(([onboardingFeatureEnabled, nudgeStatus]) => {
return [
{
label: "vault",
@@ -45,7 +45,7 @@ export class TabsV2Component {
page: "/tabs/settings",
iconKey: "cog",
iconKeyActive: "cog-f",
- showBerry: onboardingFeatureEnabled && showNudge,
+ showBerry: onboardingFeatureEnabled && !nudgeStatus.hasSpotlightDismissed,
},
];
}),
diff --git a/apps/browser/src/tools/popup/settings/settings-v2.component.html b/apps/browser/src/tools/popup/settings/settings-v2.component.html
index 26aeea4f20a..b6f98b649fe 100644
--- a/apps/browser/src/tools/popup/settings/settings-v2.component.html
+++ b/apps/browser/src/tools/popup/settings/settings-v2.component.html
@@ -29,9 +29,26 @@
-
+
- {{ "vault" | i18n }}
+
+
{{ "settingsVaultOptions" | i18n }}
+
+
1
+
+
diff --git a/apps/browser/src/tools/popup/settings/settings-v2.component.ts b/apps/browser/src/tools/popup/settings/settings-v2.component.ts
index 5f3eb1c8f12..737d79ea4ca 100644
--- a/apps/browser/src/tools/popup/settings/settings-v2.component.ts
+++ b/apps/browser/src/tools/popup/settings/settings-v2.component.ts
@@ -1,9 +1,14 @@
import { CommonModule } from "@angular/common";
-import { Component } from "@angular/core";
+import { Component, OnInit } from "@angular/core";
import { RouterModule } from "@angular/router";
+import { firstValueFrom, Observable } from "rxjs";
import { JslibModule } from "@bitwarden/angular/jslib.module";
-import { ItemModule } from "@bitwarden/components";
+import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
+import { getUserId } from "@bitwarden/common/auth/services/account.service";
+import { UserId } from "@bitwarden/common/types/guid";
+import { BadgeComponent, ItemModule } from "@bitwarden/components";
+import { NudgeStatus, VaultNudgesService, VaultNudgeType } from "@bitwarden/vault";
import { CurrentAccountComponent } from "../../../auth/popup/account-switching/current-account.component";
import { PopOutComponent } from "../../../platform/popup/components/pop-out.component";
@@ -22,6 +27,29 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co
PopOutComponent,
ItemModule,
CurrentAccountComponent,
+ BadgeComponent,
],
})
-export class SettingsV2Component {}
+export class SettingsV2Component implements OnInit {
+ VaultNudgeType = VaultNudgeType;
+ showVaultBadge$: Observable = new Observable();
+ activeUserId: UserId | null = null;
+
+ constructor(
+ private readonly vaultNudgesService: VaultNudgesService,
+ private readonly accountService: AccountService,
+ ) {}
+ async ngOnInit() {
+ this.activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId));
+ this.showVaultBadge$ = this.vaultNudgesService.showNudge$(
+ VaultNudgeType.EmptyVaultNudge,
+ this.activeUserId,
+ );
+ }
+
+ async dismissBadge(type: VaultNudgeType) {
+ if (!(await firstValueFrom(this.showVaultBadge$)).hasBadgeDismissed) {
+ await this.vaultNudgesService.dismissNudge(type, this.activeUserId as UserId, true);
+ }
+ }
+}
diff --git a/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html b/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html
index c952260a9a9..af627e22ef2 100644
--- a/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html
+++ b/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html
@@ -1,4 +1,4 @@
-