feat(panel): özet kartları, anlık durum ve hızlı harcama ekleme

- Gelir, sabit gider, toplam birikim, devreden borç kartları
- Anlık durum: kalan harcanabilir ve günlük harcama önerisi
- Grup planlanan/gerçekleşen (Haftalık/Aylık)
- "Harcama Ekle": masaüstünde başlıkta, mobilde yüzen düğme
- Yükleniyor iskeleti, boş durumlar, açık dönem yokken son dönem özeti

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-12 23:54:32 +03:00
parent 30136ed1d3
commit 64c185ab96
14 changed files with 479 additions and 20 deletions
@@ -6,16 +6,19 @@ import type { GroupBudget } from '@/types/GroupBudget'
const s = t.ledger
/** Seçili haftada grup bazlı bütçe / harcanan / kalan (+ ilerleme çubuğu) */
export function WeekSummary({ budget, index }: { budget: GroupBudget[]; index: number }) {
/**
* Grup bazlı bütçe / harcanan / kalan (+ ilerleme çubuğu): seçili hafta ya da `'month'` → tüm dönem.
* Defter (haftalık) ve Panel (haftalık/aylık) kullanır.
*/
export function WeekSummary({ budget, index }: { budget: GroupBudget[]; index: number | 'month' }) {
return (
<div className="@container">
<ul className="grid gap-3 @lg:grid-cols-2">
{budget.map((b) => {
const g = group(b.group)
const w = b.weeks[index - 1]
const planned = w?.amount ?? 0
const spent = w?.spent ?? 0
const w = index === 'month' ? null : b.weeks[index - 1]
const planned = index === 'month' ? b.monthly : (w?.amount ?? 0)
const spent = index === 'month' ? b.spent : (w?.spent ?? 0)
const left = planned - spent
const over = left < 0
const ratio = planned > 0 ? Math.min(spent / planned, 1) : spent > 0 ? 1 : 0