import { type VNodeChild } from "vue"; import { type CellDecoration } from "./cellDecoration.js"; export type { CellDecoration, CellDecorationIntent } from "./cellDecoration.js"; export interface DataTableColumn { key: string; label: VNodeChild; sortable?: boolean; align?: "start" | "center" | "end"; width?: string; cell?: (row: R, column: DataTableColumn) => VNodeChild; /** * Conditional formatting (confort) : décoration sémantique calculée par * cellule. Si une `decorations` map est aussi fournie, la map gagne. */ cellDecoration?: (row: R, value: unknown, colId: string) => CellDecoration | null; } export interface DataTableRow { id: string; [key: string]: unknown; } export type DataTableSelectMode = "none" | "single" | "multiple"; export type DataTableSize = "sm" | "md" | "lg"; export interface DataTableSort { key: string; direction: "asc" | "desc"; } export type DataTableProps = { columns: DataTableColumn[]; rows: DataTableRow[]; /** * Conditional formatting : décorations sémantiques par cellule, indexées * `rowId` → `colId` → décoration. Prioritaire sur `column.cellDecoration`. */ decorations?: Record>; caption?: VNodeChild; size?: DataTableSize; selectable?: DataTableSelectMode; selectedIds?: string[]; onSelectionChange?: (selectedIds: string[]) => void; sortable?: boolean; sortBy?: DataTableSort | null; onSortChange?: (sortBy: DataTableSort | null) => void; pageSize?: number; page?: number; onPageChange?: (page: number) => void; locale?: string; selectAllLabel?: string; selectRowLabel?: string; sortAscendingLabel?: string; sortDescendingLabel?: string; sortNoneLabel?: string; previousLabel?: string; nextLabel?: string; paginationLabel?: string; rangeLabel?: (range: { start: number; end: number; total: number; }) => string; emptyLabel?: string; onRowClick?: (row: DataTableRow) => void; class?: string; }; export declare const DataTable: import("vue").DefineComponent DataTableColumn[]; required: true; }; rows: { type: () => DataTableRow[]; required: true; }; decorations: { type: () => Record>; default: undefined; }; caption: { type: () => VNodeChild; default: undefined; }; size: { type: () => DataTableSize; default: string; }; selectable: { type: () => DataTableSelectMode; default: string; }; selectedIds: { type: () => string[]; default: undefined; }; onSelectionChange: { type: () => (ids: string[]) => void; default: undefined; }; sortable: { type: BooleanConstructor; default: boolean; }; sortBy: { type: () => DataTableSort | null; default: undefined; }; onSortChange: { type: () => (sortBy: DataTableSort | null) => void; default: undefined; }; pageSize: { type: NumberConstructor; default: undefined; }; page: { type: NumberConstructor; default: undefined; }; onPageChange: { type: () => (page: number) => void; default: undefined; }; locale: { type: StringConstructor; default: string; }; selectAllLabel: { type: StringConstructor; default: string; }; selectRowLabel: { type: StringConstructor; default: string; }; sortAscendingLabel: { type: StringConstructor; default: string; }; sortDescendingLabel: { type: StringConstructor; default: string; }; sortNoneLabel: { type: StringConstructor; default: string; }; previousLabel: { type: StringConstructor; default: undefined; }; nextLabel: { type: StringConstructor; default: undefined; }; paginationLabel: { type: StringConstructor; default: string; }; rangeLabel: { type: () => (range: { start: number; end: number; total: number; }) => string; default: ({ start, end, total }: { start: number; end: number; total: number; }) => string; }; emptyLabel: { type: StringConstructor; default: string; }; onRowClick: { type: () => (row: DataTableRow) => void; default: undefined; }; class: { type: StringConstructor; default: undefined; }; }>, () => import("vue").VNode, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly DataTableColumn[]; required: true; }; rows: { type: () => DataTableRow[]; required: true; }; decorations: { type: () => Record>; default: undefined; }; caption: { type: () => VNodeChild; default: undefined; }; size: { type: () => DataTableSize; default: string; }; selectable: { type: () => DataTableSelectMode; default: string; }; selectedIds: { type: () => string[]; default: undefined; }; onSelectionChange: { type: () => (ids: string[]) => void; default: undefined; }; sortable: { type: BooleanConstructor; default: boolean; }; sortBy: { type: () => DataTableSort | null; default: undefined; }; onSortChange: { type: () => (sortBy: DataTableSort | null) => void; default: undefined; }; pageSize: { type: NumberConstructor; default: undefined; }; page: { type: NumberConstructor; default: undefined; }; onPageChange: { type: () => (page: number) => void; default: undefined; }; locale: { type: StringConstructor; default: string; }; selectAllLabel: { type: StringConstructor; default: string; }; selectRowLabel: { type: StringConstructor; default: string; }; sortAscendingLabel: { type: StringConstructor; default: string; }; sortDescendingLabel: { type: StringConstructor; default: string; }; sortNoneLabel: { type: StringConstructor; default: string; }; previousLabel: { type: StringConstructor; default: undefined; }; nextLabel: { type: StringConstructor; default: undefined; }; paginationLabel: { type: StringConstructor; default: string; }; rangeLabel: { type: () => (range: { start: number; end: number; total: number; }) => string; default: ({ start, end, total }: { start: number; end: number; total: number; }) => string; }; emptyLabel: { type: StringConstructor; default: string; }; onRowClick: { type: () => (row: DataTableRow) => void; default: undefined; }; class: { type: StringConstructor; default: undefined; }; }>> & Readonly<{}>, { size: DataTableSize; class: string; caption: VNodeChild; locale: string; page: number; selectedIds: string[]; emptyLabel: string; decorations: Record>; selectable: DataTableSelectMode; onSelectionChange: (ids: string[]) => void; sortable: boolean; sortBy: DataTableSort | null; onSortChange: (sortBy: DataTableSort | null) => void; pageSize: number; onPageChange: (page: number) => void; selectAllLabel: string; selectRowLabel: string; sortAscendingLabel: string; sortDescendingLabel: string; sortNoneLabel: string; previousLabel: string; nextLabel: string; paginationLabel: string; rangeLabel: (range: { start: number; end: number; total: number; }) => string; onRowClick: (row: DataTableRow) => void; }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>; //# sourceMappingURL=DataTable.d.ts.map