Lotus Bot
8fa079c289
fix: add color-scheme meta, og:type, fix fonts.googleapis.com crossorigin\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:48:19 -04:00
Lotus Bot
a90169abb9
fix(a11y): add aria-live regions to SyncStatus connection banners\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:43:26 -04:00
Lotus Bot
8e62dec419
fix(a11y): add labels to unlabeled form inputs\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:40:35 -04:00
Lotus Bot
d1c49a1738
fix(a11y): add semantic heading hierarchy across settings, modals, and pages\n\nAdd as="h1"/h2/h3 to Text components used as visual headings:\n- Auth pages: h1 brand, h2 section titles\n- Settings panels: h2 for General/Permissions/DeveloperTools/Members/Emojis\n- Modal dialogs: h2 for CreateRoom, CreateSpace, AddServer\n- Explore pages: h2 page heading, h3 subsections\n- Inbox pages: h2 Notifications/Invites, h3 Primary/Public/Spam\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:35:55 -04:00
Lotus Bot
343bb3a496
perf: lazy-load modal renderers and auth pages, split vendor chunks\n\nMain bundle: 3866 kB -> 2547 kB gzip (637 kB, was 997 kB)\nNew cacheable chunks: matrix-sdk, react-dom, router, react-query, linkify\nLazy-loaded: RoomSettings, SpaceSettings, Search, CreateRoom, CreateSpace, Auth\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:32:40 -04:00
Lotus Bot
c05b233b3f
fix(a11y): label all buttons in Editor.preview.tsx demo component\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:21:34 -04:00
Lotus Bot
9843e8bdf1
fix(a11y): label remaining unlabeled icon buttons across 12 components\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:17:07 -04:00
Lotus Bot
2909aebb1f
fix(a11y): replace aria-pressed with aria-expanded on menu-trigger buttons\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:06:40 -04:00
Lotus Bot
abd90ab980
fix(a11y): fix remaining unlabeled icon buttons and portaled tooltip issue\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:04:11 -04:00
Lotus Bot
5e740496c9
fix(perf): hoist lotusTerminal setting out of Message component (Perf-10)
...
Previously every visible Message subscribed to settingsAtom via useSetting,
creating O(80) active atom subscriptions. Now RoomTimeline reads it once
and passes it down as a prop, reducing subscriptions to 1.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-21 12:07:42 -04:00
Lotus Bot
d707c4441c
feat(a11y): form input labels (H-6), remaining button labels (C-1)
...
H-6: aria-label on all form inputs missing accessible names:
- Login: username, password (already done)
- Register: username, password, confirm, token, email
- Password reset: email, new password, confirm password
- Settings: display name, user ID to ignore, keyword, page zoom,
date format, device name, backup passwords (new/confirm/restore)
- Auth: server URL picker input
C-1: additional icon buttons:
- RoomInput: toolbar toggle (aria-pressed + label)
- Lobby/Members: scroll to top, toggle member list
- UIAFlowOverlay: cancel authentication
- BackupRestore: backup options menu
- UrlPreview: previous/next preview buttons
- RoomPacks: undo remove/remove pack buttons
- RoomViewHeader: start call, member list toggle
- ServerPicker: change server button
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-21 12:03:26 -04:00
Lotus Bot
df30476b53
feat(a11y): comprehensive icon button label sweep — 60+ remaining buttons labeled
...
C-1 complete sweep across all components and features:
- Call controls: mic mute/unmute, deafen/undeafen, video, screenshare, chat
- RoomInput: dismiss reply, attach file, sticker, emoji, GIF, location, toolbar
- Media viewers: close in image/pdf/text viewers and editors
- Settings dialogs: close buttons in all room/space/common settings panels
- Lobby: back, toggle member list, scroll to top, pack add/remove
- Auth: server picker, UIA flow cancel
- Upload cards: cancel uploads
- URL preview: prev/next buttons
- Members drawer: close + scroll to top
- RoomViewHeader: back, start call, toggle member list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-21 11:58:40 -04:00
Lotus Bot
18b12cfca1
fix(perf,a11y): selectAtom for unread subscriptions, semantic headings, Perf-5 binary search
...
Perf-3: Replace raw roomToUnreadAtom subscription in Home, Direct, Space with
selectAtom-derived Set<string> — components now only re-render when rooms
gain/lose unread presence, not on every notification count update
Perf-5: RoomTimeline eventRenderer now uses binary search on precomputed
timelineSegments instead of O(N×T) linear scan per visible message
A11y L-1: Add as=h2 semantic heading to Home, Direct, Inbox, Space page nav
titles so screen readers announce page sections correctly
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 21:59:09 -04:00
Lotus Bot
4e80c0a0f5
feat(a11y,perf): comprehensive icon button labels, toolbar a11y, timeline binary search
...
A11y C-1: aria-label on 30+ remaining icon-only buttons across:
- settings panels (close, reset, info, expand, remove, undo)
- editor toolbar (bold, italic, underline, strike, code, spoiler,
blockquote, code block, ordered/unordered list, headings 1-3)
- auth stages (cancel buttons in SSO, Password stages)
- device verification (cancel buttons)
- password input (show/hide toggle with dynamic label)
- event readers, account data editor close buttons
- global emoji packs (add/remove buttons)
Perf-5: Replace O(N×T) getTimelineAndBaseIndex scan with precomputed binary
search (timelineSegments useMemo) — O(log T) per visible message render
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 21:54:33 -04:00
Lotus Bot
d4705f9235
fix(a11y,sec): remove tabIndex=-1 from interactive buttons, npm audit fix
...
H-3: tabIndex=-1 removed from login info, settings reset, settings info buttons
+ aria-label added to each for screen reader discoverability
SEC: npm audit fix - 18 non-breaking dependency updates (34 vulns -> 16 remaining)
Remaining 16 require --force (breaking changes, deferred)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 21:47:20 -04:00
Lotus Bot
4490993fe7
feat(a11y): landmark regions, skip link, dialog labels, icon button labels
...
C-3: nav/main landmark roles in ClientLayout (nav + main areas)
C-4: Skip-to-main-content link in ClientLayout (visually hidden, focusable)
H-2: aria-labelledby on LeaveRoomPrompt and RoomTopicViewer dialogs
C-1: aria-label on ~15 icon-only buttons (back, menu, close, folder, account)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 21:44:41 -04:00
Lotus Bot
ee7eabd2c4
fix(bug,perf): poll first-vote race, stale timeline ref, lazy GifPicker/EmojiBoard, focusItem timer leak, RoomNavItem memo
...
BUG-18: clearTimeout cleanup in focusItem useLayoutEffect prevents leaked timers
BUG-24: Room timeline listener catches first poll vote before Relations object exists
BUG-25: Use timelineRef.current in handleOpenEvent to prevent stale index on rapid navigation
Perf-6: React.lazy + Suspense for GifPicker and EmojiBoard (initial bundle -114 kB)
Perf-7: React.memo on RoomNavItem to prevent re-renders on unrelated state
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 21:39:35 -04:00
Lotus Bot
71791e46f6
fix(a11y,bug): aria-labels on dialogs/buttons, useAlive GIF guard, typing timer fix
...
A11y:
- Add aria-label Close to RoomTopicViewer, ImagePackView close buttons
- Add aria-label Cancel to LeaveRoomPrompt cancel button
- Add aria-label to Send, Reply, Thread, Edit, React, Search, Mute, Download buttons
- Fix aria-pressed -> aria-expanded + aria-haspopup on menu anchor triggers
- Add aria-label to username/password auth inputs
BUG-21: Add useAlive unmount guard to handleGifSelect error path in RoomInput
BUG-22: Fix typing status timer accumulation with typingTimerRef
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 21:26:18 -04:00
Lotus Bot
ff7c2ed941
Bug fixes, security hardening, and performance improvements
...
- BUG-16: Fixed pagination deadlock (fetching flag stuck on error path)
- BUG-17: Fixed absoluteIndex===0 falsy check skipping unread jump
- BUG-19: Fixed mEvt.getRoomId()! non-null assertion crash
- BUG-20: Wrapped getSettings()/setSettings() in try/catch for corrupt localStorage
- SEC: Replaced randomStr() Math.random() with crypto.getRandomValues() CSPRNG
- SEC: Fixed afterLoginRedirectPath open redirect validation
- SEC: Narrowed OSM iframe sandbox to scripts-only (removed allow-same-origin)
- Perf-2: Memoized selectAtom in useSetting (prevented new atom ref per render)
- Perf-4: Fixed typingMembers setTimeout leak (tracked timers per user/room)
- Perf-8: Memoized getChatBg() result in RoomView (not inline in JSX)
- Perf-12: Replaced body.class * font-family with body.class (inherited)
- Perf-15: Memoized typingNames array chain in RoomViewTyping
- Perf-9: Added blob URL cleanup useEffect in AudioContent
- BUG: Fixed forEach(async) -> Promise.all in useCommands join handler
- BUG: Fixed useCompositionEndTracking missing dependency array
- A11y: Fixed spoiler button aria-pressed + keyboard handler
- A11y: Added aria-label to Send message button
- Build: Set sourcemap:false, removed netlify.toml from copyFiles
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 21:11:38 -04:00
Lotus Bot
443d8407fc
PTT fixes, TDS expansions, performance hooks, state event renderers
...
PTT fixes (BUG-7/8/9):
- BUG-7: Fix isEditable to use ownerDocument.body (works in EC iframe context)
- BUG-8: Release mic if callEmbed changes during active PTT (cleanup fn)
- BUG-9: Wire iframe blur/focus listeners for stuck-mic prevention
PiP bug fix (BUG-11):
- Track prevPipMode ref so position only resets when first entering pip mode,
not on every callVisible change (user drag position preserved)
GIF improvements (BUG-15):
- Show user-visible error text in toolbar on GIF send failure
- Also surface size-limit rejection with a 4-second auto-clearing message
Performance:
- useInterval: replace useMemo with useEffect for setInterval (React StrictMode safe)
- usePan: add unmount cleanup effect to remove document mousemove/mouseup listeners
Feature: timeline state event renderers (low effort, high value):
- Added renderers for RoomEncryption, RoomJoinRules, RoomGuestAccess, RoomCanonicalAlias
- These were silently falling through to the hidden-events fallback
TDS (Lotus Terminal Design System):
- Fix: correct 8 escaped template literals in GIF picker light-mode block
- Add data-emoji-board attribute to EmojiBoardLayout for stable CSS targeting
- Add Tooltip panel styles (dark + light mode)
- Add Switch toggle styles (dark + light mode)
- Add Spinner stroke colors (dark + light mode)
- Add EmojiBoard panel styles (dark + light mode)
- Add PopOut/Menu/floating panel styles (dark + light mode)
2026-05-19 16:45:02 -04:00
Lotus Bot
8666daaf9d
Security, performance, bug fixes, and TDS improvements
...
Security:
- HIGH-1: Validate hex color format before CSS interpolation in sanitize.ts
- HIGH-5: Add sandbox attribute to OpenStreetMap iframe
- MED-1: Fix permissive URL scheme regex in LINKIFY_OPTS
- MED-3/HIGH-4: Add .js.map blocking + CSP header to nginx config
- LOW-2: Validate OIDC authUrl scheme before window.open
- Accessibility: Remove maximum-scale=1.0 from viewport meta (WCAG 1.4.4)
Performance:
- O(1) Map index in computePositions (was O(M×T) findIndex per member)
- Add RoomMemberEvent.Membership subscription so positions update on join/leave
- Fix uncleaned 2000ms setTimeout in RoomTimeline useLayoutEffect
Bug fixes:
- BUG-5: Add QUEUED/CANCELLED cases to DeliveryStatus component
- BUG-6: Guard DeliveryStatus against state events via isState() check
- BUG-10: Clamp PiP position on window resize
- BUG-14: Separate runLotusBootSequence into dedicated useEffect([lotusTerminal])
- Fix aria-live on typing indicator (WCAG 4.1.3)
- Add aria-label + aria-multiline to message editor
TDS (Lotus Terminal Design System):
- Add reaction chip styles (dark + light mode)
- Add GIF picker CSS via globalStyle instead of runtime injection
- Add URL preview styles (dark + light mode)
- Add complete GIF picker light-mode TDS block (was missing)
2026-05-19 16:26:25 -04:00
root
3196d6ac3e
docs: update README for session 2 improvements
...
- Delivery status indicators for own messages
- URL preview card TDS styling
- Reaction chip TDS styling (dark + light)
- GIF picker CSS moved to lotus-terminal.css.ts
- PTT mic state save/restore
- Boot animation Escape-to-skip
- Read receipt debounce (150ms)
- Chat background count updated
2026-05-16 02:14:17 -04:00
root
daca1e0cca
feat: URL preview TDS styling, settings description update
...
- UrlPreview.tsx: add data-url-preview attribute for CSS targeting
- lotus-terminal.css.ts: dark cyan border-left accent + transparent bg
for URL preview cards in TDS mode (dark + light variants)
- General.tsx: mention Escape-to-skip in boot animation description
2026-05-16 02:11:52 -04:00
root
e836634cff
fix: save/restore mic state on PTT mode toggle (I-4)
...
When enabling PTT mode, save current mic state before muting.
When disabling PTT, restore saved state instead of unconditionally unmuting.
Prevents surprising unmute if user had manually muted before switching to PTT.
2026-05-16 01:59:42 -04:00
root
0897e2ce4c
feat: delivery status indicator, GIF picker CSS to TDS file (M-6, M-7)
...
- Message.tsx: show delivery status (sending/sent/failed) on own messages when
no read receipts yet; hidden once server confirms (status null); TDS-styled
- GifPicker.tsx: move terminal CSS from runtime <style> tag into lotus-terminal.css.ts
eliminating flash of unstyled content (M-6)
- lotus-terminal.css.ts: add [data-gif-terminal] selector rules for GIF picker
2026-05-16 01:49:25 -04:00
root
4c4d61600d
feat: reaction TDS styling, debounce read receipts, Escape to skip boot, type fixes
...
- lotus-terminal.css.ts: add reaction chip styles for dark + light TDS modes
(cyan border/bg for unselected, orange accent for own/pressed reactions)
- useRoomReadPositions: debounce receipt handler at 150ms (M-3)
- lotus-boot.ts: Escape key skips boot animation (I-3)
- RoomInput.tsx: replace (uploadRes as any) with typed assertion (M-7)
- CallEmbedProvider: call mention detection, audio cleanup, display name (C-1, C-2, M-5)
- EventReaders: timestamps in seen-by modal, filter self, TDS styling
- ReadReceiptAvatars: StackedAvatar pill, TDS visual treatment
- chatBackground: add waves/neon/aurora backgrounds
- RoomView: auto-apply tactical bg when TDS active and bg is none
- settings: extend ChatBackground union type
2026-05-16 01:34:20 -04:00
root
1e5d5f3fe4
docs: add per-message read receipts, GIF picker, DM calls, infra sections to README
2026-05-16 00:54:33 -04:00
root
e9c7b9d600
fix: suppress uncaught promise rejections from fire-and-forget useAsync calls in useEffect
2026-05-15 19:07:13 -04:00
root
7d57396de8
feat: per-message read receipt avatars showing each user s last-read position
2026-05-15 18:56:17 -04:00
root
cb2d730cca
fix: incoming call auto-dismiss, deleted message text, PiP drag cleanup
2026-05-15 16:00:17 -04:00
root
ab9b02a243
fix: location NaN guard, PiP drag unmount cleanup, README v4.12.1
2026-05-15 15:56:43 -04:00
root
5418b9e188
fix: use space-parent check to exclude text channels from call button
2026-05-15 15:47:28 -04:00
root
51e85d885c
fix: restrict call button to DMs and invite-only rooms only
2026-05-15 15:44:51 -04:00
root
83cbb09bae
fix: VideoButton disabled state, PTT listener leak, TS prop errors
...
- VideoButton now accepts disabled prop with tooltip and visual feedback;
PrescreenControls passes disabled=true when cameraOnJoin=false
- PTT key listener in settings tracked via ref, cleaned up on unmount,
guarded against stacking on double-click; useCallback + useRef
- CallControls screenshare cancel button: variant Surface -> Secondary
- General.tsx Box align prop: align -> alignItems (TS2322 fix)
2026-05-15 15:38:02 -04:00
root
c0c0b54280
feat: poll vote counting — show tallies, persist vote across refreshes
...
PollContent now:
- Reads existing m.poll.response / org.matrix.msc3381.poll.response events
from the room timeline on mount to restore vote state across refreshes
- Counts votes per answer (per-sender latest-wins deduplication)
- Shows percentage bars and vote totals in real time
- Subscribes to RelationsEvent.Add/Remove/Redaction so counts update live
when other users vote without requiring a page reload
- Optimistic local update keeps the UI snappy while the send request flies
2026-05-15 15:21:20 -04:00
root
d81c3c8721
fix: call system bugs and security hardening
...
- CallEmbed: fix memory leak — mx event listeners were never removed
because dispose() called .bind(this) again, creating new function
objects. Now uses arrow class fields so start()/dispose() share the
exact same reference.
- callPreferences: toggleVideo is a no-op when cameraOnJoin=false,
preventing internal state drift from the returned value.
- CallControls: PTT key guard now blocks on SELECT elements and walks
the DOM for inherited contentEditable to prevent key interception
inside dropdowns and custom editors.
- RoomInput: GIF fetch validates Giphy CDN domain allow-list,
HTTP Content-Type header, and enforces 20 MB size cap.
2026-05-15 15:08:55 -04:00
root
303f6fbd45
chore: remove dead code — IncomingCallNotification and useIncomingDmCall
...
These are superseded by IncomingCallListener in CallEmbedProvider (merged from v4.12.1). IncomingCallNotification was already removed from Router.tsx in a previous commit.
2026-05-15 14:57:51 -04:00
root
d792b3002c
fix: remove debug console.log from UserChips.tsx
2026-05-15 14:57:35 -04:00
root
7a4347231c
fix: post-merge bugs — webRTCSupported call, duplicate imports
2026-05-15 14:56:30 -04:00
root
c720cc8b64
fix: correct event type in ForwardMessageDialog and poll response format
...
- ForwardMessageDialog: use sendEvent instead of sendMessage to preserve
the original event type (stickers, polls, etc.)
- PollContent: use m.selections for stable m.poll.response (per spec),
was incorrectly using m.responses
2026-05-15 14:43:31 -04:00
root
7aee1f07f1
fix: show deletion reason as primary text on redacted messages
2026-05-15 14:39:16 -04:00
root
243a1c78c1
Post-merge fixes: remove duplicate IncomingCallNotification, restore PiP touch drag + grip dots, show redacted message content
...
- Router.tsx: remove IncomingCallNotification (CallEmbedProvider.IncomingCallListener now handles all calls)
- CallEmbedProvider: restore touch drag (handlePipTouchStart), grip dots on resize handles, fix normaliseToTopLeft width/height
- FallbackContent/MsgTypeRenderers: add originalBody prop to show struck-through original text on deleted messages
- RoomTimeline: cache text message bodies so they can be shown after redaction
2026-05-15 14:13:41 -04:00
root
8ebb1a8d8c
chore: merge v4.12.1 — security, calling, editor, media fixes
...
Key v4.12.1 changes merged:
- Security: sanitize-html updated to v2.17.4
- Calling: video calls in DMs/rooms, user avatars during calls, right-click to start
- Calling: IncomingCallListener with ring sound and answer/reject UI
- Editor: list crash fixes (Firefox + empty headings), codeblock filename support
- Media: URL preview hover state, keyboard nav, click-to-open, OGG audio support
- Date: ISO 8601 (YYYY-MM-DD) date format option
- Misc: stable mutual rooms endpoint, Android notification crash fix
Lotus customisations preserved:
- PiP drag/resize, DM call ring notification, PTT, GIF picker, noise suppression
- Poll voting, message forwarding, image captions, location sharing
- Lotus Terminal design theme
2026-05-15 13:43:04 -04:00
root
86464f4981
feat: poll voting, location sharing, image captions, message forwarding
...
- Poll voting: PollContent sends m.poll.response on answer click
- Location: MLocation shows OSM map embed + share-location button in toolbar
- Image captions: caption field on media uploads sets message body
- Message forwarding: ForwardMessageDialog with searchable room picker
- Also includes ring timeout fix and earlier session patches
2026-05-15 13:37:03 -04:00
kfiven
91d52e44bc
chore(release): 4.12.1 [skip ci]
2026-05-15 07:20:54 +00:00
Krishan
a393fab2d6
fix: null edit for another release ( #2942 )
2026-05-15 17:19:08 +10:00
kfiven
ec8a9be44c
chore(release): 4.12.0 [skip ci]
2026-05-15 07:02:05 +00:00
Krishan
a1e4539852
Revert "chore: Update GITHUB_TOKEN to CLA_PAT in prod workflow" ( #2941 )
...
Revert "chore: Update GITHUB_TOKEN to CLA_PAT in prod workflow (#2940 )"
This reverts commit ccb11880d9 .
2026-05-15 16:59:52 +10:00
Krishan
ccb11880d9
chore: Update GITHUB_TOKEN to CLA_PAT in prod workflow ( #2940 )
...
Changed GITHUB_TOKEN secret to CLA_PAT for semantic release due to branch protection.
2026-05-15 16:57:38 +10:00
renovate[bot]
ded2e7be80
fix(deps): update dependency sanitize-html to v2.17.4 ( #2937 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-15 16:33:13 +10:00