diff --git a/frontend/src/ts/pages/friends.ts b/frontend/src/ts/pages/friends.ts
index e192fee44dda..d4806c893ebd 100644
--- a/frontend/src/ts/pages/friends.ts
+++ b/frontend/src/ts/pages/friends.ts
@@ -181,10 +181,10 @@ function updatePendingConnections(): void {
+
+
@@ -304,7 +304,7 @@ function buildFriendRow(entry: Friend): HTMLTableRowElement {
entry.streak?.maxLength,
"longest streak",
)}" data-balloon-pos="up">
- ${formatStreak(entry.streak?.length)}
+ ${formatStreak(entry.streak?.length)}
|
${top60?.acc ?? "-"} |
${actions}
-
+
|
`;
@@ -367,14 +367,25 @@ function formatPb(entry?: PersonalBest):
details: "",
};
- result.details = [
+ const details = [
`${getLanguageDisplayString(entry.language)}`,
`${result.wpm} wpm`,
- `${result.acc} acc`,
- `${result.raw} raw`,
- `${result.con} con`,
- `${dateFormat(entry.timestamp, "dd MMM yyyy")}`,
- ].join("\n");
+ ];
+
+ if (isSafeNumber(entry.acc)) {
+ details.push(`${result.acc} acc`);
+ }
+ if (isSafeNumber(entry.raw)) {
+ details.push(`${result.raw} raw`);
+ }
+ if (isSafeNumber(entry.consistency)) {
+ details.push(`${result.con} con`);
+ }
+ if (isSafeNumber(entry.timestamp)) {
+ details.push(`${dateFormat(entry.timestamp, "dd MMM yyyy")}`);
+ }
+
+ result.details = details.join("\n");
return result;
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ad546b1d9e09..1f2334370adb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -224,7 +224,7 @@ importers:
version: 10.0.0
'@vitest/coverage-v8':
specifier: 4.0.15
- version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))
+ version: 4.0.15(vitest@4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))
concurrently:
specifier: 8.2.2
version: 8.2.2
@@ -483,7 +483,7 @@ importers:
version: 1.1.0(vite@7.1.12(@types/node@24.9.1)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))(workbox-build@7.1.1)(workbox-window@7.1.0)
vitest:
specifier: 4.0.15
- version: 4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)
+ version: 4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)
packages/contracts:
dependencies:
@@ -6252,6 +6252,7 @@ packages:
keygrip@1.1.0:
resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
engines: {node: '>= 0.6'}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -12548,23 +12549,6 @@ snapshots:
'@typescript-eslint/types': 7.18.0
eslint-visitor-keys: 3.4.3
- '@vitest/coverage-v8@4.0.15(vitest@4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))':
- dependencies:
- '@bcoe/v8-coverage': 1.0.2
- '@vitest/utils': 4.0.15
- ast-v8-to-istanbul: 0.3.8
- istanbul-lib-coverage: 3.2.2
- istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 5.0.6
- istanbul-reports: 3.2.0
- magicast: 0.5.1
- obug: 2.1.1
- std-env: 3.10.0
- tinyrainbow: 3.0.3
- vitest: 4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)
- transitivePeerDependencies:
- - supports-color
-
'@vitest/coverage-v8@4.0.15(vitest@4.0.15(@types/node@20.5.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))':
dependencies:
'@bcoe/v8-coverage': 1.0.2
@@ -12595,7 +12579,7 @@ snapshots:
obug: 2.1.1
std-env: 3.10.0
tinyrainbow: 3.0.3
- vitest: 4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)
+ vitest: 4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
@@ -19513,44 +19497,6 @@ snapshots:
- tsx
- yaml
- vitest@4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1):
- dependencies:
- '@vitest/expect': 4.0.15
- '@vitest/mocker': 4.0.15(vite@7.1.12(@types/node@24.9.1)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))
- '@vitest/pretty-format': 4.0.15
- '@vitest/runner': 4.0.15
- '@vitest/snapshot': 4.0.15
- '@vitest/spy': 4.0.15
- '@vitest/utils': 4.0.15
- es-module-lexer: 1.7.0
- expect-type: 1.2.2
- magic-string: 0.30.21
- obug: 2.1.1
- pathe: 2.0.3
- picomatch: 4.0.3
- std-env: 3.10.0
- tinybench: 2.9.0
- tinyexec: 1.0.2
- tinyglobby: 0.2.15
- tinyrainbow: 3.0.3
- vite: 7.1.12(@types/node@24.9.1)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)
- why-is-node-running: 2.3.0
- optionalDependencies:
- '@types/node': 24.9.1
- happy-dom: 20.0.10
- transitivePeerDependencies:
- - jiti
- - less
- - lightningcss
- - msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - terser
- - tsx
- - yaml
-
vlq@0.2.3: {}
walkdir@0.4.1: {}