import { createLinear } from "makeup-roving-tabindex";
import { MenuUtils, type BaseMenuInput, type MenuState } from "../../common/menu-utils";
import type { RadioEvent } from "../ebay-radio/component-browser";
import type { WithNormalizedProps } from "../../global";
export interface FilterMenuEvent<T extends Event = Event> {
    el?: Element;
    checked?: string[];
    checkedIndex?: number[];
    originalEvent: T;
    index?: number;
    currentChecked?: boolean;
}
interface FilterMenuInput extends BaseMenuInput, Omit<Marko.HTML.Span, `on${string}`> {
    variant?: "form";
    "class-prefix"?: string;
    "form-name"?: string;
    "form-action"?: string;
    "form-method"?: string;
    "footer-text"?: string;
    "a11y-footer-text"?: Marko.HTMLAttributes["aria-label"];
    footer?: WithNormalizedProps<Omit<Marko.HTML.Button, `on${string}`> & {
        "a11y-footer-text"?: Marko.HTMLAttributes["aria-label"];
    }>;
    "search-header-value"?: string;
    "search-header-placeholder-text"?: string;
    "a11y-search-header-clear-text"?: Marko.HTMLAttributes["aria-label"];
    "render-body"?: Marko.Body;
    "on-footer-click"?: (event: FilterMenuEvent) => void;
    "on-form-submit"?: (event: FilterMenuEvent) => void;
    "on-change"?: (event: FilterMenuEvent) => void;
    "on-keydown"?: (event: FilterMenuEvent) => void;
    "on-search-change"?: (value: string) => void;
}
export interface Input extends WithNormalizedProps<FilterMenuInput> {
}
export interface State extends MenuState {
    searchTerm?: string;
}
export default class extends MenuUtils<Input, State> {
    _rovingTabIndex: ReturnType<typeof createLinear>;
    lastTabIndexPosition: number;
    onCreate(): void;
    resetIndex(): void;
    handleSearch(e: InputEvent): void;
    clearSearch(): void;
    handleRadioClick(index: number, ev: RadioEvent, itemEl: Element): void;
    handleItemClick(index: number, ev: MouseEvent, itemEl: Element): void;
    handleItemKeydown(index: number, ev: KeyboardEvent, itemEl: Element): void;
    handleFooterButtonClick(originalEvent: Event): void;
    handleFormSubmit(originalEvent: Event): void;
    onInput(input: Input): void;
    onMount(): void;
    onUpdate(): void;
    onRender(): void;
    onDestroy(): void;
    _toggleItemChecked(index: number, originalEvent: Event, el: Element): void;
    _emitComponentEvent(eventType: string, originalEvent: Event, args?: {
        el?: Element;
        index?: number;
    }): void;
    _setupMakeup(): void;
    _cleanupMakeup(): void;
}
export {};
