import * as React from 'react'; import {StyletronComponent} from 'styletron-react'; import {Override} from '../overrides'; export interface KEY_STRINGS { ArrowUp: 'ArrowUp'; ArrowDown: 'ArrowDown'; ArrowLeft: 'ArrowLeft'; ArrowRight: 'ArrowRight'; Enter: 'Enter'; Space: ' '; Escape: 'Escape'; Backspace: 'Backspace'; } export interface STATE_CHANGE_TYPES { click: 'click'; moveUp: 'moveUp'; moveDown: 'moveDown'; mouseEnter: 'mouseEnter'; focus: 'focus'; reset: 'reset'; character: 'character'; enter: 'enter'; } export interface OPTION_LIST_SIZE { default: 'default'; compact: 'compact'; } export interface MenuOverrides { EmptyState?: Override; List?: Override; Option?: Override; ListItem?: Override; } export type BaseMenuPropsT = { renderAll?: boolean; }; export interface MenuOverrides { EmptyState?: Override; List?: Override; Option?: Override; ListItem?: Override; OptgroupHeader?: Override; } export interface MenuProps extends BaseMenuPropsT { size?: keyof OPTION_LIST_SIZE; overrides?: MenuOverrides; } export type ItemT = any; export type ArrayItemsT = ItemT[]; export type GroupedItemsT = { __ungrouped: ArrayItemsT; [key: string]: ArrayItemsT; }; export type ItemsT = ArrayItemsT | GroupedItemsT; export type StatefulMenuProps = StatefulContainerProps & MenuProps; export class StatefulMenu extends React.PureComponent {} export interface RenderItemProps { disabled?: boolean; ref?: React.Ref; id?: string; isFocused?: boolean; isHighlighted?: boolean; resetMenu?: () => any; } export type OnItemSelect = (args: { item: any; event?: React.SyntheticEvent | KeyboardEvent; }) => any; export type StateReducer = ( changeType: STATE_CHANGE_TYPES[keyof STATE_CHANGE_TYPES], changes: StatefulContainerState, currentState: StatefulContainerState, ) => StatefulContainerState; export type GetRequiredItemProps = ( item: any, index: number, ) => RenderItemProps; export type RenderProps = StatefulContainerState & { items: ItemsT; getRequiredItemProps: GetRequiredItemProps; }; export interface StatefulContainerProps { items: ItemsT; initialState?: StatefulContainerState; stateReducer?: StateReducer; getRequiredItemProps?: GetRequiredItemProps; onActiveDescendantChange?: (id?: string) => void; onItemSelect?: OnItemSelect; rootRef?: React.Ref; keyboardControlNode?: React.Ref; typeAhead?: boolean; children?: (args: RenderProps) => React.ReactNode; addMenuToNesting?: (ref: React.Ref) => void; removeMenuFromNesting?: (ref: React.Ref) => void; getParentMenu?: (ref: React.Ref) => void; getChildMenu?: (ref: React.Ref) => void; } export interface StatefulContainerState { activedescendantId?: string; highlightedIndex: number; isFocused: boolean; } export class StatefulContainer extends React.Component< StatefulContainerProps, StatefulContainerState > {} export interface OptionListProps extends BaseMenuPropsT { item: any; getItemLabel: (item: any) => React.ReactNode; getChildMenu?: (item: any) => React.ReactNode; onMouseEnter?: (event: MouseEvent) => any; size?: OPTION_LIST_SIZE[keyof OPTION_LIST_SIZE]; overrides?: { ListItem?: Override; ChildMenuPopover?: Override; }; renderHrefAsAnchor?: boolean; resetMenu?: () => void; $isHighlighted?: boolean; $isFocused?: boolean; } export const OptionList: React.FC; export interface OptionProfileProps extends BaseMenuPropsT { item: any; getChildMenu?: (item: any) => React.ReactNode; getProfileItemLabels: ( item: any, ) => {title?: string; subtitle?: string; body?: string}; getProfileItemImg: (item: any) => string | React.ComponentType; getProfileItemImgText: (item: any) => string; overrides?: { ListItemProfile?: Override; ProfileImgContainer?: Override; ProfileImg?: Override; ProfileLabelsContainer?: Override; ProfileTitle?: Override; ProfileSubtitle?: Override; ProfileBody?: Override; ChildMenuPopover?: Override; }; resetMenu?: () => void; $isHighlighted?: boolean; } export const OptionProfile: React.FC; export interface SharedStatelessProps { activedescendantId?: string; getRequiredItemProps?: (item: any, index: number) => RenderItemProps; highlightedIndex?: number; items: ItemsT; isFocused?: boolean; noResultsMsg?: React.ReactNode; onBlur?: (event: React.FocusEvent) => any; onFocus?: (event: React.FocusEvent) => any; rootRef?: React.Ref; focusMenu?: (event: FocusEvent | MouseEvent | KeyboardEvent) => any; unfocusMenu?: () => any; handleKeyDown?: (event: KeyboardEvent) => any; } export type StatelessMenuProps = SharedStatelessProps & MenuProps; export const Menu: React.FC; export interface NestedMenuProps { children: React.ReactNode; } export interface NestedMenuState { menus: Array>; } export class NestedMenus extends React.Component< NestedMenuProps, NestedMenuState > { addMenuToNesting(ref: React.Ref): void; removeMenuFromNesting(ref: React.Ref): void; findMenuIndexByRef(ref: React.Ref): number; getParentMenu(ref: React.Ref): React.Ref; getChildMenu(ref: React.Ref): React.Ref; } export const StyledEmptyState: StyletronComponent; export const StyledList: StyletronComponent; export const StyledListItem: StyletronComponent; export const StyledListItemProfile: StyletronComponent; export const StyledProfileImgContainer: StyletronComponent; export const StyledProfileImg: StyletronComponent; export const StyledProfileLabelsContainer: StyletronComponent; export const StyledProfileTitle: StyletronComponent; export const StyledProfileSubtitle: StyletronComponent; export const StyledProfileBody: StyletronComponent; export const KEY_STRINGS: KEY_STRINGS; export const STATE_CHANGE_TYPES: STATE_CHANGE_TYPES; export const OPTION_LIST_SIZE: OPTION_LIST_SIZE;