AI textarea with a toolbar that includes a send button and optional attachments and voice input buttons.
To add attachments, the showAttachmentsButton input must be true, and the attachmentsControl input is required. The attachmentsControl is a FormControl<readonly File[]> like fl-file-select.
In this example, that control has a value change handler that rejects duplicate files. The error is shown below the textarea as a validation error. Meanwhile, the text control has a validator that requires at least 6 characters.
The footer shows a single error using recency. When both the text and the attachments are invalid, whichever the user triggered most recently is shown. To see it, submit with too few characters (text error), then attach the same file twice (attachment error takes over), then submit again (text error returns).
Attached (0):
Nothing yet.
While the consumer uploads a file, set loading on its attachment preview to show a blue progress circle (driven by progress, from 0 to 100) on a plain tile. Set error instead to show the failed state, which is a warning icon in the center. Uploading and failed tiles stay clickable, the media viewer shows a status caption instead of a preview. Files can still be removed.
False = static submit button (no expand/sweep or label fade-in).
Per-file upload progress; matched by `File` reference. Requires `showAttachmentsButton`.
Only used when `showAttachmentsButton` is true.
Replaces submit content with a spinner and disables the button.
Height in px of the submit button.
Horizontal padding in px of the static (`animateButton: false`) submit button.
Submit expands to a labelled pill once `minCharacters` is reached.
Textarea font size (px) on tablet and up.
Textarea font size (px) on mobile.
Removes the outer glow only; gradient border stays.
Disables submit only; textarea and other controls stay interactive.
Prevents submit from stealing focus so the virtual keyboard stays open.
Scrollable line count on desktop/tablet.
Scrollable line count on mobile (>= 400px).
Scrollable line count on small mobile (<400px).
Character threshold for submit expand (requires `buttonText`).
Lines shown at rest before auto-grow, including the stacked toolbar row. Set to 1 for a single-line field with the button inline.
False = label-only submit in every state.
Toolbar text button before submit; pair with `onSkip`.
Rounded-rectangle submit instead of round/pill.
BCP-47 tag for voice recognition. English-only for V1.