Skip to main content

Input

A highly customizable input field for forms, supporting variants, sizes, colors, adornments, and multiline mode.

Demo​

Usage​


import React, { useState } from "react";
import { Input } from "@libdev-ui/base";
import { FaSearch } from "react-icons/fa";
import { FaCheck } from "react-icons/fa";

export default function Example(): JSX.Element {
const [value, setValue] = useState<string>("");

return (
<div style={{ display: "grid", gap: 12, maxWidth: 480 }}>

<Input showClearButton={false} placeholder="Uncontrolled input" />

<Input
placeholder="Controlled input"
value={value}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => setValue(e.target.value)}
showClearButton
/>

<Input
placeholder="With adornments"
startAdornment={<FaSearch aria-label="search"/>}
endAdornment={<FaCheck aria-label="check"/>}
/>
</div>
);
}

Variants​


import { Input } from "@libdev-ui/base";

export default function VariantsDemo(): JSX.Element {
return (
<div style={{ display: "grid", gap: 12 }}>
<Input placeholder="Outlined (default)" variant="outlined" />
<Input placeholder="Filled" variant="filled" />
<Input placeholder="Ghost" variant="ghost" />
</div>
);
}

Sizes​


import { Input } from "@libdev-ui/base";

export default function SizesDemo(): JSX.Element {
return (
<div style={{ display: "grid", gap: 12 }}>
<Input placeholder="Small" size="sm" />
<Input placeholder="Medium" size="md" />
<Input placeholder="Large" size="lg" />
</div>
);
}

Colors​


import { Input } from "@libdev-ui/base";

export default function ColorsDemo(): JSX.Element {
return (
<div style={{ display: "grid", gap: 12 }}>
<Input placeholder="Primary" color="primary" />
<Input placeholder="Secondary" color="secondary" />
<Input placeholder="Success" color="success" />
<Input placeholder="Danger" color="danger" />
<Input placeholder="Custom var()" color="var(--color-accent)" />
</div>
);
}

Multiline​


import { Input } from "@libdev-ui/base";

export default function MultilineDemo(): JSX.Element {
return <Input placeholder="Write your message..." multiline rows={4} />;
}

Props​

PropTypeDefaultDescription
valuestring | number—Controlled value.
defaultValuestring | number—Uncontrolled initial value.
onChange(e) => void—Fired on value change.
placeholderstring—Short hint shown before input.
typestring"text"HTML5 input type (ignored when multiline).
disabledbooleanfalseDisables the field.
errorbooleanfalseError state styling.
readOnlybooleanfalseRead-only field.
requiredbooleanfalseRequired attribute.
fullWidthbooleanfalseStretches to 100% width.
autoFocusbooleanfalseFocus on mount.
autoCompletestring—Native autocomplete.
multilinebooleanfalseRenders a <textarea>.
rowsnumber—Rows for multiline.
minRowsnumber—Minimum rows for multiline.
maxRowsnumber—Maximum rows for multiline.
startAdornmentReactNode—Leading icon/text.
endAdornmentReactNode—Trailing icon/text.
showClearButtonbooleantrueShows ✕ button (single-line only).
onClear() => void—Called after clear.
variant"filled" | "outlined" | "ghost""outlined"Visual variant.
size"sm" | "md" | "lg""md"Size token.
color"primary" | "secondary" | "success" | "danger" | "warning" | "info" | string"primary"Color token or custom CSS color.
radius"sm" | "md" | "lg""md"Corner radius.
classNamestring—Custom class.
styleReact.CSSProperties—Inline styles.

Ensure this MDX page imports both Tabs and TabItem. If you see an error like “Expected component TabItem to be defined”, it means the import is missing at the top of the page.

Accessibility​

  • Proper ARIA attributes are applied automatically (e.g., aria-invalid, aria-required).
  • The clear button has aria-label="Clear" and title="Clear".
  • Escape key clears the input (single-line mode) if the clear button is enabled.

See useInputBase for the centralized behavior and ARIA details.