import './Table.css'; import React from 'react'; import { HorizontalAlign, VerticalAlign } from './Cell/TableCell'; import { Filters, onSortBy, SelectedFilters } from './filtering'; import { Header, OrderType, Position } from './helpers'; import { GetTagLabel } from './SelectedOptionsList/TableSelectedOptionsList'; export { TableTextFilter } from './TextFilter/TableTextFilter'; export { TableFilterContainer } from './FilterContainer/TableFilterContainer'; export { TableNumberFilter } from './NumberFilter/TableNumberFilter'; export { TableChoiceGroupFilter } from './ChoiceGroupFilter/TableChoiceGroupFilter'; export declare const sizes: readonly ["s", "m", "l"]; type Size = (typeof sizes)[number]; export declare const zebraStriped: readonly ["odd", "even"]; type ZebraStriped = (typeof zebraStriped)[number]; export declare const headerVerticalAligns: readonly ["center", "bottom"]; export type HeaderVerticalAlign = (typeof headerVerticalAligns)[number]; export type LazyLoad = { maxVisibleRows?: number; scrollableEl?: HTMLDivElement | Window; } | undefined; type ActiveRow = { id: string | undefined; onChange: ({ id, e, }: { id: string | undefined; e?: React.SyntheticEvent; }) => void; }; type onRowHover = ({ id, e, }: { id: string | undefined; e: React.MouseEvent; }) => void; type onRowClick = ({ id, e }: { id: string; e: React.MouseEvent; }) => void; type onRowCreate = ({ id, index, e, }: { id?: string; index: number; e: React.MouseEvent; }) => void; export type CellClickType = 'click' | 'contextMenu'; export type onCellClick = ({ e, type, rowId, columnIdx, ref, }: { e: React.SyntheticEvent; type: CellClickType; columnIdx: number; ref: React.RefObject; rowId?: string; }) => void; export type TableRow = { id: string; defaultExpand?: boolean; rows?: TableRow[]; }; export type TableTreeRow = { options: { level: number; }; } & T; export type TableFilters = Filters; export type RowField = Exclude; export type ColumnWidth = number | undefined; export type ValueOf = T[keyof T]; type ColumnBase = ValueOf<{ [K in keyof T]: { accessor: K extends string ? K : never; sortable?: boolean; colSpan?: number | ((row: T) => number); sortByField?: keyof T; order?: OrderType; sortFn?(a: T[K], b: T[K]): number; renderCell?: (row: T) => React.ReactNode; getComparisonValue?: (cell: T[K]) => number | string; }; }>; type SingleColumnAddition = ColumnBase & { columns?: never; }; type GroupColumnAddition = { columns: TableColumn[]; } & { [K in keyof ColumnBase]?: never; }; export interface TableControl { column: Header & ColumnMetaData; } export type SortByProps = { sortingBy: keyof T; sortOrder: 'asc' | 'desc'; }; export type TableColumn = { title: React.ReactNode; align?: HorizontalAlign; withoutPadding?: boolean; width?: ColumnWidth; mergeCells?: boolean; position?: Position; hidden?: boolean; control?: ({ column }: TableControl) => React.ReactNode; } & (GroupColumnAddition | SingleColumnAddition); export type TableProps = { columns: TableColumn[]; rows: T[]; isResizable?: boolean; filters?: Filters; onSortBy?: onSortBy; size?: Size; stickyHeader?: boolean; stickyColumns?: number; minColumnWidth?: number; activeRow?: ActiveRow; verticalAlign?: VerticalAlign; headerVerticalAlign?: HeaderVerticalAlign; zebraStriped?: ZebraStriped; borderBetweenRows?: boolean; defaultExpandAll?: boolean; borderBetweenColumns?: boolean; emptyRowsPlaceholder?: React.ReactNode; className?: string; onRowHover?: onRowHover; onRowClick?: onRowClick; onRowCreate?: onRowCreate; onCellClick?: onCellClick; getAdditionalClassName?: (props: { column: TableColumn; row: T; isActive: boolean; }) => string; rowCreateText?: string; lazyLoad?: LazyLoad; onFiltersUpdated?: (filters: SelectedFilters) => void; getTagLabel?: GetTagLabel; isExpandedRowsByDefault?: boolean; getCellWrap?: (row: T) => 'truncate' | 'break'; }; type Table = (props: TableProps & { ref?: React.Ref; }) => React.ReactNode | null; export type ColumnMetaData = { filterable: boolean; isSortingActive: boolean; isFilterActive: boolean; isResized: boolean; isSticky: boolean; showResizer: boolean; columnWidth: number; columnLeftOffset: number; }; export type SortingState = { by: keyof T; order: 'asc' | 'desc'; sortFn?: (a: T[keyof T], b: T[keyof T]) => number; } | null; export declare const Table: Table;