1import { A as effect, B as teardown, z as untrack } from './index-CDZuCcOm.js'; 2 3/** 4 * Resize observer singleton. 5 * One listener per element only! 6 * https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ 7 */ 8class ResizeObserverSingleton { 9 /** */ 10 #listeners = new WeakMap(); 11 12 /** @type {ResizeObserver | undefined} */ 13 #observer; 14 15 /** @type {ResizeObserverOptions} */ 16 #options; 17 18 /** @static */ 19 static entries = new WeakMap(); 20 21 /** @param {ResizeObserverOptions} options */ 22 constructor(options) { 23 this.#options = options; 24 } 25 26 /** 27 * @param {Element} element 28 * @param {(entry: ResizeObserverEntry) => any} listener 29 */ 30 observe(element, listener) { 31 var listeners = this.#listeners.get(element) || new Set(); 32 listeners.add(listener); 33 34 this.#listeners.set(element, listeners); 35 this.#getObserver().observe(element, this.#options); 36 37 return () => { 38 var listeners = this.#listeners.get(element); 39 listeners.delete(listener); 40 41 if (listeners.size === 0) { 42 this.#listeners.delete(element); 43 /** @type {ResizeObserver} */ (this.#observer).unobserve(element); 44 } 45 }; 46 } 47 48 #getObserver() { 49 return ( 50 this.#observer ?? 51 (this.#observer = new ResizeObserver( 52 /** @param {any} entries */ (entries) => { 53 for (var entry of entries) { 54 ResizeObserverSingleton.entries.set(entry.target, entry); 55 for (var listener of this.#listeners.get(entry.target) || []) { 56 listener(entry); 57 } 58 } 59 } 60 )) 61 ); 62 } 63} 64 65var resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ 66 box: 'content-box' 67}); 68 69var resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({ 70 box: 'border-box' 71}); 72 73/** 74 * @param {Element} element 75 * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type 76 * @param {(entry: keyof ResizeObserverEntry) => void} set 77 */ 78function bind_resize_observer(element, type, set) { 79 var observer = 80 resize_observer_content_box 81 ; 82 83 var unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type])); 84 teardown(unsub); 85} 86 87/** 88 * @param {HTMLElement} element 89 * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type 90 * @param {(size: number) => void} set 91 */ 92function bind_element_size(element, type, set) { 93 var unsub = resize_observer_border_box.observe(element, () => set(element[type])); 94 95 effect(() => { 96 // The update could contain reads which should be ignored 97 untrack(() => set(element[type])); 98 return unsub; 99 }); 100} 101 102export { bind_resize_observer as a, bind_element_size as b }; 103//# sourceMappingURL=size-CuuZBRle.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.