TextField
Label, description, validation, autocomplete and an IME-safe local value draft.
Use the web element directly without the semantic runtime.
A registered presentation adapter can bind this component to host-owned meaning and state.
The standard recipe resolver does not select this component automatically.
Import and live example#
One labelled display-name field with an initial value.
Interactive preview requires JavaScript.
View the complete example source
import {registerAeliqoElements} from "@varendo/web";
import {
AeliqoCheckboxElement,
AeliqoComboboxElement,
AeliqoDateFieldElement,
AeliqoDateRangeElement,
AeliqoFieldGroupElement,
AeliqoFileInputElement,
AeliqoFormElement,
AeliqoNumberFieldElement,
AeliqoRadioGroupElement,
AeliqoSearchFieldElement,
AeliqoSelectElement,
AeliqoSliderElement,
AeliqoSwitchElement,
AeliqoTextAreaElement,
AeliqoTextFieldElement,
type AeliqoOption,
} from "@varendo/web/inputs";
const options: readonly AeliqoOption[] = [
{value: "ada", label: "Ada Lovelace", description: "Research"},
{value: "grace", label: "Grace Hopper", description: "Product"},
{value: "lin", label: "Lin Chen", disabled: true},
];
registerAeliqoElements();
const host = document.querySelector<HTMLElement>("#aeliqo-example") ?? (() => {
const created = document.createElement("div");
created.id = "aeliqo-example";
(document.body ?? document.documentElement).append(created);
return created;
})();
function createCatalogRoot(container: HTMLElement): HTMLElement {
const root = document.createElement("div");
root.dataset.catalogSourceRoot = "true";
root.style.display = "grid";
root.style.gap = "12px";
container.append(root);
return root;
}
function createCatalogElement<T extends HTMLElement>(tagName: string, container: HTMLElement): T {
const element = document.createElement(tagName) as T;
element.setAttribute("data-aeliqo-theme", "light");
container.append(element);
return element;
}
function appendSlottedText(root: HTMLElement, slot: string, textContent: string): void {
const content = document.createElement("span");
content.slot = slot;
content.textContent = textContent;
root.append(content);
}
const root = createCatalogRoot(host);
(((root) => {
const element = createCatalogElement<AeliqoTextFieldElement>("aeliqo-text-field", root);
element.label = "Display name";
element.name = "displayName";
element.value = "Ada Lovelace";
element.description = "Used in the report header.";
element.autocomplete = "name";
}))(root);
Purpose#
A labelled single-line text input with description and validation feedback. The host can set value
to supply or revise the draft; user edits also update that local property and emit typed change and
commit events. The host decides what to retain or persist.
When to use it#
- You need one line of free text, such as a name, email, or title.
- The field needs a visible label, hint text, or validation message.
- The value benefits from browser autocomplete or IME composition.
- You want to supply an initial value and receive typed draft changes.
When to use a different component#
- Use TextArea when the value can span more than one line.
- Use SearchField when the text is a query the host runs.
- Use NumberField when the value must stay an exact number.
Properties and defaults#
Set value for the current draft or defaultValue for its initial value; user input updates the local value and the host owns validation and persistence.
| Property | Use and ownership | Declared type | Initial value |
|---|---|---|---|
label | Provides the visible label and accessible name for the component. | string | '' |
description | Provides supporting text associated with the control or value. | string | '' |
error | Provides the current validation or operation error associated with the control. | string | '' |
required | Marks the control as required for validation and native accessibility semantics. | boolean | false |
disabled | Prevents user interaction while keeping the control and its current value visible. | boolean | false |
readOnly | Keeps the current value focusable and readable while preventing edits. | boolean | false |
name | Provides the stable form or action name used by the host to identify this control. | string | '' |
autocomplete | Passes an autocomplete purpose to the native input so browsers can offer an appropriate saved value. | string | 'off' |
locale | Selects locale-sensitive formatting and parsing behavior. | string | 'en-US' |
validationState | Controls the current idle, pending, valid, or invalid validation state. | AeliqoValidationState | 'idle' |
validator | Runs host-provided synchronous validation for a proposed input value. | AeliqoValidator<T> | undefined | undefined |
value | Controls the current value. Apply accepted user proposals back to this property. | string | '' |
defaultValue | Provides the initial uncontrolled value. Later updates come from component interaction. | string | '' |
inputType | Supplies input type to the component as application-owned input. | AeliqoTextFieldInputType | 'text' |
placeholder | Provides a short input hint when the current draft is empty; it does not replace a visible label. | string | '' |
maxLength | Sets the upper bound for max length. | inferred from initializer | -1 |
minLength | Sets the lower bound for min length. | inferred from initializer | -1 |
pattern | Provides the native validation pattern for text input. | string | '' |
inputMode | Supplies input mode to the component as application-owned input. | string | 'text' |
rows | Supplies the bounded records to render. The component never fetches or widens this set. | number | 4 |
spellcheck | Enables or disables browser spelling suggestions for text drafts. | boolean | true |
Events#
| Event | Payload | Emitted | Application responsibility |
|---|---|---|---|
aeliqo-input-change | {source, value, composing?} | Whenever the user proposes a draft value change. | Validate or store the draft and reassign controlled value or checked state. |
aeliqo-input-commit | {source, value} | After explicit commit, blur, or Enter where the control supports it. | Accept or reject the committed value and update authoritative form state. |
aeliqo-validation | {source, state, message} | When validation enters pending, valid, or invalid state. | Merge the result with application validation and display authoritative errors. |
Events cross the component boundary as user proposals. Validate their detail and current authority before applying a business effect.
Listen for aeliqo-input-change
const element = document.querySelector('aeliqo-text-field');<p>element?.addEventListener('aeliqo-input-change', (event) => {
const proposal = (event as CustomEvent<unknown>).detail;
// Validate the proposal, update host state, then assign controlled properties.
applyProposal(proposal);
});Listen for aeliqo-input-commit
const element = document.querySelector('aeliqo-text-field');</p>
<p>element?.addEventListener('aeliqo-input-commit', (event) => {
const proposal = (event as CustomEvent<unknown>).detail;
// Validate the proposal, update host state, then assign controlled properties.
applyProposal(proposal);
});Listen for aeliqo-validation
const element = document.querySelector('aeliqo-text-field');</p>
<p>element?.addEventListener('aeliqo-validation', (event) => {
const proposal = (event as CustomEvent<unknown>).detail;
// Validate the proposal, update host state, then assign controlled properties.
applyProposal(proposal);
});States and failure handling#
Relevant states:
- ready
- disabled
- read-only
- invalid
- pending
Expected result: The labelled text draft is editable and emits typed change/commit proposals.
Keyboard, focus, and accessibility#
Keyboard behavior:
- Tab
- Type and edit
- Enter commits where configured
- IME composition
Exposed semantics:
- aria-describedby
- aria-invalid
- aria-readonly
- input
- role
- textarea
Responsive behavior#
Keep the label, description, and error visible when the form narrows. Put the field on its own row when the label is long.
Style hooks#
- Shadow parts:
description,error,field,input,label,pending - Varendo design tokens referenced:
--aeliqo-color-muted
Performance limits#
- Public workload controls: `maxLength` (default -1).
Related components#
Generated TypeScript declaration#
View generated declaration
export declare class AeliqoTextFieldElement extends AeliqoTextControlElement {
protected readonly multiline = false;
}Version#
This page documents the Varendo 0.6 component contract.
