Bug fixes:
- IncomingCallNotification: track ring setTimeout ID and clear it on
cleanup/dismiss — prevents orphaned callbacks after unmount
- RoomTimeline: allow redacted m.room.message, m.room.encrypted and
m.sticker events past the early-return filter so they hit the
existing RedactedContent renderer showing the trash-icon placeholder
New features:
- PollContent component: read-only display of m.poll.start and
org.matrix.msc3381.poll.start events (both stable Matrix 1.7 and
MSC3381 unstable content keys); renders poll question + answer
options inside the standard Message bubble; registered both as
top-level event renderers and inside EncryptedContent callback
so encrypted polls also render after decryption
- Deleted message placeholder: m.room.message and m.room.encrypted
redacted events now show the existing MessageDeletedContent
component (trash icon + italic notice) instead of disappearing
entirely — matches Element, FluffyChat, Commet, Nheko behaviour
When another user starts a call in a DM room, show a fixed-position
notification with caller avatar, name, and Answer/Decline buttons.
A Web Audio API double-pulse ring tone plays until answered, declined,
or the 30-second auto-dismiss fires.
- useIncomingDmCall hook: listens to MatrixRTC SessionStarted/SessionEnded,
filters DM rooms (encrypted, ≤2 members), auto-dismisses after 30s,
stops if caller leaves or user joins another call
- IncomingCallNotification component: ring tone, caller info, themed UI
for LotusGuild Terminal TDS (navy bg, orange border, neon-green Answer)
and standard Cinny dark/light (CSS vars, folds Button Success/Critical)
- Router.tsx: mount IncomingCallNotification inside CallEmbedProvider