Components
Forms
Styled inputs, selects, textareas, validation states, input groups,
and layout options — all activated by wrapping in .form.
Basics
Standard Form
<form class="form">
<label>
Email
<input type="email" placeholder="you@example.com">
</label>
<label>
Message
<textarea></textarea>
</label>
<button class="btn btn-blue" type="submit">Send</button>
</form> Sizes
Input Sizes
Validation
Input States
<input type="text" class="input-error" value="Invalid">
<input type="text" class="input-success" value="Valid">
<input type="text" class="input-gray" placeholder="Neutral"> Groups
Input Groups
Wrap inputs with .input-groups and use .input-prepend / .input-append for text addons.
Buttons must be wrapped in .input-append or .btn-append — a bare button directly inside .input-groups won't attach correctly.
Text Addons
<!-- Text addons -->
<div class="input-groups">
<span class="input-prepend">$</span>
<input type="text" placeholder="Amount">
<span class="input-append">.00</span>
</div>
<div class="input-groups">
<span class="input-prepend">https://</span>
<input type="text" placeholder="example.com">
</div> Button Addons
Use .input-append or .btn-append to attach a button. Outline buttons automatically match the input border, and button scale transforms are disabled inside input groups.
<!-- Button via input-append -->
<div class="input-groups">
<input type="text" placeholder="Search...">
<span class="input-append">
<button class="btn btn-blue">Search</button>
</span>
</div>
<!-- Button via btn-append (also works with outline buttons) -->
<div class="input-groups">
<input type="text" placeholder="Enter URL">
<div class="btn-append">
<button class="btn btn-primary-outline">Go</button>
</div>
</div> Controls
Checkboxes & Radios
Layouts
Form Layouts
Inline Form
<form class="form form-inline">
<input type="text" placeholder="Name">
<input type="email" placeholder="Email">
<button class="btn btn-blue">Subscribe</button>
</form> Reference
Form Class Reference
Layout
form | Base wrapper — enables styled inputs |
form-inline | Inline horizontal form |
form-inline-list | Inline form as list |
form-list | Vertical stacked form list |
form-desc | Help/description text below inputs |
Input Variants
input-search | Rounded pill-shaped search input |
input-on-black | Input for dark backgrounds |
select-outlined | Transparent select with visible border |
btn-append | Button appended to input group |
Autocomplete & Typeahead
autocomplete | Autocomplete dropdown container |
typeahead | Typeahead wrapper (alias: livesearch-container) |
typeahead-results | Results dropdown |
typeahead-empty | Empty results message |
filterbox | Filterable input wrapper |
filterbox-list | Filter dropdown list |
Multi-select
multiselect | Multi-select wrapper |
multiselect-tags | Tag container |
multiselect-tag | Individual tag |
multiselect-results | Results dropdown |
File Upload
tools-droparea | Drag-and-drop upload area |
tools-droparea-placeholder | Placeholder text |
Native
Date & Time Pickers
Native HTML date and time inputs are styled automatically by ply
inside a .form wrapper. No JavaScript datepicker library needed — the
browser provides an accessible, localizable picker.
<form class="form">
<label>
Date
<input type="date">
</label>
<label>
Date & Time
<input type="datetime-local">
</label>
<label>
Time
<input type="time">
</label>
<label>
Month
<input type="month">
</label>
</form> With Validation States
<label>
Start Date
<input type="date" class="input-success" value="2026-03-01">
</label>
<span class="success">Valid date</span>
<label>
End Date
<input type="date" class="input-error" value="2026-02-15">
</label>
<span class="error">End must be after start</span> Modal
Dialog Element
Native HTML dialog element, styled automatically by ply.
Multi-Step
Step Indicators
Use <ol class="steps"> with <li class="step"> children.
Mark the current step with active and previous steps with completed.
- Account
- Profile
- Payment
- Confirm
<ol class="steps">
<li class="step completed"><span class="step-label">Account</span></li>
<li class="step completed"><span class="step-label">Profile</span></li>
<li class="step active"><span class="step-label">Payment</span></li>
<li class="step"><span class="step-label">Confirm</span></li>
</ol> States
Step States
- Details
- Verification
- Review
- Submit
<li class="step completed">...</li> <!-- Checkmark -->
<li class="step step-error">...</li> <!-- Error -->
<li class="step active">...</li> <!-- Current (blue) -->
<li class="step">...</li> <!-- Upcoming (gray) --> Vertical
Vertical Steps
- Create account Set up your email and password
- Add team members Invite colleagues to your workspace
- Configure integrations Connect your tools
<ol class="steps steps-vertical">
<li class="step completed">
<div class="step-content">
<span class="step-label">Create account</span>
<span class="step-desc">Set up your email and password</span>
</div>
</li>
<li class="step active">...</li>
</ol> Example
Full Multi-Step Form
- Account
- Profile
- Confirm
<ol class="steps">
<li class="step completed">...</li>
<li class="step active">...</li>
<li class="step">...</li>
</ol>
<div class="step-panel active">
<form class="form">...</form>
</div>
<div class="step-nav">
<button class="btn btn-secondary">Back</button>
<button class="btn btn-primary">Continue</button>
</div> Next
Next Steps
Add navigation to your layout, or display data with tables.