import type { ComponentType } from 'svelte';
import { UIType } from '../../types';
import { SubMenuIds } from './constants/subMenuIds';
interface BaseMenuItem {
    id: string;
    weight: number;
    ariaLabel?: string;
    label: string;
}
interface BaseSettingsMenuItem extends BaseMenuItem {
    icon: ComponentType | string;
    isHiddenFor?: UIType[];
}
export declare enum MenuItemType {
    OPEN_SUB_MENU = "OPEN_SUB_MENU",
    CLICK = "CLICK",
    SWITCH = "SWITCH"
}
export declare enum SubMenuItemType {
    OPEN_SUB_MENU = "OPEN_SUB_MENU",
    SELECT_VALUE = "SELECT_VALUE"
}
export interface OpenSubMenuSettingsMenuItem extends BaseSettingsMenuItem {
    type: MenuItemType.OPEN_SUB_MENU;
    subMenuId: SubMenuIds;
    value: string;
    valueComponent?: ComponentType;
    getSubItemForFocus: () => HTMLLIElement;
}
export interface ClickSettingsMenuItem extends BaseSettingsMenuItem {
    type: MenuItemType.CLICK;
    onClick: () => void;
}
export interface SwitchSettingsMenuItem extends BaseSettingsMenuItem {
    type: MenuItemType.SWITCH;
    onClick: (enabled: boolean) => void;
    enabled: boolean;
    tooltipText?: string;
    maxTooltipWidth?: number;
}
export type AdditionalSwitchSettingsMenuItem = Omit<SwitchSettingsMenuItem, 'icon' | 'onClick'> & {
    icon: string;
    onChangeEnabled: (enabled: boolean) => void;
};
export type AdditionalClickSettingsMenuItem = Omit<SwitchSettingsMenuItem, 'icon'> & {
    icon: string;
};
export type SettingsMenuItem = OpenSubMenuSettingsMenuItem | ClickSettingsMenuItem | SwitchSettingsMenuItem;
export type AdditionalSettingsMenuItem = AdditionalSwitchSettingsMenuItem | AdditionalClickSettingsMenuItem;
export interface SelectValueSubMenuItem<T = any, U = any> {
    type: SubMenuItemType.SELECT_VALUE;
    value: T;
    dataValue?: T | keyof T;
    valueComponent?: ComponentType;
    valueComponentParams?: {
        [key: string]: U;
    };
    ariaLabel?: string;
    label?: string;
    selected?: boolean;
    selectItem: (value: T) => void;
}
export interface OpenSubMenuSubMenuItem {
    type: SubMenuItemType.OPEN_SUB_MENU;
    ariaLabel?: string;
    label: string;
    id: string;
    subMenuId: SubMenuIds;
    getSubItemForFocus: () => HTMLLIElement;
}
export type SubMenuItem = SelectValueSubMenuItem | OpenSubMenuSubMenuItem;
export interface SubMenuList {
    id: SubMenuIds;
    parentItemId: string;
    items: SubMenuItem[];
    returnFromSubMenu?: () => void;
    ariaLabelReturnFromSubMenu?: string;
    title: string;
    closeSettingsMenu: () => void;
    minWidth?: number;
}
export interface ContextMenuItem extends BaseMenuItem {
    onClick: () => void;
}
export type AdditionalContextMenuItem = ContextMenuItem;
export {};
