/**
 * Determines if two filter values are different.
 * For arrays (multiSelect), compares by id set (order-insensitive, avoids JSON serialization).
 * For singleSelect, compares by id if both are objects with id.
 * For dateList selections (objects with both id and value), compares id AND value
 * so re-picking the same library option with a different date still counts as a change.
 *
 * Intentionally adapter-free — kept here (rather than in filter-state.ts) so that
 * FilterPopoverButton can import it without pulling the adapter registry into
 * the import graph. filter-state.ts depends on the adapter registry; the registry
 * depends on FilterPopoverButton; FilterPopoverButton would otherwise depend on
 * filter-state — closing a runtime-evaluated cycle.
 */
export declare const hasChangedFilter: <T>(a: T, b: T) => boolean;
