import type { ReactNode } from 'react'; import type { TextStyle, ViewStyle } from 'react-native'; /** Tab项配置 */ export interface TabItem { /** Tab标题 */ title: string; /** 自定义标题样式 */ titleStyle?: TextStyle; /** 扩展字段 */ [key: string]: any; } /** DbTab组件属性 */ export interface DbTabProps { /** Tab列表配置 */ tabs: TabItem[]; /** * 渲染每个Tab的内容 * @param index - Tab索引 * @param tab - Tab配置项 * @returns 内容组件 */ renderContent: (index: number, tab: TabItem) => ReactNode; /** 选中Tab的颜色(文字+下划线) */ activeColor?: string; /** 未选中Tab的文字颜色 */ inactiveColor?: string; /** Tab栏背景色 */ tabBarBgColor?: string; /** 下划线高度 */ indicatorHeight?: number; /** 下划线圆角 */ indicatorRadius?: number; /** 下划线宽度(默认自适应文字宽度) */ indicatorWidth?: number; /** 是否显示下划线指示器 */ showIndicator?: boolean; /** Tab文字大小 */ fontSize?: number; /** 选中Tab文字大小 */ activeFontSize?: number; /** 选中Tab字重 */ activeFontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'; /** 未选中Tab字重 */ inactiveFontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'; /** Tab栏高度 */ tabBarHeight?: number; /** Tab项水平内边距 */ tabItemPadding?: number; /** * 是否启用Tab栏横向滚动 * - true: Tab栏可横向滚动,适合Tab较多的场景 * - false: Tab栏固定宽度,所有Tab均分屏幕宽度 * @default false */ scrollable?: boolean; /** * 是否懒加载内容 * - true: 只加载当前和相邻的Tab内容 * - false: 一次性加载所有Tab内容 * @default true */ lazy?: boolean; /** * 是否缓存已加载的Tab内容 * - true: 切换Tab时保留已加载的内容 * - false: 切换Tab时卸载之前的内容 * @default true */ cache?: boolean; /** 初始选中索引 */ initialPage?: number; /** * 是否启用手势滑动切换Tab * - true: 可以通过左右滑动手势切换Tab * - false: 禁用滑动手势,只能通过点击Tab切换 * @default true */ swipeEnabled?: boolean; /** * 自定义Tab渲染 * @param tab - Tab配置 * @param isActive - 是否选中 * @param index - Tab索引 * @returns React节点 */ renderTab?: (tab: TabItem, isActive: boolean, index: number) => ReactNode; /** Tab切换回调 */ onTabChange?: (index: number, tab: TabItem) => void; /** 容器样式 */ style?: ViewStyle; /** Tab栏样式 */ tabBarStyle?: ViewStyle; /** Tab项样式 */ tabItemStyle?: ViewStyle; /** 下划线样式 */ indicatorStyle?: ViewStyle; /** 内容区域样式 */ contentStyle?: ViewStyle; } /** Tab测量数据 */ export interface TabMeasurement { width: number; x: number; }