This component no longer exists. It was in shadcn/ui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-13 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
agileflow-projectquestorg/input-otpRemovedComponent
shadcn/ui publishes no description for this item.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/projectquestorg/AgileFlow/main/apps/docs/public/r/styles/radix-nova/input-otp.jsonSource
1"use client"23import * as React from "react"4import { OTPInput, OTPInputContext } from "input-otp"56import { cn } from "@/registry/bases/radix/lib/utils"7import { IconPlaceholder } from "@/app/(create)/components/icon-placeholder"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(25 "disabled:cursor-not-allowed",26 className27 )}28 {...props}29 />30 )31}3233function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">) {34 return (35 <div36 data-slot="input-otp-group"37 className={cn("has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-lg has-aria-invalid:ring-[3px] flex items-center", className)}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 "dark:bg-input/30 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 size-8 border-y border-r text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg data-[active=true]:ring-[3px] relative flex items-center justify-center data-[active=true]:z-10",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="animate-caret-blink bg-foreground h-4 w-px duration-1000 bg-foreground h-4 w-px" />67 </div>68 )}69 </div>70 )71}7273function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {74 return (75 <div76 data-slot="input-otp-separator"77 className="[&_svg:not([class*='size-'])]:size-4 flex items-center"78 role="separator"79// … truncated
What it pulls in
npm packages
