fix listScroller

This commit is contained in:
Vendicated 2026-01-23 20:57:40 +01:00
parent bbb4baef48
commit c0d81bfb4a
No known key found for this signature in database
GPG key ID: D66986BAF75ECF18
2 changed files with 35 additions and 14 deletions

View file

@ -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<string, string>;
const scrollerClassnames = ["thin", "auto", "fade", "customTheme", "none"] as const;
const listScrollerClassnames = ["thin", "auto", "fade"] as const;
export let scrollerClasses: Record<typeof scrollerClassnames[number], string>;
export let listScrollerClasses: Record<typeof listScrollerClassnames[number], string>;
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));

View file

@ -578,6 +578,21 @@ export function findExportedComponentLazy<T extends object = any>(...props: Prop
});
}
export function mapMangledCssClasses<S extends string>(mappedModule: object, classes: S[] | ReadonlyArray<S>): Record<S, string> {
const values = Object.values(mappedModule);
const mapped = {} as Record<S, string>;
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<S extends string>(...classes: S[]): Record<S, string> {
const res = find(filters.byClassNames(...classes), { isIndirect: true, topLevelOnly: true });
@ -586,15 +601,7 @@ export function findCssClasses<S extends string>(...classes: S[]): Record<S, str
return {} as Record<S, string>;
}
const values = Object.values(res);
const mapped = {} as Record<S, string>;
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<S extends string>(...classes: S[]) {