@@ -18,6 +18,47 @@ interface Props {
1818 entry : ListEntry | null ;
1919}
2020
21+ function BrunoDetailRow ( {
22+ k,
23+ v,
24+ accent,
25+ } : {
26+ k : string ;
27+ v : string ;
28+ accent ?: boolean ;
29+ } ) {
30+ return (
31+ < div
32+ className = {
33+ "flex items-baseline justify-between border-b border-[var(--color-border)] py-1.5 last:border-b-0 " +
34+ ( accent ? "font-semibold text-[var(--color-fg)]" : "text-[var(--color-muted)]" )
35+ }
36+ >
37+ < span > { k } </ span >
38+ < span className = "font-[var(--font-mono)] tabular-nums" > { v } </ span >
39+ </ div >
40+ ) ;
41+ }
42+
43+ const BRUNO_STATE_LABELS : Record < string , string > = {
44+ bw : "Baden-Württemberg" ,
45+ by : "Bayern" ,
46+ be : "Berlin" ,
47+ bb : "Brandenburg" ,
48+ hb : "Bremen" ,
49+ hh : "Hamburg" ,
50+ he : "Hessen" ,
51+ mv : "Mecklenburg-Vorp." ,
52+ ni : "Niedersachsen" ,
53+ nw : "Nordrhein-Westfalen" ,
54+ rp : "Rheinland-Pfalz" ,
55+ sl : "Saarland" ,
56+ sn : "Sachsen" ,
57+ st : "Sachsen-Anhalt" ,
58+ sh : "Schleswig-Holstein" ,
59+ th : "Thüringen" ,
60+ } ;
61+
2162export function PreviewPanel ( { entry } : Props ) {
2263 const parsedFiles = useMemo < string [ ] | null > ( ( ) => {
2364 if ( ! entry || entry . kind !== "clip" || entry . data . content_type !== "files" ) return null ;
@@ -233,24 +274,6 @@ export function PreviewPanel({ entry }: Props) {
233274 maximumFractionDigits : 1 ,
234275 } ) ;
235276 const d = entry . data ;
236- const Row = ( { k, v, accent } : { k : string ; v : string ; accent ?: boolean } ) => (
237- < div
238- className = {
239- "flex items-baseline justify-between border-b border-[var(--color-border)] py-1.5 last:border-b-0 " +
240- ( accent ? "font-semibold text-[var(--color-fg)]" : "text-[var(--color-muted)]" )
241- }
242- >
243- < span > { k } </ span >
244- < span className = "font-[var(--font-mono)] tabular-nums" > { v } </ span >
245- </ div >
246- ) ;
247- const STATE_LABELS : Record < string , string > = {
248- bw : "Baden-Württemberg" , by : "Bayern" , be : "Berlin" , bb : "Brandenburg" ,
249- hb : "Bremen" , hh : "Hamburg" , he : "Hessen" , mv : "Mecklenburg-Vorp." ,
250- ni : "Niedersachsen" , nw : "Nordrhein-Westfalen" , rp : "Rheinland-Pfalz" ,
251- sl : "Saarland" , sn : "Sachsen" , st : "Sachsen-Anhalt" ,
252- sh : "Schleswig-Holstein" , th : "Thüringen" ,
253- } ;
254277 return (
255278 < div className = "flex h-full flex-col gap-3 overflow-auto p-4" >
256279 < div className = "text-[11px] uppercase tracking-wide text-[var(--color-muted)]" >
@@ -261,7 +284,7 @@ export function PreviewPanel({ entry }: Props) {
261284 Annahmen
262285 </ div >
263286 < div className = "text-[12px] leading-tight text-[var(--color-fg)]" >
264- Klasse { d . taxClass } · { STATE_LABELS [ d . state ] ?? d . state . toUpperCase ( ) } ·{ " " }
287+ Klasse { d . taxClass } · { BRUNO_STATE_LABELS [ d . state ] ?? d . state . toUpperCase ( ) } ·{ " " }
265288 { d . children === 0 ? "kinderlos" : `${ d . children } Kind${ d . children === 1 ? "" : "er" } ` } { " " }
266289 · { d . isChurchMember ? "kirchensteuerpflichtig" : "keine Kirchensteuer" }
267290 </ div >
@@ -271,23 +294,23 @@ export function PreviewPanel({ entry }: Props) {
271294 </ div >
272295
273296 < div className = "rounded-xl border border-[var(--color-border)] bg-[var(--color-surface)] p-4" >
274- < Row k = "Brutto / Jahr" v = { eur . format ( d . yearlyGross ) } />
275- < Row k = "Brutto / Monat" v = { eur . format ( d . yearlyGross / 12 ) } />
276- < Row k = "Krankenversicherung" v = { "− " + eurExact . format ( d . social . health ) } />
277- < Row k = "Pflegeversicherung" v = { "− " + eurExact . format ( d . social . care ) } />
278- < Row k = "Rentenversicherung" v = { "− " + eurExact . format ( d . social . pension ) } />
279- < Row k = "Arbeitslosenversicherung" v = { "− " + eurExact . format ( d . social . unemployment ) } />
280- < Row k = "Einkommensteuer" v = { "− " + eurExact . format ( d . incomeTax ) } />
281- { d . soli > 0 && < Row k = "Solidaritätszuschlag" v = { "− " + eurExact . format ( d . soli ) } /> }
282- { d . churchTax > 0 && < Row k = "Kirchensteuer" v = { "− " + eurExact . format ( d . churchTax ) } /> }
283- < Row k = "Summe Abgaben" v = { eur . format ( d . totalDeductions ) } />
284- < Row k = "Abgabenquote" v = { pct . format ( d . deductionRate ) } />
285- < Row k = "Grenzsteuersatz" v = { pct . format ( d . marginalRate ) } />
297+ < BrunoDetailRow k = "Brutto / Jahr" v = { eur . format ( d . yearlyGross ) } />
298+ < BrunoDetailRow k = "Brutto / Monat" v = { eur . format ( d . yearlyGross / 12 ) } />
299+ < BrunoDetailRow k = "Krankenversicherung" v = { "− " + eurExact . format ( d . social . health ) } />
300+ < BrunoDetailRow k = "Pflegeversicherung" v = { "− " + eurExact . format ( d . social . care ) } />
301+ < BrunoDetailRow k = "Rentenversicherung" v = { "− " + eurExact . format ( d . social . pension ) } />
302+ < BrunoDetailRow k = "Arbeitslosenversicherung" v = { "− " + eurExact . format ( d . social . unemployment ) } />
303+ < BrunoDetailRow k = "Einkommensteuer" v = { "− " + eurExact . format ( d . incomeTax ) } />
304+ { d . soli > 0 && < BrunoDetailRow k = "Solidaritätszuschlag" v = { "− " + eurExact . format ( d . soli ) } /> }
305+ { d . churchTax > 0 && < BrunoDetailRow k = "Kirchensteuer" v = { "− " + eurExact . format ( d . churchTax ) } /> }
306+ < BrunoDetailRow k = "Summe Abgaben" v = { eur . format ( d . totalDeductions ) } />
307+ < BrunoDetailRow k = "Abgabenquote" v = { pct . format ( d . deductionRate ) } />
308+ < BrunoDetailRow k = "Grenzsteuersatz" v = { pct . format ( d . marginalRate ) } />
286309 </ div >
287310
288311 < div className = "rounded-xl border border-[var(--color-accent)]/40 bg-[var(--color-accent)]/5 p-4" >
289- < Row k = "Netto / Monat" v = { eurExact . format ( d . netMonth ) } accent />
290- < Row k = "Netto / Jahr" v = { eurExact . format ( d . netYear ) } accent />
312+ < BrunoDetailRow k = "Netto / Monat" v = { eurExact . format ( d . netMonth ) } accent />
313+ < BrunoDetailRow k = "Netto / Jahr" v = { eurExact . format ( d . netYear ) } accent />
291314 </ div >
292315
293316 < div className = "font-[var(--font-mono)] text-[11px] text-[var(--color-muted)]" >
0 commit comments