@codeworker.br/govbr-tw-react
Version:
Biblioteca de componentes React usando Tailwind CSS que implementa o Padrão Digital de Governo.
45 lines (44 loc) • 1.88 kB
TypeScript
import { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
import { VariantProps } from "class-variance-authority";
import { tableCellVariants, tableVariants } from "./variants";
type Alignment = "left" | "center" | "right";
interface TableCellContext<T extends Record<string, unknown>> {
value: unknown;
row: T;
rowIndex: number;
columnIndex: number;
column: TableColumn<T>;
}
interface TableColumn<T extends Record<string, unknown>> {
key: string;
header: ReactNode;
accessor?: keyof T | ((row: T, context: {
rowIndex: number;
columnIndex: number;
}) => unknown);
cell?: (context: TableCellContext<T>) => ReactNode;
align?: Alignment;
headerAlign?: Alignment;
headerClassName?: string;
cellClassName?: string;
}
interface TableProps<T extends Record<string, unknown>> extends Omit<ComponentPropsWithoutRef<"table">, "children">, VariantProps<typeof tableVariants>, Omit<VariantProps<typeof tableCellVariants>, "align"> {
data: T[];
columns: TableColumn<T>[];
striped?: boolean;
zebra?: boolean;
emptyMessage?: ReactNode;
rowKey?: (row: T, context: {
rowIndex: number;
}) => string | number;
className?: string;
sum?: (keyof T & string)[];
sumLabel?: ReactNode;
sumFormatter?: (value: number, key: string) => ReactNode;
}
declare const TableComponent: <T extends Record<string, unknown>>({ className, data, columns, variant, bordered, rounded, density, striped, zebra, lined, emptyMessage, rowKey, sum, sumLabel, sumFormatter, ...props }: TableProps<T>, ref: Ref<HTMLTableElement>) => import("react/jsx-runtime").JSX.Element;
declare const Table: <T extends Record<string, unknown>>(props: TableProps<T> & {
ref?: Ref<HTMLTableElement>;
}) => ReturnType<typeof TableComponent>;
export type { TableColumn, TableProps };
export default Table;