MicroClub Input OTP
mcoli-ui-registry/mc-input-otpFreeComponent
An OTP input component for MicroClub UI
Live preview
live · rendered by the registry
Rendered by mcoli-ui-registry on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://mcoli-ui.microclub.info/r/mc-input-otp.jsonSource
1'use client';23import * as React from 'react';4import { OTPInput, OTPInputContext } from 'input-otp';56import { cn } from '@/lib/utils';7import { MinusIcon } from 'lucide-react';89function McInputOtp({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('flex items-center has-disabled:opacity-50', containerClassName)}20 spellCheck={false}21 className={cn('disabled:cursor-not-allowed', className)}22 {...props}23 />24 );25}2627function McInputOtpGroup({ className, ...props }: React.ComponentProps<'div'>) {28 return (29 <div data-slot="input-otp-group" className={cn('flex items-center', className)} {...props} />30 );31}3233function McInputOtpSlot({34 index,35 className,36 ...props37}: React.ComponentProps<'div'> & {38 index: number;39}) {40 const inputOTPContext = React.useContext(OTPInputContext);41 const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};4243 return (44 <div45 data-slot="input-otp-slot"46 data-active={isActive}47 className={cn(48 'relative flex size-10 items-center justify-center border border-border bg-input text-sm transition-all outline-none first:rounded-l-md last:rounded-r-md last:mr-0 not-last:-mr-px data-[active=true]:z-10 data-[active=true]:border-transparent data-[active=true]:ring-2 data-[active=true]:ring-border',49 className50 )}51 {...props}52 >53 {char}54 {hasFakeCaret && (55 <div className="pointer-events-none absolute inset-0 flex items-center justify-center">56 <div className="h-4 w-px animate-caret-blink bg-foreground duration-1000" />57 </div>58 )}59 </div>60 );61}6263function McInputOtpSeparator({ ...props }: React.ComponentProps<'div'>) {64 return (65 <div66 data-slot="input-otp-separator"67 className="flex items-center mx-2"68 role="separator"69 {...props}70 >71 <MinusIcon size={24} strokeWidth={1.25} className="text-muted-foreground" />72 </div>73 );74}7576export { McInputOtp, McInputOtpGroup, McInputOtpSlot, McInputOtpSeparator };
What it pulls in
npm packages
Files it writes
More from mcoli-ui-registry
All 42 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| MicroClub Accordionmc-accordion | mcoli-ui-registry | Components | Free | 2 deps | |
| MicroClub Alertmc-alert | mcoli-ui-registry | Components | Free | 1 dep | |
| MicroClub Alert Dialogmc-alert-dialog | mcoli-ui-registry | Components | Free | 1 dep | |
| MicroClub Avatarmc-avatar | mcoli-ui-registry | Components | Free | 1 dep | |
| MicroClub Badgemc-badge | mcoli-ui-registry | Components | Free | 1 dep | |
| MicroClub Breadcrumbmc-breadcrumb | mcoli-ui-registry | Components | Free | 2 deps | |
| MicroClub Buttonmc-button | mcoli-ui-registry | Components | Free | 2 deps | |
| MicroClub Calendarmc-calendar | mcoli-ui-registry | Components | Free | 3 deps |
