diff --git a/jslib b/jslib
index 74464957..f7375e90 160000
--- a/jslib
+++ b/jslib
@@ -1 +1 @@
-Subproject commit 744649573a387575aabf9bc5eefc8eb559958f3d
+Subproject commit f7375e9064e16f5998700ce0516aad85818de54d
diff --git a/src/app/components/premium-badge.component.ts b/src/app/components/premium-badge.component.ts
new file mode 100644
index 00000000..3852b7df
--- /dev/null
+++ b/src/app/components/premium-badge.component.ts
@@ -0,0 +1,19 @@
+import { Component } from "@angular/core";
+
+import { MessagingService } from "jslib-common/abstractions/messaging.service";
+
+@Component({
+ selector: "app-premium-badge",
+ template: `
+
+ {{ "premium" | i18n }}
+
+ `,
+})
+export class PremiumBadgeComponent {
+ constructor(private messagingService: MessagingService) {}
+
+ premiumRequired() {
+ this.messagingService.send("premiumRequired");
+ }
+}
diff --git a/src/app/oss.module.ts b/src/app/oss.module.ts
index b8eaeb0d..4db91ea0 100644
--- a/src/app/oss.module.ts
+++ b/src/app/oss.module.ts
@@ -53,6 +53,7 @@ import localeZhTw from "@angular/common/locales/zh-Hant";
import { NgModule } from "@angular/core";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { RouterModule } from "@angular/router";
+import { BadgeModule } from "@bitwarden/components";
import { InfiniteScrollModule } from "ngx-infinite-scroll";
import { ToastrModule } from "ngx-toastr";
@@ -70,6 +71,7 @@ import { BoxRowDirective } from "jslib-angular/directives/box-row.directive";
import { FallbackSrcDirective } from "jslib-angular/directives/fallback-src.directive";
import { InputStripSpacesDirective } from "jslib-angular/directives/input-strip-spaces.directive";
import { InputVerbatimDirective } from "jslib-angular/directives/input-verbatim.directive";
+import { NotPremiumDirective } from "jslib-angular/directives/not-premium.directive";
import { SelectCopyDirective } from "jslib-angular/directives/select-copy.directive";
import { StopClickDirective } from "jslib-angular/directives/stop-click.directive";
import { StopPropDirective } from "jslib-angular/directives/stop-prop.directive";
@@ -100,6 +102,7 @@ import { VerifyRecoverDeleteComponent } from "./accounts/verify-recover-delete.c
import { NestedCheckboxComponent } from "./components/nested-checkbox.component";
import { PasswordRepromptComponent } from "./components/password-reprompt.component";
import { PasswordStrengthComponent } from "./components/password-strength.component";
+import { PremiumBadgeComponent } from "./components/premium-badge.component";
import { FooterComponent } from "./layouts/footer.component";
import { FrontendLayoutComponent } from "./layouts/frontend-layout.component";
import { NavbarComponent } from "./layouts/navbar.component";
@@ -292,10 +295,11 @@ registerLocaleData(localeZhTw, "zh-TW");
ToastrModule,
ReactiveFormsModule,
RouterModule,
+ BadgeModule,
],
declarations: [
- A11yTitleDirective,
A11yInvalidDirective,
+ A11yTitleDirective,
AcceptEmergencyComponent,
AcceptOrganizationComponent,
AccessComponent,
@@ -364,6 +368,7 @@ registerLocaleData(localeZhTw, "zh-TW");
MasterPasswordPolicyComponent,
NavbarComponent,
NestedCheckboxComponent,
+ NotPremiumDirective,
OptionsComponent,
OrgAccountComponent,
OrgAddEditComponent,
@@ -412,6 +417,7 @@ registerLocaleData(localeZhTw, "zh-TW");
PasswordStrengthComponent,
PaymentComponent,
PersonalOwnershipPolicyComponent,
+ PremiumBadgeComponent,
PremiumComponent,
ProfileComponent,
ProvidersComponent,
@@ -456,8 +462,8 @@ registerLocaleData(localeZhTw, "zh-TW");
UnsecuredWebsitesReportComponent,
UpdateKeyComponent,
UpdateLicenseComponent,
- UpdateTempPasswordComponent,
UpdatePasswordComponent,
+ UpdateTempPasswordComponent,
UserBillingComponent,
UserLayoutComponent,
UserNamePipe,
diff --git a/src/app/settings/emergency-access-add-edit.component.html b/src/app/settings/emergency-access-add-edit.component.html
index c48b489e..b66a7451 100644
--- a/src/app/settings/emergency-access-add-edit.component.html
+++ b/src/app/settings/emergency-access-add-edit.component.html
@@ -9,7 +9,7 @@
>