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) => (
))}
>
);
}