Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
27 lines
899 B
TypeScript
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>
|
|
),
|
|
)}
|
|
</>
|
|
);
|
|
}
|