Concorde UI component — Input. sonic-input wraps a native <input> with a label, a description, prefix and suffix slots and Concorde sizes. Native attributes (type, placeholder, pattern, min, max, …) are passed through. Bind the val Doc ID: core/components/ui/form/input/input. Keywords: Concorde, supersoniks, core/components/ui/form/input/input, input, Input, UI component, form, sonic-input, web component, , type, placeholder, pattern, min, max, formDataProvider, name. URL: https://concorde.supersoniks.org/core/components/ui/form/input.
Input
sonic-input wraps a native <input> with a label, a description, prefix and suffix slots and Concorde sizes. Native attributes (type, placeholder, pattern, min, max, …) are passed through. Bind the value to a store with formDataProvider and name, set on the field or on an ancestor.
Basic example
<sonic-input label="Name" placeholder="Ada Lindqvist" description="As it appears on your passport."></sonic-input>
Type
With no type, the input is text. Text-like types (email, password, date, number, color, search, …) are supported; radio, checkbox and range have dedicated components. password adds a visibility toggle.
<div class="grid gap-3">
<sonic-input type="text" label="Text"></sonic-input>
<sonic-input type="email" label="Email" placeholder="ada@example.com"></sonic-input>
<sonic-input type="password" label="Password"></sonic-input>
<sonic-input type="date" label="Date"></sonic-input>
<sonic-input type="number" label="Number"></sonic-input>
<sonic-input type="color" label="Color" value="#ffcc00"></sonic-input>
</div>
Size and status
With no size, the input uses the base scale. status colors the field; it defaults to default.
<div class="grid gap-3">
<sonic-input size="2xs" value="2xs"></sonic-input>
<sonic-input size="xs" value="xs"></sonic-input>
<sonic-input size="sm" value="sm"></sonic-input>
<sonic-input value="default"></sonic-input>
<sonic-input size="lg" value="lg"></sonic-input>
<sonic-input size="xl" value="xl"></sonic-input>
<sonic-input size="2xl" value="2xl"></sonic-input>
<sonic-input status="success" value="success"></sonic-input>
<sonic-input status="error" value="error"></sonic-input>
<sonic-input status="warning" value="warning"></sonic-input>
<sonic-input status="info" value="info"></sonic-input>
</div>
Validation
required, pattern, minlength and the native type rules are checked by the browser. Feedback styles apply once the field is touched (after blur).
<sonic-input required type="email" label="Email" placeholder="ada@example.com"></sonic-input>
Prefix and suffix
Slotted content sits outside the field by default. Set inlineContent to draw it inside; clicking it then focuses the input unless disableInlineContentFocus is set.
<div class="grid grid-cols-2 gap-3">
<sonic-input type="search" label="Search" placeholder="Search flights">
<sonic-icon library="iconoir" name="search" slot="prefix"></sonic-icon>
</sonic-input>
<sonic-input inlineContent type="number" label="Checked bags" placeholder="0">
<sonic-badge slot="suffix" type="danger" size="sm">4 max</sonic-badge>
</sonic-input>
</div>
Form data
Fields sharing the same formDataProvider and name stay in sync. The attribute is looked up on ancestors, so set it once on a wrapper.
<div formDataProvider="inputDemoForm" class="grid grid-cols-2 gap-3">
<sonic-input name="city" label="City" value="Lisbon"></sonic-input>
<sonic-input name="city" label="Same field"></sonic-input>
</div>
sameValueAs sets pattern to the value of another field in the same store, for confirmation fields.
<div formDataProvider="inputDemoPassword" class="grid grid-cols-2 gap-3">
<sonic-input type="password" name="password" label="Password"></sonic-input>
<sonic-input type="password" name="confirm" sameValueAs="password" label="Confirm password"></sonic-input>
</div>
Filtering a list
The input writes q to the store used as dataFilterProvider by a sonic-queue; inputDelayMs debounces the requests while typing. Search a city, an airport or a flight number.
API reference
| Attribute | Values | Description |
|---|---|---|
type |
text · email · password · number · date · search · color · … (default text) |
Native input type |
size |
2xs … 2xl (default: base scale) |
Typography and padding |
status |
default · success · error · warning · info |
Field color |
label |
string (HTML) | Label; or use the label slot |
description |
string (HTML) | Help text under the field; or use the description slot |
name |
string | Key in the form store (dot notation allowed) |
value |
string | Initial value |
formDataProvider |
string | Store id; inherited from the closest ancestor |
placeholder |
string | Native placeholder |
required · disabled · readonly · autofocus |
boolean | Native flags |
pattern · min · max · step · minlength · maxlength |
native | Native constraints |
inputmode · autocomplete · list · src · tabindex |
native | Passed to the inner <input> |
data-aria-label · data-aria-labelledby |
string | Forwarded as aria-label and aria-labelledby |
inlineContent |
boolean | Renders prefix and suffix inside the field (forced for password) |
disableInlineContentFocus |
boolean | Clicking inline content does not focus the input |
showPasswordToggle |
boolean | Visibility toggle (forced for password) |
sameValueAs |
string | Name of a field whose value becomes this field's pattern |
inputDelayMs |
number | Debounces value updates while typing |
autoActive |
boolean | Sets active whenever the value is not empty |
active |
boolean | Reflected state for styling |
unsetOnDisconnect |
boolean | Clears the store value when the element is removed |
forceAutoFill |
boolean | Lets properties override type / label / description / name attributes |
| Slot | Description |
|---|---|
label |
Rich label content |
description |
Rich help text |
prefix |
Content before the input |
suffix |
Content after the input |
list |
Extra content after the description |