import type React from "react"; import type { ComponentPropsWithRef, ReactNode } from "react"; import type { FieldErrorProps } from "@base-ui/react/field"; import type { Button } from "../Button"; import type { ComboboxPrimitiveChipProps, ComboboxPrimitiveChipRemoveProps, ComboboxPrimitiveChipsProps, ComboboxPrimitiveClearProps, ComboboxPrimitiveCollectionProps, ComboboxPrimitiveFilter, ComboboxPrimitiveFilterOptions, ComboboxPrimitiveGroupLabelProps, ComboboxPrimitiveGroupProps, ComboboxPrimitiveIconProps, ComboboxPrimitiveInputGroupProps, ComboboxPrimitiveInputProps, ComboboxPrimitiveItemProps, ComboboxPrimitiveListProps, ComboboxPrimitiveRootProps, ComboboxPrimitiveRowProps, ComboboxPrimitiveSeparatorProps, ComboboxPrimitiveStatusProps, ComboboxPrimitiveTriggerProps, ComboboxPrimitiveValueProps } from "../primitives/ComboboxPrimitive"; export type ComboboxSize = "small" | "base" | "large"; export type ComboboxRootProps = ComboboxPrimitiveRootProps & { readonly className?: string; readonly description?: string; readonly error?: string; readonly invalid?: boolean; readonly label?: ReactNode; readonly size?: ComboboxSize; readonly style?: React.CSSProperties; }; export type ComboboxLabelProps = Omit, "color">; export type ComboboxLabelNoteProps = ComponentPropsWithRef<"span">; export interface ComboboxDescriptionProps extends Omit, "children"> { readonly children?: string; } export interface ComboboxErrorProps extends Omit, "children"> { readonly children?: string; readonly match?: FieldErrorProps["match"]; } export type ComboboxValueProps = ComboboxPrimitiveValueProps; export type ComboboxInputGroupProps = ComboboxPrimitiveInputGroupProps; export type ComboboxInputProps = ComboboxPrimitiveInputProps; export type ComboboxTriggerProps = ComboboxPrimitiveTriggerProps; export type ComboboxIconProps = ComboboxPrimitiveIconProps; export type ComboboxListProps = ComboboxPrimitiveListProps; export type ComboboxItemProps = ComboboxPrimitiveItemProps; export interface ComboboxItemPrefixProps { readonly children: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export interface ComboboxItemLabelProps { readonly children: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export interface ComboboxItemDescriptionProps { readonly children: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export interface ComboboxItemSuffixProps { readonly children: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export type ComboboxRowProps = ComboboxPrimitiveRowProps; export type ComboboxCollectionProps = ComboboxPrimitiveCollectionProps; export type ComboboxChipsProps = ComboboxPrimitiveChipsProps; export type ComboboxChipProps = ComboboxPrimitiveChipProps; export type ComboboxChipRemoveProps = ComboboxPrimitiveChipRemoveProps; export type ComboboxGroupProps = ComboboxPrimitiveGroupProps; export type ComboboxGroupLabelProps = ComboboxPrimitiveGroupLabelProps; export type ComboboxSeparatorProps = ComboboxPrimitiveSeparatorProps; export type ComboboxClearProps = ComboboxPrimitiveClearProps; export type ComboboxStatusProps = ComboboxPrimitiveStatusProps; export type ComboboxFilter = ComboboxPrimitiveFilter; export type ComboboxFilterOptions = ComboboxPrimitiveFilterOptions; export interface ComboboxContentProps { readonly children: ReactNode; readonly className?: string; readonly empty?: ReactNode; readonly style?: React.CSSProperties; readonly ariaLabel?: string; } export interface ComboboxActionsProps { readonly children: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export type ComboboxActionProps = Omit, "type">; export interface ComboboxActionPrefixProps { readonly children?: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export interface ComboboxActionLabelProps { readonly children?: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export interface ComboboxEmptyProps { readonly children?: ReactNode; readonly className?: string; readonly style?: React.CSSProperties; } export interface ComboboxLoadingProps extends Omit, "children"> { readonly children?: ReactNode; readonly rows?: number; } export interface ComboboxFooterRenderState { readonly selectedCount: number; readonly selectedValue: Value | Value[] | null | undefined; readonly selectedValues: Value[]; readonly hasSelection: boolean; readonly canClearSelection: boolean; readonly multiple: boolean; } export interface ComboboxFooterProps { readonly children: ReactNode | ((state: ComboboxFooterRenderState) => ReactNode); readonly className?: string; readonly style?: React.CSSProperties; } export interface ComboboxSelectedCountProps { readonly className?: string; readonly children?: (count: number) => ReactNode; } export interface ComboboxClearSelectionProps extends ComboboxFooterActionProps { readonly children?: ReactNode; readonly label?: string; } export interface ComboboxSelectionFooterProps { readonly className?: string; readonly style?: React.CSSProperties; readonly showSelectedCount?: boolean; readonly selectAllLabel?: string; readonly selectAllState?: ComboboxSelectAllState; readonly onSelectAll?: React.MouseEventHandler; } type ButtonWithChildrenRuntimeProps = Extract, { readonly children: ReactNode; }>; export type ComboboxFooterActionProps = Omit; export interface ComboboxTriggerInputProps extends Omit { readonly clearLabel?: string; readonly showOptionsLabel?: string; } export interface ComboboxTriggerValueProps extends Omit { readonly children?: ComboboxValueProps["children"]; readonly placeholder?: ComboboxValueProps["placeholder"]; } export interface ComboboxTriggerMultipleWithInputProps extends Omit { readonly getItemLabel?: (value: Value) => string; readonly getRemoveLabel?: (value: Value) => string; readonly renderItem?: (value: Value) => ReactNode; readonly showOptionsLabel?: string; } export interface ComboboxTriggerMultipleValueProps extends Omit { readonly getItemLabel?: (value: Value) => string; readonly getRemoveLabel?: (value: Value) => string; readonly placeholder?: ComboboxValueProps["placeholder"]; readonly renderItem?: (value: Value) => ReactNode; readonly showOptionsLabel?: string; } export interface ComboboxSelectAllProps extends ComboboxFooterActionProps { readonly children?: ReactNode; readonly label?: string; } export interface ComboboxSelectAllState { readonly checked: boolean; readonly indeterminate: boolean; readonly selectedCandidateCount: number; readonly candidateCount: number; } export type ComboboxSelectAllItemComparer = (candidateValue: Value, selectedValue: Value) => boolean; export interface ComboboxSelectAllOptions { readonly selectedValues: readonly Value[]; readonly candidateValues: readonly Value[]; readonly isItemEqual?: ComboboxSelectAllItemComparer; } export {};