UNPKG

@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
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';