/**
* TyRadio + TyRadioGroup Web Components
*
* Exclusive selection within a group. ty-radio-group manages the selection
* value and form integration; ty-radio is the individual choice element.
*
* Composition (ty-multiselect-style):
*
* Free
* Pro
* Team
*
*
* Keyboard:
* - Tab focuses the group's currently-selected (or first) radio
* - Arrow keys move focus AND selection within the group (per W3C ARIA)
* - Space/Enter selects the focused radio
*/
import type { Flavor, Size } from "../types/common.js";
import { TyComponent } from "../base/ty-component.js";
import type { PropertyChange } from "../utils/property-manager.js";
interface RadioState {
listenersSetup: boolean;
}
export interface TyRadioElement extends HTMLElement {
value: string;
checked: boolean;
disabled: boolean;
size: Size;
flavor: Flavor;
}
export declare class TyRadio extends TyComponent implements TyRadioElement {
protected static properties: {
value: {
type: "string";
default: string;
};
checked: {
type: "boolean";
visual: boolean;
default: boolean;
};
disabled: {
type: "boolean";
visual: boolean;
default: boolean;
};
size: {
type: "string";
visual: boolean;
default: string;
};
flavor: {
type: "string";
visual: boolean;
default: string;
};
};
private _listenersSetup;
private _clickHandler;
private _focusHandler;
private _blurHandler;
constructor();
protected onConnect(): void;
protected onDisconnect(): void;
protected onPropertiesChanged(_changes: PropertyChange[]): void;
private buildClassList;
private handleClick;
private removeEventListeners;
private setupEventListeners;
protected render(): void;
get value(): string;
set value(v: string);
get checked(): boolean;
set checked(v: boolean);
get disabled(): boolean;
set disabled(v: boolean);
get size(): Size;
set size(v: Size);
get flavor(): Flavor;
set flavor(v: Flavor);
}
interface RadioGroupState {
listenersSetup: boolean;
}
export interface TyRadioGroupElement extends HTMLElement {
value: string;
name: string;
label: string;
disabled: boolean;
required: boolean;
error: string;
orientation: "vertical" | "horizontal";
size: Size;
flavor: Flavor;
form: HTMLFormElement | null;
}
export declare class TyRadioGroup extends TyComponent implements TyRadioGroupElement {
static formAssociated: boolean;
protected static properties: {
value: {
type: "string";
visual: boolean;
formValue: boolean;
emitChange: boolean;
default: string;
};
name: {
type: "string";
default: string;
};
label: {
type: "string";
visual: boolean;
default: string;
};
disabled: {
type: "boolean";
visual: boolean;
default: boolean;
};
required: {
type: "boolean";
visual: boolean;
default: boolean;
};
error: {
type: "string";
visual: boolean;
default: string;
};
orientation: {
type: "string";
visual: boolean;
default: string;
};
size: {
type: "string";
visual: boolean;
default: string;
};
flavor: {
type: "string";
visual: boolean;
default: string;
};
};
private _listenersSetup;
private _selectHandler;
private _keydownHandler;
constructor();
protected onConnect(): void;
protected onDisconnect(): void;
protected onPropertiesChanged(changes: PropertyChange[]): void;
protected getFormValue(): FormDataEntryValue | null;
/**
* Find ty-radio descendants in this group's light DOM. Searches deeply
* because consumers may wrap each radio in a `