|
|
96ff3bef78
|
Image/voice shares: bold + italic so they stand out in the log
|
2026-07-10 21:09:36 +00:00 |
|
|
|
b1b628bdc9
|
Fix CTCP ACTION: wrap in \x01 so /me + image shares render as '* nick …' in every client (mIRC etc.)
|
2026-07-10 21:09:36 +00:00 |
|
|
|
4f8d10c8a5
|
yomirc: float the hover toolbar above the log line so it no longer overlaps the next line (fixes hover jump)
|
2026-07-10 20:04:46 +00:00 |
|
|
|
f90aca5252
|
Sidebar rows: div[role=button] + a real close button — valid HTML, keyboard-reachable close
|
2026-07-10 19:54:40 +00:00 |
|
|
|
5d6de5a357
|
Sidebar: memoize each room row (subscribes to its own buffer) so a message updates only that row
|
2026-07-10 19:50:37 +00:00 |
|
|
|
b7265b5706
|
Composer: mark fire-and-forget image uploads with void (intent; store already catches)
|
2026-07-10 19:45:06 +00:00 |
|
|
|
d3300d4a4e
|
Images: decode avatars + link previews off-thread (decoding=async), pin preview img size
|
2026-07-10 19:43:33 +00:00 |
|
|
|
bbd8b81ea6
|
Modals: trap Tab inside the dialog and return focus to the trigger on close (a11y)
|
2026-07-10 19:41:51 +00:00 |
|
|
|
77d8a0a669
|
Message rows use content-visibility to skip off-screen layout/paint (faster channel switch)
|
2026-07-10 19:17:13 +00:00 |
|
|
|
c3b96c5b16
|
Memoize message rows: a new message re-renders only the new row, not the whole list
|
2026-07-10 19:07:11 +00:00 |
|
|
|
67e6493b71
|
Native tactile press feedback: controls dip+dim on touch, no tap delay/callout
|
2026-07-10 18:54:21 +00:00 |
|
|
|
8bc88557b3
|
Mobile native-feel: kill iOS input-zoom (16px), overscroll-contain, no tap-flash, safe-area top, non-selectable chrome
|
2026-07-10 18:37:30 +00:00 |
|
|
|
c0ec75d6dd
|
iOS keyboard: native easing curve + 60px threshold to stop suggestion-bar jitter
|
2026-07-10 18:21:24 +00:00 |
|
|
|
d5af169c73
|
Self-heal the iOS pre-resize when no keyboard opens (hardware keyboard / programmatic focus)
|
2026-07-10 17:54:51 +00:00 |
|
|
|
88e689fc82
|
Smooth iOS keyboard open: pre-resize on focus + CSS height glide, corrected by the resize event
|
2026-07-10 17:53:14 +00:00 |
|
|
|
9a4757e839
|
Track mobile keyboard via VisualViewport directly; drop the pre-resize guess that broke the first open
|
2026-07-10 17:41:50 +00:00 |
|
|
|
db1ba1420f
|
Analytics consent: grant only analytics_storage in the app (ad signals stay denied, ad-free)
|
2026-07-10 16:26:02 +00:00 |
|
|
|
e2ecd093a6
|
Make the console/status window follow the theme accent (drop hardcoded terminal green)
|
2026-07-10 15:43:30 +00:00 |
|
|
|
df3f9d4b92
|
Reflect own away state in the member list (patch self entry) + orange away name
|
2026-07-10 15:04:23 +00:00 |
|
|
|
04f229053a
|
Fix avatar click crash: capture rect before the state updater runs
|
2026-07-10 14:48:22 +00:00 |
|
|
|
b94b9f8994
|
Open a presence menu (Available/Away + reason) from the account avatar
|
2026-07-10 14:45:28 +00:00 |
|
|
|
cf51efe339
|
Rework theme presets: rename, orange Night-orange accent, theme-aware console
|
2026-07-10 14:25:26 +00:00 |
|
|
|
8894974479
|
Drop the app's consent banner; consent is handled on the site (same origin)
|
2026-07-10 14:01:44 +00:00 |
|
|
|
6f9df54864
|
Switch analytics to Google Consent Mode v2 (advanced)
|
2026-07-10 13:29:01 +00:00 |
|
|
|
8fd1af78bb
|
Fix stale app-update comment to match no-auto-reload behavior
|
2026-07-10 10:30:47 +00:00 |
|
|
|
726ce7b609
|
Strip IRC formatting codes from WebMCP read_messages output
|
2026-07-10 10:27:21 +00:00 |
|
|
|
7f6fb14b19
|
Expose the chat as WebMCP tools for AI agents (list/read/send/join/switch/members)
|
2026-07-10 10:21:10 +00:00 |
|
|
|
6ad0d2bbd9
|
Fix mobile drawer footer: give the nav tabs their own full-width row
|
2026-07-10 09:25:46 +00:00 |
|
|
|
c18604c426
|
Stop the app from auto-reloading on new builds; update on next manual refresh instead
|
2026-07-10 09:04:31 +00:00 |
|
|
|
ad05f3e470
|
Fix mobile topbar overflow: drop the redundant channel avatar and tighten spacing
|
2026-07-10 08:13:30 +00:00 |
|
|
|
937a9dc38c
|
Fix mobile: wrap the extban composer and full-screen the channel panel
|
2026-07-10 08:06:22 +00:00 |
|
|
|
4a0b6b51e0
|
Fix mobile layout: constrain the app to the viewport height when a navbar shell wraps it
|
2026-07-10 08:00:46 +00:00 |
|
|
|
27cfae944a
|
Support extban stacking: nest a matching extban inside an acting one (mute:account:...)
|
2026-07-10 07:42:11 +00:00 |
|
|
|
a390078876
|
List +e ban-exceptions and +I invite-exceptions in the channel panel, removable per mode
|
2026-07-10 07:27:02 +00:00 |
|
|
|
a141742868
|
Gate the extban +e/+I modes on the server's CHANMODES list modes
|
2026-07-10 07:17:41 +00:00 |
|
|
|
2bae979b30
|
Let extbans be set as +b, +e or +I from the channel panel, with the example following the mode
|
2026-07-10 07:11:33 +00:00 |
|
|
|
efe0fb0df9
|
Add a security-group quick-pick for the securitygroup extban (config-driven)
|
2026-07-10 07:01:13 +00:00 |
|
|
|
f920d52847
|
Show the full +b command example for the selected extban type
|
2026-07-10 06:45:29 +00:00 |
|
|
|
5a3d6e737d
|
Type the new bans tab in the Tab union
|
2026-07-10 06:36:39 +00:00 |
|
|
|
d5c8da0d50
|
Give plain bans their own tab and reflow the channel panel to a single full-width column
|
2026-07-10 06:34:45 +00:00 |
|
|
|
e620f72f84
|
Replace the extban chip grid with a compact searchable type selector
|
2026-07-10 06:18:49 +00:00 |
|
|
|
4fe83e790a
|
Move extbans into their own channel-panel tab, separate from plain bans
|
2026-07-10 06:13:06 +00:00 |
|
|
|
9b3db02721
|
Add an extban picker to the channel panel, driven by ISUPPORT EXTBAN
|
2026-07-10 05:52:46 +00:00 |
|
|
|
900859acdf
|
Share the Django site's analytics consent instead of asking twice (same-origin tchatou-consent)
|
2026-07-10 05:28:23 +00:00 |
|
|
|
56ae05f56d
|
Clear any lingering GA cookies at boot when analytics consent isn't granted
|
2026-07-10 05:19:09 +00:00 |
|
|
|
69cd4eb024
|
Gate Google Analytics behind a consent banner (opt-in, withdrawable in Settings)
|
2026-07-10 05:16:43 +00:00 |
|
|
|
68c7560212
|
Add opt-in Google Analytics (gtag.js) with per-channel page views, DMs redacted
|
2026-07-10 04:32:33 +00:00 |
|
|
|
1a82247a7d
|
Enable cookieless analytics on the app (config.analytics endpoint)
|
2026-07-10 04:19:00 +00:00 |
|
|
|
c222eda4c1
|
Loosen the analytics beacon backstop below the debounce so session events aren't dropped
|
2026-07-10 04:12:27 +00:00 |
|
|
|
66509f5adb
|
Add a sandboxed cookieless analytics feature (host-mediated beacon, off by default)
|
2026-07-10 04:03:29 +00:00 |
|