'use client' import { useRef } from 'react' import { useTranslations } from 'next-intl' /** * Editor ligero: barra de formato que envuelve la selección del textarea en HTML * (que luego se sanea en el servidor con cleanPostHtml). Sin dependencias pesadas. */ export function RichTextArea({ value, onChange, placeholder, rows = 4, }: { value: string onChange: (v: string) => void placeholder?: string rows?: number }) { const t = useTranslations('Editor') const ref = useRef(null) function surround(before: string, after: string, placeholderText = '') { const el = ref.current if (!el) return const start = el.selectionStart const end = el.selectionEnd const selected = value.slice(start, end) || placeholderText const next = value.slice(0, start) + before + selected + after + value.slice(end) onChange(next) // Reposiciona el cursor dentro del texto insertado tras el re-render. requestAnimationFrame(() => { el.focus() const pos = start + before.length el.setSelectionRange(pos, pos + selected.length) }) } function insertLink() { const url = prompt(t('linkPrompt'), 'https://') if (!url) return surround(``, '', t('linkText')) } return (
{' '} {' '} {' '} {' '} {' '} {' '} {' '}