///
import { AtomDivProps, AtomTrProps } from '../../element';
export type Size = {
width?: string;
height?: string;
};
/**
* @template V - Tipo del valor recibido del cuerpo.
* @template K - Tipo de la clave asociada.
* @template VR - Tipo del valor de la fila completa.
*/
export type RenderBodyProps = {
value: V;
key: K;
row: number;
column: number;
valueRow: VR;
};
/**
* @template V - Tipo del valor del encabezado.
* @template K - Tipo de la clave asociada.
*/
export type RenderHeadProps = {
value: V;
key: K;
column: number;
};
export type AnyType = T extends unknown ? any : T;
/**
* @template B - Tipo del cuerpo de la tabla.
* @template H - Tipo del encabezado de la tabla.
* @template C - Tipo de las claves de las columnas.
*/
export type TableKUIProps = AtomDivProps & {
/**
* @template C List To string
* @example string[]
* ['id', 'name', 'email']
*/
keys: C[];
head: Record, H>;
body: Record, AnyType>[];
limit?: number;
neighbors?: number;
renderHead?: (args: RenderHeadProps>) => JSX.Element;
renderBody?: (args: RenderBodyProps, NoInfer, Record, AnyType>>) => JSX.Element;
onRow?: (args: Record, AnyType>) => AtomTrProps;
TableSx?: Size;
};
export type RenderTableHeadProps = {
keyType: C;
renderHead?: (args: RenderHeadProps>) => JSX.Element;
head: Record, H>;
column: number;
};
export type RenderTableBodyProps = {
/**
* @template C List To string
* @example string[]
* ['id', 'name', 'email']
*/
keys: C[];
renderBody?: (args: RenderBodyProps, NoInfer, Record, AnyType>>) => JSX.Element;
valueRow: Record, AnyType>;
row: number;
};