import { type ButtonHTMLAttributes, type ReactNode } from "react";
import { type ColumnDef } from "@tanstack/react-table";
export declare function PageHeader({ title, description, actions, }: {
title: ReactNode;
description?: ReactNode;
actions?: ReactNode;
}): import("react/jsx-runtime").JSX.Element;
export declare function PageBody({ children }: {
children: ReactNode;
}): import("react/jsx-runtime").JSX.Element;
export declare function Button({ variant, className, ...props }: ButtonHTMLAttributes & {
variant?: "primary" | "secondary" | "ghost" | "danger";
}): import("react/jsx-runtime").JSX.Element;
export declare function IconButton({ label, children, ...props }: ButtonHTMLAttributes & {
label: string;
children: ReactNode;
}): import("react/jsx-runtime").JSX.Element;
export declare function Modal({ open, title, description, onClose, children, }: {
open: boolean;
title: string;
description?: string;
onClose: () => void;
children: ReactNode;
}): import("react/jsx-runtime").JSX.Element | null;
export declare function Field({ label, hint, children, }: {
label: string;
hint?: string;
children: ReactNode;
}): import("react/jsx-runtime").JSX.Element;
export declare function LoadingRows({ rows }: {
rows?: number;
}): import("react/jsx-runtime").JSX.Element;
export type ColumnMeta = {
align?: "left" | "right" | "center";
width?: number;
cellClassName?: string;
hideOnMobile?: boolean;
};
export declare function DataTable({ columns, data, getRowId, rowHref, onRowClick, searchPlaceholder, searchFn, rightSlot, filters, empty, pageSize, }: {
columns: ColumnDef[];
data: T[];
getRowId?: (row: T) => string;
rowHref?: (row: T) => string;
onRowClick?: (row: T) => void;
searchPlaceholder?: string;
searchFn?: (row: T, query: string) => boolean;
rightSlot?: ReactNode;
filters?: ReactNode;
empty?: ReactNode;
pageSize?: number;
}): import("react/jsx-runtime").JSX.Element;
export declare function useStableColumns(factory: () => ColumnDef[], deps: unknown[]): ColumnDef[];
//# sourceMappingURL=components.d.ts.map