--- // HandoffTable — the four-row "what crosses contexts" table. // // Static shell: the row data is passed in via `rows` so this component has // no opinion on what each handoff package contains. The table structure is // the load-bearing part of the design (dark header, blue row labels, // muted body) and lives here so the next page that needs it gets the same // beat for free. type Localized = { en: string; pt: string }; interface Row { /** The package name, rendered as a `` (column 1). */ package: string | Localized; /** What the package contains (column 2). */ contains: string | Localized; /** Why this matters (column 3). */ why: string | Localized; } interface Props { /** Column headers in render order. */ columns: [string | Localized, string | Localized, string | Localized]; rows: Row[]; } const { columns, rows } = Astro.props; --- { rows.map((row) => ( )) }
{ typeof columns[0] === 'string' ? ( columns[0] ) : ( <> <> {columns[0].en} ) } { typeof columns[1] === 'string' ? ( columns[1] ) : ( <> <> {columns[1].en} ) } { typeof columns[2] === 'string' ? ( columns[2] ) : ( <> <> {columns[2].en} ) }
{typeof row.package === 'string' ? ( row.package ) : ( <> {row.package.en} )} {typeof row.contains === 'string' ? ( row.contains ) : ( <> {row.contains.en} )} {typeof row.why === 'string' ? ( row.why ) : ( <> {row.why.en} )}