This release features a big test logic rework - all tests and test stats can now be represented as a single array of events. This cleans up a lot of things and makes it easier to add features in the future. If anything explodes, be sure to let us know. It also features a small test timer refactor which should result in the timer being more consistent in laggy sessions. 🤞
Thank you to all the contributors who made this release possible!
Features
- font: add Noto Sans Lao (@allyLee86) (#7991) (26c38e743)
- language: add english_legal (@pprestwood-collab) (#8015) (8a3be3265)
- layout: add vylet_v4 layout (@MightyAcas) (#8024) (fd274a963)
- quotes: add Witch Hat Atelier quote (@donmaruko) (#8030) (0a83d38cd)
- layout: add nokwts layout (@antomfdez) (#7989) (823f27d00)
Improvements
- qutoes: Added English quote from Doctor Who radio play (@Rat-Prophetist-Fordism) (#8070) (4dbef36c9)
- mobile ui improvements (@d1rshan) (#8056) (2516e29b8)
- custom text: add button to download custom texts (@fehmer) (#8039) (6e0b2f063)
- quotes: add quotes in various languages (@d1rshan, @Ph0enix22, @Infinite1024Void) (#8073, #8076, #8035) (94633bfc3, 2903e9612, 4e9c273de)
Fixes
- rate limit keyGenerator (@fehmer) (#8087) (018e17198)
- commandline: don't show underscores in values for highlightMode and keymapStyle (@fehmer) (#8125) (5fef92d61)
- settings: optional include background link (@fehmer) (#8116) (667ee5dfb)
- previous password schema being too restrictive (1a5650855)
- space characters not shown in input history (e10280a14)
- final word char count in timed tests (b751e7dbb)
- unintended auto restart when on result screen (3839e0406)
- custom test duration: focus and select the input when opening (5086bb611)
- friends list broken when user has missing streak info (@fehmer) (#8097) (fe53c374b)
- fix quotes test (@rizwanmustafa) (#8072) (3f4507e84)
- dont double count newline characters (070d933e3)
- incorrect boundary length when test length is round (82e06372d)
- tags not loading in time, again (@fehmer) (#8053) (2de877e3a)
- ci: fix local dev label (bump labeler to v6) (@d1rshan) (#7980) (487262ecd)
- challenge: setup funboxes last when loading a challenge (@Leonabcd123) (#7993) (b907b460a)
- CustomTextModal: Resolve limit validation error on mode switch (@akartsky) (#8008) (562a17ab9)
- unresponsive cookies modal (@d1rshan) (#8019) (554135c95)
- account: fix "load more" button state for filtered results (@d1rshan) (#8020) (a6b64d06d)
- signup: signup with provider not working (@fehmer) (#8046) (5952c58cc)
- nospace: don't move to next word when removing last character (@Leonabcd123) (#8038) (7ccdea567)
- utils: preserve newlines in sanitizeString (@bijanmurmu) (#8034) (c30230e0e)
- plus n funboxes not working correctly (614e6ec1d)
- settings: allow input of decimal values (@fehmer) (#8041) (5a172a4c5)
- input: prevent default when on before delete returns (d6c5b6995)
- commandline: move plus zero funbox to before plus one in commandline (@Leonabcd123) (#8013) (ee5845421)
- account-settings: restore responsiveness in notice card and page (@d1rshan) (#8016) (cbe603042)
- include spaces after incorrect words in the incorrectChars count (06d5d2f37)
- use the rounded test duration to cacluate wpm (cdbd13d66)
- prevent collection cleanup (@fehmer) (#7996) (35a211854)
- tags not getting loaded (@fehmer) (#7988) (0afaf4358)
- don't fetch presets twice (@fehmer) (#7986) (4160fc5de)
- custom background filters not applied on laod (a05b7da83)
Nerd stuff
These changes will not be visible to users, but are included for completeness and to credit contributors.
- impr: add profiler mode for local development (6607138ac)
- docs(api): include compat version into api version (@fehmer) (#8107) (02509da23)
- docs(rate-limit): update comments in rate limit file (@Leonabcd123) (#8026) (9ffa67cc5)
- docs: fix formatting in README features section (@chadhas282-afk) (#7994) (ddeb49dd8)
- docs(comments): fix comments (@Leonabcd123) (#8006) (6ecb5b79f)
- refactor: test events phase 2 (@Miodec) (#8036) (fe7da090a)
- refactor: rework timer drift compensation (bd079bb5f)
- refactor(test): move test modes notice elements to page/test (@fehmer) (#8126) (cef0297ac)
- refactor: replace TestInput.input.get with getInputForWord (ace92c8b6)
- refactor: replace TestInput.input.current with getCurrentInput() (e52fc4ed5)
- refactor: solid 404 (@fehmer) (#8089) (80cdc57a7)
- refactor: solid connections (@fehmer) (#8018) (a4ea5d52f)
- refactor: use solid simple modals (@fehmer) (#8044) (13f73d1e0)
- refactor: solid modes notice (@fehmer) (#7964) (b7b04bd33)
- refactor: test events phase 1.5 (@Miodec) (#8042) (3462738b8)
- refactor: test events phase 1 (@Miodec) (#8021) (f9074fb81)
- refactor: move some test state to solid signals (@Miodec) (#8025) (033c7cf0e)
- refactor: add Page component (@fehmer) (#7987) (29f892476)
- refactor: improve simple modals (@fehmer) (#8000) (45bb17f53)
- refactor: move resultCalculating state to test-state module (86ee9fd48)
- perf: small improvements here and there (e94373974)
- perf: avoid redundant character counting in test stats calculation (@rohanghosal04) (#8080) (112eadbb6)
- ci: build frontend on dependency changes in storybook (@fehmer) (#8084) (de2570e13)
- test: stricter lint rules (@fehmer) (#8075) (72b4252fa)
- build: move devtools to devDependencies (@fehmer) (#8022) (749d82439)
- chore: update ai files (e3442715a)
- chore(deps-dev): bump @types/chartjs-plugin-trendline from 1.0.1 to 1.0.4 (#8096) (f52dd3b14)
- chore(deps): bump nodemailer and @types/nodemailer (#8095) (99d54de6c)
- chore(deps): bump tailwind-merge from 3.4.0 to 3.6.0 (#8093) (b7d6edf99)
- chore(deps-dev): bump storybook-solidjs-vite from 10.0.9 to 10.1.1 (#8065) (bb8357ae3)
- chore(deps-dev): bump @vitest/browser from 4.1.6 to 4.1.8 (#8067) (994fdf34c)
- chore(deps): bump dotenv from 16.4.5 to 17.4.2 (#8068) (e60f0c602)
- chore(deps-dev): bump solid-js from 1.9.10 to 1.9.13 (#8069) (8a0b3dd4f)
- chore(deps): bump nodemailer and @types/nodemailer (#8001) (8deaad34e)
- chore(deps): bump express-rate-limit from 7.5.1 to 8.5.2 (#8004) (e0019c39e)
- chore(deps): bump @tanstack/* dependencies (#8027) (bde10b9e1)
- chore(deps): bump lru-cache from 7.10.1 to 11.5.1 (#8028) (8b6e86316)
- chore(deps-dev): bump fontawesome-subset from 4.4.0 to 4.6.0 (#8029) (385b9565e)
- chore: bump oxc (3699619c2)
- chore(deps): bump @vitest/browser from 4.0.18 to 4.1.8 (#8043) (46c1ffaa9)
- chore(deps): bump canvas-confetti and @types/canvas-confetti (#8005) (122f27f03)
- chore(deps-dev): bump @storybook/addon-onboarding from 10.2.16 to 10.4.1 (#8002) (f667c45cc)
- chore(deps): bump cors and @types/cors (#8003) (18e10146b)