size.js — svelte Source File
Architecture documentation for size.js, a javascript file in the svelte codebase. 5 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR fe1dcfc3_17ce_7457_26bc_48c27d79cefc["size.js"] 1ae6fa4e_16ee_acdf_5e28_17eb0819fddb["effects.js"] fe1dcfc3_17ce_7457_26bc_48c27d79cefc --> 1ae6fa4e_16ee_acdf_5e28_17eb0819fddb a985ae40_8ef8_7ef2_adad_116fbf97e70c["effect"] fe1dcfc3_17ce_7457_26bc_48c27d79cefc --> a985ae40_8ef8_7ef2_adad_116fbf97e70c 20340432_01a2_6741_abf4_60ccab51cdb3["teardown"] fe1dcfc3_17ce_7457_26bc_48c27d79cefc --> 20340432_01a2_6741_abf4_60ccab51cdb3 bde4209f_8ffc_1594_4024_b1835a44bcf6["runtime.js"] fe1dcfc3_17ce_7457_26bc_48c27d79cefc --> bde4209f_8ffc_1594_4024_b1835a44bcf6 a814b193_e12a_4037_c3c8_dfd45f3bd0bb["untrack"] fe1dcfc3_17ce_7457_26bc_48c27d79cefc --> a814b193_e12a_4037_c3c8_dfd45f3bd0bb style fe1dcfc3_17ce_7457_26bc_48c27d79cefc fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { effect, teardown } from '../../../reactivity/effects.js';
import { untrack } from '../../../runtime.js';
/**
* We create one listener for all elements
* @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}
*/
class ResizeObserverSingleton {
/** */
#listeners = new WeakMap();
/** @type {ResizeObserver | undefined} */
#observer;
/** @type {ResizeObserverOptions} */
#options;
/** @static */
static entries = new WeakMap();
/** @param {ResizeObserverOptions} options */
constructor(options) {
this.#options = options;
}
/**
* @param {Element} element
* @param {(entry: ResizeObserverEntry) => any} listener
*/
observe(element, listener) {
var listeners = this.#listeners.get(element) || new Set();
listeners.add(listener);
this.#listeners.set(element, listeners);
this.#getObserver().observe(element, this.#options);
return () => {
var listeners = this.#listeners.get(element);
listeners.delete(listener);
if (listeners.size === 0) {
this.#listeners.delete(element);
/** @type {ResizeObserver} */ (this.#observer).unobserve(element);
}
};
}
#getObserver() {
return (
this.#observer ??
(this.#observer = new ResizeObserver(
/** @param {any} entries */ (entries) => {
for (var entry of entries) {
ResizeObserverSingleton.entries.set(entry.target, entry);
for (var listener of this.#listeners.get(entry.target) || []) {
listener(entry);
}
}
}
))
);
}
}
var resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({
box: 'content-box'
});
var resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({
box: 'border-box'
});
var resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({
box: 'device-pixel-content-box'
});
/**
* @param {Element} element
* @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type
* @param {(entry: keyof ResizeObserverEntry) => void} set
*/
export function bind_resize_observer(element, type, set) {
var observer =
type === 'contentRect' || type === 'contentBoxSize'
? resize_observer_content_box
: type === 'borderBoxSize'
? resize_observer_border_box
: resize_observer_device_pixel_content_box;
var unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));
teardown(unsub);
}
/**
* @param {HTMLElement} element
* @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type
* @param {(size: number) => void} set
*/
export function bind_element_size(element, type, set) {
var unsub = resize_observer_border_box.observe(element, () => set(element[type]));
effect(() => {
// The update could contain reads which should be ignored
untrack(() => set(element[type]));
return unsub;
});
}
Domain
Subdomains
Classes
Dependencies
Source
Frequently Asked Questions
What does size.js do?
size.js is a source file in the svelte codebase, written in javascript. It belongs to the ClientRuntime domain, Hydration subdomain.
What functions are defined in size.js?
size.js defines 2 function(s): bind_element_size, bind_resize_observer.
What does size.js depend on?
size.js imports 5 module(s): effect, effects.js, runtime.js, teardown, untrack.
Where is size.js in the architecture?
size.js is located at packages/svelte/src/internal/client/dom/elements/bindings/size.js (domain: ClientRuntime, subdomain: Hydration, directory: packages/svelte/src/internal/client/dom/elements/bindings).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free