shadcn.io is an independent project built on shadcn/ui
Two busy controls. The textarea is disabled, says Generating content..., and has a spinner in a bordered row under the text. The file field is disabled, says Uploading file..., and has a spinner at the end.
Put the spinner under a textarea and beside a one-line field. If the text arrives in pieces, write each piece in yourself. A page-level wait is a Spinner on its own. In Svelte, Ark UI does not fill the textarea for you.
Installation
Anatomy

Usage
<div class="flex w-full max-w-sm flex-col gap-4"><InputGroup class="bg-background" data-disabled="true"><InputGroupTextarea aria-label="Content" class="min-h-[100px]" disabled placeholder="Generating content..." /><InputGroupAddon align="block-end" class="border-t"><Spinner /></InputGroupAddon></InputGroup><InputGroup class="bg-background" data-disabled="true"><InputGroupInput aria-label="File" disabled placeholder="Uploading file..." type="text" /><InputGroupAddon align="inline-end"><Spinner /></InputGroupAddon></InputGroup></div>FAQ
How does the spinner sit under the textarea?
In an InputGroupAddon with align="block-end" and border-t, after the textarea.
How are the controls disabled?
disabled on InputGroupTextarea and InputGroupInput. data-disabled="true" on InputGroup dims the addons.
API Reference
Input Group
Sets data-disabled, aria-label="Content", disabled, placeholder="Generating content...", align="block-end" and aria-label="File". The rest is on the Input Group page.
Spinner
No extra props in this demo. The rest is on the Spinner page.




