Cierra la deuda del motor «copy = hack de outerHTML». El chrome scrapeaba el `outerHTML` renderizado del bloque activo (con sus `data-palabras-*`) al clipboard; ahora hay un comando simétrico que serializa desde el MODELO. - palabras-provider.svelte.ts: método `copyBlock(index)` (async) — serializa el bloque top-level envuelto en un doc de 1 (`serializeHtml` → text/html limpio + `renderPalabrasPlainText` → text/plain) y lo escribe al clipboard realm-aware. Guard `typeof ClipboardItem` (fallback writeText en realm sin él). Non-mutating → funciona read-only. Expuesto en el api snippet + ProviderSnippetProps (types). - palabras-menubar.svelte: `doCopy` usa `api.copyBlock(loc.path[0])` (fuera el `new ClipboardItem/Blob` + outerHTML); gate `!loc`; announce «Bloque copiado». - palabras-announce.ts: `PALABRAS_ANNOUNCE.copied`. La serialización (doc de 1 bloque) ya la cubren los tests de serialize-html / plain-text. Langs es/en de `announce.copied` DIFERIDO (entanglement; ts fallback). Verificado Playwright (permisos de clipboard): copiar el H1 → clipboard `text/html` = `<h1>Cómo migrar sin downtime</h1>` LIMPIO (0 `data-palabras-*` → es serialización del modelo, no scrape), `text/plain` correcto, announce «Bloque copiado»; 0 errores. Ese HTML limpio es justo lo que pasteAfterBlock parsea → round-trip simétrico. check 0 errores palabras. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>alpha-0.1-sec-dom
parent
b2f0a7f2bf
commit
8215a9f410
Loading…
Reference in new issue