import React from 'react'; import { ItemProps, ItemLayout, SelectorVariant, PresetConfig } from '../types'; interface UsePresetItemPropsParams { variant?: SelectorVariant; itemLayout?: ItemLayout; preset?: PresetConfig; itemProps?: ItemProps; indicator: React.ReactNode; numberSelector: React.ReactNode; mode?: 'single' | 'multiple'; disabled?: boolean; selected?: boolean; } interface PresetItemPropsResult { mediaProps: Record; cardProps: Record; } /** * 根据预设项生成 option Item 的 props * * 规则说明: * 1. variant='default': 使用 Card,borderless,horizontal,selectedType='none',actionsPosition='left' * 1.1 preset.variant='1': renderContent={() => {dataSource._label}} * 1.2 preset.variant='2': renderContent={() => {dataSource._label}} * 2. variant='media': 使用 MediaItem * 2.1 preset.variant='1': size='small', showIndicator=false, 单选shape='circle',多选shape='square' * 2.2 preset.variant='2': size='large', showIndicator=true, shape='circle' * 3. variant='card': 根据 itemLayout 区分横向和纵向 * 3.1 横向(horizontal): * - preset.variant='2': selectedType='filled' * - preset.variant='5': variant='borderless' * - 默认样式: styles.container = { padding: 8 } * - 使用 lodash merge 深度合并样式,itemProps.styles 优先级更高 * 3.2 纵向(vertical): * - 统一使用 borderless,selectedType='none' * - preset.variant='2': indicator 通过 corner 传入 * 3.3 actions 处理: * - 优先使用 numberSelector(如果存在) * - 其次使用 indicator * - 纵向且 preset.variant='2': indicator 放到 corner,actions 仅展示 numberSelector */ declare const usePresetItemProps: (params: UsePresetItemPropsParams) => PresetItemPropsResult; export default usePresetItemProps;