diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json
index 9848be6d5f..51e1203673 100644
--- a/apps/browser/src/_locales/en/messages.json
+++ b/apps/browser/src/_locales/en/messages.json
@@ -4589,12 +4589,6 @@
"textSends": {
"message": "Text Sends"
},
- "bitwardenNewLook": {
- "message": "Bitwarden has a new look!"
- },
- "bitwardenNewLookDesc": {
- "message": "It's easier and more intuitive than ever to autofill and search from the Vault tab. Take a look around!"
- },
"accountActions": {
"message": "Account actions"
},
diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-ui-onboarding/vault-ui-onboarding.component.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-ui-onboarding/vault-ui-onboarding.component.ts
deleted file mode 100644
index 20b39c5a88..0000000000
--- a/apps/browser/src/vault/popup/components/vault-v2/vault-ui-onboarding/vault-ui-onboarding.component.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import { CommonModule } from "@angular/common";
-import { Component } from "@angular/core";
-
-import { JslibModule } from "@bitwarden/angular/jslib.module";
-import {
- ButtonModule,
- DialogModule,
- DialogService,
- IconModule,
- svgIcon,
-} from "@bitwarden/components";
-
-const announcementIcon = svgIcon`
-
-`;
-
-@Component({
- standalone: true,
- selector: "app-vault-ui-onboarding",
- template: `
-
-
-
-
-
- {{ "bitwardenNewLook" | i18n }}
-
-
- {{ "bitwardenNewLookDesc" | i18n }}
-
-
-
-
-
-
-
- `,
- imports: [CommonModule, DialogModule, ButtonModule, JslibModule, IconModule],
-})
-export class VaultUiOnboardingComponent {
- icon = announcementIcon;
-
- static open(dialogService: DialogService) {
- return dialogService.open(VaultUiOnboardingComponent);
- }
-
- navigateToLink = async () => {
- window.open(
- "https://bitwarden.com/blog/bringing-intuitive-workflows-and-visual-updates-to-the-bitwarden-browser/",
- "_blank",
- );
- };
-}
diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts
index a0c5498735..7c21c7e6a0 100644
--- a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts
+++ b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts
@@ -19,7 +19,6 @@ import { PopupHeaderComponent } from "../../../../platform/popup/layout/popup-he
import { PopupPageComponent } from "../../../../platform/popup/layout/popup-page.component";
import { VaultPopupItemsService } from "../../services/vault-popup-items.service";
import { VaultPopupListFiltersService } from "../../services/vault-popup-list-filters.service";
-import { VaultUiOnboardingService } from "../../services/vault-ui-onboarding.service";
import { BlockedInjectionBanner } from "./blocked-injection-banner/blocked-injection-banner.component";
import {
@@ -58,7 +57,6 @@ enum VaultState {
VaultHeaderV2Component,
DecryptionFailureDialogComponent,
],
- providers: [VaultUiOnboardingService],
})
export class VaultV2Component implements OnInit, OnDestroy {
cipherType = CipherType;
@@ -93,7 +91,6 @@ export class VaultV2Component implements OnInit, OnDestroy {
constructor(
private vaultPopupItemsService: VaultPopupItemsService,
private vaultPopupListFiltersService: VaultPopupListFiltersService,
- private vaultUiOnboardingService: VaultUiOnboardingService,
private destroyRef: DestroyRef,
private cipherService: CipherService,
private dialogService: DialogService,
@@ -123,8 +120,6 @@ export class VaultV2Component implements OnInit, OnDestroy {
}
async ngOnInit() {
- await this.vaultUiOnboardingService.showOnboardingDialog();
-
this.cipherService.failedToDecryptCiphers$
.pipe(
map((ciphers) => ciphers.filter((c) => !c.isDeleted)),
diff --git a/apps/browser/src/vault/popup/services/vault-ui-onboarding.service.ts b/apps/browser/src/vault/popup/services/vault-ui-onboarding.service.ts
deleted file mode 100644
index f50d6ebc23..0000000000
--- a/apps/browser/src/vault/popup/services/vault-ui-onboarding.service.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-// FIXME: Update this file to be type safe and remove this and next line
-// @ts-strict-ignore
-import { Injectable } from "@angular/core";
-import { firstValueFrom, map } from "rxjs";
-
-import { ApiService } from "@bitwarden/common/abstractions/api.service";
-import {
- GlobalState,
- KeyDefinition,
- StateProvider,
- VAULT_BROWSER_UI_ONBOARDING,
-} from "@bitwarden/common/platform/state";
-import { DialogService } from "@bitwarden/components";
-
-import { VaultUiOnboardingComponent } from "../components/vault-v2/vault-ui-onboarding/vault-ui-onboarding.component";
-
-// Key definition for the Vault UI onboarding state.
-// This key is used to store the state of the new UI information dialog.
-export const GLOBAL_VAULT_UI_ONBOARDING = new KeyDefinition(
- VAULT_BROWSER_UI_ONBOARDING,
- "dialogState",
- {
- deserializer: (obj) => obj,
- },
-);
-
-@Injectable()
-export class VaultUiOnboardingService {
- private onboardingUiReleaseDate = new Date("2024-12-10");
-
- private vaultUiOnboardingState: GlobalState = this.stateProvider.getGlobal(
- GLOBAL_VAULT_UI_ONBOARDING,
- );
-
- private readonly vaultUiOnboardingState$ = this.vaultUiOnboardingState.state$.pipe(
- map((x) => x ?? false),
- );
-
- constructor(
- private stateProvider: StateProvider,
- private dialogService: DialogService,
- private apiService: ApiService,
- ) {}
-
- /**
- * Checks whether the onboarding dialog should be shown and opens it if necessary.
- * The dialog is shown if the user has not previously viewed it and is not a new account.
- */
- async showOnboardingDialog(): Promise {
- const hasViewedDialog = await this.getVaultUiOnboardingState();
-
- if (!hasViewedDialog && !(await this.isNewAccount())) {
- await this.openVaultUiOnboardingDialog();
- }
- }
-
- private async openVaultUiOnboardingDialog(): Promise {
- const dialogRef = VaultUiOnboardingComponent.open(this.dialogService);
-
- const result = firstValueFrom(dialogRef.closed);
-
- // Update the onboarding state when the dialog is closed
- await this.setVaultUiOnboardingState(true);
-
- return result;
- }
-
- private async isNewAccount(): Promise {
- const userProfile = await this.apiService.getProfile();
- const profileCreationDate = new Date(userProfile.creationDate);
- return profileCreationDate > this.onboardingUiReleaseDate;
- }
-
- /**
- * Updates and saves the state indicating whether the user has viewed
- * the new UI onboarding information dialog.
- */
- private async setVaultUiOnboardingState(value: boolean): Promise {
- await this.vaultUiOnboardingState.update(() => value);
- }
-
- /**
- * Retrieves the current state indicating whether the user has viewed
- * the new UI onboarding information dialog.s
- */
- private async getVaultUiOnboardingState(): Promise {
- return await firstValueFrom(this.vaultUiOnboardingState$);
- }
-}
diff --git a/libs/common/src/platform/state/state-definitions.ts b/libs/common/src/platform/state/state-definitions.ts
index 1ed5227cb1..483a8c050d 100644
--- a/libs/common/src/platform/state/state-definitions.ts
+++ b/libs/common/src/platform/state/state-definitions.ts
@@ -179,7 +179,6 @@ export const PREMIUM_BANNER_DISK_LOCAL = new StateDefinition("premiumBannerRepro
web: "disk-local",
});
export const BANNERS_DISMISSED_DISK = new StateDefinition("bannersDismissed", "disk");
-export const VAULT_BROWSER_UI_ONBOARDING = new StateDefinition("vaultBrowserUiOnboarding", "disk");
export const NEW_DEVICE_VERIFICATION_NOTICE = new StateDefinition(
"newDeviceVerificationNotice",
"disk",