import type { PropertyValues, TemplateResult } from "lit"; import { XmField } from "../field/index.js"; import "../primitives/index.js"; import type { XmOverlay } from "../overlay/index.js"; export interface SelectOption { label: string; value: string | number; disabled?: boolean; } /** * @fires change - Fired on commit with the new value in `detail`. */ export declare class XmSelect extends XmField { static styles: CSSStyleSheet[]; /** The option model — `{ label, value, disabled? }` shared across select / autocomplete / radio-group so one host handler is safe. */ options: SelectOption[]; /** Shown on the closed control when nothing is selected. */ placeholder: string; protected _open: boolean; protected _activeIndex: number; /** The selected option's PRIMITIVE value (string | number), or null. */ protected _selectedValue: string | number | null; protected _control: HTMLElement | null; protected _overlay: XmOverlay | null; private _typeahead; private _typeaheadTimer; connectedCallback(): void; protected willUpdate(changed: PropertyValues): void; /** Live read for the closed control + xm-form. The inherited string `value` stays in sync; this returns the typed primitive for consumers that want it. */ get selectedValue(): string | number | null; private get _enabledIndexes(); private get _selectedLabel(); disconnectedCallback(): void; protected updated(changed: PropertyValues): void; private _onDocPointerDown; private _openList; private _closeList; private _onOverlayClose; private _commitSelection; private _selectActive; private _selectOption; private _onControlKeydown; private _onListKeydown; private _nextEnabled; private _typeAhead; protected renderControl(): TemplateResult; private _renderOption; } declare global { interface HTMLElementTagNameMap { "xm-select": XmSelect; } }