@tabula/ui-selector
Version:
Selector allow users to choose a single option from a collapsible list of options when space is limited
48 lines (47 loc) • 1.57 kB
TypeScript
import { PropsWithChildren, ReactNode } from 'react';
import { OffsetOptions } from '@floating-ui/react';
import { UiMenuDivider, UiMenuItem, UiMenuTitle } from '@tabula/ui-menu';
export declare enum VisibleKind {
Outside = 0,
Trigger = 1,
Select = 2
}
export type ChangeVisibleHandler = (visibility: boolean, kind: VisibleKind) => void;
export type TriggerRenderer = () => ReactNode;
export type Item = UiMenuItem & {
denyFilter?: boolean;
searchKeys?: string[];
};
export type Divider = UiMenuDivider;
export type Title = UiMenuTitle;
export type DefaultItem = UiMenuItem;
export type ConfigItem = Item | Divider | Title;
export type Config = ConfigItem[];
export type OptionItem<T> = T | Divider | Title;
type ItemConfigGetterOptions<T> = {
item: T;
options: Array<OptionItem<T>>;
isTrigger?: boolean;
};
export type ItemConfigGetter<T> = (options: ItemConfigGetterOptions<T>) => Item | null;
export type Props = PropsWithChildren<{
config: Config;
defaultItem?: DefaultItem;
emptyContent?: ReactNode;
isInvalid?: boolean;
isVisible?: boolean;
isWarning?: boolean;
loading?: boolean;
offset?: OffsetOptions;
onChangeVisible?: ChangeVisibleHandler;
onRenderTrigger?: TriggerRenderer;
placeholder?: string;
popupClassName?: string;
readOnly?: boolean;
searchClassName?: string;
showSearchClear?: boolean;
showSearchField?: boolean;
triggerClassName?: string;
triggerContainerClassName?: string;
}>;
export { type OffsetOptions as Offset } from '@floating-ui/react';