jared
c6932b45fb
feat: glassmorphism sidebar toggle (P5-3)
...
Settings → Appearance: "Glassmorphism Sidebar" toggle (off by default).
When enabled, applies backdrop-filter: blur(12px) and a semi-transparent
background to the left sidebar so chat background patterns show through.
SidebarGlass vanilla-extract class in Sidebar.css.ts; wired in
SidebarNav.tsx via classNames conditional.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 22:02:18 -04:00
jared
ee717e8361
feat: PiP mute indicator, export history, activity log, unverified device warning
...
- PiP call window: mute overlay using MutationObserver on EC iframe's
[data-testid="incall_mute"] button (data-kind="primary" = muted),
same pattern as screenshare detection in CallControl.ts
- P2-4 Export Room History: new tab in room settings — Plain Text / JSON /
HTML formats, optional date range, progress counter, paginated via
paginateEventTimeline, blob download; E2EE-aware (skips failed decryptions)
- P2-6 Room Activity Log: new tab in room settings — filterable log of
m.room.member, m.room.power_levels, m.room.name/topic/avatar/server_acl
events with human-readable descriptions, relative timestamps, Load More
pagination
- P2-10 Unverified Device Warning: warnOnUnverifiedDevices setting (default
off); Warning.Container banner above composer in encrypted rooms with
unverified devices; toggle in Settings → General → Privacy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-03 22:13:22 -04:00
jared
e18e089043
revert: remove redundant QuickSwitcher (Ctrl+K already does this better)
...
The existing SearchModalRenderer (Ctrl+K) is already a polished room/DM
switcher with avatars, unread badges, fuzzy search, and keyboard nav.
Our QuickSwitcher was an inferior duplicate. Removing it entirely:
- Delete QuickSwitcher.tsx
- Remove QuickSwitcherFeature from ClientNonUIFeatures
- Remove quickSwitcherKey from settingsAtom
- Remove Keyboard Shortcuts section from General settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-03 01:03:50 -04:00
jared
9d4679d260
feat: configurable keybindings for push-to-deafen and quick switcher
...
- Add deafenKey (default M) and quickSwitcherKey (default P) to settingsAtom
- Settings → Calls: Push to Deafen keybind tile using shared useKeyBind hook
- Settings → Keyboard Shortcuts: new section with Quick Room Switcher keybind
- Extract useKeyBind + keyLabel helpers to reduce duplication in Calls section
- CallControls reads deafenKey from settings (reactive, re-registers on change)
- ClientNonUIFeatures reads quickSwitcherKey from settings (same pattern)
- QuickSwitcher now toggles open/closed on repeat press (Ctrl+key again closes)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-03 00:45:43 -04:00
jared
afe957015b
feat: P1 features — voice speed, private receipts, room filter, favorites, invite link, poll creation
...
P1-5: Voice message playback speed toggle (0.75×/1×/1.5×/2×) in AudioContent.tsx
P1-10: Private read receipts toggle in Privacy settings; wired to notifications.ts
P1-3: Room filter input on Home tab and DMs tab (client-side, clears on tab switch)
P1-8: Favorite rooms via m.favourite tag — Favorites section in Home sidebar, star/unstar in right-click menu
P1-9: Room invite link + QR code in room settings (Share Room tile, api.qrserver.com QR)
P1-6: Poll creation modal in composer (PollCreator.tsx, sends m.poll.start)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-02 19:31:30 -04:00
jared
dedbd54199
feat: typing indicator orange dots, push-to-deafen hotkey, night light filter, message length counter
...
- #108 : TypingIndicator reads lotusTerminal setting; applies var(--lt-accent-orange)
to container so dots inherit via backgroundColor:currentColor
- #100 : CallControls registers KeyM as push-to-deafen (e.code, e.repeat guard,
ownerDocument.body iframe-safe editable check, [callEmbed] dep array)
- P5-5: nightLightEnabled/nightLightOpacity settings; position:fixed rgba(255,140,0)
overlay inside JotaiProvider; Night Light tile + intensity slider (5–80%) in
Settings → Appearance
- #101 : RoomInput charCount state via Slate onChange + toPlainText; resets on
room switch; displayed before send button when count > 0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-02 15:36:45 -04:00
jared
fc9ba03943
fix: remove unused useRoomName import, run prettier on all changed files
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-01 21:38:35 -04:00
jared
16dddcb9f0
fix: comprehensive P0 quality pass — audit findings resolved
...
- ReportRoomModal: use mx.reportRoom() SDK method, fix undefined CSS vars
(--mx-surface/border → folds color tokens), add role/aria-modal/aria-labelledby,
accessible select/input labels, per-error-code messages, auto-close on success
- About.tsx: clickable matrix_id + email_address links (Text as="a"), AbortController
cleanup, runtime JSON type guard, loading state, role display for all role values,
remove classList theming hack, use mx.getHomeserverUrl()
- RoomViewHeader: useLocalRoomName for header title, useReportRoomSupported gate,
hide Invite/Settings/Report for server notice rooms, isCreator guard on Report,
FocusTrap returnFocusOnDeactivate on topic overlay, Server Notice chip tooltip
- RoomInput: replace raw <div> with folds <Box> for server notice read-only message
- EditHistoryModal: isRawEditEvent type guard, handle next_batch truncation,
getVersionBody handles formatted_body (strips HTML for text display),
role/aria-modal/aria-labelledby accessibility, guard for undefined eventId,
use config.space tokens (remove var(--mx-spacing-*) strings)
- RoomNavItem: remove duplicate getExistingContent (use exported getLocalRoomNamesContent),
maxLength={255} on rename input, fix FocusTrap nesting (renameDialog state moved to
RoomNavItem_, RenameRoomDialog rendered outside menu, menu closes before dialog opens),
pencil icon opacity via config.opacity.P300
- useRoomMeta: export getLocalRoomNamesContent for reuse
- RoomIntro: useLocalRoomName, formatted topic viewer with Overlay/FocusTrap/RoomTopicViewer
- CallRoomName: useLocalRoomName for consistent rename display in call overlay
- General.tsx: fix #980000/#FF6B00 hardcoded hex → color tokens/CSS vars, URL Preview
capitalization, improved encrypted preview warning text + Warning chip, add
description to plain urlPreview setting
- sanitize.ts: fix hex color regex to support 3/4/6/8 digit hex (CSS4 #RGBA, #RRGGBBAA)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-01 21:30:27 -04:00
jared
572bc6a4c0
feat: add Report Room (MSC4151) and fix URL preview default for encrypted rooms
...
- Report Room: new ReportRoomModal with reason + category, POST /rooms/{id}/report
- URL preview: encUrlPreview default changed to true; security note added to settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-01 17:11:21 -04:00
jared
db4a39ff56
refactor: move privacy settings into dedicated Privacy section
...
Hide Typing & Read Receipts and Hide Online Status were buried in
the Editor section. Extracted into a new Privacy section that sits
between Messages and Calls, where users would naturally look.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 19:31:36 -04:00
jared
08b1a5c2a3
feat: full Discord-style presence tracking
...
- Announce online immediately on app startup
- Idle detection: unavailable after 10 min of no input, online on return
- Tab visibility: unavailable when hidden, online when focused again
- Page close: offline via fetch+keepalive (survives unload without bfcache penalty)
- hidePresence setting: broadcasts offline and stops all tracking
- Added 'Hide Online Status' toggle in General settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 19:28:52 -04:00
Lotus Bot
61a1f008d0
chore: upgrade i18next 26, prettier 3, fontsource-variable, domhandler 6, lint-staged 17
...
- i18next 23->26 + react-i18next 15->17
- prettier 2->3, reformat all files
- replace @fontsource/inter with @fontsource-variable/inter 5, update import path
- domhandler 5->6 (aligns with transitive deps)
- lint-staged 16->17
2026-05-21 23:30:50 -04:00
Lotus Bot
42b9cc2b64
chore: prettier format all files, brotli, Sentry release tagging, CI gates
...
Prettier: auto-formatted 103 files to fix baseline. Prettier check in CI
is now a hard gate (removed continue-on-error).
Brotli: installed libnginx-mod-http-brotli-filter/static. Enabled in nginx
with brotli_static on for pre-compressed assets and comp_level 6.
Sentry releases: deploy script now exports VITE_APP_VERSION=<git-short-sha>
before building so each Sentry release maps to an exact commit.
CI also passes github.sha as VITE_APP_VERSION.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-21 20:49:33 -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
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
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
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
038bde8b62
feat(call): PTT, deafen label, camera default off, screenshare confirm, noise suppression setting
...
- Push to Talk: keydown/keyup binds mic to configurable key (default Space)
with visual PTT indicator and key-binding UI in Settings > General > Calls
- Camera always defaults OFF on join; cameraOnJoin setting for explicit opt-in
- Deafen button tooltip corrected to Deafen/Undeafen instead of Turn Off/On Sound
- Screenshare confirmation dialog before broadcasting to call participants
- Noise suppression toggle wired from settings through CallEmbed URL params
- CallControl.setMicrophone() public method for programmatic mic control
- Calls settings section added to General settings page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-14 11:14:04 -04:00
root
dc26e15df1
Audit fixes: Lotus URLs, branding, editor toolbar setting, dynamic version
2026-05-13 23:03:14 -04:00
root
893aa92b38
Deepen TDS integration: full terminal CSS coverage + 3 new backgrounds
...
Terminal Mode:
- Text selection: orange highlight rgba(255,107,0,0.28)
- Links: cyan (#00D4FF) with orange hover glow (#FF6B00)
- Code/pre: TDS green (#00FF88) on terminal bg, left green border
- Strong/b → orange, em/i → cyan, mark → amber, del → red
- Blockquote: orange left border (matches chat reply quotes)
- HR: cyan border with dim glow
- Input/textarea/[contenteditable] focus: orange glow ring
- Tables: TDS headers (orange+uppercase), cyan borders, hover rows
- List markers: cyan ▸ for ul, orange for ol
- Boot box-drawing alignment fixed (51→52 ═)
- data-theme=\"dark\" set on html element when terminal active
- Updated description: correct TDS palette names
- ▶ Boot replay button in settings (visible when terminal on)
Chat backgrounds (+3):
- Tactical: LotusGuild TDS exact cyan dot-grid (28px)
- Circuit: green grid + node dots on dark terminal bg
- Hex Grid: isometric cyan hexagonal outlines
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 22:44:34 -04:00
root
f3ec49fe88
Add Lotus Terminal Mode + fix all remaining Cinny branding
...
- New: Lotus Terminal Mode toggle in Appearance settings
- Red phosphor color scheme (bg #0a0000, primary #ff3300, accent #00dd66)
- Monospace font override (JetBrains Mono / Fira Code / Cascadia Code)
- Retro CRT scanline overlay via CSS pseudo-element
- Wired into ThemeManager with dedicated lotusTerminalBodyClass
- Branding: replace all user-visible Cinny references with Lotus Chat
- WelcomePage, AuthLayout, SplashScreen, index.html meta tags
- Device display names in login/register/token flows
- System notification brand field
- (Preserved internal Matrix protocol CinnySpaces event type)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 22:22:06 -04:00
root
d67fe80906
Backgrounds: theme-aware patterns and visual preview grid
2026-05-13 21:51:19 -04:00
root
0df997eecf
Redesign chat backgrounds: blueprint, carbon, stars, topographic, herringbone, crosshatch
2026-05-13 21:42:12 -04:00
root
dcb3ff3129
Phase 2+3: Chat backgrounds and per-message profiles settings
2026-05-13 21:17:59 -04:00
Ajay Bura
c43d518995
Add option for monochrome mode ( #2464 )
2025-08-25 23:19:14 +10:00
Ajay Bura
b7cc9d88cb
Revert "Fix menus congestion and improve thread reply layout ( #2402 )" ( #2409 )
...
This reverts commit 29364b2e92 .
2025-08-04 20:29:12 +05:30
Ajay Bura
29364b2e92
Fix menus congestion and improve thread reply layout ( #2402 )
...
* make menus more spacious
* improve threaded reply layout
* fix search filter button spacing
2025-07-27 22:20:23 +10:00
Gimle Larpes
ac0345d07f
Add settings to enable 24-hour time format and customizable date format ( #2347 )
...
* Add setting to enable 24-hour time format
* added hour24Clock to TimeProps
* Add incomplete dateFormatString setting
* Move 24-hour toggle to Appearance
* Add "Date & Time" subheading, cleanup after merge
* Add setting for date formatting
* Fix minor formatting and naming issues
* Document functions
* adress most comments
* add hint for date formatting
* add support for 24hr time to TimePicker
* prevent overflow on small displays
2025-07-27 22:13:00 +10:00
Ajay Bura
4e8f81fa80
Change username color in chat with power level color ( #2282 )
...
* add active theme context
* add chroma js library
* add hook for accessible tag color
* disable reply user color - temporary
* render user color based on tag in room timeline
* remove default tag icons
* move accessible color function to plugins
* render user power color in reply
* increase username weight in timeline
* add default color for member power level tag
* show red slash in power color badge with no color
* show power level color in room input reply
* show power level username color in notifications
* show power level color in notification reply
* show power level color in message search
* render power level color in room pin menu
* add toggle for legacy username colors
* drop over saturation from member default color
* change border color of power color badge
* show legacy username color in direct rooms
2025-03-23 22:09:29 +11:00
Ajay Bura
9bacdd1018
Hidden Typing & Read Receipts ( #2230 )
...
* add hide activity toggle
* stop sending/receiving typing status
* send private read receipt when setting toggle is activated
* prevent showing read-receipt when feature toggle in on
2025-02-26 21:44:53 +11:00
Array in a Matrix
ac8df3c2df
fix media autoload button function as per it's label ( #2195 )
...
* Corrected button title
Media would load automatically if the option is checked not the other way around.
* Update src/app/features/settings/general/General.tsx
* Update General.tsx
* Update General.tsx
---------
Co-authored-by: Krishan <33421343+kfiven@users.noreply.github.com >
2025-02-11 16:28:46 +11:00
Ajay Bura
87cc753366
redesigned app settings and switch to rust crypto ( #1988 )
...
* rework general settings
* account settings - WIP
* add missing key prop
* add object url hook
* extract wide modal styles
* profile settings and image editor - WIP
* add outline style to upload card
* remove file param from bind upload atom hook
* add compact variant to upload card
* add compact upload card renderer
* add option to update profile avatar
* add option to change profile displayname
* allow displayname change based on capabilities check
* rearrange settings components into folders
* add system notification settings
* add initial page param in settings
* convert account data hook to typescript
* add push rule hook
* add notification mode hook
* add notification mode switcher component
* add all messages notification settings options
* add special messages notification settings
* add keyword notifications
* add ignored users section
* improve ignore user list strings
* add about settings
* add access token option in about settings
* add developer tools settings
* add expand button to account data dev tool option
* update folds
* fix editable active element textarea check
* do not close dialog when editable element in focus
* add text area plugins
* add text area intent handler hook
* add newline intent mod in text area
* add next line hotkey in text area intent hook
* add syntax error position dom utility function
* add account data editor
* add button to send new account data in dev tools
* improve custom emoji plugin
* add more custom emojis hooks
* add text util css
* add word break in setting tile title and description
* emojis and sticker user settings - WIP
* view image packs from settings
* emoji pack editing - WIP
* add option to edit pack meta
* change saved changes message
* add image edit and delete controls
* add option to upload pack images and apply changes
* fix state event type when updating image pack
* lazy load pack image tile img
* hide upload image button when user can not edit pack
* add option to add or remove global image packs
* upgrade to rust crypto (#2168 )
* update matrix js sdk
* remove dead code
* use rust crypto
* update setPowerLevel usage
* fix types
* fix deprecated isRoomEncrypted method uses
* fix deprecated room.currentState uses
* fix deprecated import/export room keys func
* fix merge issues in image pack file
* fix remaining issues in image pack file
* start indexedDBStore
* update package lock and vite-plugin-top-level-await
* user session settings - WIP
* add useAsync hook
* add password stage uia
* add uia flow matrix error hook
* add UIA action component
* add options to delete sessions
* add sso uia stage
* fix SSO stage complete error
* encryption - WIP
* update user settings encryption terminology
* add default variant to password input
* use password input in uia password stage
* add options for local backup in user settings
* remove typo in import local backup password input label
* online backup - WIP
* fix uia sso action
* move access token settings from about to developer tools
* merge encryption tab into sessions and rename it to devices
* add device placeholder tile
* add logout dialog
* add logout button for current device
* move other devices in component
* render unverified device verification tile
* add learn more section for current device verification
* add device verification status badge
* add info card component
* add index file for password input component
* add types for secret storage
* add component to access secret storage key
* manual verification - WIP
* update matrix-js-sdk to v35
* add manual verification
* use react query for device list
* show unverified tab on sidebar
* fix device list updates
* add session key details to current device
* render restore encryption backup
* fix loading state of restore backup
* fix unverified tab settings closes after verification
* key backup tile - WIP
* fix unverified tab badge
* rename session key to device key in device tile
* improve backup restore functionality
* fix restore button enabled after layout reload during restoring backup
* update backup info on status change
* add backup disconnection failures
* add device verification using sas
* restore backup after verification
* show option to logout on startup error screen
* fix key backup hook update on decryption key cached
* add option to enable device verification
* add device verification reset dialog
* add logout button in settings drawer
* add encrypted message lost on logout
* fix backup restore never finish with 0 keys
* fix setup dialog hides when enabling device verification
* show backup details in menu
* update setup device verification body copy
* replace deprecated method
* fix displayname appear as mxid in settings
* remove old refactored codes
* fix types
2025-02-10 16:49:47 +11:00