{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "bharat-ui", "homepage": "https://bharat-ui.vercel.app", "items": [ { "name": "upi-input", "type": "registry:ui", "title": "UPI Input", "description": "UPI ID field with live VPA validation, handle autocomplete and provider detection.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/upi-input.tsx", "type": "registry:ui", "target": "components/ui/upi-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/upi.ts", "type": "registry:lib", "target": "lib/upi.ts" }, { "path": "packages/ui/src/lib/upi-handles.ts", "type": "registry:lib", "target": "lib/upi-handles.ts" } ] }, { "name": "pan-input", "type": "registry:ui", "title": "PAN Input", "description": "PAN field validating structure and decoding the holder type.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/pan-input.tsx", "type": "registry:ui", "target": "components/ui/pan-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/pan.ts", "type": "registry:lib", "target": "lib/pan.ts" } ] }, { "name": "aadhaar-input", "type": "registry:ui", "title": "Aadhaar Input", "description": "Aadhaar field with a real Verhoeff checksum, masked by default.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/aadhaar-input.tsx", "type": "registry:ui", "target": "components/ui/aadhaar-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/aadhaar.ts", "type": "registry:lib", "target": "lib/aadhaar.ts" } ] }, { "name": "dob-input", "type": "registry:ui", "title": "Date of Birth Input", "description": "DD/MM/YYYY date of birth with age and minimum-age checks.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/dob-input.tsx", "type": "registry:ui", "target": "components/ui/dob-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/dob.ts", "type": "registry:lib", "target": "lib/dob.ts" } ] }, { "name": "vehicle-number-input", "type": "registry:ui", "title": "Vehicle Number Input", "description": "Registration number supporting both state and Bharat (BH) series.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/vehicle-number-input.tsx", "type": "registry:ui", "target": "components/ui/vehicle-number-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/vehicle.ts", "type": "registry:lib", "target": "lib/vehicle.ts" } ] }, { "name": "gov-id-inputs", "type": "registry:ui", "title": "Government ID Inputs", "description": "Voter ID (EPIC), driving licence and passport fields.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/gov-id-inputs.tsx", "type": "registry:ui", "target": "components/ui/gov-id-inputs.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/components/ui/identifier-input.tsx", "type": "registry:ui", "target": "components/ui/identifier-input.tsx" }, { "path": "packages/ui/src/lib/gov-ids.ts", "type": "registry:lib", "target": "lib/gov-ids.ts" }, { "path": "packages/ui/src/lib/vehicle.ts", "type": "registry:lib", "target": "lib/vehicle.ts" } ] }, { "name": "amount-input", "type": "registry:ui", "title": "Amount Input", "description": "Rupee amount field using Indian digit grouping — ₹12,34,567.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/amount-input.tsx", "type": "registry:ui", "target": "components/ui/amount-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/amount.ts", "type": "registry:lib", "target": "lib/amount.ts" } ] }, { "name": "amount-in-words", "type": "registry:ui", "title": "Amount In Words", "description": "Amount spelled out in Indian English, with lakh and crore.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/amount-in-words.tsx", "type": "registry:ui", "target": "components/ui/amount-in-words.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/amount.ts", "type": "registry:lib", "target": "lib/amount.ts" }, { "path": "packages/ui/src/lib/words.ts", "type": "registry:lib", "target": "lib/words.ts" } ] }, { "name": "ifsc-input", "type": "registry:ui", "title": "IFSC Input", "description": "IFSC field that names the bank as you type.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/ifsc-input.tsx", "type": "registry:ui", "target": "components/ui/ifsc-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/ifsc.ts", "type": "registry:lib", "target": "lib/ifsc.ts" } ] }, { "name": "bank-account-input", "type": "registry:ui", "title": "Bank Account Input", "description": "Account number with a paste-blocked confirmation field.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/bank-account-input.tsx", "type": "registry:ui", "target": "components/ui/bank-account-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/bank-account.ts", "type": "registry:lib", "target": "lib/bank-account.ts" } ] }, { "name": "card-inputs", "type": "registry:ui", "title": "Card Inputs", "description": "Card number, expiry and CVV — Luhn checked, with RuPay detection.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/card-inputs.tsx", "type": "registry:ui", "target": "components/ui/card-inputs.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/card.ts", "type": "registry:lib", "target": "lib/card.ts" } ] }, { "name": "gstin-input", "type": "registry:ui", "title": "GSTIN Input", "description": "GSTIN with the published checksum and a PAN cross-check.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/gstin-input.tsx", "type": "registry:ui", "target": "components/ui/gstin-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/gstin.ts", "type": "registry:lib", "target": "lib/gstin.ts" }, { "path": "packages/ui/src/lib/pan.ts", "type": "registry:lib", "target": "lib/pan.ts" } ] }, { "name": "business-id-inputs", "type": "registry:ui", "title": "Business ID Inputs", "description": "TAN, CIN, Udyam, HSN/SAC and FSSAI fields.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/business-id-inputs.tsx", "type": "registry:ui", "target": "components/ui/business-id-inputs.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/components/ui/identifier-input.tsx", "type": "registry:ui", "target": "components/ui/identifier-input.tsx" }, { "path": "packages/ui/src/lib/business-ids.ts", "type": "registry:lib", "target": "lib/business-ids.ts" }, { "path": "packages/ui/src/lib/gov-ids.ts", "type": "registry:lib", "target": "lib/gov-ids.ts" }, { "path": "packages/ui/src/lib/vehicle.ts", "type": "registry:lib", "target": "lib/vehicle.ts" } ] }, { "name": "mobile-input", "type": "registry:ui", "title": "Mobile Input", "description": "Indian mobile field that strips +91, 0091 and leading zeroes.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/mobile-input.tsx", "type": "registry:ui", "target": "components/ui/mobile-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/mobile.ts", "type": "registry:lib", "target": "lib/mobile.ts" } ] }, { "name": "otp-input", "type": "registry:ui", "title": "OTP Input", "description": "Segmented one-time-code field with paste, autofill and keyboard support.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/otp-input.tsx", "type": "registry:ui", "target": "components/ui/otp-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" } ] }, { "name": "pincode-input", "type": "registry:ui", "title": "Pincode Input", "description": "PIN code field that derives the postal zone offline.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/pincode-input.tsx", "type": "registry:ui", "target": "components/ui/pincode-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/pincode.ts", "type": "registry:lib", "target": "lib/pincode.ts" } ] }, { "name": "state-select", "type": "registry:ui", "title": "State Select", "description": "Searchable picker for all 36 states and union territories.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/state-select.tsx", "type": "registry:ui", "target": "components/ui/state-select.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/lib/states.ts", "type": "registry:lib", "target": "lib/states.ts" } ] }, { "name": "address-form", "type": "registry:ui", "title": "Address Form", "description": "Full Indian address, PIN-code first so a lookup can fill the rest.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/address-form.tsx", "type": "registry:ui", "target": "components/ui/address-form.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/components/ui/pincode-input.tsx", "type": "registry:ui", "target": "components/ui/pincode-input.tsx" }, { "path": "packages/ui/src/components/ui/state-select.tsx", "type": "registry:ui", "target": "components/ui/state-select.tsx" }, { "path": "packages/ui/src/lib/states.ts", "type": "registry:lib", "target": "lib/states.ts" }, { "path": "packages/ui/src/lib/pincode.ts", "type": "registry:lib", "target": "lib/pincode.ts" } ] }, { "name": "masked-value", "type": "registry:ui", "title": "Masked Value", "description": "Sensitive identifier shown masked, with opt-in reveal and copy.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/masked-value.tsx", "type": "registry:ui", "target": "components/ui/masked-value.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" } ] }, { "name": "copyable-id", "type": "registry:ui", "title": "Copyable ID", "description": "Read-only reference number with a copy button.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/copyable-id.tsx", "type": "registry:ui", "target": "components/ui/copyable-id.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" } ] }, { "name": "consent-checkbox", "type": "registry:ui", "title": "Consent Checkbox", "description": "DPDP-shaped consent requiring purpose, sharing and retention.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/consent-checkbox.tsx", "type": "registry:ui", "target": "components/ui/consent-checkbox.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" } ] }, { "name": "validation-summary", "type": "registry:ui", "title": "Validation Summary", "description": "Form-level error summary that focuses on submit and links to fields.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/validation-summary.tsx", "type": "registry:ui", "target": "components/ui/validation-summary.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" } ] }, { "name": "identifier-input", "type": "registry:ui", "title": "Identifier Input", "description": "Generic base for fixed-format identifier fields.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/identifier-input.tsx", "type": "registry:ui", "target": "components/ui/identifier-input.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" } ] }, { "name": "health-id-inputs", "type": "registry:ui", "title": "Health & Pension ID Inputs", "description": "ABHA, UAN, ESIC, PRAN and ration card fields.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/health-id-inputs.tsx", "type": "registry:ui", "target": "components/ui/health-id-inputs.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/components/ui/identifier-input.tsx", "type": "registry:ui", "target": "components/ui/identifier-input.tsx" }, { "path": "packages/ui/src/lib/health-ids.ts", "type": "registry:lib", "target": "lib/health-ids.ts" }, { "path": "packages/ui/src/lib/gov-ids.ts", "type": "registry:lib", "target": "lib/gov-ids.ts" }, { "path": "packages/ui/src/lib/vehicle.ts", "type": "registry:lib", "target": "lib/vehicle.ts" } ] }, { "name": "market-id-inputs", "type": "registry:ui", "title": "Markets & Banking ID Inputs", "description": "LEI and ISIN with real checksums, plus MICR, demat, SWIFT, CKYC and UTR.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/market-id-inputs.tsx", "type": "registry:ui", "target": "components/ui/market-id-inputs.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/components/ui/identifier-input.tsx", "type": "registry:ui", "target": "components/ui/identifier-input.tsx" }, { "path": "packages/ui/src/lib/market-ids.ts", "type": "registry:lib", "target": "lib/market-ids.ts" }, { "path": "packages/ui/src/lib/gov-ids.ts", "type": "registry:lib", "target": "lib/gov-ids.ts" }, { "path": "packages/ui/src/lib/vehicle.ts", "type": "registry:lib", "target": "lib/vehicle.ts" } ] }, { "name": "corporate-id-inputs", "type": "registry:ui", "title": "Corporate ID Inputs", "description": "DIN, LLPIN, FCRA, IEC, RERA and legacy TIN fields.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/corporate-id-inputs.tsx", "type": "registry:ui", "target": "components/ui/corporate-id-inputs.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/components/ui/identifier-input.tsx", "type": "registry:ui", "target": "components/ui/identifier-input.tsx" }, { "path": "packages/ui/src/lib/corporate-ids.ts", "type": "registry:lib", "target": "lib/corporate-ids.ts" }, { "path": "packages/ui/src/lib/gov-ids.ts", "type": "registry:lib", "target": "lib/gov-ids.ts" }, { "path": "packages/ui/src/lib/pan.ts", "type": "registry:lib", "target": "lib/pan.ts" }, { "path": "packages/ui/src/lib/vehicle.ts", "type": "registry:lib", "target": "lib/vehicle.ts" } ] }, { "name": "transaction-id-inputs", "type": "registry:ui", "title": "Transaction Reference Inputs", "description": "UMRN, cheque number, e-way bill, ARN, RRN, IRN and LPG consumer ID.", "dependencies": [ "lucide-react", "clsx", "tailwind-merge" ], "files": [ { "path": "packages/ui/src/components/ui/transaction-id-inputs.tsx", "type": "registry:ui", "target": "components/ui/transaction-id-inputs.tsx" }, { "path": "packages/ui/src/components/ui/field.tsx", "type": "registry:ui", "target": "components/ui/field.tsx" }, { "path": "packages/ui/src/components/ui/identifier-input.tsx", "type": "registry:ui", "target": "components/ui/identifier-input.tsx" }, { "path": "packages/ui/src/lib/transaction-ids.ts", "type": "registry:lib", "target": "lib/transaction-ids.ts" }, { "path": "packages/ui/src/lib/gov-ids.ts", "type": "registry:lib", "target": "lib/gov-ids.ts" }, { "path": "packages/ui/src/lib/vehicle.ts", "type": "registry:lib", "target": "lib/vehicle.ts" } ] } ] }