Components
npx shadcn@latest add https://21st.dev/r/originui/inputLoading preview...
"use client";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { CircleX } from "lucide-react";
import { useId, useRef, useState } from "react";
function Component() {
const id = useId();
const [inputValue, setInputValue] = useState("Click to clear");
const inputRef = useRef<HTMLInputElement>(null);
const handleClearInput = () => {
setInputValue("");
if (inputRef.current) {
inputRef.current.focus();
}
};
return (
<div className="space-y-2 min-w-[300px]">
<Label htmlFor={id}>Input with clear button</Label>
<div className="relative">
<Input
id={id}
ref={inputRef}
className="pe-9"
placeholder="Type something..."
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
{inputValue && (
<button
className="absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-lg text-muted-foreground/80 outline-offset-2 transition-colors hover:text-foreground focus:z-10 focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring/70 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50"
aria-label="Clear input"
onClick={handleClearInput}
>
<CircleX size={16} strokeWidth={2} aria-hidden="true" />
</button>
)}
</div>
</div>
);
}
export { Component };
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...
Loading preview...