export interface MenuItem extends Omit<Marko.HTML.Button, `on${string}`> {
    href?: string;
    value?: string;
    renderBody?: Marko.Body;
    separator?: boolean;
    checked?: boolean;
    badgeNumber?: number;
}
export interface BaseMenuInput {
    item?: Marko.AttrTag<MenuItem>;
    type?: string;
    variant?: string;
}
export interface MenuState {
    checkedIndex?: number;
    checkedItems?: boolean[];
    isSelected: boolean;
    selectedCount: number;
}
declare const Component: typeof Marko.Component;
export declare class MenuUtils<Input extends BaseMenuInput, State extends MenuState> extends Component<Input, State> {
    type?: string;
    items: MenuItem[];
    isRadio(): boolean;
    getCheckedValues(): (string | undefined)[];
    getCheckedIndexes(): number[] | undefined;
    getInputState(input: Input): {
        checkedIndex: number;
        isSelected: boolean;
        selectedCount: number;
        checkedItems?: undefined;
    } | {
        checkedItems: boolean[];
        isSelected: boolean;
        selectedCount: number;
        checkedIndex?: undefined;
    };
    getSelectedCount(checkedItems?: boolean[]): number;
    isChecked(index: number): boolean;
    isDisabled(index: number): import("marko/tags-html").AttrBoolean;
    toggleChecked(index: number | number[]): void;
    getSeparatorMap(input: Input): Record<number, boolean>;
}
export default function setupMenu(instance: any): void;
export {};
