āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā š shadcn/directory/cosscom/coss/components/field ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
title: Field description: A component that provides labelling and validation for form controls.
<ComponentPreview name="field-demo" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
npx shadcn@latest add @coss/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="field" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" title="components/ui/field.tsx" />
<Step>Update the import paths to match your project setup.</Step>
</Steps> </TabsPanel> </CodeTabs>import {
Field,
FieldDescription,
FieldError,
FieldLabel,
FieldValidity,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"
<Field>
<FieldLabel>Name</FieldLabel>
<Input type="text" placeholder="Enter your name" />
<FieldDescription>Visible on your profile</FieldDescription>
<FieldError>Please enter a valid name</FieldError>
<FieldValidity>
{(validity) => (
{validity.error && <p>{validity.error}</p>}
)}
</FieldValidity>
</Field>
<ComponentPreview name="field-required" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-disabled" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
Enter an invalid email address and press enter to see the error.
<ComponentPreview name="field-error" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-validity" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-80" />
<ComponentPreview name="field-input-group" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-autocomplete" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-combobox" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-combobox-multiple" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-textarea" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-select" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-slider" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-number-field" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
<ComponentPreview name="field-complete-form" className="[&_.preview>*]:w-full [&_.preview>*]:max-w-64" />
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā