b7e1f89c1d
- RoomTimeline: wrap jump-to-latest/unread + mark-as-read handlers in useCallback (the handlers passed to memoized message children were already memoized). - RoomInput: wrap file/upload/emoji/sticker/location callbacks in useCallback so the editor and toolbar don't re-render needlessly. - EmojiBoard: hoist repeated mx.getRoom() pack-label lookups into a useMemo'd map in the emoji and sticker sidebars (previously called per-render in map loops). Behavior unchanged. (RoomTimeline/RoomInput already have ErrorBoundary wrappers in RoomView, so no boundary added.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>