import { MouseEvent } from 'react';
import { SidebarMenuLinkProps } from './sidebar-menu-link';
import { FormFieldValidity } from '../form-field';
export type LevelType = {
    /** All levels are collapsible by default */
    nonCollapsible?: Array<number>;
    /** All levels are selectable by default */
    nonSelectable?: Array<number>;
};
export type SidebarMenuItemKey = string | number;
export interface LinkComponentProps extends SidebarMenuLinkProps {
    className: string;
    testId: string;
}
export type OnClickHandler = (e: MouseEvent<HTMLAnchorElement>, key: number | string) => void;
export type SidebarMenuOptions = {
    /** Unique identifier of the item */
    key: SidebarMenuItemKey;
    /** Visible item name */
    name: string;
    className?: string;
    /** Link to section/page used as href attr */
    link?: string;
    /** Link to section/page used as route, should be implemented with linkComponent */
    route?: string;
    /** Defines if navigation is external or no. Used to define anchor _target attr */
    isExternal?: boolean;
    isDisabled?: boolean;
    isEditable?: boolean;
    isDeletable?: boolean;
    /** (event, key) => {} */
    onClick?: OnClickHandler;
    testId?: string;
    subOptions?: SidebarMenuOptions[];
    validity?: FormFieldValidity;
    value?: string;
    helperText?: string;
    shouldNotTruncate?: boolean;
};
export interface SidebarMenuOptionsFlat extends SidebarMenuOptions {
    parentKey?: SidebarMenuItemKey | null;
    level: number;
}
export type OnEditPayload = {
    key: SidebarMenuItemKey;
    val: string;
    level: number;
};
export type OnChangePayload = {
    key: SidebarMenuItemKey;
    val: string;
    level: number;
};
export type OnDeletePayload = {
    key: SidebarMenuItemKey;
    level: number;
};
export type SidebarMenuItemControlsProps = {
    onDelete?: ({ key, level }: OnDeletePayload) => void;
    onEdit?: () => void;
    itemKey: SidebarMenuItemKey;
    isEditable: boolean;
    isDeletable: boolean;
    level: number;
    deleteAriaLabel: string;
    editAriaLabel: string;
};
