āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā š shadcn/directory/cosscom/coss/components/number-field ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
title: Number Field description: A numeric input element with increment and decrement buttons, and a scrub area.
<ComponentPreview name="number-field-demo" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
npx shadcn@latest add @coss/number-field
</TabsPanel>
<TabsPanel value="manual">
<Steps>
<Step>Install the following dependencies:</Step>
npm install @base-ui-components/react
<Step>Copy and paste the following code into your project.</Step>
<ComponentSource name="number-field" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" title="components/ui/number-field.tsx" />
<Step>Update the import paths to match your project setup.</Step>
</Steps> </TabsPanel> </CodeTabs>import {
NumberField,
NumberFieldDecrement,
NumberFieldGroup,
NumberFieldIncrement,
NumberFieldInput,
NumberFieldScrubArea,
} from "@/components/ui/number-field"
<NumberField defaultValue={0}>
<NumberFieldScrubArea label="Quantity" />
<NumberFieldGroup>
<NumberFieldDecrement />
<NumberFieldInput />
<NumberFieldIncrement />
</NumberFieldGroup>
</NumberField>
For accessible labelling and validation, prefer using the Field component to wrap number fields. See the related example: Number field.
<ComponentPreview name="number-field-sm" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-lg" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-disabled" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-with-label" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-with-scrub" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-with-range" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-with-formatted-value" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-with-step" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="number-field-form" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā