* feat: add sleep timer to player bar
- Add sleep timer button in player bar right controls
- Preset options: End of song, 5/10/15/30/45 min, 1 hr, 2 hrs
- Custom timer with HH:MM:SS input fields
- Timer only counts down while music is playing
- Timer pauses playback when it expires
- End-of-song mode pauses at the next track change
- Uses theme-aware styling (--theme-colors-surface)
- Add sleepTimer/sleepTimerOff icons (LuTimer/LuTimerOff)
- Add i18n strings for sleep timer UI
---------
Co-authored-by: York <york@BonecharMac.local>
Co-authored-by: jeffvli <jeffvictorli@gmail.com>
Updated by "Cleanup translation files" hook in Weblate.
Translated using Weblate (French)
Currently translated at 90.7% (1034 of 1139 strings)
Translated using Weblate (Ukrainian)
Currently translated at 29.0% (331 of 1139 strings)
Translated using Weblate (Danish)
Currently translated at 100.0% (1139 of 1139 strings)
Translated using Weblate (Ukrainian)
Currently translated at 26.5% (302 of 1139 strings)
Translated using Weblate (Ukrainian)
Currently translated at 22.0% (251 of 1139 strings)
Translated using Weblate (Danish)
Currently translated at 90.0% (1026 of 1139 strings)
Translated using Weblate (Danish)
Currently translated at 28.1% (321 of 1139 strings)
Translated using Weblate (Ukrainian)
Currently translated at 9.5% (109 of 1139 strings)
Translated using Weblate (Ukrainian)
Currently translated at 5.7% (66 of 1139 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (1139 of 1139 strings)
Translated using Weblate (Czech)
Currently translated at 99.7% (1136 of 1139 strings)
Translated using Weblate (Danish)
Currently translated at 4.8% (55 of 1139 strings)
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1139 of 1139 strings)
Translated using Weblate (Danish)
Currently translated at 0.4% (5 of 1139 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (1139 of 1139 strings)
Translated using Weblate (Polish)
Currently translated at 99.9% (1138 of 1139 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (1135 of 1135 strings)
Translated using Weblate (Dutch)
Currently translated at 99.8% (1133 of 1135 strings)
Translated using Weblate (Dutch)
Currently translated at 84.4% (959 of 1135 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (1135 of 1135 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (1135 of 1135 strings)
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1135 of 1135 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (1131 of 1131 strings)
Translated using Weblate (German)
Currently translated at 78.9% (893 of 1131 strings)
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1131 of 1131 strings)
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 92.7% (1047 of 1129 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (1129 of 1129 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (1129 of 1129 strings)
Translated using Weblate (Japanese)
Currently translated at 85.1% (961 of 1129 strings)
Translated using Weblate (Catalan)
Currently translated at 100.0% (1129 of 1129 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (1129 of 1129 strings)
Co-authored-by: Alexander Welsing <kontakt@a-wels.de>
Co-authored-by: Denisa Alicia Rissa <denisarissa@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Fordas <fordas15@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: KosmoMoustache <kosmomoustache@users.noreply.hosted.weblate.org>
Co-authored-by: Ondo <SparkyOndo@proton.me>
Co-authored-by: York <goog10216922@gmail.com>
Co-authored-by: Yurii <04_hours.lambing@icloud.com>
Co-authored-by: bokse <weblate@bokse.nl>
Co-authored-by: haha4ni <haha4ni@hotmail.com>
Co-authored-by: karigane <169052233+karigane-cha@users.noreply.github.com>
Co-authored-by: skajmer <skajmer@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ca/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/da/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/de/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/fr/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/ja/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/nl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/pl/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/uk/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hant/
Translation: feishin/Translation
The CommandPalette component was being rendered twice when in mobile view:
1. In ResponsiveLayout via LayoutHotkeys (which handles all layouts)
2. In MobileLayout directly
This caused two overlapping command menus to open when pressing Ctrl+K
in mobile view, with keyboard input going to the background menu.
The fix removes the duplicate CommandPalette from MobileLayout since
LayoutHotkeys already provides it for all layouts (both desktop and mobile).
Fixes#1666
Co-authored-by: Kai Gritun <kai@kaigritun.com>
- Add `handleScrobbleFromRepeat` callback to reset scrobble state and send 'start' event when player repeats a song, ensuring accurate scrobbling in repeat mode.
- Fix typo in `web.vite.config.ts` by correcting '@tanstack_react-query-persist-client' to '@tanstack/react-query-persist-client' for proper package reference.
* implement theme
* refactor theme stylesheets to load inline to simplify vite bundling
* add missing css module scope name for web build
---------
Co-authored-by: jeffvli <jeffvictorli@gmail.com>