Skip to main content

Input

A single-line text input field built on Base UI’s Input primitive.

Base UI Primitive

Built on @base-ui/react/input

Import

import { Input } from "@soft-ui/react/input"

Usage

import { Input } from "@soft-ui/react/input"
import { RiSearchLine } from "@soft-ui/icons"

export default function Example() {
  return (
    <Input 
      placeholder="Search..."
      leadingIcon={<RiSearchLine />}
    />
  )
}

Props

size
's' | 'm' | 'l'
default:"'m'"
Control size. Affects height and padding.
  • s: 32px height
  • m: 36px height
  • l: 40px height
variant
'secondary' | 'tertiary'
default:"'secondary'"
Visual style variant.
  • secondary: Solid background
  • tertiary: Glass-morphic with backdrop blur
leadingIcon
React.ReactNode
Icon or element displayed at the start of the input.
trailingIcon
React.ReactNode
Icon or element displayed at the end of the input.
focusVisibleOnly
boolean
default:"true"
Only show focus ring on keyboard navigation (not mouse clicks).
disabled
boolean
Disables the input and applies disabled styles.
placeholder
string
Placeholder text shown when input is empty.
type
string
default:"'text'"
HTML input type (text, email, password, etc.).
value
string
Controlled value.
defaultValue
string
Uncontrolled default value.
onChange
(event: React.ChangeEvent<HTMLInputElement>) => void
Callback fired when value changes.
className
string
Additional CSS classes for the container.
unsafeClassName
string
Explicit escape hatch for intentional structural overrides.

Examples

With Icons

import { Input } from "@soft-ui/react/input"
import { RiSearchLine, RiCloseLine } from "@soft-ui/icons"

export default function WithIcons() {
  return (
    <Input 
      placeholder="Search..."
      leadingIcon={<RiSearchLine />}
      trailingIcon={<RiCloseLine />}
    />
  )
}

Sizes

import { Input } from "@soft-ui/react/input"

export default function Sizes() {
  return (
    <div className="flex flex-col gap-4">
      <Input size="s" placeholder="Small" />
      <Input size="m" placeholder="Medium" />
      <Input size="l" placeholder="Large" />
    </div>
  )
}

Variants

import { Input } from "@soft-ui/react/input"

export default function Variants() {
  return (
    <div className="flex flex-col gap-4">
      <Input variant="secondary" placeholder="Secondary" />
      <Input variant="tertiary" placeholder="Tertiary" />
    </div>
  )
}

Build docs developers (and LLMs) love