input-otp
neobrutalism/input-otpFreeComponent
neobrutalism publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by neobrutalism on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://neobrutalism.com/r/input-otp.jsonSource
1"use client"23import * as React from "react"4import { OTPInput, OTPInputContext } from "input-otp"5import { MinusIcon } from "lucide-react"67import { cn } from "@/lib/utils"89function InputOTP({10 className,11 containerClassName,12 ...props13}: React.ComponentProps<typeof OTPInput> & {14 containerClassName?: string15}) {16 return (17 <OTPInput18 data-slot="input-otp"19 containerClassName={cn(20 "cn-input-otp flex items-center has-disabled:opacity-50",21 containerClassName22 )}23 spellCheck={false}24 className={cn("disabled:cursor-not-allowed", className)}25 {...props}26 />27 )28}2930function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">) {31 return (32 <div33 data-slot="input-otp-group"34 className={cn(35 "flex items-center rounded has-aria-invalid:border-destructive",36 className37 )}38 {...props}39 />40 )41}4243function InputOTPSlot({44 index,45 className,46 ...props47}: React.ComponentProps<"div"> & {48 index: number49}) {50 const inputOTPContext = React.useContext(OTPInputContext)51 const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}5253 return (54 <div55 data-slot="input-otp-slot"56 data-active={isActive}57 className={cn(58 "relative flex size-8 items-center justify-center border-y-2 border-r-2 bg-input text-sm shadow-sm transition-all outline-none first:rounded-l first:border-l-2 last:rounded-r aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:outline-2 data-[active=true]:outline-primary data-[active=true]:aria-invalid:border-destructive",59 className60 )}61 {...props}62 >63 {char}64 {hasFakeCaret && (65 <div className="pointer-events-none absolute inset-0 flex items-center justify-center">66 <div className="h-4 w-px animate-caret-blink bg-foreground duration-1000" />67 </div>68 )}69 </div>70 )71}7273function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {74 return (75 <div76 data-slot="input-otp-separator"77 className="flex items-center [&_svg:not([class*='size-'])]:size-4"78 role="separator"79 {...props}80 >81 <MinusIcon />82 </div>83 )84}8586export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }
What it pulls in
npm packages
Files it writes
More from neobrutalism
All 54 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| accordionaccordion | neobrutalism | Components | Free | 2 deps | |
| alertalert | neobrutalism | Components | Free | 2 deps | |
| alert-dialogalert-dialog | neobrutalism | Components | Free | 1 dep | |
| aspect-ratioaspect-ratio | neobrutalism | Components | Free | 1 dep | |
| avataravatar | neobrutalism | Components | Free | 1 dep | |
| badgebadge | neobrutalism | Components | Free | 2 deps | |
| breadcrumbbreadcrumb | neobrutalism | Components | Free | 2 deps | |
| buttonbutton | neobrutalism | Components | Free | 2 deps |
