refactor: enhance TimerPage layout and functionality; update theme and tokens for improved design consistency

- Refactored TimerPage component to improve layout and user experience.
- Updated theme configuration to utilize design tokens for better maintainability.
- Introduced new tokens for colors and typography to align with design principles.
- Simplified state management and improved timer functionality.
- Enhanced accessibility and responsiveness of UI elements.
This commit is contained in:
timka123 committed 2026-10-18 23:57:36 +03:00
1 parent 17a0a3c4c9
commit 77b26757bf
84 files changed
+4501 -2682

No files matched your search

+16 -13
View File
@@ -49,6 +49,9 @@ class PomodoroSettings(BaseModel):
alarm_sound: bool = True
alarm_volume: int = Field(default=70, ge=0, le=100)
timer_enabled: bool = True
"""When false the timer controls are hidden — the app becomes view-only."""
desktop_notifications: bool = True
keep_on_top_during_work: bool = False
"""Desktop app: float the window above everything while a work interval runs."""
@@ -76,12 +79,6 @@ class JiraSourceSettings(BaseModel):
max_issues: int = Field(default=200, ge=1, le=2000)
writeback_done: bool = True
"""Completing a Jira task here transitions the issue to Done in Jira."""
done_transition_name: str = "Done"
"""Preferred transition name when writing back; falls back to any 'done' one."""
class GoogleTasksSourceSettings(BaseModel):
"""Google Tasks, via an OAuth refresh token (see jira-helper's README)."""
@@ -96,8 +93,6 @@ class GoogleTasksSourceSettings(BaseModel):
include_undated: bool = True
"""Keep tasks with no due date (jira-helper drops them; here they are todos)."""
writeback_done: bool = True
class TodoistSourceSettings(BaseModel):
"""Todoist, via a personal API token."""
@@ -110,8 +105,6 @@ class TodoistSourceSettings(BaseModel):
filter_query: str = ""
"""Override the server-side filter. Empty = all open tasks."""
writeback_done: bool = True
class LaundrySourceSettings(BaseModel):
"""Campus laundry bookings — not a todo, but a thing that owns your time."""
@@ -157,13 +150,23 @@ class BlockerSettings(BaseModel):
block_during_breaks: bool = False
blocked_domains: list[str] = Field(default_factory=list)
"""Bare hostnames, e.g. `youtube.com`. `www.` and subdomains are added for you."""
"""Hostnames or masks.
`youtube.com` blocks the site (plus `www.` and `m.`); `*.youtube.com` blocks
its subdomains too, expanded with `subdomain_expansions` because a hosts file
has no wildcards of its own.
"""
allowed_domains: list[str] = Field(default_factory=list)
"""Exceptions that survive a wildcard entry, e.g. `music.youtube.com`."""
"""Exceptions, masks allowed: `music.youtube.com`, `*.docs.google.com`."""
subdomain_expansions: list[str] = Field(
default_factory=lambda: ["www", "m", "mobile", "app", "web", "i", "old", "new"]
)
"""What `*.example.com` turns into. Add the subdomains you actually visit."""
blocked_apps: list[str] = Field(default_factory=list)
"""Process names, e.g. `steam`, `discord`, `Telegram`."""
"""Process names or masks: `steam`, `*discord*`, `telegram-*`."""
kill_blocked_apps: bool = True
"""Terminate a blocked app when it appears; otherwise only warn and log."""