Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

PromptInput rejects every file when accept lists file extensions (".xlsx")

Abierto Apto para principiantes
#501 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@HardMax71 ya está trabajando en esto.

Desde el 2/10/2026.

  • #502 de @HardMax71 — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
83/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
react, typescript
Área
frontend

Línea de trabajo

Lee packages/elements/src/prompt-input.tsx, especialmente matchesAccept alrededor de las líneas 555–576, donde se comparan los patrones de accept. Comprueba la reproducción del issue usando un archivo .xlsx con el tipo vacío y el comportamiento existente del filtrado de archivos para los patrones MIME. Se considera terminado cuando los valores de accept basados en extensiones permiten que los archivos coincidentes pasen mediante add, pegado y arrastre, sin romper el filtrado por tipo MIME.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

PromptInput passes accept to its hidden file input, where extension entries like .xlsx or .csv are valid. The filter that runs afterwards (matchesAccept) only understands type/* and exact MIME types, so an extension entry never matches. With accept=".xlsx" the file dialog offers the spreadsheet, then add rejects it: onError fires with code: "accept" ("No files match the accepted types."), or nothing happens without onError. Paste and drop use the same filter.

I use extensions because the browser often reports an empty or generic type ("" or application/octet-stream) for .md, .csv or Office files, depending on the OS.

Repro (registry main 6a9d5b1, Chrome):

const file = new File(["sheet"], "report.xlsx", { type: "" });

const AddButton = () => {
  const attachments = usePromptInputAttachments();
  return (
    <button onClick={() => attachments.add([file])} type="button">
      Add
    </button>
  );
};

<PromptInput accept=".xlsx" onError={console.log} onSubmit={() => {}}>
  <PromptInputBody>
    <AddButton />
    <PromptInputTextarea />
  </PromptInputBody>
</PromptInput>;

Expected: the file is added, as the native accept attribute allows it.
Actual: onError is called with { code: "accept" } and nothing is added.

Cause: prompt-input.tsx#L555-L576 compares every pattern that does not end in /* with f.type, and a pattern starting with "." never equals a MIME type. It came in with #279, which replaced the old fallback that returned true for anything except image/*.

Lenguaje dominante
TypeScript
Estrellas
2.5k
Forks
291
Merge medio
20 min
PR fusionados (30 d)
3

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de vercel/ai-elements

Todos los issues de vercel/ai-elements

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.