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 Solid, 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.




