formstexulinot agent-emittableapp
FileUpload
file-upload
A labelled drop zone and file list for choosing local files.
Forms with the wiring documented, not guessed. Form controls take labels, descriptions and error text through props, and their keyboard and screen-reader behavior is documented in the accessibility notes below — generated from the manifest, not hand-maintained. The repository’s behavior suite holds the underlying patterns on Chromium, WebKit and a Pixel 7.
Live examples
Images
Images
Loading demo…
In your theme
This page renders in the site theme, enterprise-neutral. Every one of the 210 library themes re-colors every component through the --tx-* contract. The three below carry real token values from the library, rendered at build — no island, no extra requests.
Violet
backgroundsurfaceprimaryaccentborder
Monochrome
backgroundsurfaceprimaryaccentborder
Accessible Dark Contrast
backgroundsurfaceprimaryaccentborder
Props
| Name | Kind | Required | Default | Description |
|---|---|---|---|---|
files | array | no | — | Accepted files (bind:files) |
accept | string | no | — | A native accept filter, e.g. image/* |
maxSize | number | no | — | Largest file in bytes |
maxFiles | number | no | — | — |
multiple | boolean | no | true | — |
disabled | boolean | no | false | — |
required | boolean | no | false | — |
name | string | no | — | — |
variant | enum (default, compact) | no | "default" | — |
showPreviews | boolean | no | true | — |
labels | object | no | — | — |
onFilesAdd | event | no | — | — |
onFileRemove | event | no | — | — |
class | string | no | — | — |
Keyboard
| Key | Action |
|---|---|
A, a | A real file input; the drop zone is named; rejected files are listed with a reason. |
Accessibility
- A real file input; the drop zone is named; rejected files are listed with a reason.
Evidence for file-upload
Latest committed gates for file-upload (as of 2026-10-23). Static snapshot — not live CI.
Behavior
n/ano behavior scenario
No dedicated behavior scenario for this catalog id (a styled or display surface, covered by its unit and axe tests).
Size (gzip)
texuli/file-upload · budget 12.0 KiB
Budget from texuli.budgets.json; re-measure with `pnpm size --filter <entry>`.
Axe
documented
tests/e2e/site-component-pages.spec.tsdocs/quality (a11y-*)
Site component pages axe gate; package-level a11y docs under docs/quality when present.
Browsers
chromiumwebkitmobile
Playwright projects: Desktop Chrome, Desktop Safari, Pixel 7. Firefox is a known gap on this host.
When to use
Use when
- The person attaches files to a form the host owns
Don’t use when
Prefer another component
- Remote media the agent names as URLs (use media-image)

