/// export interface ExprRule { [key: string]: any; } export interface RuleConfig { autoValidate?: boolean; required?: 0 | 1; min?: number; max?: number; mutex?: Array>; customValidator?: (value: SelectionValue) => Promise; } export interface GroupItem { id?: number; title?: string; mode?: 'single' | 'multiple'; valueType?: 'primitive' | 'object'; preserve?: boolean; fieldNames?: { label?: string; value?: string; cover?: string; }; ruleConfig?: RuleConfig; dataSource?: OptionItem[]; } export interface OptionItem { id?: number; title?: string; label?: string; value?: OptionKey; cover?: string; groups?: GroupItem[]; disabled?: boolean; ruleConfig?: { min?: number; max?: number; }; [key: string]: any; } export declare type OptionKey = number | string; /** 原始值类型:单选时为id,多选时为id[] */ export declare type SelectionValuePrimitive = T | T[]; /** 复杂对象值类型:包含id、数量等额外信息 */ export interface SelectionValueObject { value?: T; quantity?: number; [key: string]: any; } /** 单选值类型 */ export declare type SelectionValueSingle = T | SelectionValueObject; /** 多选值类型 */ export declare type SelectionValueMultiple = T[] | SelectionValueObject[]; /** 选择器值类型 */ export declare type SelectionValue = SelectionValueSingle | SelectionValueMultiple; export declare type RenderItemProps = { dataSource: OptionItem; actions: any; optionItemValue?: any; indicator: React.ReactNode; numberSelector: React.ReactNode; values: any; quantityInfo: { maxReached: boolean; remainingCount: number; selectedCount: number; }; }; export declare type ItemProps = { layout?: 'vertical' | 'horizontal'; renderContent?: (props: { dataSource: OptionItem; }) => React.ReactNode; styles?: { [key: string]: React.CSSProperties; }; [key: string]: any; }; export declare type LayoutType = 'antdGrid' | 'custom'; /** 单个断点的完整配置 */ export declare type BreakpointConfig = { columns: number; gap?: number | string; style?: React.CSSProperties; }; /** * 断点映射 * key: 最小宽度(px) * value: 列数(简写)或完整配置 * @example { 0: 1, 420: 2, 630: 3 } // 简写 * @example { 0: { columns: 1, gap: 12 }, 420: { columns: 2, gap: 16 } } // 完整 */ export declare type BreakpointMap = Record; /** 响应式布局配置 */ export declare type ResponsiveConfig = { /** 每项最小宽度,系统自动计算断点 */ minWidth?: number; /** 最大列数限制 */ maxColumns?: number; /** * 显式断点映射,key 为容器最小宽度(px) * @example { 0: 1, 420: 2, 630: 3, 841: 4, 1367: 5 } * @example { 0: { columns: 1, gap: 12 }, 420: { columns: 2, gap: 16 } } */ breakpoints?: BreakpointMap; /** 默认列数(容器宽度小于所有断点时),默认为 1 */ defaultColumns?: number; /** 间距,默认为 16 */ gap?: number | string; /** ResizeObserver 防抖延迟(ms),默认为 0 */ debounce?: number; }; export declare type LayoutConfig = { type?: LayoutType; className?: string; containerStyle?: React.CSSProperties; /** * 响应式布局配置 * 存在此配置时自动启用 ResizeObserver 响应式布局 */ responsive?: ResponsiveConfig; columns?: number; gutter?: number | object | Array; align?: 'top' | 'middle' | 'bottom' | 'stretch'; justify?: 'start' | 'end' | 'center' | 'space-between' | 'space-around'; wrap?: boolean; colConfig?: { [key: string]: any; }; }; export interface PresetConfig { variant?: '1' | '2' | '3' | '4' | '5'; } export declare type ItemLayout = 'vertical' | 'horizontal'; export declare type SelectorVariant = 'default' | 'select' | 'card' | 'media'; export declare type HeaderProps = { visible?: boolean; style?: React.CSSProperties; title?: { visible?: boolean; text?: React.ReactNode; style?: React.CSSProperties; }; icon?: { visible?: boolean; icon?: React.ReactNode; style?: React.CSSProperties; }; tip?: { visible?: boolean; text?: React.ReactNode; style?: React.CSSProperties; }; renderExtra?: (props: { dataSource: OptionItem; values: SelectionValue; }) => React.ReactNode; }; export interface SelectorProps extends GroupItem { className?: string; theme?: { token?: { colorPrimary?: string; }; }; value?: SelectionValue; defaultValue?: SelectionValue; onChange?: (value: SelectionValue) => void; onClear?: () => void; disabled?: boolean; variant?: SelectorVariant; itemLayout?: ItemLayout; preset?: PresetConfig; layout?: LayoutConfig; renderItem?: (props: RenderItemProps) => React.ReactNode; itemProps?: ItemProps; indicatorProps?: { show?: boolean; variant?: 'outlined' | 'filled'; render?: (props: { option: OptionItem; selected: boolean; disabled: boolean; actions: any; }) => React.ReactNode; [key: string]: any; }; showStepper?: true | false | 'auto'; stepperProps?: { size?: 'small' | 'middle' | 'large'; shape?: 'round' | 'square'; horizontalPadding?: number | string; }; style?: React.CSSProperties; /** * @deprecated */ titleProps?: HeaderProps; headerProps?: HeaderProps; selectProps?: any; } export interface SelectorGroupProps { allowedValuesPolicy?: 'relaxed' | 'strict'; className?: string; customScrollParent?: HTMLElement | string; dataSource: GroupItem[]; defaultValue?: Record; linkageRules?: ExprRule[] | Record; theme?: { token?: { colorPrimary?: string; }; }; onChange?: (values: Record) => void; preserve?: boolean; tabProps?: { visible?: boolean; }; style?: React.CSSProperties; value?: Record; scrollToFirstError?: boolean; [key: string]: any; }