fix: Lazily polyfill ResizeObserver for old iOS (#3629)
* fix: Lazily polyfill ResizeObserver for old iOS * fix: Prevent child rendering until polyfills are loaded * tsc
This commit is contained in:
31
app/utils/polyfills.ts
Normal file
31
app/utils/polyfills.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Loads required polyfills.
|
||||
*
|
||||
* @returns A promise that resolves when all required polyfills are loaded
|
||||
*/
|
||||
export async function loadPolyfills() {
|
||||
const polyfills = [];
|
||||
|
||||
if (!supportsResizeObserver()) {
|
||||
polyfills.push(
|
||||
import("@juggle/resize-observer").then((module) => {
|
||||
window.ResizeObserver = module.ResizeObserver;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
return Promise.all(polyfills);
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect ResizeObserver compatability.
|
||||
*
|
||||
* @returns true if the current browser supports ResizeObserver
|
||||
*/
|
||||
function supportsResizeObserver() {
|
||||
return (
|
||||
"ResizeObserver" in global &&
|
||||
"ResizeObserverEntry" in global &&
|
||||
"contentRect" in ResizeObserverEntry.prototype
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user