import { type ComponentProps, type ReactElement, type ReactNode } from "react"; import { type SelectProps, Select } from "@heroui/react"; import { type ValueOf } from "deepsea-tools"; import type { Field } from "soda-tanstack-form"; import { type EmptyValue, type GetEmptyValue } from "./FormProvider"; import type { SelectionMode } from "./FormSelect"; /** enumObject 的类型 */ export type SelectOptions = Record | ([ReactNode, string | number] | readonly [ReactNode, string | number])[]; /** 获取枚举值的类型 */ export type EnumValue = Options extends any[] ? Options[number][1] : ValueOf; /** 获取选择器的值的类型 */ export type SelectValue = Mode extends "multiple" ? EnumValue[] : EnumValue | (DisallowEmptySelection extends true ? never : GetEmptyValue); export interface EnumOption { label: ReactNode; value: EnumValue; } export interface EnumSelectPropsBase> extends Omit>>, "items" | "selectionMode" | "disallowEmptySelection" | "children" | "selectedKeys" | "onSelectionChange" | "value" | "onValueChange"> { enumObject?: Options; selectionMode?: Mode; disallowEmptySelection?: DisallowEmptySelection; value?: Value; onValueChange?: (value: Value) => void; emptyValue?: Empty; component?: (props: SelectProps) => ReactElement; } export interface EnumSelectProps extends EnumSelectPropsBase { } export declare function EnumSelect({ enumObject, selectionMode, value: _value, onValueChange, emptyValue, component: Select2, ...rest }: EnumSelectProps): ReactNode; export declare function createEnumSelect(enumObject?: Options): EnumSelectComponent>; export type EnumSelectComponent = (props: Omit, "enumObject">) => ReactNode; export interface FieldEnumSelectProps extends Omit, "enumObject"> { field: Field>; } export type FieldEnumSelectComponent = (props: FieldEnumSelectProps<[ReactNode, Value][], Mode, DisallowEmptySelection, Empty>) => ReactNode; export declare function createFieldEnumSelect(enumObject?: Options): FieldEnumSelectComponent>;