input-otp
nrjdalal/input-otpFreeComponent
acme publishes no description for this item.
Install it
npx shadcn@latest add https://nrjdalal.dev/r/input-otp.jsonSource
1"use client"23import { cn } from "@/lib/utils"4import { OTPInput, OTPInputContext } from "input-otp"5import { MinusIcon } from "lucide-react"6import * as React from "react"78function InputOTP({9 className,10 containerClassName,11 ...props12}: React.ComponentProps<typeof OTPInput> & {13 containerClassName?: string14}) {15 return (16 <OTPInput17 data-slot="input-otp"18 containerClassName={cn(19 "flex items-center gap-2 has-disabled:opacity-50",20 containerClassName,21 )}22 className={cn("disabled:cursor-not-allowed", className)}23 {...props}24 />25 )26}2728function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">) {29 return (30 <div31 data-slot="input-otp-group"32 className={cn("flex items-center", className)}33 {...props}34 />35 )36}3738function InputOTPSlot({39 index,40 className,41 ...props42}: React.ComponentProps<"div"> & {43 index: number44}) {45 const inputOTPContext = React.useContext(OTPInputContext)46 const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index]4748 return (49 <div50 data-slot="input-otp-slot"51 data-active={isActive}52 className={cn(53 "border-input data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",54 className,55 )}56 {...props}57 >58 {char}59 {hasFakeCaret && (60 <div className="pointer-events-none absolute inset-0 flex items-center justify-center">61 <div className="animate-caret-blink bg-foreground h-4 w-px duration-1000" />62 </div>63 )}64 </div>65 )66}6768function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {69 return (70 <div data-slot="input-otp-separator" role="separator" {...props}>71 <MinusIcon />72 </div>73 )74}7576export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }
What it pulls in
npm packages
Files it writes
More from acme
All 49 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| accordionaccordion | acme | Components | Free | 5 deps · 2 files | |
| alertalert | acme | Components | Free | 4 deps · 2 files | |
| alert-dialogalert-dialog | acme | Components | Free | 6 deps · 3 files | |
| aspect-ratioaspect-ratio | acme | Components | Free | 1 dep | |
| avataravatar | acme | Components | Free | 4 deps · 2 files | |
| badgebadge | acme | Components | Free | 5 deps · 2 files | |
| breadcrumbbreadcrumb | acme | Components | Free | 5 deps · 2 files | |
| buttonbutton | acme | Components | Free | 5 deps · 2 files |
