diff --git a/package-lock.json b/package-lock.json index 186c73818158..34fc7a355214 100644 --- a/package-lock.json +++ b/package-lock.json @@ -291,6 +291,12 @@ "integrity": "sha512-aOmXdv1a1/vYUn1OT1CED8ftbkmmYbKhKGSyMDeJiidLvKRKvZUQOdXwG/wcNY7T1Qb0XTlVdiYjIq00U7pLrQ==", "dev": true }, + "@types/resize-observer-browser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.5.tgz", + "integrity": "sha512-8k/67Z95Goa6Lznuykxkfhq9YU3l1Qe6LNZmwde1u7802a3x8v44oq0j91DICclxatTr0rNnhXx7+VTIetSrSQ==", + "dev": true + }, "@types/resolve": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", diff --git a/package.json b/package.json index 4a5449c548d4..0612061c93e8 100644 --- a/package.json +++ b/package.json @@ -105,6 +105,7 @@ "@sveltejs/eslint-config": "github:sveltejs/eslint-config#v5.6.0", "@types/mocha": "^7.0.0", "@types/node": "^8.10.53", + "@types/resize-observer-browser": "^0.1.5", "@typescript-eslint/eslint-plugin": "^4.9.0", "@typescript-eslint/parser": "^4.9.0", "acorn": "^7.4.0", diff --git a/src/compiler/tsconfig.json b/src/compiler/tsconfig.json index c5939a0fdce1..ace827242952 100644 --- a/src/compiler/tsconfig.json +++ b/src/compiler/tsconfig.json @@ -3,9 +3,9 @@ "include": ["."], "compilerOptions": { - "lib": ["es2017", "webworker"] + "lib": ["es2017", "webworker"], // TODO: remove mocha types from the whole project - // "types": ["node", "estree"] + "types": ["node", "estree", "mocha"] } } diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 8d99234c9de2..c0974a80655a 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -260,6 +260,19 @@ export function is_crossorigin() { } export function add_resize_listener(node: HTMLElement, fn: () => void) { + if (window.ResizeObserver) { + const observer = new ResizeObserver(entries => { + for (const entry of entries) { + if (entry.target === node) { + fn(); + break; + } + } + }); + observer.observe(node); + return observer.disconnect; + } + const computed_style = getComputedStyle(node); if (computed_style.position === 'static') { diff --git a/src/runtime/tsconfig.json b/src/runtime/tsconfig.json index f3b4691b4190..0350df0bb558 100644 --- a/src/runtime/tsconfig.json +++ b/src/runtime/tsconfig.json @@ -5,7 +5,7 @@ "compilerOptions": { "lib": ["es2015", "dom", "dom.iterable"], "target": "es2015", - "types": [], + "types": ["resize-observer-browser"], "baseUrl": ".", "paths": {