Improve timeline scroll, media layout, avatars, and emoji coverage.

Remember room scroll position across switches, reserve image/video heights from Matrix dimensions, cache authenticated media blobs for avatars, restore jumbo emoji-only messages, and extend emoji font unicode-range for Unicode 15 glyphs.
This commit is contained in:
2026-07-22 20:00:14 +10:00
parent 154f4dfdb0
commit c286501be8
17 changed files with 885 additions and 213 deletions

View File

@@ -0,0 +1,32 @@
export type RoomScrollRange = {
start: number;
end: number;
};
export type RoomScrollState = {
top: number;
atBottom: boolean;
range: RoomScrollRange;
};
const cache = new Map<string, RoomScrollState>();
const MAX_ENTRIES = 20;
export const getRoomScrollState = (roomId: string): RoomScrollState | undefined =>
cache.get(roomId);
export const saveRoomScrollState = (roomId: string, state: RoomScrollState): void => {
if (cache.has(roomId)) cache.delete(roomId);
cache.set(roomId, state);
while (cache.size > MAX_ENTRIES) {
const oldest = cache.keys().next().value as string | undefined;
if (!oldest) break;
cache.delete(oldest);
}
};
export const clearRoomScrollState = (roomId: string): void => {
cache.delete(roomId);
};