shadcn.io is an independent project built on shadcn/ui
Both inputs are disabled. The search field says Searching... and shows a spinner at the end. The request field says Processing... and shows a spinner at the start. Neither spinner leaves on its own.
Show the spinner inside the field that is busy. If the whole page is waiting, use a Spinner beside the content. In Vue, Ark UI does not know when the request has finished.
Installation
Anatomy

Usage
<div class="flex w-full max-w-sm flex-col gap-4">
<InputGroup class="bg-background" data-disabled="true">
<InputGroupInput
aria-label="Search"
:disabled="true"
placeholder="Searching..."
type="search"
/>
<InputGroupAddon align="inline-end"><Spinner /></InputGroupAddon>
</InputGroup>
<InputGroup class="bg-background" data-disabled="true">
<InputGroupInput
aria-label="Request"
:disabled="true"
placeholder="Processing..."
type="text"
/>
<InputGroupAddon><Spinner /></InputGroupAddon>
</InputGroup>
</div>FAQ
How do I put the spinner at the start or the end?
With align on its InputGroupAddon: inline-end for the first field, the default inline-start for the second. Both addons come after the input.
How are the fields disabled?
disabled on each InputGroupInput. data-disabled="true" on InputGroup dims the addons.
How do I show the spinner only while loading?
Render the addon only while your request is pending, and drop disabled when it settles.
API Reference
Input Group
Sets data-disabled, aria-label="Search", disabled, placeholder="Searching...", type="search" and align="inline-end". The rest is on the Input Group page.
Spinner
No extra props in this demo. The rest is on the Spinner page.




