import { RadiantElement } from '@ecopages/radiant'; import type { EventEmitter } from '@ecopages/radiant/tools/event-emitter'; export type RuiListboxProps = { value?: string; label?: string; disabled?: boolean; /** * When true, the listbox is owned by a parent (e.g. `rui-select`). Selection and * keyboard interaction are handled by the parent; border chrome is omitted so the * parent popup can provide it. */ embedded?: boolean; /** When set, overrides the default border (`true` when standalone, `false` when embedded). */ bordered?: boolean; }; export type RuiListboxChangeDetail = { value: string; }; /** * `` — a list of options where one may be selected. * * Implements the APG Listbox pattern with roving tabindex on `[role="option"]`. * The view-owned `.rui-listbox` shell carries presentation; this host coordinates * selection and keyboard interaction only. * * @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/ * * @element rui-listbox * * @attr {string} value - Selected option value. Default: `''`. * @attr {string} label - Accessible name for the list. Default: `''`. * @attr {boolean} disabled - Disable all selection. Default: `false`. * @attr {boolean} embedded - Parent-owned listbox: border chrome omitted, selection handled by the parent. Default: `false`. * @attr {boolean} bordered - Override the border (`true` standalone, `false` embedded). Default: follows `embedded`. * * @fires rui-change - Emitted when an option is selected; detail carries `value`. * * @cssclass rui-listbox - Scrollable option list surface (`role="listbox"`). * @cssclass rui-listbox--bordered - Bordered standalone listbox. */ export declare class RuiListbox extends RadiantElement { value: string; label: string; disabled: boolean; embedded: boolean; bordered: boolean | undefined; changeEvent: EventEmitter; protected onConnected(): void; onPropsUpdated(): void; private getOptions; private sync; private select; onOptionClick(event: Event): void; onOptionKeydown(event: KeyboardEvent): void; }