import AutoSizer from "react-virtualized-auto-sizer"; import { VariableSizeList as List } from "react-window"; import { Channel } from "revolt.js/dist/maps/Channels"; import { User } from "revolt.js/dist/maps/Users"; import styled from "styled-components"; import { Text } from "preact-i18n"; import { forwardRef } from "preact/compat"; import { Screen, useIntermediate, } from "../../../context/intermediate/Intermediate"; import { UserButton } from "../items/ButtonItem"; export type MemberListEntry = string | User; interface ItemData { entries: MemberListEntry[]; context: Channel; openScreen: (screen: Screen) => void; } const PADDING_SIZE = 6; const ListCategory = styled.div` height: 100%; display: flex; padding: 0 14px; font-size: 0.8em; font-weight: 600; user-select: none; flex-direction: column; justify-content: flex-end; color: var(--secondary-foreground); `; const Row = ({ data, style: styleIn, index, }: { data: ItemData; index: number; style: JSX.CSSProperties; }) => { const item = data.entries[index]; const style = { ...styleIn, top: `${parseFloat(styleIn.top as string) + PADDING_SIZE}px`, }; if (typeof item === "string") { const [cat, count] = item.split(":"); return (