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") }}) - -

- +
+
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(); + } }