/**
 * Shared `prefers-reduced-motion` watcher for the ApexCharts graph family.
 *
 * Reading `matchMedia` once at construction is not enough: the setting can be
 * flipped while a chart is on screen, and a chart that only sampled it at init
 * keeps animating. This watcher takes the pattern Gantt already had right (a
 * live `MediaQueryList` listener, removed on destroy) and makes it shared, so
 * every driver honours the OS preference without the embedding app having to
 * add a class by hand.
 *
 * Besides reporting `matches`, it can mirror the preference onto a host element
 * as a class, which is how the CSS side of reduced motion is switched off
 * (`.apextree-reduced-motion .foo { animation: none }` and friends). It only
 * ever removes a class it added itself, so an app that sets the class manually
 * to force reduced motion keeps it.
 *
 * SSR-safe: with no `window`/`matchMedia` the watcher is inert and reports
 * `false`.
 */
export interface ReducedMotionWatcherOptions {
    /** Element that carries {@link className} while the preference is active. */
    element?: HTMLElement | null;
    /** Class mirrored onto {@link element}. Omit to only observe. */
    className?: string;
    /** Called on every change, with the new preference. */
    onChange?: (reduced: boolean) => void;
}
export declare class ReducedMotionWatcher {
    private readonly element;
    private readonly className;
    private readonly onChange?;
    private mql;
    private handler;
    /**
     * Whether the class currently on the element is ours. The same shape the
     * theme tokens use: remember what we wrote, and treat the value as ours
     * (removable) only while it is still there because we put it there. Without
     * this, the first `apply(false)` would strip a class the host set by hand.
     */
    private ownsClass;
    constructor(options?: ReducedMotionWatcherOptions);
    /**
     * True when motion should be suppressed: either the OS asks for it, or the
     * host element carries the class (an app can force it independently of the
     * OS setting, which several demos and tests rely on).
     */
    get matches(): boolean;
    /** Detach the media listener. The mirrored class is left as-is. */
    dispose(): void;
    private applyClass;
}
//# sourceMappingURL=reducedMotion.d.ts.map