de6cecaffc
Adds a "Pinned" toggle chip that narrows results to messages currently in their room's m.room.pinned_events. Client-side post-filter mirroring the has:image/file/video pattern: a pure filterGroupsByPinned(groups, enabled, isPinned) helper consumes a predicate; MessageSearch builds a per-room Map<roomId, Set<eventId>> from StateEvent.RoomPinnedEvents. Review fix: the msgtype + pinned filters are now applied to BOTH the server results AND the encrypted/local-cache results (via a shared applyResultFilters useCallback), so the chips narrow the whole UI consistently — previously the local/E2EE section bypassed them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>