Table copy and download lose header cells in body rows, image cells, and tables without a header row
Los mantenedores suelen responder en 1 día
@AbbasFullstack ya está trabajando en esto.
Desde el 12/11/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 62/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- html, markdown, react, typescript
- Área
- frontend
Línea de trabajo
La extracción de tablas está en extractTableDataFromElement y tableDataToMarkdown; empieza leyendo cómo se seleccionan las filas del cuerpo y cómo se leen las celdas de imagen. Reproduce con las dos tablas del issue: la primera debe conservar el texto alternativo y la segunda debe conservar Revenue y Costs como Markdown válido con una fila de encabezado vacía. Está terminado cuando ambas rutas de copia conservan cada celda y las pruebas de tablas existentes siguen pasando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Bug Description
Table copy and download (Markdown, CSV and TSV) read the table with extractTableDataFromElement, which loses content in three cases:
- Header cells in body rows are dropped. It reads only
tdintbody tr. This happens with HTML tables that use row headers, such as<tr><th>Revenue</th><td>100</td></tr>. - Images lose their alt text. It takes only text content. A cell with
is copied as "Image not available" if the image failed to load, or as an empty cell if it loaded. - A table without a header row copies as an empty string.
tableDataToMarkdownreturns""when there are no headers, so the whole table is lost.
Steps to Reproduce
- Open https://streamdown.ai/playground and replace the input with:
| Logo | Name | | --- | --- | |  | Acme | <table><tbody><tr><th>Revenue</th><td>100</td></tr><tr><th>Costs</th><td>40</td></tr></tbody></table> - On the first table, choose Copy table → Markdown.
- On the second table, choose Copy table → Markdown.
Expected Behavior
- First table:
| Acme logo | Acme |, or Markdown image syntax for the cell. - Second table: a valid table that keeps every cell, including
RevenueandCosts. For example, it could use an empty header row so the GFM table stays valid.
Actual Behavior
- First table:
| Image not available | Acme |, because the image failed to load. From the source, a loaded image gives an empty cell. - Second table: an empty string. From the source, CSV and TSV keep only
100and40; the row headers are lost.
Code Sample
<Streamdown>
{"<table><tbody><tr><th>Revenue</th><td>100</td></tr></tbody></table>"}
</Streamdown>
Streamdown Version
2.7.1
React Version
19.3.1
Browser(s)
Chrome (desktop)
Operating System
macOS
Additional Context
Possible fixes in extractTableDataFromElement / tableDataToMarkdown:
- read
th, tdin body rows; - use
img.alt(or) for image cells, and skip the image fallback and download button; - when there are no headers, emit an empty header row and delimiter rather than returning
"".
Related: #553 (line breaks in cells), which is already fixed.
- Lenguaje dominante
- TypeScript
- Estrellas
- 5.8k
- Forks
- 334
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 33
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de vercel/streamdown
-
remend: unclosed `$$` in a table cell is closed on a new line when an earlier line has mathPosiblemente ocupada @orinnz la tomó hace 43 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
vercel/streamdown#652 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 62/100
vercel/streamdown#731 ·
Los mantenedores suelen responder en 1 día
-
Mermaid shows no error when a previously valid chart becomes invalidPosiblemente ocupada @biggdawg320 la tomó hace 5 días. Abiertobug
Dificultad 3/5 1-2 días Aptitud para principiantes 74/100
vercel/streamdown#724 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
vercel/streamdown#719 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
vercel/streamdown#699 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de vercel/streamdown
Issues similares
-
Out of order / duplicate key error shows the key bytes as decimal or UTF-8, not hexPosiblemente ocupada @bardrop la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 86/100
-
`/leaderboard`, the page and the share image say "be the first" for a program that hasn't startedAbiertobug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
codercops/discord-bot#152 ·
Los mantenedores suelen responder en 1 día
-
bug i18n
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
endora-commerce/endora-commerce#1315 ·
Los mantenedores suelen responder en 1 día
-
Two stored artist rows are not act names: "DJS" from a Renate floor heading and "Stevie Cox -"Abiertoarea:data-quality importer size:S
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
enorm-labs/event-junkie#5136 ·
Los mantenedores suelen responder en 1 día
-
fix(scripts): set-device-owner.ps1 fails to parse on Windows PowerShell 5.1 (UTF-8 without BOM)Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día