react-dropdown-aria-jesus
Version:
Simple and accessible React dropdown component
73 lines (72 loc) • 2.42 kB
TypeScript
import { ReactNode } from 'react';
import { StyleKeys } from './constants';
import { OptionItemProps } from '../components/OptionItem';
export interface ExtraState {
[key: string]: any;
}
export declare type StyleKey = keyof typeof StyleKeys;
declare type StyleFunction = (base: {}, state: DropdownStyleDependantState, extraState?: {}) => {};
export declare type GetStyleFunction = (key: StyleKey, extraState?: ExtraState) => string;
export declare type OptionRendererFunction = (props: OptionItemProps, getStyle: GetStyleFunction, index: number) => JSX.Element;
export declare type OnOptionClicked = (option: Option, shouldClose?: boolean) => void;
export declare type ItemRenderer = (props: OptionItemProps, index: number) => JSX.Element;
export interface DropdownStyle {
Arrow?: StyleFunction;
DropdownButton?: StyleFunction;
DisplayedValue?: StyleFunction;
DropdownWrapper?: StyleFunction;
GroupContainer?: StyleFunction;
GroupHeading?: StyleFunction;
GroupDivider?: StyleFunction;
OptionContainer?: StyleFunction;
OptionItem?: StyleFunction;
}
export interface Option {
ariaLabel?: string;
className?: string;
title?: string;
value: string;
iconClass?: string;
}
export interface OptionGroup {
label: string;
groupOptions: Option[];
}
export declare type DropdownOption = Option | OptionGroup;
export interface DropdownStyleDependantState {
open: boolean;
focusedIndex: number;
dropdownFocused: boolean;
}
export interface DropdownState extends DropdownStyleDependantState {
searchTerm: string;
}
export interface DropdownProps {
ariaDescribedBy: string;
ariaLabel: string;
ariaLabelledBy: string;
ariaRequired: boolean;
arrowRenderer: (open: boolean) => ReactNode;
className: string;
centerText: boolean;
contentClassName: string;
defaultOpen: boolean;
disabled: boolean;
height: number;
hideArrow: boolean;
id: string;
maxContentHeight: number;
openUp: boolean;
options: DropdownOption[];
optionItemRenderer: OptionRendererFunction;
pageKeyTraverseSize: number;
placeholder: string;
searchable: boolean;
value: string;
selectedValueClassName: string;
onChange: (option: Option) => void;
style: DropdownStyle;
width: number;
loading: boolean;
}
export {};