export interface UseFocusedRowProps<TData> {
	/**
	* Controlled focused row id. `undefined` enables uncontrolled mode
	* (internal state). `null` means "no row focused" under controlled
	* mode.
	*/
	focusedRowId?: string | null;
	onFocusedRowChanged?: (row: TData | null) => void;
	/**
	* Resolves a row id back to the row. Used to look up the full row
	* when firing `onFocusedRowChanged` so callers receive row data even
	* though the hook only stores the id. Return `null` when the id no
	* longer matches a known row (e.g. it was removed).
	*/
	getRowById: (id: string) => TData | null;
}
export interface UseFocusedRowResult<TData> {
	/**
	* Effective focused row id — derived from the controlled value or
	* internal state. Children consume the id (not the row) so they can
	* compare against TanStack row ids without holding row references.
	*/
	focusedRowId: string | null;
	/**
	* Request a focus change by id. In uncontrolled mode this mutates
	* internal state; the change callback fires in both modes so callers
	* can observe. The callback receives the full row resolved via
	* `getRowById` (or `null`).
	*/
	setFocusedRowId: (id: string | null) => void;
	/**
	* True when the caller passed `focusedRow` (including `null`).
	*/
	isControlled: boolean;
}
export declare function useFocusedRow<TData>({ focusedRowId, onFocusedRowChanged, getRowById }: UseFocusedRowProps<TData>): UseFocusedRowResult<TData>;
