Aadhaar Input
A formatted input component for Indian Aadhaar numbers. Automatically segments the 12-digit number into three groups of four, with validation feedback, and full keyboard navigation.
Installation
npx kesp-ui@latest add aadhaar-inputOr specify a custom path: npx kesp-ui@latest add aadhaar-input -p src/components/ui
Preview
InteractiveUsage
import AadhaarInput from "@/components/ui/aadhaar-input"
function MyForm() {
const [aadhaar, setAadhaar] = useState<string>("")
return (
<AadhaarInput
value={aadhaar}
onChange={setAadhaar}
onComplete={(value: string) => console.log("Aadhaar:", value)}
/>
)
}import AadhaarInput from "@/components/ui/aadhaar-input"
function ValidatedForm() {
const [value, setValue] = useState<string>("")
const [error, setError] = useState<boolean>(false)
const [errorMsg, setErrorMsg] = useState<string>("")
const handleComplete = (aadhaar: string) => {
if (!isValidAadhaar(aadhaar)) {
setError(true)
setErrorMsg("Invalid Aadhaar number")
} else {
setError(false)
setErrorMsg("")
}
}
return (
<AadhaarInput
value={value}
onChange={(v: string) => { setValue(v); setError(false); setErrorMsg("") }}
onComplete={handleComplete}
error={error}
errorMessage={errorMsg}
/>
)
}// Works without value prop — manages state internally
<AadhaarInput
onChange={(value: string) => console.log(value)}
onComplete={(value: string) => submitForm(value)}
/><AadhaarInput
label="आधार संख्या"
placeholder="0000"
separator=" · "
className="max-w-sm"
/>Error Handling
Error State
Set error=true to highlight all segments with a destructive border. Add errorMessage for descriptive text below.
<AadhaarInput
error={true}
errorMessage="Please enter a valid 12-digit Aadhaar number"
/>Success State
When all 12 digits are entered and error is false, a green "Valid Aadhaar number" message appears automatically. The onComplete callback fires.
<AadhaarInput
onComplete={(value: string) => {
// value = "123456789012" (raw 12 digits)
validateWithAPI(value)
}}
/>Props
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | undefined | Controlled value (12 digits, no formatting) |
onChange | (value: string) => void | undefined | Called on every digit change with raw 12-digit string |
onComplete | (value: string) => void | undefined | Fired when all 12 digits are entered |
error | boolean | false | Displays error styling on all segments |
errorMessage | string | undefined | Error text shown below the input |
disabled | boolean | false | Disables all input segments |
label | string | "Aadhaar Number" | Label text above the input |
placeholder | string | "0000 0000 0000" | Placeholder for the input field |
separator | string | " " | Character(s) shown between segments |
className | string | "" | Additional CSS classes on the wrapper |
valuestringundefinedControlled value (12 digits, no formatting)
onChange(value: string) => voidundefinedCalled on every digit change with raw 12-digit string
onComplete(value: string) => voidundefinedFired when all 12 digits are entered
errorbooleanfalseDisplays error styling on all segments
errorMessagestringundefinedError text shown below the input
disabledbooleanfalseDisables all input segments
labelstring"Aadhaar Number"Label text above the input
placeholderstring"0000 0000 0000"Placeholder for the input field
separatorstring" "Character(s) shown between segments
classNamestring""Additional CSS classes on the wrapper
CLI Reference
npx kesp-ui@latest add aadhaar-inputnpx kesp-ui@latest add aadhaar-input -p src/components/uinpx kesp-ui@latest listnpx kesp-ui --versionnpx kesp-ui --help