1
This commit is contained in:
Generated
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
export type ResizeListener = (element: Element) => void;
|
||||
declare function onResize(entities: ResizeObserverEntry[]): void;
|
||||
export declare const _el: Map<Element, Set<ResizeListener>>;
|
||||
export declare const _rs: typeof onResize;
|
||||
export declare function observe(element: Element, callback: ResizeListener): void;
|
||||
export declare function unobserve(element: Element, callback: ResizeListener): void;
|
||||
export {};
|
||||
Generated
Vendored
+49
@@ -0,0 +1,49 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports._rs = exports._el = void 0;
|
||||
exports.observe = observe;
|
||||
exports.unobserve = unobserve;
|
||||
// =============================== Const ===============================
|
||||
const elementListeners = new Map();
|
||||
function onResize(entities) {
|
||||
entities.forEach(entity => {
|
||||
const {
|
||||
target
|
||||
} = entity;
|
||||
elementListeners.get(target)?.forEach(listener => listener(target));
|
||||
});
|
||||
}
|
||||
|
||||
// Delay create ResizeObserver since it's not supported in server side
|
||||
let observer;
|
||||
function ensureResizeObserver() {
|
||||
if (!observer) {
|
||||
observer = new ResizeObserver(onResize);
|
||||
}
|
||||
return observer;
|
||||
}
|
||||
|
||||
// Dev env only
|
||||
const _el = exports._el = process.env.NODE_ENV !== 'production' ? elementListeners : null; // eslint-disable-line
|
||||
const _rs = exports._rs = process.env.NODE_ENV !== 'production' ? onResize : null; // eslint-disable-line
|
||||
|
||||
// ============================== Observe ==============================
|
||||
function observe(element, callback) {
|
||||
if (!elementListeners.has(element)) {
|
||||
elementListeners.set(element, new Set());
|
||||
ensureResizeObserver().observe(element);
|
||||
}
|
||||
elementListeners.get(element).add(callback);
|
||||
}
|
||||
function unobserve(element, callback) {
|
||||
if (elementListeners.has(element)) {
|
||||
elementListeners.get(element).delete(callback);
|
||||
if (!elementListeners.get(element).size) {
|
||||
ensureResizeObserver().unobserve(element);
|
||||
elementListeners.delete(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user