From c0d81bfb4ac70e3c20f63bb9d5626305f3fea72e Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 23 Jan 2026 20:57:40 +0100 Subject: [PATCH] fix listScroller --- src/webpack/common/components.ts | 24 +++++++++++++++++++----- src/webpack/webpack.ts | 25 ++++++++++++++++--------- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/webpack/common/components.ts b/src/webpack/common/components.ts index 91c53465c..d7affc0e6 100644 --- a/src/webpack/common/components.ts +++ b/src/webpack/common/components.ts @@ -26,7 +26,7 @@ import { TooltipContainer as TooltipContainerComponent } from "@components/Toolt import { TooltipFallback } from "@components/TooltipFallback"; import { LazyComponent } from "@utils/lazyReact"; import * as t from "@vencord/discord-types"; -import { filters, findCssClassesLazy, mapMangledModuleLazy, waitFor } from "@webpack"; +import { filters, mapMangledCssClasses, mapMangledModuleLazy, waitFor } from "@webpack"; import { waitForComponent } from "./internal"; @@ -77,18 +77,32 @@ export const UserSummaryItem = waitForComponent("UserSummaryItem", filters.compo export let createScroller: (scrollbarClassName: string, fadeClassName: string, customThemeClassName: string) => t.ScrollerThin; export let createListScroller: (scrollBarClassName: string, fadeClassName: string, someOtherClassIdkMan: string, resizeObserverClass: typeof ResizeObserver) => t.ListScrollerThin; -export const scrollerClasses = findCssClassesLazy("thin", "auto", "fade", "customTheme", "none"); -export let listScrollerClasses: Record; + +const scrollerClassnames = ["thin", "auto", "fade", "customTheme", "none"] as const; +const listScrollerClassnames = ["thin", "auto", "fade"] as const; +export let scrollerClasses: Record; +export let listScrollerClasses: Record; waitFor(filters.byCode('="ltr",orientation:', "customTheme:", "forwardRef"), m => createScroller = m); waitFor(filters.byCode("getScrollerNode:", "resizeObserver:", "sectionHeight:"), m => createListScroller = m); -waitFor(m => m.thin && m.auto && !m.customTheme, m => listScrollerClasses = m); + +waitFor( + filters.byClassNames(...scrollerClassnames), + m => scrollerClasses = mapMangledCssClasses(m, scrollerClassnames) +); +{ + const isListScroller = filters.byClassNames(...listScrollerClassnames); + const isNotNormalScroller = filters.byClassNames("customTheme"); + waitFor( + m => isListScroller(m) && !isNotNormalScroller(m), + m => listScrollerClasses = mapMangledCssClasses(m, listScrollerClassnames) + ); +} export const ScrollerNone = LazyComponent(() => createScroller(scrollerClasses.none, scrollerClasses.fade, scrollerClasses.customTheme)); export const ScrollerThin = LazyComponent(() => createScroller(scrollerClasses.thin, scrollerClasses.fade, scrollerClasses.customTheme)); export const ScrollerAuto = LazyComponent(() => createScroller(scrollerClasses.auto, scrollerClasses.fade, scrollerClasses.customTheme)); -export const ListScrollerNone = LazyComponent(() => createListScroller(listScrollerClasses.none, listScrollerClasses.fade, "", ResizeObserver)); export const ListScrollerThin = LazyComponent(() => createListScroller(listScrollerClasses.thin, listScrollerClasses.fade, "", ResizeObserver)); export const ListScrollerAuto = LazyComponent(() => createListScroller(listScrollerClasses.auto, listScrollerClasses.fade, "", ResizeObserver)); diff --git a/src/webpack/webpack.ts b/src/webpack/webpack.ts index bfd7c0af5..c025a72b0 100644 --- a/src/webpack/webpack.ts +++ b/src/webpack/webpack.ts @@ -578,6 +578,21 @@ export function findExportedComponentLazy(...props: Prop }); } +export function mapMangledCssClasses(mappedModule: object, classes: S[] | ReadonlyArray): Record { + const values = Object.values(mappedModule); + const mapped = {} as Record; + + for (const cls of classes) { + const re = makeClassNameRegex(cls); + mapped[cls] = values.find(v => typeof v === "string" && re.test(v)) as string; + + if (!mapped[cls]) // this should never happen unless this is used manually with invalid input + throw new Error(`mapMangledCssClasses: Invalid input. ${cls} not found in module`); + } + + return mapped; +} + export function findCssClasses(...classes: S[]): Record { const res = find(filters.byClassNames(...classes), { isIndirect: true, topLevelOnly: true }); @@ -586,15 +601,7 @@ export function findCssClasses(...classes: S[]): Record; } - const values = Object.values(res); - const mapped = {} as Record; - - for (const cls of classes) { - const re = makeClassNameRegex(cls); - mapped[cls] = values.find(v => typeof v === "string" && re.test(v)) as string; - } - - return mapped; + return mapMangledCssClasses(res, classes); } export function findCssClassesLazy(...classes: S[]) {