diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json
index 5c9e829e82f..6e1e2ef57ac 100644
--- a/apps/browser/src/_locales/en/messages.json
+++ b/apps/browser/src/_locales/en/messages.json
@@ -5248,5 +5248,35 @@
},
"hasItemsVaultNudgeBody": {
"message": "Autofill items for the current page\nFavorite items for easy access\nSearch your vault for something else"
+ },
+ "newLoginNudgeTitle": {
+ "message": "Save time with autofill"
+ },
+ "newLoginNudgeBody": {
+ "message": "Include a Website so this login appears as an autofill suggestion."
+ },
+ "newCardNudgeTitle": {
+ "message": "Seamless online checkout"
+ },
+ "newCardNudgeBody": {
+ "message": "With cards, easily autofill payment forms securely and accurately."
+ },
+ "newIdentityNudgeTitle": {
+ "message": "Simplify creating accounts"
+ },
+ "newIdentityNudgeBody": {
+ "message": "With identities, quickly autofill long registration or contact forms."
+ },
+ "newNoteNudgeTitle": {
+ "message": "Keep your sensitive data safe"
+ },
+ "newNoteNudgeBody": {
+ "message": "With notes, securely store sensitive data like banking or insurance details."
+ },
+ "newSshNudgeTitle": {
+ "message": "Developer-friendly SSH access"
+ },
+ "newSshNudgeBody": {
+ "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication."
}
-}
\ No newline at end of file
+}
diff --git a/apps/desktop/src/locales/en/messages.json b/apps/desktop/src/locales/en/messages.json
index 81e3a94ff4d..2350e0df4c7 100644
--- a/apps/desktop/src/locales/en/messages.json
+++ b/apps/desktop/src/locales/en/messages.json
@@ -3712,5 +3712,35 @@
},
"move": {
"message": "Move"
+ },
+ "newLoginNudgeTitle": {
+ "message": "Save time with autofill"
+ },
+ "newLoginNudgeBody": {
+ "message": "Include a Website so this login appears as an autofill suggestion."
+ },
+ "newCardNudgeTitle": {
+ "message": "Seamless online checkout"
+ },
+ "newCardNudgeBody": {
+ "message": "With cards, easily autofill payment forms securely and accurately."
+ },
+ "newIdentityNudgeTitle": {
+ "message": "Simplify creating accounts"
+ },
+ "newIdentityNudgeBody": {
+ "message": "With identities, quickly autofill long registration or contact forms."
+ },
+ "newNoteNudgeTitle": {
+ "message": "Keep your sensitive data safe"
+ },
+ "newNoteNudgeBody": {
+ "message": "With notes, securely store sensitive data like banking or insurance details."
+ },
+ "newSshNudgeTitle": {
+ "message": "Developer-friendly SSH access"
+ },
+ "newSshNudgeBody": {
+ "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication."
}
}
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json
index ce45b538bbe..59ba7961d82 100644
--- a/apps/web/src/locales/en/messages.json
+++ b/apps/web/src/locales/en/messages.json
@@ -10629,6 +10629,36 @@
"newBusinessUnit": {
"message": "New business unit"
},
+ "newLoginNudgeTitle": {
+ "message": "Save time with autofill"
+ },
+ "newLoginNudgeBody": {
+ "message": "Include a Website so this login appears as an autofill suggestion."
+ },
+ "newCardNudgeTitle": {
+ "message": "Seamless online checkout"
+ },
+ "newCardNudgeBody": {
+ "message": "With cards, easily autofill payment forms securely and accurately."
+ },
+ "newIdentityNudgeTitle": {
+ "message": "Simplify creating accounts"
+ },
+ "newIdentityNudgeBody": {
+ "message": "With identities, quickly autofill long registration or contact forms."
+ },
+ "newNoteNudgeTitle": {
+ "message": "Keep your sensitive data safe"
+ },
+ "newNoteNudgeBody": {
+ "message": "With notes, securely store sensitive data like banking or insurance details."
+ },
+ "newSshNudgeTitle": {
+ "message": "Developer-friendly SSH access"
+ },
+ "newSshNudgeBody": {
+ "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication."
+ },
"restart": {
"message": "Restart"
},
diff --git a/libs/common/src/platform/state/state-definitions.ts b/libs/common/src/platform/state/state-definitions.ts
index 70e0c3998dd..587212299df 100644
--- a/libs/common/src/platform/state/state-definitions.ts
+++ b/libs/common/src/platform/state/state-definitions.ts
@@ -206,7 +206,7 @@ export const VAULT_APPEARANCE = new StateDefinition("vaultAppearance", "disk");
export const SECURITY_TASKS_DISK = new StateDefinition("securityTasks", "disk");
export const AT_RISK_PASSWORDS_PAGE_DISK = new StateDefinition("atRiskPasswordsPage", "disk");
export const NOTIFICATION_DISK = new StateDefinition("notifications", "disk");
-export const VAULT_NUDGES_DISK = new StateDefinition("vaultNudges", "disk");
+export const VAULT_NUDGES_DISK = new StateDefinition("vaultNudges", "disk", { web: "disk-local" });
export const VAULT_BROWSER_INTRO_CAROUSEL = new StateDefinition(
"vaultBrowserIntroCarousel",
"disk",
diff --git a/libs/vault/src/cipher-form/cipher-form.stories.ts b/libs/vault/src/cipher-form/cipher-form.stories.ts
index 50577472120..9943f07292d 100644
--- a/libs/vault/src/cipher-form/cipher-form.stories.ts
+++ b/libs/vault/src/cipher-form/cipher-form.stories.ts
@@ -34,7 +34,9 @@ import { AsyncActionsModule, ButtonModule, ItemModule, ToastService } from "@bit
import {
CipherFormConfig,
CipherFormGenerationService,
+ NudgeStatus,
PasswordRepromptService,
+ VaultNudgesService,
} from "@bitwarden/vault";
// FIXME: remove `/apps` import from `/libs`
// FIXME: remove `src` and fix import
@@ -47,6 +49,7 @@ import { CipherFormService } from "./abstractions/cipher-form.service";
import { TotpCaptureService } from "./abstractions/totp-capture.service";
import { CipherFormModule } from "./cipher-form.module";
import { CipherFormComponent } from "./components/cipher-form.component";
+import { NewItemNudgeComponent } from "./components/new-item-nudge/new-item-nudge.component";
import { CipherFormCacheService } from "./services/default-cipher-form-cache.service";
const defaultConfig: CipherFormConfig = {
@@ -132,8 +135,23 @@ export default {
component: CipherFormComponent,
decorators: [
moduleMetadata({
- imports: [CipherFormModule, AsyncActionsModule, ButtonModule, ItemModule],
+ imports: [
+ CipherFormModule,
+ AsyncActionsModule,
+ ButtonModule,
+ ItemModule,
+ NewItemNudgeComponent,
+ ],
providers: [
+ {
+ provide: VaultNudgesService,
+ useValue: {
+ showNudge$: new BehaviorSubject({
+ hasBadgeDismissed: true,
+ hasSpotlightDismissed: true,
+ } as NudgeStatus),
+ },
+ },
{
provide: CipherFormService,
useClass: TestAddEditFormService,
diff --git a/libs/vault/src/cipher-form/components/cipher-form.component.html b/libs/vault/src/cipher-form/components/cipher-form.component.html
index 6b327486c47..614c7f3dc7a 100644
--- a/libs/vault/src/cipher-form/components/cipher-form.component.html
+++ b/libs/vault/src/cipher-form/components/cipher-form.component.html
@@ -1,3 +1,4 @@
+