/** * 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 `