diff --git a/apps/web/src/app/vault/individual-vault/vault.module.ts b/apps/web/src/app/vault/individual-vault/vault.module.ts
index e584cae701..81fc38eda1 100644
--- a/apps/web/src/app/vault/individual-vault/vault.module.ts
+++ b/apps/web/src/app/vault/individual-vault/vault.module.ts
@@ -13,6 +13,9 @@ import { OrganizationBadgeModule } from "./organization-badge/organization-badge
import { PipesModule } from "./pipes/pipes.module";
import { VaultFilterModule } from "./vault-filter/vault-filter.module";
import { VaultHeaderComponent } from "./vault-header/vault-header.component";
+import { VaultOnboardingService as VaultOnboardingServiceAbstraction } from "./vault-onboarding/services/abstraction/vault-onboarding.service";
+import { VaultOnboardingService } from "./vault-onboarding/services/vault-onboarding.service";
+import { VaultOnboardingComponent } from "./vault-onboarding/vault-onboarding.component";
import { VaultRoutingModule } from "./vault-routing.module";
import { VaultComponent } from "./vault.component";
@@ -30,8 +33,15 @@ import { VaultComponent } from "./vault.component";
BreadcrumbsModule,
VaultItemsModule,
CollectionDialogModule,
+ VaultOnboardingComponent,
],
declarations: [VaultComponent, VaultHeaderComponent],
exports: [VaultComponent],
+ providers: [
+ {
+ provide: VaultOnboardingServiceAbstraction,
+ useClass: VaultOnboardingService,
+ },
+ ],
})
export class VaultModule {}
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json
index 7cc35b67c3..b965a176ab 100644
--- a/apps/web/src/locales/en/messages.json
+++ b/apps/web/src/locales/en/messages.json
@@ -1347,6 +1347,18 @@
"importData": {
"message": "Import data"
},
+ "onboardingImportDataDetailsPartOne": {
+ "message": "If you don't have any data to import, you can create a ",
+ "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. You may need to wait until your administrator confirms your organization membership."
+ },
+ "onboardingImportDataDetailsLink": {
+ "message": "new item",
+ "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. You may need to wait until your administrator confirms your organization membership."
+ },
+ "onboardingImportDataDetailsPartTwo": {
+ "message": " instead. You may need to wait until your administrator confirms your organization membership.",
+ "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. You may need to wait until your administrator confirms your organization membership."
+ },
"importError": {
"message": "Import error"
},
@@ -6912,6 +6924,9 @@
"message": "SDK",
"description": "Software Development Kit"
},
+ "createAnAccount": {
+ "message": "Create an account"
+ },
"createSecret": {
"message": "Create a secret"
},
@@ -7456,6 +7471,12 @@
"message": "See detailed instructions on our help site at",
"description": "This is followed a by a hyperlink to the help website."
},
+ "installBrowserExtension": {
+ "message": "Install browser extension"
+ },
+ "installBrowserExtensionDetails": {
+ "message": "Use the extension to quickly save logins and auto-fill forms without opening the web app."
+ },
"projectAccessUpdated": {
"message": "Project access updated"
},
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.component.html b/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.component.html
index f097481633..6dec4f6f90 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.component.html
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.component.html
@@ -3,8 +3,8 @@
-
-
+
-
-
+
-
+
-
+
-
+ >
+
diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.module.ts b/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.module.ts
index a526075518..72039f532a 100644
--- a/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.module.ts
+++ b/bitwarden_license/bit-web/src/app/secrets-manager/overview/overview.module.ts
@@ -1,8 +1,8 @@
import { NgModule } from "@angular/core";
+import { OnboardingModule } from "../../../../../../apps/web/src/app/shared/components/onboarding/onboarding.module";
import { SecretsManagerSharedModule } from "../shared/sm-shared.module";
-import { OnboardingModule } from "./onboarding.module";
import { OverviewRoutingModule } from "./overview-routing.module";
import { OverviewComponent } from "./overview.component";
import { SectionComponent } from "./section.component";
diff --git a/libs/common/src/enums/feature-flag.enum.ts b/libs/common/src/enums/feature-flag.enum.ts
index bf5287801d..813078ca0a 100644
--- a/libs/common/src/enums/feature-flag.enum.ts
+++ b/libs/common/src/enums/feature-flag.enum.ts
@@ -4,6 +4,7 @@ export enum FeatureFlag {
ItemShare = "item-share",
FlexibleCollectionsV1 = "flexible-collections-v-1", // v-1 is intentional
BulkCollectionAccess = "bulk-collection-access",
+ VaultOnboarding = "vault-onboarding",
GeneratorToolsModernization = "generator-tools-modernization",
KeyRotationImprovements = "key-rotation-improvements",
FlexibleCollectionsMigration = "flexible-collections-migration",
diff --git a/libs/common/src/models/response/profile.response.ts b/libs/common/src/models/response/profile.response.ts
index d39b39bc58..fbaa4f84ef 100644
--- a/libs/common/src/models/response/profile.response.ts
+++ b/libs/common/src/models/response/profile.response.ts
@@ -16,6 +16,7 @@ export class ProfileResponse extends BaseResponse {
twoFactorEnabled: boolean;
key: string;
avatarColor: string;
+ creationDate: string;
privateKey: string;
securityStamp: string;
forcePasswordReset: boolean;
@@ -37,6 +38,7 @@ export class ProfileResponse extends BaseResponse {
this.twoFactorEnabled = this.getResponseProperty("TwoFactorEnabled");
this.key = this.getResponseProperty("Key");
this.avatarColor = this.getResponseProperty("AvatarColor");
+ this.creationDate = this.getResponseProperty("CreationDate");
this.privateKey = this.getResponseProperty("PrivateKey");
this.securityStamp = this.getResponseProperty("SecurityStamp");
this.forcePasswordReset = this.getResponseProperty("ForcePasswordReset") ?? false;
diff --git a/libs/common/src/platform/state/state-definitions.ts b/libs/common/src/platform/state/state-definitions.ts
index 270a102c8f..5b98c30bed 100644
--- a/libs/common/src/platform/state/state-definitions.ts
+++ b/libs/common/src/platform/state/state-definitions.ts
@@ -27,6 +27,10 @@ export const SSO_DISK = new StateDefinition("ssoLogin", "disk");
export const ENVIRONMENT_DISK = new StateDefinition("environment", "disk");
+export const VAULT_ONBOARDING = new StateDefinition("vaultOnboarding", "disk", {
+ web: "disk-local",
+});
+
export const GENERATOR_DISK = new StateDefinition("generator", "disk");
export const GENERATOR_MEMORY = new StateDefinition("generator", "memory");