/** * Reactive wrappers for browser Observer APIs. * * Provides composables for IntersectionObserver, ResizeObserver, and * MutationObserver that expose reactive signals updated on every callback. * * @module bquery/media */ import type { IntersectionObserverOptions, IntersectionObserverSignal, MutationObserverOptions, MutationObserverSignal, ResizeObserverOptions, ResizeObserverSignal } from './types'; /** * Returns a reactive signal tracking element intersection with a root viewport. * * The returned handle exposes `observe()` / `unobserve()` methods so you can * control which elements are watched. If an initial `target` is provided it is * observed immediately. * * @param target - Optional element or array of elements to observe immediately. * @param options - Standard `IntersectionObserver` init options. * @returns A readonly reactive signal with intersection state, plus `observe`, * `unobserve`, and `destroy` methods. * * @example * ```ts * import { useIntersectionObserver } from '@bquery/bquery/media'; * import { effect } from '@bquery/bquery/reactive'; * * const el = document.querySelector('#lazy-image')!; * const io = useIntersectionObserver(el, { threshold: 0.5 }); * * effect(() => { * if (io.value.isIntersecting) { * console.log('Element is 50% visible'); * } * }); * * // Cleanup when done * io.destroy(); * ``` */ export declare const useIntersectionObserver: (target?: Element | Element[] | null, options?: IntersectionObserverOptions) => IntersectionObserverSignal; /** * Returns a reactive signal tracking the size of observed elements. * * By default it uses the `content-box`, but you can configure the observed box * via the underlying `ResizeObserver` options (e.g. `{ box: 'border-box' }`). * * The returned handle exposes `observe()` / `unobserve()` methods. If an * initial `target` is provided it is observed immediately. * * @param target - Optional element or array of elements to observe immediately. * @param options - ResizeObserver options (e.g. `{ box: 'border-box' }`). * @returns A readonly reactive signal with `{ width, height, entry }` derived * from the configured box, plus `observe`, `unobserve`, and `destroy` methods. * * @example * ```ts * import { useResizeObserver } from '@bquery/bquery/media'; * import { effect } from '@bquery/bquery/reactive'; * * const el = document.querySelector('#panel')!; * const size = useResizeObserver(el); * * effect(() => { * console.log(`Panel size: ${size.value.width}x${size.value.height}`); * }); * * size.destroy(); * ``` */ export declare const useResizeObserver: (target?: Element | Element[] | null, options?: ResizeObserverOptions) => ResizeObserverSignal; /** * Returns a reactive signal tracking DOM mutations on observed nodes. * * The returned handle exposes `observe()` and `takeRecords()` for manual * lifecycle control. If an initial `target` is provided it is observed * immediately. * * @param target - Optional node to observe immediately. * @param options - MutationObserver init options. Defaults to `{ attributes: true }`. * @returns A readonly reactive signal with `{ mutations, count }`, plus * `observe`, `takeRecords`, and `destroy` methods. * * @example * ```ts * import { useMutationObserver } from '@bquery/bquery/media'; * import { effect } from '@bquery/bquery/reactive'; * * const el = document.querySelector('#dynamic-content')!; * const mo = useMutationObserver(el, { childList: true, subtree: true }); * * effect(() => { * console.log(`${mo.value.count} mutation batches observed`); * }); * * mo.destroy(); * ``` */ export declare const useMutationObserver: (target?: Node | null, options?: MutationObserverOptions) => MutationObserverSignal; //# sourceMappingURL=observers.d.ts.map