Forms

Inputs, selects, checkboxes, labels, help/error text, toggles, and layout helpers. Shared shells are exposed as .form-control and .form-choice.

Text inputs — .form-control + .form-input, .form-input .form-input-error

This is a help message.

Please enter a valid email address.

<div class="max-w-md space-y-4">
  <div>
    <label class="form-label">Default input</label>
    <input type="email" placeholder="[email protected]" class="form-control form-input" />
  </div>

  <div>
    <label class="form-label form-label-required">Required field</label>
    <input type="text" placeholder="This field is required" class="form-control form-input" />
    <p class="form-help">This is a help message.</p>
  </div>

  <div>
    <label class="form-label form-label-required">With validation error</label>
    <input type="email" value="not-an-email" class="form-control form-input form-input-error" />
    <p class="form-error">Please enter a valid email address.</p>
  </div>

  <div>
    <label class="form-label">Disabled</label>
    <input type="text" value="Read only" disabled class="form-control form-input" />
  </div>
</div>

Select — .form-control + .form-select

<div class="max-w-xs">
  <label class="form-label">Frequency</label>
  <select class="form-control form-select">
    <option>Monthly</option>
    <option>Yearly</option>
  </select>
</div>

Textarea — .form-control + .form-textarea, .form-textarea .form-textarea-error

<div class="max-w-md">
  <label class="form-label">Message</label>
  <textarea rows="3" placeholder="Leave a message" class="form-control form-textarea"></textarea>
</div>

Checkbox & Radio — .form-choice + .form-checkbox / .form-radio

<div class="space-y-3">
  <div class="flex items-center gap-2">
    <input type="checkbox" checked class="form-choice form-checkbox" id="ck1" />
    <label for="ck1" class="text-sm text-gray-700">I agree to the terms</label>
  </div>

  <div class="flex items-center gap-4">
    <div class="flex items-center gap-2">
      <input type="radio" name="plan" checked class="form-choice form-radio" id="r1" />
      <label for="r1" class="text-sm text-gray-700">Monthly</label>
    </div>
    <div class="flex items-center gap-2">
      <input type="radio" name="plan" class="form-choice form-radio" id="r2" />
      <label for="r2" class="text-sm text-gray-700">Yearly</label>
    </div>
  </div>
</div>

File upload — .form-file, .form-file-dropzone

<div class="max-w-sm space-y-4">
  <div>
    <label class="form-label">Upload file</label>
    <input type="file" class="form-file" />
  </div>
  <label class="form-file-dropzone">
    <div class="text-center">
      <p class="text-sm font-medium text-secondary-700">Drop files here</p>
      <p class="text-xs text-secondary-400">or click to browse</p>
    </div>
  </label>
</div>

Toggle switch — .form-toggle + .form-toggle-track

<div class="space-y-3">
  <label class="form-toggle">
    <input type="checkbox" checked class="peer sr-only" />
    <div class="form-toggle-track form-toggle-track-sm"></div>
    <span class="ml-3 text-sm text-gray-700">Small</span>
  </label>

  <label class="form-toggle">
    <input type="checkbox" checked class="peer sr-only" />
    <div class="form-toggle-track"></div>
    <span class="ml-3 text-sm text-gray-700">Default (enabled)</span>
  </label>

  <label class="form-toggle">
    <input type="checkbox" class="peer sr-only" />
    <div class="form-toggle-track"></div>
    <span class="ml-3 text-sm text-gray-700">Default (off)</span>
  </label>

  <label class="form-toggle">
    <input type="checkbox" checked class="peer sr-only" />
    <div class="form-toggle-track form-toggle-track-lg"></div>
    <span class="ml-3 text-sm text-gray-700">Large</span>
  </label>
</div>

Inline form row — .form-inline

<div class="max-w-md">
  <div class="form-inline">
    <input type="email" placeholder="Search customers" class="form-control form-input has-addon-right" />
    <button class="btn-danger form-addon-right">Search</button>
  </div>
</div>

Input addons — .form-addon

https://
@example.com
USD
<div class="max-w-sm space-y-3">
  <div class="form-addon">
    <span class="form-addon-left">https://</span>
    <input type="text" placeholder="yoursite.com" class="form-control form-input has-addon-left" />
  </div>
  <div class="form-addon">
    <input type="text" placeholder="username" class="form-control form-input has-addon-right" />
    <span class="form-addon-right">@example.com</span>
  </div>
  <div class="form-addon">
    <span class="form-addon-left form-addon-disabled">USD</span>
    <input type="text" placeholder="0.00" class="form-control form-input has-addon-left" disabled />
  </div>
</div>