diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json
index 91b5c64ba41..650ca6a5640 100644
--- a/apps/browser/src/_locales/en/messages.json
+++ b/apps/browser/src/_locales/en/messages.json
@@ -176,6 +176,10 @@
"copyNotes": {
"message": "Copy notes"
},
+ "copy": {
+ "message": "Copy",
+ "description": "Copy to clipboard"
+ },
"fill":{
"message": "Fill",
"description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible."
diff --git a/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.html b/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.html
index eceeaf19cb7..b3bf06cfbe7 100644
--- a/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.html
+++ b/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.html
@@ -5,43 +5,49 @@
Bitwarden
© Bitwarden Inc. 2015-{{ year }}
-
{{ "version" | i18n }}: {{ version$ | async }}
-
SDK: {{ sdkVersion$ | async }}
-
-
- {{ "serverVersion" | i18n }}: {{ data.serverConfig?.version }}
-
- ({{ "lastSeenOn" | i18n: (data.serverConfig.utcDate | date: "mediumDate") }})
-
-
-
-
-
- {{ "serverVersion" | i18n }} ({{ "thirdParty" | i18n }}) :
+
+
{{ "version" | i18n }}: {{ version$ | async }}
+
SDK: {{ sdkVersion$ | async }}
+
+
+ {{ "serverVersion" | i18n }}: {{ data.serverConfig?.version }}
+
+ ({{ "lastSeenOn" | i18n: (data.serverConfig.utcDate | date: "mediumDate") }})
+
+
+
+
+
+
+ {{ "serverVersion" | i18n }} ({{ "thirdParty" | i18n }}) :
+ {{ data.serverConfig?.version }}
+
+ ({{ "lastSeenOn" | i18n: (data.serverConfig.utcDate | date: "mediumDate") }})
+
+
+
+ {{ "thirdPartyServerMessage" | i18n: data.serverConfig.server?.name }}
+
+
+
+
+ {{ "serverVersion" | i18n }} ({{ "selfHostedServer" | i18n }}) :
{{ data.serverConfig?.version }}
({{ "lastSeenOn" | i18n: (data.serverConfig.utcDate | date: "mediumDate") }})
-
- {{ "thirdPartyServerMessage" | i18n: data.serverConfig.server?.name }}
-
-
-
- {{ "serverVersion" | i18n }} ({{ "selfHostedServer" | i18n }}) :
- {{ data.serverConfig?.version }}
-
- ({{ "lastSeenOn" | i18n: (data.serverConfig.utcDate | date: "mediumDate") }})
-
-
-
+
{{ "close" | i18n }}
+
+ {{ "copy" | i18n }}
+
diff --git a/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.ts b/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.ts
index f730fef24b3..1e5bdee09b9 100644
--- a/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.ts
+++ b/apps/browser/src/tools/popup/settings/about-dialog/about-dialog.component.ts
@@ -1,20 +1,24 @@
+import { DialogRef } from "@angular/cdk/dialog";
import { CommonModule } from "@angular/common";
-import { Component } from "@angular/core";
+import { Component, ElementRef, ViewChild } from "@angular/core";
import { Observable, combineLatest, defer, map } from "rxjs";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
+import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { SdkService } from "@bitwarden/common/platform/abstractions/sdk/sdk.service";
-import { ButtonModule, DialogModule } from "@bitwarden/components";
+import { ButtonModule, DialogModule, ToastService, TypographyModule } from "@bitwarden/components";
@Component({
templateUrl: "about-dialog.component.html",
standalone: true,
- imports: [CommonModule, JslibModule, DialogModule, ButtonModule],
+ imports: [CommonModule, JslibModule, DialogModule, ButtonModule, TypographyModule],
})
export class AboutDialogComponent {
+ @ViewChild("version") protected version!: ElementRef;
+
protected year = new Date().getFullYear();
protected version$: Observable;
@@ -26,11 +30,23 @@ export class AboutDialogComponent {
protected sdkVersion$ = this.sdkService.version$;
constructor(
+ private dialogRef: DialogRef,
private configService: ConfigService,
private environmentService: EnvironmentService,
private platformUtilsService: PlatformUtilsService,
+ private toastService: ToastService,
+ private i18nService: I18nService,
private sdkService: SdkService,
) {
this.version$ = defer(() => this.platformUtilsService.getApplicationVersion());
}
+
+ protected copyVersion() {
+ this.platformUtilsService.copyToClipboard(this.version.nativeElement.innerText);
+ this.toastService.showToast({
+ message: this.i18nService.t("copySuccessful"),
+ variant: "success",
+ });
+ this.dialogRef.close();
+ }
}