From c0882ec8ec1364866ce120c5c30e0a34de4ef331 Mon Sep 17 00:00:00 2001 From: Christian Fehmer Date: Wed, 15 Jul 2026 22:17:51 +0200 Subject: [PATCH 1/7] fix: releases fetched multiple times (@fehmer) (#8237) --- .../components/modals/VersionHistoryModal.tsx | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/frontend/src/ts/components/modals/VersionHistoryModal.tsx b/frontend/src/ts/components/modals/VersionHistoryModal.tsx index c6da79425ff6..dccd7e795fb6 100644 --- a/frontend/src/ts/components/modals/VersionHistoryModal.tsx +++ b/frontend/src/ts/components/modals/VersionHistoryModal.tsx @@ -1,3 +1,4 @@ +import { LiteDebouncer } from "@tanstack/pacer-lite/lite-debouncer"; import { useInfiniteQuery } from "@tanstack/solid-query"; import { For, JSXElement, Show } from "solid-js"; @@ -15,16 +16,23 @@ export function VersionHistoryModal(): JSXElement { enabled: isOpen(), })); + const debouncedFetch = new LiteDebouncer( + (callback: () => void) => callback(), + { wait: 150 }, + ); + const fetchMoreVersions = (e: Event): void => { const element = e.target as HTMLElement; - if ( - element.scrollHeight - element.scrollTop - element.clientHeight < 10 && - releases.hasNextPage && - !releases.isLoading - ) { - void releases.fetchNextPage(); - } + debouncedFetch.maybeExecute(() => { + if ( + element.scrollHeight - element.scrollTop - element.clientHeight < 10 && + releases.hasNextPage && + !releases.isLoading + ) { + void releases.fetchNextPage(); + } + }); }; return ( From 7713c8d7ab9cc652943cdbd655eaef462610e480 Mon Sep 17 00:00:00 2001 From: Miodec Date: Wed, 15 Jul 2026 23:07:30 +0200 Subject: [PATCH 2/7] fix: accept non-breaking hyphen as a replacement for ascii hyphen closes #8238 --- frontend/src/ts/utils/strings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/ts/utils/strings.ts b/frontend/src/ts/utils/strings.ts index ebe1103b674b..1dba0722794e 100644 --- a/frontend/src/ts/utils/strings.ts +++ b/frontend/src/ts/utils/strings.ts @@ -293,7 +293,7 @@ export function isWordRightToLeft( export const CHAR_EQUIVALENCE_SETS = [ new Set(["’", "‘", "'", "ʼ", "׳", "ʻ", "᾽", "᾽"]), new Set([`"`, "”", "“", "„"]), - new Set(["–", "—", "-", "‐"]), + new Set(["–", "—", "-", "‐", "‑"]), new Set([",", "‚"]), ]; From 25542572da565fad716f9d879b81c49df3a3e124 Mon Sep 17 00:00:00 2001 From: Darshan Paccha Date: Thu, 16 Jul 2026 02:49:12 +0530 Subject: [PATCH 3/7] refactor: solid personal bests modal (@d1rshan) (#8009) - migrates personal best modal to solidjs, also updates the ux - now all rows show mode2 (dimmed). - also fixes #7998 (adds overflow-y-contain class to AnimatedModal) - renames the `PbTable` to `PbCard` in `UserProfile.tsx` since it is not really a table. --------- Co-authored-by: Christian Fehmer Co-authored-by: Jack --- frontend/src/html/popups.html | 29 --- frontend/src/styles/popups.scss | 68 ------- frontend/src/ts/components/modals/Modals.tsx | 2 + .../ts/components/modals/PbTablesModal.tsx | 180 ++++++++++++++++++ .../components/pages/profile/UserProfile.tsx | 10 +- frontend/src/ts/modals/pb-tables.ts | 107 ----------- frontend/src/ts/states/modals.ts | 1 + frontend/src/ts/states/pb-tables-modal.ts | 13 ++ 8 files changed, 201 insertions(+), 209 deletions(-) create mode 100644 frontend/src/ts/components/modals/PbTablesModal.tsx delete mode 100644 frontend/src/ts/modals/pb-tables.ts create mode 100644 frontend/src/ts/states/pb-tables-modal.ts diff --git a/frontend/src/html/popups.html b/frontend/src/html/popups.html index c09badc2912d..f3eb659002a5 100644 --- a/frontend/src/html/popups.html +++ b/frontend/src/html/popups.html @@ -7,35 +7,6 @@ - -