| "subject_update"
| "initialization";
};
diff --git a/apps/browser/src/popup/app-routing.animations.ts b/apps/browser/src/popup/app-routing.animations.ts
index 13403545fd..55d2687a43 100644
--- a/apps/browser/src/popup/app-routing.animations.ts
+++ b/apps/browser/src/popup/app-routing.animations.ts
@@ -174,20 +174,27 @@ export const routerTransition = trigger("routerTransition", [
transition("clone-cipher => attachments, clone-cipher => collections", inSlideLeft),
transition("attachments => clone-cipher, collections => clone-cipher", outSlideRight),
- transition("tabs => import", inSlideLeft),
- transition("import => tabs", outSlideRight),
+ transition("tabs => account-security", inSlideLeft),
+ transition("account-security => tabs", outSlideRight),
- transition("tabs => export", inSlideLeft),
- transition("export => tabs", outSlideRight),
+ // Vault settings
+ transition("tabs => vault-settings", inSlideLeft),
+ transition("vault-settings => tabs", outSlideRight),
- transition("tabs => folders", inSlideLeft),
- transition("folders => tabs", outSlideRight),
+ transition("vault-settings => import", inSlideLeft),
+ transition("import => vault-settings", outSlideRight),
+
+ transition("vault-settings => export", inSlideLeft),
+ transition("export => vault-settings", outSlideRight),
+
+ transition("vault-settings => folders", inSlideLeft),
+ transition("folders => vault-settings", outSlideRight),
transition("folders => edit-folder, folders => add-folder", inSlideUp),
transition("edit-folder => folders, add-folder => folders", outSlideDown),
- transition("tabs => sync", inSlideLeft),
- transition("sync => tabs", outSlideRight),
+ transition("vault-settings => sync", inSlideLeft),
+ transition("sync => vault-settings", outSlideRight),
transition("tabs => excluded-domains", inSlideLeft),
transition("excluded-domains => tabs", outSlideRight),
@@ -195,6 +202,10 @@ export const routerTransition = trigger("routerTransition", [
transition("tabs => options", inSlideLeft),
transition("options => tabs", outSlideRight),
+ // Appearance settings
+ transition("tabs => appearance", inSlideLeft),
+ transition("appearance => tabs", outSlideRight),
+
transition("tabs => premium", inSlideLeft),
transition("premium => tabs", outSlideRight),
diff --git a/apps/browser/src/popup/app-routing.module.ts b/apps/browser/src/popup/app-routing.module.ts
index 0dcf496457..8fb397fe24 100644
--- a/apps/browser/src/popup/app-routing.module.ts
+++ b/apps/browser/src/popup/app-routing.module.ts
@@ -21,6 +21,7 @@ import { LoginComponent } from "../auth/popup/login.component";
import { RegisterComponent } from "../auth/popup/register.component";
import { RemovePasswordComponent } from "../auth/popup/remove-password.component";
import { SetPasswordComponent } from "../auth/popup/set-password.component";
+import { AccountSecurityComponent } from "../auth/popup/settings/account-security.component";
import { SsoComponent } from "../auth/popup/sso.component";
import { TwoFactorOptionsComponent } from "../auth/popup/two-factor-options.component";
import { TwoFactorComponent } from "../auth/popup/two-factor.component";
@@ -35,6 +36,7 @@ import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.compo
import { SendTypeComponent } from "../tools/popup/send/send-type.component";
import { ExportComponent } from "../tools/popup/settings/export.component";
import { ImportBrowserComponent } from "../tools/popup/settings/import/import-browser.component";
+import { SettingsComponent } from "../tools/popup/settings/settings.component";
import { Fido2Component } from "../vault/popup/components/fido2/fido2.component";
import { AddEditComponent } from "../vault/popup/components/vault/add-edit.component";
import { AttachmentsComponent } from "../vault/popup/components/vault/attachments.component";
@@ -44,17 +46,19 @@ import { PasswordHistoryComponent } from "../vault/popup/components/vault/passwo
import { ShareComponent } from "../vault/popup/components/vault/share.component";
import { VaultFilterComponent } from "../vault/popup/components/vault/vault-filter.component";
import { VaultItemsComponent } from "../vault/popup/components/vault/vault-items.component";
+import { VaultV2Component } from "../vault/popup/components/vault/vault-v2.component";
import { ViewComponent } from "../vault/popup/components/vault/view.component";
+import { AppearanceComponent } from "../vault/popup/settings/appearance.component";
import { FolderAddEditComponent } from "../vault/popup/settings/folder-add-edit.component";
+import { FoldersComponent } from "../vault/popup/settings/folders.component";
+import { SyncComponent } from "../vault/popup/settings/sync.component";
+import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.component";
import { extensionRefreshRedirect, extensionRefreshSwap } from "./extension-refresh-route-utils";
import { debounceNavigationGuard } from "./services/debounce-navigation.service";
import { ExcludedDomainsComponent } from "./settings/excluded-domains.component";
-import { FoldersComponent } from "./settings/folders.component";
import { HelpAndFeedbackComponent } from "./settings/help-and-feedback.component";
import { OptionsComponent } from "./settings/options.component";
-import { SettingsComponent } from "./settings/settings.component";
-import { SyncComponent } from "./settings/sync.component";
import { TabsV2Component } from "./tabs-v2.component";
import { TabsComponent } from "./tabs.component";
@@ -246,6 +250,18 @@ const routes: Routes = [
canActivate: [AuthGuard],
data: { state: "autofill" },
},
+ {
+ path: "account-security",
+ component: AccountSecurityComponent,
+ canActivate: [AuthGuard],
+ data: { state: "account-security" },
+ },
+ {
+ path: "vault-settings",
+ component: VaultSettingsComponent,
+ canActivate: [AuthGuard],
+ data: { state: "vault-settings" },
+ },
{
path: "folders",
component: FoldersComponent,
@@ -288,6 +304,12 @@ const routes: Routes = [
canActivate: [AuthGuard],
data: { state: "options" },
},
+ {
+ path: "appearance",
+ component: AppearanceComponent,
+ canActivate: [AuthGuard],
+ data: { state: "appearance" },
+ },
{
path: "clone-cipher",
component: AddEditComponent,
@@ -341,12 +363,11 @@ const routes: Routes = [
data: { state: "tabs_current" },
runGuardsAndResolvers: "always",
},
- {
+ ...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, {
path: "vault",
- component: VaultFilterComponent,
canActivate: [AuthGuard],
data: { state: "tabs_vault" },
- },
+ }),
{
path: "generator",
component: GeneratorComponent,
diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts
index bed40dfddc..4a310027c1 100644
--- a/apps/browser/src/popup/app.module.ts
+++ b/apps/browser/src/popup/app.module.ts
@@ -30,6 +30,8 @@ import { LoginComponent } from "../auth/popup/login.component";
import { RegisterComponent } from "../auth/popup/register.component";
import { RemovePasswordComponent } from "../auth/popup/remove-password.component";
import { SetPasswordComponent } from "../auth/popup/set-password.component";
+import { AccountSecurityComponent } from "../auth/popup/settings/account-security.component";
+import { VaultTimeoutInputComponent } from "../auth/popup/settings/vault-timeout-input.component";
import { SsoComponent } from "../auth/popup/sso.component";
import { TwoFactorOptionsComponent } from "../auth/popup/two-factor-options.component";
import { TwoFactorComponent } from "../auth/popup/two-factor.component";
@@ -49,6 +51,7 @@ import { SendAddEditComponent } from "../tools/popup/send/send-add-edit.componen
import { SendGroupingsComponent } from "../tools/popup/send/send-groupings.component";
import { SendTypeComponent } from "../tools/popup/send/send-type.component";
import { ExportComponent } from "../tools/popup/settings/export.component";
+import { SettingsComponent } from "../tools/popup/settings/settings.component";
import { ActionButtonsComponent } from "../vault/popup/components/action-buttons.component";
import { CipherRowComponent } from "../vault/popup/components/cipher-row.component";
import { Fido2CipherRowComponent } from "../vault/popup/components/fido2/fido2-cipher-row.component";
@@ -64,9 +67,14 @@ import { ShareComponent } from "../vault/popup/components/vault/share.component"
import { VaultFilterComponent } from "../vault/popup/components/vault/vault-filter.component";
import { VaultItemsComponent } from "../vault/popup/components/vault/vault-items.component";
import { VaultSelectComponent } from "../vault/popup/components/vault/vault-select.component";
+import { VaultV2Component } from "../vault/popup/components/vault/vault-v2.component";
import { ViewCustomFieldsComponent } from "../vault/popup/components/vault/view-custom-fields.component";
import { ViewComponent } from "../vault/popup/components/vault/view.component";
+import { AppearanceComponent } from "../vault/popup/settings/appearance.component";
import { FolderAddEditComponent } from "../vault/popup/settings/folder-add-edit.component";
+import { FoldersComponent } from "../vault/popup/settings/folders.component";
+import { SyncComponent } from "../vault/popup/settings/sync.component";
+import { VaultSettingsComponent } from "../vault/popup/settings/vault-settings.component";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";
@@ -74,12 +82,8 @@ import { PopOutComponent } from "./components/pop-out.component";
import { UserVerificationComponent } from "./components/user-verification.component";
import { ServicesModule } from "./services/services.module";
import { ExcludedDomainsComponent } from "./settings/excluded-domains.component";
-import { FoldersComponent } from "./settings/folders.component";
import { HelpAndFeedbackComponent } from "./settings/help-and-feedback.component";
import { OptionsComponent } from "./settings/options.component";
-import { SettingsComponent } from "./settings/settings.component";
-import { SyncComponent } from "./settings/sync.component";
-import { VaultTimeoutInputComponent } from "./settings/vault-timeout-input.component";
import { TabsV2Component } from "./tabs-v2.component";
import { TabsComponent } from "./tabs.component";
@@ -145,6 +149,7 @@ import "../platform/popup/locales";
LoginViaAuthRequestComponent,
LoginDecryptionOptionsComponent,
OptionsComponent,
+ AppearanceComponent,
GeneratorComponent,
PasswordGeneratorHistoryComponent,
PasswordHistoryComponent,
@@ -156,7 +161,9 @@ import "../platform/popup/locales";
SendListComponent,
SendTypeComponent,
SetPasswordComponent,
+ AccountSecurityComponent,
SettingsComponent,
+ VaultSettingsComponent,
ShareComponent,
SsoComponent,
SyncComponent,
@@ -177,6 +184,7 @@ import "../platform/popup/locales";
EnvironmentSelectorComponent,
CurrentAccountComponent,
AccountSwitcherComponent,
+ VaultV2Component,
],
providers: [CurrencyPipe, DatePipe],
bootstrap: [AppComponent],
diff --git a/apps/browser/src/popup/scss/misc.scss b/apps/browser/src/popup/scss/misc.scss
index c106931c1f..61f22be9ef 100644
--- a/apps/browser/src/popup/scss/misc.scss
+++ b/apps/browser/src/popup/scss/misc.scss
@@ -424,6 +424,10 @@ img,
.modal-title,
.overlay-container {
user-select: none;
+
+ &.user-select {
+ user-select: auto;
+ }
}
app-about .modal-body > *,
diff --git a/apps/browser/src/popup/services/services.module.ts b/apps/browser/src/popup/services/services.module.ts
index 6ac5decaf5..242acdad72 100644
--- a/apps/browser/src/popup/services/services.module.ts
+++ b/apps/browser/src/popup/services/services.module.ts
@@ -59,7 +59,6 @@ import { LogService } from "@bitwarden/common/platform/abstractions/log.service"
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { StateService as BaseStateServiceAbstraction } from "@bitwarden/common/platform/abstractions/state.service";
import {
- AbstractMemoryStorageService,
AbstractStorageService,
ObservableStorageService,
} from "@bitwarden/common/platform/abstractions/storage.service";
@@ -413,7 +412,7 @@ const safeProviders: SafeProvider[] = [
safeProvider({
provide: OBSERVABLE_LARGE_OBJECT_MEMORY_STORAGE,
useFactory: (
- regularMemoryStorageService: AbstractMemoryStorageService & ObservableStorageService,
+ regularMemoryStorageService: AbstractStorageService & ObservableStorageService,
) => {
if (BrowserApi.isManifestVersion(2)) {
return regularMemoryStorageService;
@@ -441,7 +440,7 @@ const safeProviders: SafeProvider[] = [
useFactory: (
storageService: AbstractStorageService,
secureStorageService: AbstractStorageService,
- memoryStorageService: AbstractMemoryStorageService,
+ memoryStorageService: AbstractStorageService,
logService: LogService,
accountService: AccountServiceAbstraction,
environmentService: EnvironmentService,
diff --git a/apps/browser/src/popup/settings/options.component.html b/apps/browser/src/popup/settings/options.component.html
index 93c018233a..fa2b7514db 100644
--- a/apps/browser/src/popup/settings/options.component.html
+++ b/apps/browser/src/popup/settings/options.component.html
@@ -192,56 +192,5 @@
{{ "showIdentitiesCurrentTabDesc" | i18n }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/browser/src/popup/settings/options.component.ts b/apps/browser/src/popup/settings/options.component.ts
index dbdb94c586..0344362d36 100644
--- a/apps/browser/src/popup/settings/options.component.ts
+++ b/apps/browser/src/popup/settings/options.component.ts
@@ -2,7 +2,6 @@ import { Component, OnInit } from "@angular/core";
import { firstValueFrom } from "rxjs";
import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service";
-import { BadgeSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/badge-settings.service";
import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service";
import { UserNotificationSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/user-notification-settings.service";
import { ClearClipboardDelaySetting } from "@bitwarden/common/autofill/types";
@@ -12,8 +11,6 @@ import {
} from "@bitwarden/common/models/domain/domain-service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
-import { ThemeType } from "@bitwarden/common/platform/enums";
-import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service";
import { VaultSettingsService } from "@bitwarden/common/vault/abstractions/vault-settings/vault-settings.service";
import { enableAccountSwitching } from "../../platform/flags";
@@ -23,8 +20,6 @@ import { enableAccountSwitching } from "../../platform/flags";
templateUrl: "options.component.html",
})
export class OptionsComponent implements OnInit {
- enableFavicon = false;
- enableBadgeCounter = true;
enableAutoFillOnPageLoad = false;
autoFillOnPageLoadDefault = false;
autoFillOnPageLoadOptions: any[];
@@ -36,8 +31,6 @@ export class OptionsComponent implements OnInit {
showCardsCurrentTab = false;
showIdentitiesCurrentTab = false;
showClearClipboard = true;
- theme: ThemeType;
- themeOptions: any[];
defaultUriMatch: UriMatchStrategySetting = UriMatchStrategy.Domain;
uriMatchOptions: any[];
clearClipboard: ClearClipboardDelaySetting;
@@ -52,18 +45,9 @@ export class OptionsComponent implements OnInit {
private userNotificationSettingsService: UserNotificationSettingsServiceAbstraction,
private autofillSettingsService: AutofillSettingsServiceAbstraction,
private domainSettingsService: DomainSettingsService,
- private badgeSettingsService: BadgeSettingsServiceAbstraction,
i18nService: I18nService,
- private themeStateService: ThemeStateService,
private vaultSettingsService: VaultSettingsService,
) {
- this.themeOptions = [
- { name: i18nService.t("default"), value: ThemeType.System },
- { name: i18nService.t("light"), value: ThemeType.Light },
- { name: i18nService.t("dark"), value: ThemeType.Dark },
- { name: "Nord", value: ThemeType.Nord },
- { name: i18nService.t("solarizedDark"), value: ThemeType.SolarizedDark },
- ];
this.uriMatchOptions = [
{ name: i18nService.t("baseDomain"), value: UriMatchStrategy.Domain },
{ name: i18nService.t("host"), value: UriMatchStrategy.Host },
@@ -117,14 +101,8 @@ export class OptionsComponent implements OnInit {
this.enableAutoTotpCopy = await firstValueFrom(this.autofillSettingsService.autoCopyTotp$);
- this.enableFavicon = await firstValueFrom(this.domainSettingsService.showFavicons$);
-
- this.enableBadgeCounter = await firstValueFrom(this.badgeSettingsService.enableBadgeCounter$);
-
this.enablePasskeys = await firstValueFrom(this.vaultSettingsService.enablePasskeys$);
- this.theme = await firstValueFrom(this.themeStateService.selectedTheme$);
-
const defaultUriMatch = await firstValueFrom(
this.domainSettingsService.defaultUriMatchStrategy$,
);
@@ -166,15 +144,6 @@ export class OptionsComponent implements OnInit {
await this.autofillSettingsService.setAutofillOnPageLoadDefault(this.autoFillOnPageLoadDefault);
}
- async updateFavicon() {
- await this.domainSettingsService.setShowFavicons(this.enableFavicon);
- }
-
- async updateBadgeCounter() {
- await this.badgeSettingsService.setEnableBadgeCounter(this.enableBadgeCounter);
- this.messagingService.send("bgUpdateContextMenu");
- }
-
async updateShowCardsCurrentTab() {
await this.vaultSettingsService.setShowCardsCurrentTab(this.showCardsCurrentTab);
}
@@ -183,10 +152,6 @@ export class OptionsComponent implements OnInit {
await this.vaultSettingsService.setShowIdentitiesCurrentTab(this.showIdentitiesCurrentTab);
}
- async saveTheme() {
- await this.themeStateService.setSelectedTheme(this.theme);
- }
-
async saveClearClipboard() {
await this.autofillSettingsService.setClearClipboardDelay(this.clearClipboard);
}
diff --git a/apps/browser/src/popup/settings/settings.component.html b/apps/browser/src/popup/settings/settings.component.html
deleted file mode 100644
index 98c218b0db..0000000000
--- a/apps/browser/src/popup/settings/settings.component.html
+++ /dev/null
@@ -1,264 +0,0 @@
-
-
-
- {{ "settings" | i18n }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{
- "vaultTimeoutPolicyWithActionInEffect"
- | i18n: policy.timeout.hours : policy.timeout.minutes : (policy.action | i18n)
- }}
-
-
- {{ "vaultTimeoutPolicyInEffect" | i18n: policy.timeout.hours : policy.timeout.minutes }}
-
-
- {{ "vaultTimeoutActionPolicyInEffect" | i18n: (policy.action | i18n) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/browser/src/popup/settings/about.component.html b/apps/browser/src/tools/popup/settings/about/about.component.html
similarity index 90%
rename from apps/browser/src/popup/settings/about.component.html
rename to apps/browser/src/tools/popup/settings/about/about.component.html
index e68a664ba7..bad39a53d3 100644
--- a/apps/browser/src/popup/settings/about.component.html
+++ b/apps/browser/src/tools/popup/settings/about/about.component.html
@@ -5,7 +5,7 @@
Bitwarden
© Bitwarden Inc. 2015-{{ year }}
-
{{ "version" | i18n }}: {{ version$ | async }}
+
{{ "version" | i18n }}: {{ version$ | async }}
{{ "serverVersion" | i18n }}: {{ data.serverConfig?.version }}
@@ -16,7 +16,7 @@
-
+
{{ "serverVersion" | i18n }} ({{ "thirdParty" | i18n }}):
{{ data.serverConfig?.version }}
@@ -28,7 +28,7 @@
-
+
{{ "serverVersion" | i18n }} ({{ "selfHostedServer" | i18n }}):
{{ data.serverConfig?.version }}
diff --git a/apps/browser/src/popup/settings/about.component.ts b/apps/browser/src/tools/popup/settings/about/about.component.ts
similarity index 100%
rename from apps/browser/src/popup/settings/about.component.ts
rename to apps/browser/src/tools/popup/settings/about/about.component.ts
diff --git a/apps/browser/src/tools/popup/settings/export.component.html b/apps/browser/src/tools/popup/settings/export.component.html
index aae3584f6c..1b2ea1eb1d 100644
--- a/apps/browser/src/tools/popup/settings/export.component.html
+++ b/apps/browser/src/tools/popup/settings/export.component.html
@@ -1,7 +1,7 @@