Thank you to all the contributors who made this release possible!
Features
- result: option to copy slow words list with filtering (@vrutant08) (#8290) (06f52c899)
Improvements
- authentication settings: add a way to display current email (12969bd01)
- integrate leaderboard purging on user ban (91bd24bb8)
- regex-words-filter: allow patterns without slashes (@Leonabcd123) (#8309) (8f1998b3c)
Fixes
- test: shared settings ignoring setPipeDelimiter=false (@fehmer) (#8263) (4dcc54b68)
- anime: update reactive content of AnimeShow and AnimeSuspense in place (86a922753)
- test: blurring the input after the test page unmounted no longer throws (e91de436a)
- dev: signal tracker reads live values and tracks late and hot reloaded signals (f007a28fb)
- keymap showing errors in blind mode (d3f17224c)
- phantom theme: unreadable time statistic (27a8c6ee2)
- themes unable to target result page (574d81934)
- activity: keep tooltips within viewport (@ahamsel) (#8324) (2f4a20e62)
- ci: handle changed files for push events in GitHub Actions (8073665c3)
- animated modals not animating when hiding (bcbf5c390)
- safari tab navigation (07407cf30)
- pressing config buttons fast would desync test state (ab2a4df70)
- languages: disable lazy mode for chinese simplified (@EnormousMush) (#8271) (5303ce7f3)
- friends page: Fixed a loader position which is position next to heading "Friends" (@self-yash) (#8273) (041d5ddd8)
- quotes: prevent wrong quote length when moderator edits quote (@HmonWutt) (#8274) (3fe152037)
- handling of empty string in InputField (@fehmer) (#8272) (b9e6b7ed2)
- keymap mode react not working with prefers-reduced-motion (@fehmer) (#8281) (594d1bc72)
- keymap: restore handling of shift/capslock (@fehmer) (#8285) (e9f47f899)
- live progress text off center in non-chromium browsers (@shrewddd) (#8307) (d2da42029)
- account: don't show leaderboard section if not qualified (@fehmer) (#8308) (223f8a457)
- last word with only commit character is invisible (@Leonabcd123) (#8313) (edb9fb891)
- quote: correcting source of quote (@Technet8394) (#8301) (20b9530d7)
- privacy-policy: remove link to nonexistent section (@Leonabcd123) (#8327) (89535b85e)
- quote-search: make highlighting work again (@Leonabcd123) (#8330) (e46135e85)
Nerd stuff
These changes will not be visible to users, but are included for completeness and to credit contributors.
- anime: start enter animations on the next frame, add AnimeSuspense (fef41ca1a)
- AsyncContent brings its own Suspense boundary (9e8c20750)
- style: remove focus outline from modals (bcf4e7475)
- docs: coding standard to update comments describing changed behaviour (7b13a4a2c)
- docs: agent browser gotchas, formatter and sharper browser pointer (b35368f10)
- docs(contributing): Fix example quote commit message (@brentspine) (#8103) (85e24cfd0)
- docs(self hosting): add security section (@fehmer) (#8264) (501ada642)
- docs: add animejs and tanstack to readme (@fehmer) (#8335) (5ff66545e)
- refactor: move font and ui.ts dom work into Font component (@Miodec) (b3b561075)
- refactor: move theme controller dom work into Theme (@Miodec) (#8484) (db0db0999)
- refactor: replace keymap, google sign up and tts events with state and direct calls (@Miodec) (#8483) (5bb65a4f7)
- refactor: move legacy states into states (@Miodec) (#8482) (c98d9204c)
- refactor: rename result visibility signals (53707df98)
- refactor: apply url actions in the test route (@Miodec) (#8475) (fe8e40fe5)
- refactor: routing rewrite on TanStack Solid Router (@Miodec) (#8459) (9ce199941)
- refactor: render the app with Solid, mount pages on demand (@Miodec) (#8467) (c92720d33)
- refactor(states): share key state listener between modifiers and monkey (01545f4ff)
- refactor(test): move autofocus and resize handlers into test UI init (261b042f8)
- refactor(post-checkout): improve nvm handling and skip unnecessary installs (cd2109e3a)
- refactor(settings): each setting handles its own highlight (1c5ad2e1a)
- refactor(profile): focus the search input through a plain ref (34e02b2b4)
- refactor(settings): use Fa for the local font icon (51c1067c0)
- refactor: move some test page classes, styles and listeners from test-ui to solid (9de330be3)
- refactor: add animateOnMount prop to AnimeShow (952081be5)
- refactor: unmount test page on leave (@Miodec) (1c54f6af5)
- refactor: stop the test on test page leave instead of restarting (25351fbbf)
- refactor: allow typing test to remount (@Miodec) (cb220941a)
- refactor: convert small test page elements to solid (4b90206f3)
- refactor: convert test result to solidjs (@Miodec) (#8440) (c61298a86)
- refactor: wrap typing page in solidjs (@Miodec) (#8438) (593591839)
- refactor: move theme bubbles to a common component (6b1bdd3f1)
- refactor: rewrite commandline in solidjs (1f43321d8)
- refactor(animated modal): enhance animation handling and visibility management (869af04e6)
- refactor: convert practise words modal to solidjs (5f5aa0ca5)
- refactor: convert loading page to solidjs (6470599e6)
- perf(frontend): draw theme bubbles in one element (7974c5856)
- perf(frontend): create charts without animation setup (58f768bf8)
- perf: stop SlimSelect from rebuilding its options repeatedly (cbaa65cce)
- perf: settings page optimisation (fd73edfae)
- perf: settings page loading improvements (8937599fa)
- perf(file storage): make hasFile not request the whole file (86f479c2d)
- chore: fix double animationm of the punc and num test config (2bf211de2)
- chore: rewrite all ads in solid (1131ba0b2)
- chore: move #app fade in to solid (0bc55121e)
- chore: move custom background to a solid component (2c72d6f2b)
- chore: bump oxlint (0addedb35)
- chore(hooks): skip post-checkout install in sandboxed shells (e9620d8dd)
- chore: only run post checkout on full branch checkout (bba58fd3b)
- chore: add Suspense boundaries next to query and resource reads (864c4f484)
- chore: add coding standards, move some text from agents (581090186)
- chore: prefer cn to classList (99fe06923)
- chore: add dev-only window.__mt for easier agent browser interaction (2b8007a35)
- chore: claude files and hooks improvements (a3c1c4775)
- chore: remove bad word from polish lists (7dae3f0c0)
- chore(settings): move some settings / console commands / runtime states to a new modal (01d935a79)
- chore: missing mock (4bd46c6ca)
- chore: add user deletion admin endpoint (69a8339f6)
- chore: update event log viewer state, add more stats (aa2ab3726)
- chore: remove words from german list (b2e412186)
- chore: ignore incomplete tests when no last result found (2cc5d734f)
- chore: remove deleteAll results endpoint (457753951)
- chore: update gitignore (3ac38d4e9)
- chore(deps-dev): bump @vitest/browser from 4.1.8 to 4.1.10 (#8269) (685d4ad33)
- chore: update pnpm to 11 (@fehmer) (#8288) (7706becb5)
- chore: regenerate lock file (c3048ffa8)
- chore(deps): bump uuid from 14.0.0 to 14.0.1 (#8286) (96402aaf1)
- chore(deps-dev): bump postcss from 8.5.23 to 8.5.24 in /frontend (#8319) (048da41c2)
- chore(deps-dev): bump postcss from 8.5.15 to 8.5.23 (#8320) (3cc130562)
- chore(self-hosting): use traefik proxy, add optional https setup (@fehmer) (#8303) (7341c517f)
- chore(ci): remove claude workflow (@Leonabcd123) (#7985) (bcd648994)