@stacksjs/stx
Version:
A performant UI Framework. Powered by Bun.
60 lines • 2.06 kB
TypeScript
/**
* Observe element size changes
*/
export declare function useResizeObserver(target: Element | (() => Element | null) | null, callback?: (entries: ResizeObserverEntry[]) => void, options?: ResizeObserverOptions): ResizeObserverRef;
/**
* Observe multiple elements
*/
export declare function useResizeObserverMultiple(targets: Element[] | (() => Element[]), callback?: (entries: ResizeObserverEntry[]) => void, options?: ResizeObserverOptions): ResizeObserverRef & { states: () => Map<Element, ResizeObserverState> };
/**
* Get element dimensions reactively
*/
export declare function useElementSize(target: Element | (() => Element | null) | null): {
get: () => { width: number; height: number }
subscribe: (fn: (size: { width: number; height: number }) => void) => () => void
isSupported: () => boolean
};
/**
* Check if ResizeObserver is supported (standalone function)
*/
export declare function hasResizeObserver(): boolean;
/**
* useResizeObserver - Resize Observer API wrapper
*
* Monitor element size changes reactively.
*
* @example
* ```ts
* const observer = useResizeObserver(element)
* observer.subscribe(entries => {
* console.log('Size changed:', entries[0].contentRect)
* })
*
* // With callback
* useResizeObserver(element, (entries) => {
* console.log('Width:', entries[0].contentRect.width)
* })
* ```
*/
export declare interface ResizeObserverSize {
width: number
height: number
inlineSize: number
blockSize: number
}
export declare interface ResizeObserverState {
contentRect: DOMRectReadOnly | null
contentBoxSize: ResizeObserverSize | null
borderBoxSize: ResizeObserverSize | null
devicePixelContentBoxSize: ResizeObserverSize | null
}
export declare interface ResizeObserverOptions {
box?: 'content-box' | 'border-box' | 'device-pixel-content-box'
}
export declare interface ResizeObserverRef {
get: () => ResizeObserverState
subscribe: (fn: (entries: ResizeObserverEntry[]) => void) => () => void
observe: () => void
disconnect: () => void
isSupported: () => boolean
}