import type { CSSProperties, FunctionalComponent, RendererElement, RendererNode, VNode } from 'vue'; import type { ColumnAlignment } from 'element-plus/es/constants'; import type { FixedDir, SortOrder } from './constants'; export type Alignment = ColumnAlignment; export type FixedDirection = FixedDir; export type KeyType = string | number | symbol; /** * Param types */ export type CellRendererParams = { cellData: T; } & RowCommonParams & ColumnCommonParams; export type ColumnCommonParams = { columns: Column[]; column: Column; columnIndex: number; }; export type HeaderCellRendererParams = { headerIndex: number; } & ColumnCommonParams; export type RowCommonParams = { rowData: any; rowIndex: number; }; export type ClassNameGetterParams = { cellData: T; } & RowCommonParams & ColumnCommonParams; export type DataGetterParams = { columns: Column[]; column: Column; columnIndex: number; } & RowCommonParams; export type DataGetter = (params: DataGetterParams) => T; export type ClassNameGetter = (params: ClassNameGetterParams) => string; export type HeaderClassGetter = (params: ColumnCommonParams & { headerIndex: number; }) => string; /** * Renderer/Getter types */ export type CellRenderer = (params: CellRendererParams) => VNode; export type HeaderCellRenderer = (params: HeaderCellRendererParams) => VNode; export type Column = { /** * Attributes */ align?: Alignment; class?: string | ClassNameGetter; key?: KeyType; dataKey?: KeyType; fixed?: true | FixedDirection; flexGrow?: CSSProperties['flexGrow']; flexShrink?: CSSProperties['flexShrink']; title?: string; hidden?: boolean; headerClass?: HeaderClassGetter | string; maxWidth?: number; minWidth?: number; style?: CSSProperties; sortable?: boolean; width: number; /** * Renderers */ cellRenderer?: CellRenderer; headerCellRenderer?: HeaderCellRenderer; /** * Extendable sections */ [key: string]: any; }; export type Columns = Column[]; export type AnyColumns = Columns; export type SortBy = { key: KeyType; order: SortOrder; }; export type SortState = { [key: KeyType]: SortOrder; }; export type CustomizedCellsType = VNode[]; export type DefaultCellsType = VNode[][]; export type ColumnCellsType = DefaultCellsType | CustomizedCellsType; export type TableV2CustomizedHeaderSlotParam = { cells: VNode[]; columns: Columns; headerIndex: number; }; export type SimpleFunctionalComponentProps = { class?: JSX.IntrinsicAttributes['class']; style?: CSSProperties; } & T; export type SimpleFunctionalComponent = FunctionalComponent>;