v1.1.1 Poprawki UI: listy zakupów i nawigacja
All checks were successful
Build and Push Docker Images / build-and-push (push) Successful in 1m42s

Napraw poziome przewijanie formularza dodawania produktu na liście
zakupów na telefonie. Usuń Historię i Statystyki z dolnej nawigacji
i dodaj je jako kafelki na ekranie głównym między rozliczeniami a
wydatkami wg kategorii.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-03 15:12:01 +02:00
parent 9c39b33636
commit 1f0dc92814
3 changed files with 40 additions and 5 deletions

View File

@@ -8,13 +8,11 @@ export default function BottomNav() {
const items = [
{ to: '/', label: t('bottomNav.home'), icon: 'home', end: true },
{ to: '/calendar', label: t('bottomNav.calendar'), icon: 'calendar_month' },
{ to: '/history', label: t('bottomNav.history'), icon: 'receipt_long' },
];
const rightItems = [
{ to: '/shopping', label: t('bottomNav.shopping'), icon: 'checklist' },
{ to: '/settlements', label: t('bottomNav.settlements'), icon: 'payments' },
{ to: '/stats', label: t('bottomNav.stats'), icon: 'bar_chart' },
];
return (

View File

@@ -50,6 +50,17 @@ export default function Dashboard() {
)}
</div>
<div className="dashboard-nav-tiles">
<button type="button" className="dashboard-nav-tile" onClick={() => navigate('/history')}>
<Icon name="receipt_long" />
<span>{t('bottomNav.history')}</span>
</button>
<button type="button" className="dashboard-nav-tile" onClick={() => navigate('/stats')}>
<Icon name="bar_chart" />
<span>{t('bottomNav.stats')}</span>
</button>
</div>
<div className="card">
<h3>{t('dashboard.expensesByCategoryTitle')}</h3>
{!summary ? <p>{t('common.loading')}</p> : <CategoryPieChart data={summary.byCategory} currency={currency} />}

View File

@@ -85,7 +85,7 @@ input, select, button, textarea { font-family: inherit; font-size: 1rem; color:
left: 0;
right: 0;
display: grid;
grid-template-columns: repeat(7, 1fr);
grid-template-columns: repeat(5, 1fr);
align-items: center;
justify-items: center;
background: var(--card);
@@ -275,6 +275,30 @@ input, select, button, textarea { font-family: inherit; font-size: 1rem; color:
}
.suggestion-btn:hover, .suggestion-btn:focus-visible { background: var(--accent-bg); }
.dashboard-nav-tiles {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin-bottom: 16px;
}
.dashboard-nav-tile {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 6px;
background: var(--card);
border: none;
border-radius: 16px;
padding: 20px;
box-shadow: 0 1px 3px rgba(0,0,0,0.06);
color: var(--text);
font: inherit;
font-weight: 600;
cursor: pointer;
}
.dashboard-nav-tile .material-symbols-outlined { font-size: 1.5rem; color: var(--primary); }
.summary-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));
@@ -745,6 +769,7 @@ input, select, button, textarea { font-family: inherit; font-size: 1rem; color:
}
.shopping-add-list-form input, .shopping-add-item-form input {
flex: 1;
min-width: 0;
box-sizing: border-box;
padding: 12px;
border-radius: 10px;
@@ -799,8 +824,9 @@ input, select, button, textarea { font-family: inherit; font-size: 1rem; color:
}
.shopping-item-qty { font-size: 0.8rem; color: var(--muted); }
.shopping-item-row.checked .shopping-item-name { color: var(--muted); text-decoration: line-through; }
.shopping-item-edit { flex: 1; display: flex; gap: 8px; }
.shopping-item-edit { flex: 1; min-width: 0; display: flex; gap: 8px; }
.shopping-item-edit input {
min-width: 0;
box-sizing: border-box;
padding: 8px;
border-radius: 8px;
@@ -809,4 +835,4 @@ input, select, button, textarea { font-family: inherit; font-size: 1rem; color:
color: var(--text);
}
.shopping-item-edit input:first-child { flex: 1; }
.shopping-item-qty-input { width: 90px; flex-shrink: 0; }
.shopping-item-qty-input { width: 72px; flex-shrink: 0; }