feat(epg): compact timeline toolbar with icon-only Now and cycling zoom (#1557)

* feat(epg): compact timeline toolbar with icon-only Now and cycling zoom

Replace the 96px zoom range slider with a single icon button that cycles
day overview → by hour → detailed, make the Now button icon-only (label in
tooltip + aria-label), and add Ctrl/⌘ + wheel zoom around the cursor on the
ribbon (preventDefault keeps Chromium from page-zooming the same gesture).
Zoom math moves into TimelineZoomController so the component stays under
the max-lines limit. The channel/programme heading no longer carries a 60%
width cap and takes the space the controls free up.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(epg): coalesce wheel-zoom anchoring and make the e2e zoom reset deterministic

- TimelineZoomController keeps a logical pending scrollLeft across a burst
  of wheel/pinch events and applies it in one animation frame, so every
  event anchors on the same minute instead of the stale DOM position
- the e2e settles on the detail preset from whichever band the wheel
  landed in (contrast checks need the block's time line, hidden at
  narrower tiers)
- zoom tooltip advertises ⌘/Ctrl per the repo's shortcut convention

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Fable 5.1 authored and GitHub committed 2026-09-06 10:34:28 +02:00
1 parent 61b06b9f31
commit ef2418a2c5
30 files changed
+580 -123

No files matched your search

+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "نظرة عامة على اليوم",
"ZOOM_HOURS": "حسب الساعة",
"ZOOM_DETAIL": "تفصيلي",
"ZOOM_TOOLTIP": "التكبير: {{level}} · ⌘/Ctrl + التمرير للضبط الدقيق",
"GROUP_SHORT": "برامج قصيرة",
"GROUP_EXPAND": "عرض ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "نظرة عامة على النهار",
"ZOOM_HOURS": "بالساعة",
"ZOOM_DETAIL": "مفصّل",
"ZOOM_TOOLTIP": "التكبير: {{level}} · ⌘/Ctrl + التمرير باش تضبط",
"GROUP_SHORT": "برامج قصيرة",
"GROUP_EXPAND": "وري ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Агляд дня",
"ZOOM_HOURS": "Па гадзінах",
"ZOOM_DETAIL": "Падрабязна",
"ZOOM_TOOLTIP": "Маштаб: {{level}} · ⌘/Ctrl + кола для дакладнай наладкі",
"GROUP_SHORT": "кароткія перадачы",
"GROUP_EXPAND": "паказаць ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Tagesübersicht",
"ZOOM_HOURS": "Stundenweise",
"ZOOM_DETAIL": "Detailliert",
"ZOOM_TOOLTIP": "Zoom: {{level}} · ⌘/Strg + Scrollen zum Feinabstimmen",
"GROUP_SHORT": "kurze Sendungen",
"GROUP_EXPAND": "anzeigen ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Επισκόπηση ημέρας",
"ZOOM_HOURS": "Ανά ώρα",
"ZOOM_DETAIL": "Λεπτομερής",
"ZOOM_TOOLTIP": "Ζουμ: {{level}} · ⌘/Ctrl + κύλιση για λεπτομερή ρύθμιση",
"GROUP_SHORT": "σύντ. προγρ.",
"GROUP_EXPAND": "εμφάνιση ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Day overview",
"ZOOM_HOURS": "By hour",
"ZOOM_DETAIL": "Detailed",
"ZOOM_TOOLTIP": "Zoom: {{level}} · ⌘/Ctrl + scroll to fine-tune",
"GROUP_SHORT": "short progs",
"GROUP_EXPAND": "show ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Vista del día",
"ZOOM_HOURS": "Por hora",
"ZOOM_DETAIL": "Detallado",
"ZOOM_TOOLTIP": "Zoom: {{level}} · ⌘/Ctrl + rueda para ajustar",
"GROUP_SHORT": "progs. cortos",
"GROUP_EXPAND": "ver ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Vue de la journée",
"ZOOM_HOURS": "Par heure",
"ZOOM_DETAIL": "Détaillé",
"ZOOM_TOOLTIP": "Zoom : {{level}} · ⌘/Ctrl + molette pour ajuster",
"GROUP_SHORT": "progs courts",
"GROUP_EXPAND": "afficher ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Napi áttekintés",
"ZOOM_HOURS": "Óránként",
"ZOOM_DETAIL": "Részletes",
"ZOOM_TOOLTIP": "Nagyítás: {{level}} · ⌘/Ctrl + görgetés a finomhangoláshoz",
"GROUP_SHORT": "rövid műsorok",
"GROUP_EXPAND": "megjelenítés ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Panoramica giorno",
"ZOOM_HOURS": "Per ora",
"ZOOM_DETAIL": "Dettagliato",
"ZOOM_TOOLTIP": "Zoom: {{level}} · ⌘/Ctrl + rotella per regolare",
"GROUP_SHORT": "prog. brevi",
"GROUP_EXPAND": "mostra ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "1日表示",
"ZOOM_HOURS": "時間単位",
"ZOOM_DETAIL": "詳細",
"ZOOM_TOOLTIP": "ズーム: {{level}} · ⌘/Ctrl + スクロールで微調整",
"GROUP_SHORT": "短い番組",
"GROUP_EXPAND": "表示 ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "하루 보기",
"ZOOM_HOURS": "시간별",
"ZOOM_DETAIL": "상세",
"ZOOM_TOOLTIP": "확대/축소: {{level}} · ⌘/Ctrl + 스크롤로 미세 조정",
"GROUP_SHORT": "짧은 프로그램",
"GROUP_EXPAND": "보기 ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Dagoverzicht",
"ZOOM_HOURS": "Per uur",
"ZOOM_DETAIL": "Gedetailleerd",
"ZOOM_TOOLTIP": "Zoom: {{level}} · ⌘/Ctrl + scrollen om fijn af te stellen",
"GROUP_SHORT": "korte progr.",
"GROUP_EXPAND": "toon ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Przegląd dnia",
"ZOOM_HOURS": "Co godzinę",
"ZOOM_DETAIL": "Szczegółowo",
"ZOOM_TOOLTIP": "Powiększenie: {{level}} · ⌘/Ctrl + kółko, aby dostroić",
"GROUP_SHORT": "krótkie progr.",
"GROUP_EXPAND": "pokaż ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Visão geral do dia",
"ZOOM_HOURS": "Por hora",
"ZOOM_DETAIL": "Detalhado",
"ZOOM_TOOLTIP": "Zoom: {{level}} · ⌘/Ctrl + roda para ajustar",
"GROUP_SHORT": "progs. curtos",
"GROUP_EXPAND": "mostrar ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Обзор дня",
"ZOOM_HOURS": "По часам",
"ZOOM_DETAIL": "Детально",
"ZOOM_TOOLTIP": "Масштаб: {{level}} · ⌘/Ctrl + колесо для точной настройки",
"GROUP_SHORT": "короткие передачи",
"GROUP_EXPAND": "показать ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "Gün özeti",
"ZOOM_HOURS": "Saatlik",
"ZOOM_DETAIL": "Detaylı",
"ZOOM_TOOLTIP": "Yakınlaştırma: {{level}} · İnce ayar için ⌘/Ctrl + kaydırma",
"GROUP_SHORT": "kısa progr.",
"GROUP_EXPAND": "göster ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "全天概览",
"ZOOM_HOURS": "按小时",
"ZOOM_DETAIL": "详细",
"ZOOM_TOOLTIP": "缩放:{{level}} · ⌘/Ctrl + 滚轮微调",
"GROUP_SHORT": "短节目",
"GROUP_EXPAND": "展开 ›"
}
+1
View File
@@ -837,6 +837,7 @@
"ZOOM_DAY": "日總覽",
"ZOOM_HOURS": "依小時",
"ZOOM_DETAIL": "詳細",
"ZOOM_TOOLTIP": "縮放:{{level}} · ⌘/Ctrl + 滾輪微調",
"GROUP_SHORT": "短節目",
"GROUP_EXPAND": "顯示 ›"
}