|
|
|
|
@ -67,6 +67,7 @@ export interface ActiveDomRemoveNodeOptions {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type ActiveDomListenerCleanup = () => void;
|
|
|
|
|
export type ActiveDomObserverCleanup = () => void;
|
|
|
|
|
|
|
|
|
|
export interface ActiveDom {
|
|
|
|
|
breakpoints: Active<Breakpoints>;
|
|
|
|
|
@ -110,6 +111,21 @@ export interface ActiveDom {
|
|
|
|
|
handler: EventListener,
|
|
|
|
|
options?: boolean | AddEventListenerOptions
|
|
|
|
|
): ActiveDomListenerCleanup;
|
|
|
|
|
observeResize(
|
|
|
|
|
target: Element,
|
|
|
|
|
callback: ResizeObserverCallback,
|
|
|
|
|
options?: ResizeObserverOptions
|
|
|
|
|
): ActiveDomObserverCleanup;
|
|
|
|
|
observeMutation(
|
|
|
|
|
target: Node,
|
|
|
|
|
callback: MutationCallback,
|
|
|
|
|
options: MutationObserverInit
|
|
|
|
|
): ActiveDomObserverCleanup;
|
|
|
|
|
observeIntersection(
|
|
|
|
|
target: Element,
|
|
|
|
|
callback: IntersectionObserverCallback,
|
|
|
|
|
options?: IntersectionObserverInit
|
|
|
|
|
): ActiveDomObserverCleanup;
|
|
|
|
|
activeElement(node?: Element | Window | Node | Document | null): Element | null;
|
|
|
|
|
query<T extends Element = Element>(
|
|
|
|
|
selector: string,
|
|
|
|
|
@ -219,6 +235,50 @@ export function createActiveDom(props: ActiveDomProps = {}): ActiveDom {
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function observeResize(
|
|
|
|
|
target: Element,
|
|
|
|
|
callback: ResizeObserverCallback,
|
|
|
|
|
options?: ResizeObserverOptions
|
|
|
|
|
): ActiveDomObserverCleanup {
|
|
|
|
|
const ResizeObserverCtor = (
|
|
|
|
|
resolveWindow(target) as unknown as { ResizeObserver?: typeof ResizeObserver }
|
|
|
|
|
).ResizeObserver;
|
|
|
|
|
if (typeof ResizeObserverCtor !== 'function') return () => {};
|
|
|
|
|
const observer = new ResizeObserverCtor(callback);
|
|
|
|
|
observer.observe(target, options);
|
|
|
|
|
return () => observer.disconnect();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function observeMutation(
|
|
|
|
|
target: Node,
|
|
|
|
|
callback: MutationCallback,
|
|
|
|
|
options: MutationObserverInit
|
|
|
|
|
): ActiveDomObserverCleanup {
|
|
|
|
|
const MutationObserverCtor = (
|
|
|
|
|
resolveWindow(target) as unknown as { MutationObserver?: typeof MutationObserver }
|
|
|
|
|
).MutationObserver;
|
|
|
|
|
if (typeof MutationObserverCtor !== 'function') return () => {};
|
|
|
|
|
const observer = new MutationObserverCtor(callback);
|
|
|
|
|
observer.observe(target, options);
|
|
|
|
|
return () => observer.disconnect();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function observeIntersection(
|
|
|
|
|
target: Element,
|
|
|
|
|
callback: IntersectionObserverCallback,
|
|
|
|
|
options: IntersectionObserverInit = {}
|
|
|
|
|
): ActiveDomObserverCleanup {
|
|
|
|
|
const IntersectionObserverCtor = (
|
|
|
|
|
resolveWindow(options.root ?? target) as unknown as {
|
|
|
|
|
IntersectionObserver?: typeof IntersectionObserver;
|
|
|
|
|
}
|
|
|
|
|
).IntersectionObserver;
|
|
|
|
|
if (typeof IntersectionObserverCtor !== 'function') return () => {};
|
|
|
|
|
const observer = new IntersectionObserverCtor(callback, options);
|
|
|
|
|
observer.observe(target);
|
|
|
|
|
return () => observer.disconnect();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
breakpoints,
|
|
|
|
|
viewport: viewportReadonly,
|
|
|
|
|
@ -320,6 +380,9 @@ export function createActiveDom(props: ActiveDomProps = {}): ActiveDom {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
listen,
|
|
|
|
|
observeResize,
|
|
|
|
|
observeMutation,
|
|
|
|
|
observeIntersection,
|
|
|
|
|
activeElement(node): Element | null {
|
|
|
|
|
return resolveDocument(node).activeElement;
|
|
|
|
|
},
|
|
|
|
|
|