/**
 * Zenith Reactivity Tracking System
 *
 * This module provides the core dependency tracking mechanism used by
 * signals, effects, and memos. It uses a stack-based approach to track
 * which reactive values are accessed during effect/memo execution.
 *
 * Key concepts:
 * - Subscriber: A function that should be called when a dependency changes
 * - Tracking context: The currently executing effect/memo that should collect dependencies
 * - Dependency: A reactive value that an effect/memo depends on
 */
/**
 * A subscriber is a function that gets called when a reactive value changes
 */
export type Subscriber = () => void;
/**
 * Tracking context - represents an effect or memo that is collecting dependencies
 */
export interface TrackingContext {
    /** The function to call when dependencies change */
    execute: Subscriber;
    /** Set of dependency subscriber sets this context is registered with */
    dependencies: Set<Set<Subscriber>>;
}
/**
 * Get the current tracking context (if any)
 */
export declare function getCurrentContext(): TrackingContext | undefined;
/**
 * Push a new tracking context onto the stack
 */
export declare function pushContext(context: TrackingContext): void;
/**
 * Pop the current tracking context from the stack
 */
export declare function popContext(): TrackingContext | undefined;
/**
 * Track a dependency - called when a reactive value is read
 *
 * @param subscribers - The subscriber set of the reactive value being read
 */
export declare function trackDependency(subscribers: Set<Subscriber>): void;
/**
 * Notify subscribers that a reactive value has changed
 *
 * @param subscribers - The subscriber set to notify
 */
export declare function notifySubscribers(subscribers: Set<Subscriber>): void;
/**
 * Clean up a tracking context - remove it from all dependency sets
 *
 * @param context - The context to clean up
 */
export declare function cleanupContext(context: TrackingContext): void;
/**
 * Run a function without tracking dependencies
 *
 * @param fn - The function to run
 * @returns The return value of the function
 */
export declare function runUntracked<T>(fn: () => T): T;
/**
 * Start a batch - defer effect execution until batch ends
 */
export declare function startBatch(): void;
/**
 * End a batch - run all pending effects
 */
export declare function endBatch(): void;
/**
 * Check if currently inside a batch
 */
export declare function isBatching(): boolean;
