import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraSize}from'../../../internal/variants.js';import type{EmojiPickerItem,EmojiPickerGroup}from'./emoji-types.js';export type{EmojiPickerItem,EmojiPickerGroup};export interface LyraEmojiPickerEventMap{'lr-invalid':CustomEvent;input:InputEvent;change:Event;blur:FocusEvent;focus:FocusEvent; /** Fired when an emoji is picked. `detail.value` is the picked glyph. */ 'lr-input':CustomEvent<{value:string;}>; /** Fired when an emoji pick is committed. `detail.value` is the picked glyph. */ 'lr-change':CustomEvent<{value:string;}>;}declare class EmojiPickerBase extends LyraElement{}declare const LyraEmojiPicker_base:typeof EmojiPickerBase&(new(...args:any[])=>import("../../../lyra.js").FormAssociatedInterface &import("../../../internal/form-associated.js").FormAssociatedSubclassInterface); /** * `` — a searchable, keyboard-navigable, form-associated emoji picker. In the * same "zero/optional-peer dependency" spirit as ``/``: `groups` is * fully consumer-suppliable (this component ships no emoji data of its own), with an *optional* * convenience auto-loader for a default set — see `emoji-data-loader.ts` and the class doc there for * exactly what that covers. * * The auto-loader fails *closed and visibly*: when the optional `emoji-picker-element-data` peer * cannot be loaded, the grid renders a distinct localized `[part="load-error"]` surface in place of * the ordinary `[part="empty"]` message, so a skipped install is distinguishable at a glance from a * genuine zero-match search or a deliberate `groups = []` opt-out, and announces the same message * once through the document's shared assertive live region. Assigning `groups` afterwards clears * it. * * Keyboard model: the grid is a roving-tabindex listbox (a single Tab stop — only the active emoji * is tabbable). Arrow keys move the active option (Left/Right follow reading direction and swap * under RTL; Up/Down move by one visual row, measured from the live wrap layout), Home/End jump to * the first/last option, and Enter/Space picks. The search input doubles as a `role="combobox"` * over the same listbox: the arrow keys and Enter also work there while focus stays in the input, * with `aria-activedescendant` tracking the active option. Composing keyboard events remain with * text editing and do not navigate or pick an emoji. Large data sets automatically window * their visible rows so scrolling does not create one button per supplied emoji in the DOM. * Replacing `groups` while an emoji option owns focus preserves that item when its object remains * present, otherwise focus moves to the nearest surviving option; search or external focus is * never pulled into the grid by a controlled collection update. Roving navigation to an * off-window option materializes its virtual row before transferring focus. Each explicit groups * assignment snapshots current item content, including reused source objects; earlier snapshots * remain frozen. Built-in headings follow live localization through filtering and windowed rows, * while caller-authored headings remain literal. * * Ships the same opt-in `label`/`hint`/`errorText` form-control chrome as ``/ * `` (props + matching named slots + `form-control`/`form-control-label`/`hint`/ * `error` parts) — left unset, the chrome stays hidden. When `label` (or the `label` slot) is set * and `aria-label`/`accessibleLabel` is not, the grid's accessible name switches from the * localized default to `aria-labelledby` pointing at the visible label, mirroring * ``'s identical `accessibleLabel`-wins-over-`aria-labelledby` precedence. * Removing a chrome text attribute hides its empty chrome without changing property readback. * Host `aria-describedby` references describe the value-owning listbox before local error/hint * guidance; search retains its separate description ownership. Form reset clears interaction * state and restores the default value while required and custom validity constraints remain. * * `disabled` (from the `FormAssociated` mixin) gates every self-rendered interactive * sub-control — the search input and every emoji button — not just one of them. * * Component-scoped theme inputs remain undeclared on the host, so values inherited from an * ancestor theme wrapper override the active size tier. A value set directly on the picker still * wins through normal custom-property inheritance. * * @customElement lr-emoji-picker * @event input - Native `InputEvent` emitted in the host's current owner realm after a user pick. * @event change - Native commit `Event` emitted in the host's current owner realm with `input`. * @event lr-input - An emoji was picked. `detail: { value }`. * @event lr-change - An emoji pick was committed. `detail: { value }`. * @event blur - Native owner-realm `FocusEvent` relayed from the internal search input. * @event focus - Native owner-realm `FocusEvent` relayed from the internal search input. * @event lr-invalid - The emoji picker failed a validity check. Cancelable — preventing this * alias also prevents the native `invalid` event that produced it. * @slot label - Custom label content. * @slot hint - Custom hint content. * @slot error - Custom error content. * @csspart form-control - The outer wrapper around label, base, error and hint. * @csspart form-control-label - The visible label. * @csspart base - The wrapper around the search input and grid. * @csspart search - The search/filter `` (`role="combobox"` over the grid). * @csspart search-wrapper - The row wrapper around `search` and `search-clear`. * @csspart search-clear - The button that clears the search field, replacing the native * search-cancel glyph suppressed by this field's own reset; rendered only while it has a value. * @csspart grid - The keyboard-navigable emoji grid. It scrolls only in the block axis and clips * inline overflow, avoiding a second scrollbar when the allocation is narrower than one option. * @csspart group-label - Each group's heading, rendered above its emojis. * @csspart emoji - Each emoji's own `