feat(ui): unified toolbar design + redesigned budget widgets + polish

Trip planner now has a consistent rounded toolbar across bookings, lists,
budget and files. Each panel shows title, inline filter pills (with
counts where useful) and an accent action button on the right. Moved
per-tab controls into the toolbar — lists import, todo add, budget
currency/add-category, files trash/filters — and dropped the redundant
in-panel headers.

Budget sidebar redesigned: total-budget card with indigo-ringed avatars
and coloured split bar; settlement flows as paired avatar cards;
by-category donut rebuilt in SVG with per-category gradients. Both cards
now follow dark/light mode via a widgetTheme helper.

Todo: add-new-task is a portalled modal on desktop, the add-task input
bar is gone; new SORT BY section in the sidebar; inline category
creation in the task editor.

Reservations: pending / confirmed sections remember their collapsed
state per trip (localStorage).

Misc: per-trip connections toggle moved into the day-plan sidebar,
booking endpoints fixed to show on map for trains/cruises/cars as well,
label localStorage persistence, RESMODAL test updated to the new
airport-select flow.

i18n: the new booking / map / todo / budget strings are translated into
all 15 supported languages.
This commit is contained in:
Maurice
2026-04-17 23:25:38 +02:00
parent 5e9c8d2c43
commit 530550455d
22 changed files with 894 additions and 316 deletions
+15 -2
View File
@@ -1015,6 +1015,15 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'reservations.meta.flightNumber': 'Číslo letu',
'reservations.meta.from': 'Z',
'reservations.meta.to': 'Do',
'reservations.needsReview': 'Zkontrolovat',
'reservations.needsReviewHint': 'Letiště nebylo možné automaticky rozpoznat — potvrďte prosím místo.',
'reservations.searchLocation': 'Hledat stanici, přístav, adresu...',
'airport.searchPlaceholder': 'Kód letiště nebo město (např. FRA)',
'map.connections': 'Spojení',
'map.showConnections': 'Zobrazit trasy rezervací',
'map.hideConnections': 'Skrýt trasy rezervací',
'settings.bookingLabels': 'Popisky tras rezervací',
'settings.bookingLabelsHint': 'Zobrazuje názvy stanic / letišť na mapě. Pokud je vypnuto, zobrazí se pouze ikona.',
'reservations.meta.trainNumber': 'Číslo vlaku',
'reservations.meta.platform': 'Nástupiště',
'reservations.meta.seat': 'Sedadlo',
@@ -1033,7 +1042,7 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'reservations.type.hotel': 'Ubytování',
'reservations.type.restaurant': 'Restaurace',
'reservations.type.train': 'Vlak',
'reservations.type.car': 'Pronájem auta',
'reservations.type.car': 'Auto',
'reservations.type.cruise': 'Plavba',
'reservations.type.event': 'Událost',
'reservations.type.tour': 'Prohlídka',
@@ -1753,7 +1762,11 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'todo.unassigned': 'Nepřiřazeno',
'todo.noCategory': 'Bez kategorie',
'todo.hasDescription': 'Má popis',
'todo.addItem': 'Přidat nový úkol...',
'todo.addItem': 'Přidat nový úkol',
'todo.sidebar.sortBy': 'Řadit podle',
'todo.priority': 'Priorita',
'todo.newCategoryLabel': 'nová',
'budget.categoriesLabel': 'kategorie',
'todo.newCategory': 'Název kategorie',
'todo.addCategory': 'Přidat kategorii',
'todo.newItem': 'Nový úkol',