Files
BarevClub/apps/landing/components/rich-text.tsx
T
2026-10-25 22:55:29 +04:00

27 lines
899 B
TypeScript

/** Абзацы и списки из текста перевода: строки с «• » — пункты списка, остальные — абзацы */
export function RichText({ text }: { text: string }) {
const blocks: ({ kind: 'p'; text: string } | { kind: 'ul'; items: string[] })[] = [];
for (const line of text.split('\n')) {
if (line.startsWith('• ')) {
const last = blocks.at(-1);
if (last?.kind === 'ul') last.items.push(line.slice(2));
else blocks.push({ kind: 'ul', items: [line.slice(2)] });
} else if (line.trim()) blocks.push({ kind: 'p', text: line });
}
return (
<>
{blocks.map((b, i) =>
b.kind === 'p' ? (
<p key={i}>{b.text}</p>
) : (
<ul key={i}>
{b.items.map((it) => (
<li key={it}>{it}</li>
))}
</ul>
),
)}
</>
);
}