/** * KTUI - Free & Open-Source Tailwind UI Components by Keenthemes * Copyright 2025 by Keenthemes Inc */ import { KTDataTableAttributeInterface, KTDataTableColumnFilterInterface, KTDataTableConfigInterface, KTDataTableDataInterface, KTDataTableInterface, KTDataTableSortOrderInterface, KTDataTableStateInterface, } from './types'; export type KTDataTableEmit = (eventName: string, eventData?: object) => void; export type KTDataTableCleanup = () => void; export interface KTDataTableEventAdapter { emit(eventName: string, eventData?: object): void; } export interface KTDataTableStateStore { getState(): KTDataTableStateInterface; replaceState(state: KTDataTableStateInterface): void; patchState(state: Partial): void; setPage(page: number): void; setPageSize(pageSize: number, page?: number): void; setSort( field: keyof KTDataTableDataInterface | number, order: KTDataTableSortOrderInterface, ): void; setSearch(search: string | object): void; setFilter(filter: KTDataTableColumnFilterInterface): void; setOriginalData( originalData: KTDataTableDataInterface[], originalDataAttributes: KTDataTableAttributeInterface[], ): void; } export interface KTDataTableProviderResult { data: T[]; totalItems: number; response?: unknown; skipped?: boolean; } export interface KTDataTableDataProvider { fetch(): Promise>; dispose?(): void; } export interface KTDataTableLocalProviderElements { tableElement: HTMLTableElement; tbodyElement: HTMLTableSectionElement; theadElement: HTMLTableSectionElement; } export interface KTDataTableTableRendererInput< T extends KTDataTableDataInterface, > { config: KTDataTableConfigInterface; context: KTDataTableInterface; data: T[]; getLogicalColumnCount: () => number; getState: () => KTDataTableStateInterface; originalTbodyClass: string; originalTrClasses: string[]; originalTdClasses: string[][]; tableElement: HTMLTableElement; theadElement: HTMLTableSectionElement; } export interface KTDataTableTableRenderer { render(input: KTDataTableTableRendererInput): HTMLTableSectionElement; notice( tableElement: HTMLTableElement, getLogicalColumnCount: () => number, message?: string, ): void; } export interface KTDataTablePaginationRendererInput { config: KTDataTableConfigInterface; dataLength: number; infoElement?: HTMLElement | null; paginateData: (page: number) => void; paginationElement?: HTMLElement | null; reloadPageSize: (pageSize: number, page?: number) => void; sizeElement?: HTMLSelectElement | null; state: KTDataTableStateInterface; } export interface KTDataTablePaginationRenderer { render(input: KTDataTablePaginationRendererInput): KTDataTableCleanup | void; }