import { type MatchMediaChangeViewport, type MatchMediaMatcher } from "../mocks/match-media.js";
/**
 * @since 6.0.0
 */
export interface MatchMediaMockFunction {
    mockImplementation(fn: typeof window.matchMedia): this;
}
/**
 * Used to create a `spyOn(window, "matchMedia")` without knowing the test
 * framework.
 *
 * @example Setup Test Framework
 * ```tsx
 * export function spyOnMatchMedia(
 *   defaultMatch: MatchMediaMatcher = matchDesktop
 * ): jest.SpiedFunction<typeof window.matchMedia> & MatchMediaChangeViewport {
 *   return createMatchMediaSpy(jest.spyOn(window, "matchMedia"), defaultMatch);
 * }
 * ```
 *
 * NOTE: The `spyOnMatchMedia` function **must** not call the `.spyOn`
 * immediately to work correctly. The spy needs to be invoked whenever this is
 * called instead. For example, this is bad and will fail:
 *
 * @example Bad Example
 * ```tsx
 * export const spyOnMatchMedia = createMatchMediaSpy.bind(null, jest.spy(window, "matchMedia"));
 * ```
 *
 * This is mostly a reminder to myself since I wanted something like the
 * following code, but failed:
 *
 * ```ts
 * export const spyOnMatchMedia = createMatchMediaSpy(jest.spyOn(window, "matchMedia"));
 * ```
 *
 * @since 6.0.0
 * @internal
 */
export declare function createMatchMediaSpy<SpyFunction extends MatchMediaMockFunction>(matchMediaSpy: SpyFunction, defaultMatch?: MatchMediaMatcher): SpyFunction & MatchMediaChangeViewport;
