import type { ObjectOrInterfaceDefinition, PropertyKeys, QueryDefinition, SimplePropertyDef } from "@osdk/api";
import type { ColumnDef, ColumnOrderState, OnChangeFn, VisibilityState } from "@tanstack/react-table";
export interface UseColumnVisibilityProps<
	Q extends ObjectOrInterfaceDefinition,
	RDPs extends Record<string, SimplePropertyDef> = {},
	FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<string, never>,
	TData = unknown
> {
	allColumns: ColumnDef<TData>[];
	onColumnVisibilityChanged?: (newStates: Array<{
		columnId: PropertyKeys<Q> | keyof RDPs | keyof FunctionColumns
		isVisible: boolean
	}>) => void;
}
export interface UseColumnVisibilityResult {
	columnVisibility: VisibilityState;
	onColumnVisibilityChange: OnChangeFn<VisibilityState>;
	columnOrder: ColumnOrderState;
	onColumnOrderChange: OnChangeFn<ColumnOrderState>;
}
export declare const useColumnVisibility: <
	Q extends ObjectOrInterfaceDefinition,
	RDPs extends Record<string, SimplePropertyDef> = {},
	FunctionColumns extends Record<string, QueryDefinition<{}>> = Record<string, never>,
	TData = unknown
>({ allColumns, onColumnVisibilityChanged }: UseColumnVisibilityProps<Q, RDPs, FunctionColumns, TData>) => UseColumnVisibilityResult;
