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 | numberControlled value.
defaultValuestring | numberUncontrolled initial value.
onChange(e) => voidFired on value change.
placeholderstringShort 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.
autoCompletestringNative autocomplete.
multilinebooleanfalseRenders a <textarea>.
rowsnumberRows for multiline.
minRowsnumberMinimum rows for multiline.
maxRowsnumberMaximum rows for multiline.
startAdornmentReactNodeLeading icon/text.
endAdornmentReactNodeTrailing icon/text.
showClearButtonbooleantrueShows ✕ button (single-line only).
onClear() => voidCalled 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.
classNamestringCustom class.
styleReact.CSSPropertiesInline 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.