# Input

```mdx
<input class="input" type="email" placeholder="Email" />
```

## Usage

<Steps>
  <Step title="Include CSS">

Import Tailwind and one full Basecoat style bundle.

```css
@import "tailwindcss";
@import "basecoat-css/vega.css";
```

Or import only the base CSS, Input component CSS, and one style pack.

```css
@import "tailwindcss";
@import "basecoat-css/base.css";
@import "basecoat-css/components/input.css";
@import "basecoat-css/styles/vega.css";
```

Using CDN or bundler imports? See the [Installation page](/installation).

  </Step>
  <Step title="Add your input HTML">

Add `class="input"` to supported `<input>` elements. Inputs inside a `class="field"` container also receive the same styling automatically for common text-like input types.

Use native HTML attributes for behavior: `disabled` for disabled inputs, `required` for required fields, and `aria-invalid="true"` for invalid state styling.

```html
<input class="input" type="email" placeholder="Email" />
```

  </Step>
</Steps>

## Examples

### Basic

```mdx
<input class="input" type="email" placeholder="Email" />
```

### Field

Use `field` with a label and description to create an accessible field.

```mdx
<div role="group" class="field">
  <label for="input-field">Email</label>
  <input id="input-field" type="email" placeholder="m@example.com" />
  <p>Enter your email address.</p>
</div>
```

### Field group

```mdx
<div class="grid gap-4">
  <div role="group" class="field">
    <label for="input-first-name">First name</label>
    <input id="input-first-name" type="text" placeholder="Jane" />
  </div>
  <div role="group" class="field">
    <label for="input-last-name">Last name</label>
    <input id="input-last-name" type="text" placeholder="Doe" />
  </div>
</div>
```

### Disabled

```mdx
<input class="input" type="email" placeholder="Email" disabled />
```

### Invalid

```mdx
<input class="input" type="email" placeholder="Email" aria-invalid="true" />
```

### File

```mdx
<input class="input" type="file" />
```

### Inline

```mdx
<div class="flex items-center gap-2">
  <input class="input" type="search" placeholder="Search..." />
  <button type="submit" class="btn">Search</button>
</div>
```

### Grid

```mdx
<div class="grid gap-4 md:grid-cols-2">
  <input class="input" type="text" placeholder="First name" />
  <input class="input" type="text" placeholder="Last name" />
  <input class="input md:col-span-2" type="email" placeholder="Email" />
</div>
```

### Required

```mdx
<div role="group" class="field">
  <label for="input-required">Username <span class="text-destructive">*</span></label>
  <input id="input-required" type="text" placeholder="hunvreus" required />
</div>
```

### Badge

```mdx
<div role="group" class="field">
  <label for="input-badge" class="flex w-full items-center gap-2">
    Email
    <span class="badge ml-auto" data-variant="secondary">Recommended</span>
  </label>
  <input id="input-badge" type="email" placeholder="m@example.com" />
</div>
```

### Input group

Use the [Input Group](/components/input-group/) patterns to add icons, text, or buttons inside an input.

```mdx
<div class="relative">
  <input class="input ps-9" type="search" placeholder="Search..." />
  <div class="pointer-events-none absolute start-3 top-1/2 -translate-y-1/2 text-muted-foreground [&>svg]:size-4"><svg class="lucide lucide-search" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21 21-4.34-4.34" /><circle cx="11" cy="11" r="8" /></svg>
  </div>
</div>
```

### Button group

Use [Button Group](/components/button-group/) when an input should be grouped with adjacent buttons.

```mdx
<div role="group" aria-label="Search" class="button-group">
  <input class="input" type="search" placeholder="Search..." />
  <button type="submit" class="btn" data-variant="outline" data-size="icon" aria-label="Search"><svg class="lucide lucide-search" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21 21-4.34-4.34" /><circle cx="11" cy="11" r="8" /></svg></button>
</div>
```

### Form

```mdx
<form class="space-y-6">
  <div role="group" class="field">
    <label for="input-form-username">Username</label>
    <input id="input-form-username" type="text" placeholder="hunvreus" required />
    <p>This is your public display name.</p>
  </div>
  <div role="group" class="field">
    <label for="input-form-email">Email</label>
    <input id="input-form-email" type="email" placeholder="m@example.com" required />
  </div>
  <button type="submit" class="btn">Submit</button>
</form>
```

### RTL

Inputs support right-to-left layouts through native browser direction handling. Add `dir="rtl"` to the input, field, or an ancestor.

```mdx
<div role="group" class="field" dir="rtl">
  <label for="input-rtl-api-key">مفتاح API</label>
  <input id="input-rtl-api-key" type="password" placeholder="sk-..." />
  <p>مفتاح API الخاص بك مشفر ومخزن بأمان.</p>
</div>
```
