This component no longer exists. It was in neobrutal-ui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-06 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
Input OTP
neobrutal-ui/input-otpRemovedComponent
neobrutal-ui publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by neobrutal-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://neobrutal-ui.andongmin.com/r/input-otp.jsonSource
1"use client";23import * as React from "react";4import { OTPInput, OTPInputContext } from "input-otp";56import { cn } from "@/lib/utils";7import { DotIcon } from "lucide-react";89function InputOTP({10 className,11 containerClassName,12 ...props13}: React.ComponentProps<typeof OTPInput> & {14 containerClassName?: string;15}) {16 return (17 <OTPInput18 data-slot="input-otp"19 containerClassName={cn(20 "cn-input-otp flex items-center gap-2 has-disabled:opacity-50",21 containerClassName,22 )}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 <div data-slot="input-otp-group" className={cn("flex items-center", className)} {...props} />33 );34}3536function InputOTPSlot({37 index,38 className,39 ...props40}: React.ComponentProps<"div"> & {41 index: number;42}) {43 const inputOTPContext = React.useContext(OTPInputContext);44 const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};4546 return (47 <div48 data-slot="input-otp-slot"49 data-active={isActive}50 className={cn(51 "relative flex size-10 items-center justify-center border-y-2 border-r-2 border-border bg-secondary-background text-sm font-base text-foreground transition-all first:rounded-l-base first:border-l-2 last:rounded-r-base data-[active=true]:z-10 data-[active=true]:ring-1 data-[active=true]:ring-ring",52 className,53 )}54 {...props}55 >56 {char}57 {hasFakeCaret && (58 <div className="pointer-events-none absolute inset-0 flex items-center justify-center">59 <div className="h-4 w-px animate-caret-blink bg-current duration-1000" />60 </div>61 )}62 </div>63 );64}6566function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {67 return (68 <div69 data-slot="input-otp-separator"70 className="flex items-center [&_svg:not([class*='size-'])]:size-4"71 role="separator"72 {...props}73 >74 <DotIcon />75 </div>76 );77}7879export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };
What it pulls in
npm packages
