import type { JSX } from "solid-js";
import type { SimpleTableProps, SimpleTableConfig, ColumnDef, TableAPI, CellValue, CellRendererProps, HeaderRendererProps, FooterRendererProps, LoadingStateRendererProps, ErrorStateRendererProps, EmptyStateRendererProps, HeaderDropdownProps, ColumnEditorRowRendererProps, ColumnEditorCustomRendererProps, ColumnEditorConfig, RowButtonProps } from "simple-table-core";
/**
* Default `TData` for Solid props bags / helpers: open records so untyped
* object arrays keep assigning to `rows` without `asRows`.
*
* Prefer letting `` infer `TData` from
* those props — an explicit `SimpleTable` is only needed when inference
* can't see a typed `rows`/`columns` (or for a typed `ref` callback).
*/
export type SolidDefaultRowData = Record;
export interface TableInstance {
mount(): void;
update(config: Partial): void;
destroy(): void;
getAPI(): TableAPI;
/** Re-measure `width: "auto"` columns after custom renderer DOM settles. */
refitAutoSizeColumns?(): void;
}
export type SolidIconElement = JSX.Element;
export interface SolidIconsConfig {
drag?: SolidIconElement;
expand?: SolidIconElement;
filter?: SolidIconElement;
headerCollapse?: SolidIconElement;
headerExpand?: SolidIconElement;
next?: SolidIconElement;
prev?: SolidIconElement;
sortDown?: SolidIconElement;
sortUp?: SolidIconElement;
pinnedLeftIcon?: SolidIconElement;
pinnedRightIcon?: SolidIconElement;
}
export type SolidCellRenderer = (props: CellRendererProps) => JSX.Element;
export type SolidHeaderRenderer = (props: HeaderRendererProps) => JSX.Element;
export type SolidFooterRenderer = (props: FooterRendererProps) => JSX.Element;
export type SolidHeaderDropdown = (props: HeaderDropdownProps) => JSX.Element;
export type SolidColumnEditorRowRenderer = (props: ColumnEditorRowRendererProps) => JSX.Element;
export type SolidColumnEditorCustomRenderer = (props: ColumnEditorCustomRendererProps) => JSX.Element;
export type SolidRowButton = (props: RowButtonProps) => JSX.Element;
export type SolidLoadingStateRenderer = ((props: LoadingStateRendererProps) => JSX.Element) | JSX.Element;
export type SolidErrorStateRenderer = ((props: ErrorStateRendererProps) => JSX.Element) | JSX.Element;
export type SolidEmptyStateRenderer = ((props: EmptyStateRendererProps) => JSX.Element) | JSX.Element;
export interface SolidColumnEditorConfig extends Omit {
rowRenderer?: SolidColumnEditorRowRenderer;
customRenderer?: SolidColumnEditorCustomRenderer;
}
/**
* Column definition for `columns`: same column metadata as core
* columns, but `cellRenderer` / `headerRenderer` / `children` / `nestedTable` are Solid-only.
*/
export interface SolidColumnDef extends Omit, "cellRenderer" | "headerRenderer" | "children" | "nestedTable"> {
cellRenderer?: SolidCellRenderer;
headerRenderer?: SolidHeaderRenderer;
children?: ReadonlyArray>;
/** Nested grid; child columns may use a different row type than `TData`. */
nestedTable?: NestedTableSolidConfig;
}
export interface SimpleTableSolidProps extends Omit, "columns" | "footerRenderer" | "emptyStateRenderer" | "errorStateRenderer" | "loadingStateRenderer" | "tableEmptyStateRenderer" | "headerDropdown" | "columnEditorConfig" | "icons" | "rows" | "rowButtons" | "onColumnOrderChange" | "onColumnWidthChange" | "onHeaderEdit" | "onColumnSelect"> {
/** Column definitions. */
columns?: ReadonlyArray>;
onColumnOrderChange?: (newHeaders: SolidColumnDef[]) => void;
onColumnWidthChange?: (headers: SolidColumnDef[]) => void;
onHeaderEdit?: (header: SolidColumnDef, newLabel: string) => void;
onColumnSelect?: (header: SolidColumnDef) => void;
/** Row data; cast to vanilla `Row[]` inside the adapter. */
rows: readonly TData[];
footerRenderer?: SolidFooterRenderer;
loadingStateRenderer?: SolidLoadingStateRenderer;
errorStateRenderer?: SolidErrorStateRenderer;
emptyStateRenderer?: SolidEmptyStateRenderer;
tableEmptyStateRenderer?: JSX.Element;
headerDropdown?: SolidHeaderDropdown;
columnEditorConfig?: SolidColumnEditorConfig;
icons?: SolidIconsConfig;
/** Per-row action buttons; each entry returns JSX rendered into the row's selection column. */
rowButtons?: SolidRowButton[];
/** Callback ref — receives the TableAPI once the table is mounted. */
ref?: (api: TableAPI) => void;
}
/**
* TData-bound call signatures omitted at nest boundaries so
* `SolidColumnDef[]` assigns under a parent column without casts/`any`.
* Child columns stay fully checked at their own declaration site.
*/
type SolidColumnDefCallbacks = "cellRenderer" | "headerRenderer" | "children" | "nestedTable" | "comparator" | "exportValueGetter" | "valueFormatter" | "valueGetter" | "quickFilterGetter";
/** Column shape accepted on nested grids — metadata only, no TData-bound callbacks. */
export type NestedSolidColumnDef = Omit, SolidColumnDefCallbacks> & {
children?: ReadonlyArray;
nestedTable?: NestedTableSolidConfig;
};
/**
* Nested grid props (no `rows` / inherited state renderers).
* Child row shape may differ from the parent column's `TData`.
*/
export type NestedTableSolidConfig = Omit & {
columns?: ReadonlyArray;
};
export type { CellRendererProps, HeaderRendererProps, FooterRendererProps, LoadingStateRendererProps, ErrorStateRendererProps, EmptyStateRendererProps, HeaderDropdownProps, ColumnEditorRowRendererProps, ColumnEditorCustomRendererProps, };