import { type ReactNode } from "react"; export interface SizeBuckets { small: boolean; medium: boolean; large: boolean; } export declare function deriveSizeBuckets(width: number): SizeBuckets; /** Lands in the window's bucket for the first frame. */ export declare function screenSeedWidth(screen: SizeBuckets): number; /** Null: no enclosing boundary, so the window is the container. */ export declare const ContainerSizeContext: import("react").Context; /** * Memoized on the buckets, not the width, so a resize within a bucket re-renders no consumer. * Renders nothing, so it is unit-testable; `size_boundary` measures. */ export declare function ContainerSizeProvider(props: { width: number; children: ReactNode; }): import("react").JSX.Element; export declare function useEnclosingContainerSize(): SizeBuckets | null; /** * Put `measure` on the element as its `ref`. `null` without layout; with it, read as the element * attaches — before the first paint, so a surface forking on width never paints the wrong fork first — * then on every resize. The ref callback returns the disconnect as React 19's cleanup. */ export declare function useMeasuredWidth(): { measure: (node: HTMLElement | null) => (() => void) | undefined; width: number | null; }; export interface MeasuredSize { width: number; height: number; } /** * Separate from `useMeasuredWidth` because a width reader must not wake on height changes (a mobile * keyboard) and a box reader must. */ export declare function useMeasuredSize(): { measure: (node: HTMLElement | null) => (() => void) | undefined; size: MeasuredSize | null; };