import type { TraitBlock, TraitSegment } from "@initiative/domain"; export function PropertyLine({ label, value, }: Readonly<{ label: string; value: string | undefined; }>) { if (!value) return null; return (
{label} {value}
); } export function SectionDivider() { return (
); } function segmentKey(seg: TraitSegment): string { return seg.type === "text" ? seg.value.slice(0, 40) : seg.items.map((i) => i.label ?? i.text.slice(0, 20)).join(","); } function TraitSegments({ segments, }: Readonly<{ segments: readonly TraitSegment[] }>) { return ( <> {segments.map((seg, i) => { if (seg.type === "text") { return ( {i === 0 ? ` ${seg.value}` : seg.value} ); } return (
{seg.items.map((item) => (

{item.label != null && ( {item.label}. )} {item.text}

))}
); })} ); } export function TraitEntry({ trait }: Readonly<{ trait: TraitBlock }>) { return (
{trait.name}.
); } export function TraitSection({ entries, heading, }: Readonly<{ entries: readonly TraitBlock[] | undefined; heading?: string; }>) { if (!entries || entries.length === 0) return null; return ( <> {heading ? (

{heading}

) : null}
{entries.map((e) => ( ))}
); }