Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import { Minus } from "lucide-react"; import { OTPInput, OTPInputContext } from "input-otp"; import * as React from "react"; import { ui } from "@/config/theme"; import { cn } from "@/lib/utils"; const InputOTP = React.forwardRef< React.ElementRef<typeof OTPInput>, React.ComponentPropsWithoutRef<typeof OTPInput> & { containerClassName?: string; } >(({ className, containerClassName, ...props }, ref) => ( <OTPInput ref={ref} containerClassName={cn("flex items-center gap-2 has-[:disabled]:opacity-50", containerClassName)} className={cn("disabled:cursor-not-allowed", className)} {...props} /> )); InputOTP.displayName = "InputOTP"; const InputOTPGroup = React.forwardRef<HTMLDivElement, React.ComponentProps<"div">>( ({ className, ...props }, ref) => <div ref={ref} className={cn("flex items-center", className)} {...props} />, ); InputOTPGroup.displayName = "InputOTPGroup"; const InputOTPSlot = React.forwardRef<HTMLDivElement, React.ComponentProps<"div"> & { index: number }>( ({ index, className, ...props }, ref) => { const inputOTPContext = React.useContext(OTPInputContext); const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index]; return ( <div ref={ref} className={cn( ui("inputOtpSlot"), isActive && "z-10 ring-1 ring-ring", className, )} {...props} > {char} {hasFakeCaret && ( <div className="pointer-events-none absolute inset-0 flex items-center justify-center"> <div className="h-4 w-px animate-caret-blink bg-foreground duration-1000" /> </div> )} </div> ); }, ); InputOTPSlot.displayName = "InputOTPSlot"; const InputOTPSeparator = React.forwardRef<HTMLDivElement, React.ComponentProps<"div">>( ({ ...props }, ref) => ( <div ref={ref} role="separator" {...props}> <Minus /> </div> ), ); InputOTPSeparator.displayName = "InputOTPSeparator"; export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }; |