mirror of
https://github.com/immich-app/immich.git
synced 2025-12-28 09:14:59 +03:00
* Squash - feature complete * remove need to init assetstore * More optimizations. No need to init. Fix tests * lint * add missing selector for e2e * e2e selectors again * Update: fully reactive store, some transitions, bugfixes * merge fallout * Test fallout * safari quirk * security * lint * lint * Bug fixes * lint/format * accidental commit * lock * null check, more throttle * revert long duration * Fix intersection bounds * Fix bugs in intersection calculation * lint, tweak scrubber ui a tiny bit * bugfix - deselecting asset doesnt work * fix not loading bucket, scroll off-by-1 error, jsdoc, naming
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
export type OnResizeCallback = (resizeEvent: { target: HTMLElement; width: number; height: number }) => void;
|
|
|
|
let observer: ResizeObserver;
|
|
let callbacks: WeakMap<HTMLElement, OnResizeCallback>;
|
|
|
|
/**
|
|
* Installs a resizeObserver on the given element - when the element changes
|
|
* size, invokes a callback function with the width/height. Intended as a
|
|
* replacement for bind:clientWidth and bind:clientHeight in svelte4 which use
|
|
* an iframe to measure the size of the element, which can be bad for
|
|
* performance and memory usage. In svelte5, they adapted bind:clientHeight and
|
|
* bind:clientWidth to use an internal resize observer.
|
|
*
|
|
* TODO: When svelte5 is ready, go back to bind:clientWidth and
|
|
* bind:clientHeight.
|
|
*/
|
|
export function resizeObserver(element: HTMLElement, onResize: OnResizeCallback) {
|
|
if (!observer) {
|
|
callbacks = new WeakMap();
|
|
observer = new ResizeObserver((entries) => {
|
|
for (const entry of entries) {
|
|
const onResize = callbacks.get(entry.target as HTMLElement);
|
|
if (onResize) {
|
|
onResize({
|
|
target: entry.target as HTMLElement,
|
|
width: entry.borderBoxSize[0].inlineSize,
|
|
height: entry.borderBoxSize[0].blockSize,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
callbacks.set(element, onResize);
|
|
observer.observe(element);
|
|
|
|
return {
|
|
destroy: () => {
|
|
callbacks.delete(element);
|
|
observer.unobserve(element);
|
|
},
|
|
};
|
|
}
|