Input

A component that allows users to input text.

input-demo.tsx
import { Input } from "@/components/ui/input"
 
export function InputDemo() {
	return <Input placeholder="Name" className="w-80" />
}

Installation

npx shadcn@latest add https://9ui.dev/r/input

Usage

Imports
import { Input, InputIcon } from "@/components/ui/input"
Anatomy
<Input>
	<InputIcon />
</Input>

Examples

With Icons

input-with-icons.tsx
import { useState } from "react"
import { EyeIcon, EyeOffIcon, LockIcon } from "lucide-react"
 
import { Input, InputIcon } from "@/components/ui/input"
 
export function InputWithIcons() {
	const [isPasswordVisible, setIsPasswordVisible] = useState(false)
 
	const togglePasswordVisibility = () => {
		setIsPasswordVisible(!isPasswordVisible)
	}
 
	const passwordType = isPasswordVisible ? "text" : "password"
	const eyeIcon = isPasswordVisible ? <EyeIcon /> : <EyeOffIcon />
 
	return (
		<Input placeholder="Password" className="w-80" type={passwordType}>
			<InputIcon side="leading">
				<LockIcon />
			</InputIcon>
			<InputIcon
				side="trailing"
				className="cursor-pointer transition-colors duration-200 hover:[&>svg]:text-foreground"
				onClick={togglePasswordVisibility}
			>
				{eyeIcon}
			</InputIcon>
		</Input>
	)
}

Disabled

input-disabled.tsx
import { Input } from "@/components/ui/input"
 
export function InputDisabled() {
	return <Input className="w-80" placeholder="Name" disabled />
}

Error

input-error.tsx
import { Input } from "@/components/ui/input"
 
export function InputError() {
	return <Input className="w-80" placeholder="Name" aria-invalid />
}