diff --git a/local/browser-testing/dist/Select.d.ts b/local/browser-testing/dist/Select.d.ts
index df4d327..5005192 100644
--- a/local/browser-testing/dist/Select.d.ts
+++ b/local/browser-testing/dist/Select.d.ts
@@ -1,4 +1,3 @@
-///
export declare const generateSelectCallback: (targetElms: HTMLElement[] | HTMLElement | null, callback: (targetAffectedElm: HTMLElement, possibleValues: string[], selectedValue: string) => any) => (event: Event | HTMLSelectElement | null) => void;
export declare const generateClassChangeSelectCallback: (targetElms: HTMLElement[] | HTMLElement | null) => (event: Event | HTMLSelectElement | null) => void;
export declare const selectOption: (select: HTMLSelectElement | null, selectedOption: string | number) => boolean;
diff --git a/local/browser-testing/tsconfig.json b/local/browser-testing/tsconfig.json
index 68d05a4..40a1179 100644
--- a/local/browser-testing/tsconfig.json
+++ b/local/browser-testing/tsconfig.json
@@ -2,6 +2,7 @@
"extends": "@~local/tsconfig",
"compilerOptions": {
"outDir": "./dist/",
- "baseUrl": "./src/"
+ "baseUrl": "./src/",
+ "typeRoots": []
}
}
diff --git a/local/config/src/jest.js b/local/config/src/jest.js
index 89e12a3..0bda1e2 100644
--- a/local/config/src/jest.js
+++ b/local/config/src/jest.js
@@ -5,14 +5,27 @@ const resolve = require('./resolve');
// https://jestjs.io/docs/en/configuration.html
module.exports = {
- clearMocks: true,
coverageDirectory: './.coverage/jest',
- coverageProvider: 'babel',
- testEnvironment: 'jsdom',
- moduleDirectories: resolve.directories,
- moduleFileExtensions: resolve.extensions.map((ext) => ext.replace(/\./, '')),
- testPathIgnorePatterns: ['\\\\node_modules\\\\'],
- displayName: 'jest',
- setupFilesAfterEnv: [path.resolve(__dirname, './jest.setup.js')],
- testMatch: ['**/tests/jest/**/*.test.[jt]s?(x)'],
+ projects: [
+ {
+ displayName: 'node',
+ testMatch: ['**/tests/jest-node/**/*.test.[jt]s?(x)'],
+ testEnvironment: 'node',
+ clearMocks: true,
+ moduleDirectories: resolve.directories,
+ moduleFileExtensions: resolve.extensions.map((ext) => ext.replace(/\./, '')),
+ testPathIgnorePatterns: ['\\\\node_modules\\\\'],
+ setupFilesAfterEnv: [path.resolve(__dirname, './jest.setup.js')],
+ },
+ {
+ displayName: 'jsdom',
+ testMatch: ['**/tests/jest-jsdom/**/*.test.[jt]s?(x)'],
+ testEnvironment: 'jsdom',
+ clearMocks: true,
+ moduleDirectories: resolve.directories,
+ moduleFileExtensions: resolve.extensions.map((ext) => ext.replace(/\./, '')),
+ testPathIgnorePatterns: ['\\\\node_modules\\\\'],
+ setupFilesAfterEnv: [path.resolve(__dirname, './jest.setup.js')],
+ },
+ ],
};
diff --git a/local/config/src/jest.setup.js b/local/config/src/jest.setup.js
index e8d213b..275152a 100644
--- a/local/config/src/jest.setup.js
+++ b/local/config/src/jest.setup.js
@@ -1,3 +1,5 @@
// remove jsdom warning for not implemented second argument for window.getComputedStyle
-const cmptdStyle = window.getComputedStyle;
-window.getComputedStyle = (a) => cmptdStyle(a);
+try {
+ const cmptdStyle = window.getComputedStyle;
+ window.getComputedStyle = (a) => cmptdStyle(a);
+} catch {}
diff --git a/local/rollup/src/createRollupConfig.js b/local/rollup/src/createRollupConfig.js
index b452a3a..c45d7e8 100644
--- a/local/rollup/src/createRollupConfig.js
+++ b/local/rollup/src/createRollupConfig.js
@@ -107,22 +107,30 @@ const createConfig = (userOptions = {}) => {
const options = mergeAndResolveOptions(userOptions);
const { project, mode, extractTypes, extractStyles, verbose } = options;
const isBuild = mode === 'build';
-
- if (verbose) {
- console.log('');
- console.log('PROJECT : ', project);
- console.log('OPTIONS : ', options);
- }
+ let result;
if (isBuild) {
const styles = extractStyles && pipelineStyles(resolve, options);
const types = extractTypes && pipelineTypes(resolve, options);
const js = pipelineBuild(resolve, options);
- return [styles, types, js].flat().filter((build) => !!build);
+ result = [styles, types, js].flat().filter((build) => !!build);
+ } else {
+ result = [pipelineDev(resolve, options)];
}
- return [pipelineDev(resolve, options)];
+ if (verbose) {
+ result[0].plugins.push({
+ name: 'PROJECT',
+ buildStart() {
+ console.log('');
+ console.log('PROJECT : ', project);
+ console.log('OPTIONS : ', options);
+ },
+ });
+ }
+
+ return result;
};
module.exports = createConfig;
diff --git a/local/rollup/src/pipeline.build.js b/local/rollup/src/pipeline.build.js
index 635bd66..c2c6d3f 100644
--- a/local/rollup/src/pipeline.build.js
+++ b/local/rollup/src/pipeline.build.js
@@ -61,10 +61,6 @@ module.exports = (resolve, options) => {
return {
input,
output,
- treeshake: {
- propertyReadSideEffects: false,
- moduleSideEffects: false,
- },
...rollupOptions,
plugins: [
rollupLicense(banner, sourcemap),
diff --git a/local/rollup/src/pipeline.common.plugins.js b/local/rollup/src/pipeline.common.plugins.js
index 2b44c65..14de853 100644
--- a/local/rollup/src/pipeline.common.plugins.js
+++ b/local/rollup/src/pipeline.common.plugins.js
@@ -87,7 +87,7 @@ module.exports = {
['@babel/plugin-proposal-private-methods', { loose: true }],
],
babelHelpers: 'runtime',
- shouldPrintComment: () => false,
+ shouldPrintComment: (comment) => /@__PURE__/.test(comment),
caller: {
name: 'babel-rollup-build',
},
diff --git a/local/rollup/src/playwright/createPlaywrightRollupConfig.js b/local/rollup/src/playwright/createPlaywrightRollupConfig.js
index 052956c..2bfb534 100644
--- a/local/rollup/src/playwright/createPlaywrightRollupConfig.js
+++ b/local/rollup/src/playwright/createPlaywrightRollupConfig.js
@@ -75,7 +75,6 @@ module.exports = (testDir, mode = 'dev', onListening = null) => {
output: {
sourcemap: true,
},
- treeshake: true,
plugins: [
rollupPluginStyles(),
rollupPluginHtml(`Playwright: ${name}`, htmlName, () =>
diff --git a/package-lock.json b/package-lock.json
index 053b4e2..c5369b6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -70,7 +70,8 @@
"should": "^13.2.3",
"tslib": "^2.4.0",
"typescript": "^4.7.4",
- "v8-to-istanbul": "^9.0.1"
+ "v8-to-istanbul": "^9.0.1",
+ "webpack": "^5.74.0"
}
},
"local/browser-testing": {
@@ -2687,6 +2688,26 @@
"cssnano": "*"
}
},
+ "node_modules/@types/eslint": {
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
+ "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+ "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
"node_modules/@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
@@ -3066,6 +3087,164 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+ "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+ "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+ "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+ "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+ "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+ "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+ "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+ "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+ "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+ "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/helper-wasm-section": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-opt": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "@webassemblyjs/wast-printer": "1.11.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+ "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+ "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+ "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+ "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
"node_modules/abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@@ -3106,6 +3285,15 @@
"node": ">=0.4.0"
}
},
+ "node_modules/acorn-import-assertions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -3165,6 +3353,15 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -3783,6 +3980,15 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
"node_modules/ci-info": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
@@ -4431,6 +4637,19 @@
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true
},
+ "node_modules/enhanced-resolve": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
+ "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
@@ -5602,6 +5821,15 @@
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
"dev": true
},
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
"node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -6042,6 +6270,12 @@
"node": ">= 6"
}
},
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
+ },
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -8016,6 +8250,15 @@
"integrity": "sha512-F/pz9ZZP+R+arY94cECTZco7PXgBXyL+KVWUPZq8AQE9TOu14GV6fYeKOviv02JCvFa4Oi3Rs1hYEpfeajc+ow==",
"dev": true
},
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -8269,6 +8512,12 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -10216,6 +10465,24 @@
"node": ">=10"
}
},
+ "node_modules/schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -10723,6 +10990,15 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/terminal-link": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
@@ -10757,6 +11033,78 @@
"node": ">=10"
}
},
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz",
+ "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.7",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.0",
+ "terser": "^5.7.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -11155,6 +11503,19 @@
"makeerror": "1.0.12"
}
},
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "dev": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
@@ -11164,6 +11525,68 @@
"node": ">=12"
}
},
+ "node_modules/webpack": {
+ "version": "5.74.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz",
+ "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^0.0.51",
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/wasm-edit": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "acorn": "^8.7.1",
+ "acorn-import-assertions": "^1.7.6",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.10.0",
+ "es-module-lexer": "^0.9.0",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.9",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.1.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.1.3",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/@types/estree": {
+ "version": "0.0.51",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
+ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+ "dev": true
+ },
"node_modules/whatwg-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
@@ -13263,6 +13686,26 @@
"cssnano": "*"
}
},
+ "@types/eslint": {
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
+ "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/eslint-scope": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+ "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
@@ -13538,6 +13981,164 @@
"eslint-visitor-keys": "^3.3.0"
}
},
+ "@webassemblyjs/ast": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+ "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-numbers": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+ "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+ "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-numbers": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+ "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+ "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+ "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+ "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+ "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+ "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+ "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/helper-wasm-section": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-opt": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "@webassemblyjs/wast-printer": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+ "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+ "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+ "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+ "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
"abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@@ -13568,6 +14169,13 @@
}
}
},
+ "acorn-import-assertions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
+ "dev": true,
+ "requires": {}
+ },
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -13612,6 +14220,13 @@
"uri-js": "^4.2.2"
}
},
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "requires": {}
+ },
"ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -14059,6 +14674,12 @@
"readdirp": "~3.6.0"
}
},
+ "chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true
+ },
"ci-info": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz",
@@ -14555,6 +15176,16 @@
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true
},
+ "enhanced-resolve": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
+ "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ }
+ },
"entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
@@ -15329,6 +15960,12 @@
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
"dev": true
},
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true
+ },
"execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -15650,6 +16287,12 @@
"is-glob": "^4.0.1"
}
},
+ "glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
+ },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -17120,6 +17763,12 @@
"integrity": "sha512-F/pz9ZZP+R+arY94cECTZco7PXgBXyL+KVWUPZq8AQE9TOu14GV6fYeKOviv02JCvFa4Oi3Rs1hYEpfeajc+ow==",
"dev": true
},
+ "loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "dev": true
+ },
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -17316,6 +17965,12 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -18699,6 +19354,17 @@
"xmlchars": "^2.2.0"
}
},
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -19118,6 +19784,12 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
+ "tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true
+ },
"terminal-link": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
@@ -19140,6 +19812,50 @@
"source-map-support": "~0.5.20"
}
},
+ "terser-webpack-plugin": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz",
+ "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.7",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.0",
+ "terser": "^5.7.2"
+ },
+ "dependencies": {
+ "jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ }
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -19452,12 +20168,68 @@
"makeerror": "1.0.12"
}
},
+ "watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "dev": true,
+ "requires": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ }
+ },
"webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true
},
+ "webpack": {
+ "version": "5.74.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz",
+ "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==",
+ "dev": true,
+ "requires": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^0.0.51",
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/wasm-edit": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "acorn": "^8.7.1",
+ "acorn-import-assertions": "^1.7.6",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.10.0",
+ "es-module-lexer": "^0.9.0",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.9",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.1.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.1.3",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
+ },
+ "dependencies": {
+ "@types/estree": {
+ "version": "0.0.51",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
+ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true
+ },
"whatwg-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
diff --git a/package.json b/package.json
index 14b3ea7..c7c8af2 100644
--- a/package.json
+++ b/package.json
@@ -66,7 +66,8 @@
"should": "^13.2.3",
"tslib": "^2.4.0",
"typescript": "^4.7.4",
- "v8-to-istanbul": "^9.0.1"
+ "v8-to-istanbul": "^9.0.1",
+ "webpack": "^5.74.0"
},
"scripts": {
"jest": "npm run jest --workspace=overlayscrollbars",
diff --git a/packages/overlayscrollbars/package.json b/packages/overlayscrollbars/package.json
index d586d32..bd71414 100644
--- a/packages/overlayscrollbars/package.json
+++ b/packages/overlayscrollbars/package.json
@@ -44,8 +44,10 @@
"build": "rollup -c",
"jest": "jest --coverage --runInBand --detectOpenHandles --testPathPattern",
"postjest": "full-coverage",
+ "jest:node": "jest --runInBand --detectOpenHandles --selectProjects node --testPathPattern",
+ "jest:jsdom": "jest --runInBand --detectOpenHandles --selectProjects jsdom --testPathPattern",
"playwright": "playwright test --quiet",
- "playwright:dev": "playwright test --workers 1",
- "postplaywright": "playwright-merge-coverage && full-coverage"
+ "postplaywright": "playwright-merge-coverage && full-coverage",
+ "playwright:dev": "playwright test --workers 1"
}
}
diff --git a/packages/overlayscrollbars/rollup.config.js b/packages/overlayscrollbars/rollup.config.js
index 09938fd..2fcb5fd 100644
--- a/packages/overlayscrollbars/rollup.config.js
+++ b/packages/overlayscrollbars/rollup.config.js
@@ -70,6 +70,8 @@ Released under the MIT license.`,
max_line_len: 80, // eslint-disable-line camelcase
braces: true,
indent_level: 2, // eslint-disable-line camelcase
+ comments: 'all',
+ preserve_annotations: true, // eslint-disable-line camelcase
},
}),
],
@@ -85,5 +87,10 @@ Released under the MIT license.`,
totalHigh: 35000,
}),
],
+ treeshake: {
+ propertyReadSideEffects: false,
+ moduleSideEffects: false,
+ annotations: false,
+ },
},
});
diff --git a/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts b/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts
index bca5abb..2ea764d 100644
--- a/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts
+++ b/packages/overlayscrollbars/src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts
@@ -61,11 +61,12 @@ export type OptionsValidationPluginInstance = {
export const optionsValidationPluginName = '__osOptionsValidationPlugin';
-export const optionsValidationPlugin: Plugin = {
- [optionsValidationPluginName]: {
- _: (options: DeepPartial, doWriteErrors?: boolean) => {
- const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);
- return { ...foreign, ...validated };
+export const optionsValidationPlugin: Plugin =
+ /* @__PURE__ */ (() => ({
+ [optionsValidationPluginName]: {
+ _: (options: DeepPartial, doWriteErrors?: boolean) => {
+ const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);
+ return { ...foreign, ...validated };
+ },
},
- },
-};
+ }))();
diff --git a/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts b/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts
index 3dbb49f..4558f08 100644
--- a/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts
+++ b/packages/overlayscrollbars/src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts
@@ -79,206 +79,209 @@ const diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {
export const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';
-export const scrollbarsHidingPlugin: Plugin = {
- [scrollbarsHidingPluginName]: {
- _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {
- const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;
- const create =
- !_cssCustomProperties &&
- !_nativeScrollbarsHiding &&
- (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);
- const result = create ? document.createElement('style') : false;
+export const scrollbarsHidingPlugin: Plugin =
+ /* @__PURE__ */ (() => ({
+ [scrollbarsHidingPluginName]: {
+ _createUniqueViewportArrangeElement: (env: InternalEnvironment) => {
+ const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _cssCustomProperties } = env;
+ const create =
+ !_cssCustomProperties &&
+ !_nativeScrollbarsHiding &&
+ (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);
+ const result = create ? document.createElement('style') : false;
- if (result) {
- attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);
- contentArrangeCounter++;
- }
+ if (result) {
+ attr(result, 'id', `${classNameViewportArrange}-${contentArrangeCounter}`);
+ contentArrangeCounter++;
+ }
- return result;
- },
- _overflowUpdateSegment: (
- doViewportArrange,
- flexboxGlue,
- viewport,
- viewportArrange,
- getState,
- getViewportOverflowState,
- hideNativeScrollbars
- ) => {
- /**
- * Sets the styles of the viewport arrange element.
- * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.
- * @param viewportScrollSize The content scroll size.
- * @param directionIsRTL Whether the direction is RTL or not.
- * @returns A boolean which indicates whether the viewport arrange element was adjusted.
- */
- const arrangeViewport: ArrangeViewport = (
- viewportOverflowState,
- viewportScrollSize,
- sizeFraction,
- directionIsRTL
+ return result;
+ },
+ _overflowUpdateSegment: (
+ doViewportArrange,
+ flexboxGlue,
+ viewport,
+ viewportArrange,
+ getState,
+ getViewportOverflowState,
+ hideNativeScrollbars
) => {
- if (doViewportArrange) {
- const { _viewportPaddingStyle } = getState();
- const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;
- const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;
- const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;
- const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL
- ? 'paddingRight'
- : 'paddingLeft';
- const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[
- viewportArrangeHorizontalPaddingKey
- ] as number;
- const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;
- const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;
- const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;
- const arrangeSize = {
- w:
- hideOffsetY && arrangeY
- ? `${
- hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue
- }px`
- : '',
- h:
- hideOffsetX && arrangeX
- ? `${hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue}px`
- : '',
+ /**
+ * Sets the styles of the viewport arrange element.
+ * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.
+ * @param viewportScrollSize The content scroll size.
+ * @param directionIsRTL Whether the direction is RTL or not.
+ * @returns A boolean which indicates whether the viewport arrange element was adjusted.
+ */
+ const arrangeViewport: ArrangeViewport = (
+ viewportOverflowState,
+ viewportScrollSize,
+ sizeFraction,
+ directionIsRTL
+ ) => {
+ if (doViewportArrange) {
+ const { _viewportPaddingStyle } = getState();
+ const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;
+ const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;
+ const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;
+ const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL
+ ? 'paddingRight'
+ : 'paddingLeft';
+ const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[
+ viewportArrangeHorizontalPaddingKey
+ ] as number;
+ const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;
+ const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;
+ const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;
+ const arrangeSize = {
+ w:
+ hideOffsetY && arrangeY
+ ? `${
+ hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue
+ }px`
+ : '',
+ h:
+ hideOffsetX && arrangeX
+ ? `${
+ hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue
+ }px`
+ : '',
+ };
+
+ // adjust content arrange / before element
+ if (viewportArrange) {
+ const { sheet } = viewportArrange;
+ if (sheet) {
+ const { cssRules } = sheet;
+ if (cssRules) {
+ if (!cssRules.length) {
+ sheet.insertRule(
+ `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,
+ 0
+ );
+ }
+
+ // @ts-ignore
+ const ruleStyle = cssRules[0].style;
+
+ ruleStyle.width = arrangeSize.w;
+ ruleStyle.height = arrangeSize.h;
+ }
+ }
+ } else {
+ style<'--os-vaw' | '--os-vah'>(viewport, {
+ '--os-vaw': arrangeSize.w,
+ '--os-vah': arrangeSize.h,
+ });
+ }
+ }
+
+ return doViewportArrange;
+ };
+
+ /**
+ * Removes all styles applied because of the viewport arrange strategy.
+ * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.
+ * @param directionIsRTL Whether the direction is RTL or not.
+ * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.
+ * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.
+ */
+ const undoViewportArrange: UndoArrangeViewport = (
+ showNativeOverlaidScrollbars,
+ directionIsRTL,
+ viewportOverflowState?
+ ) => {
+ if (doViewportArrange) {
+ const finalViewportOverflowState =
+ viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);
+ const { _viewportPaddingStyle: viewportPaddingStyle } = getState();
+ const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;
+ const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;
+ const finalPaddingStyle: StyleObject = {};
+ const assignProps = (props: string) =>
+ each(props.split(' '), (prop) => {
+ finalPaddingStyle[prop] = viewportPaddingStyle[prop];
+ });
+
+ if (arrangeX) {
+ assignProps('marginBottom paddingTop paddingBottom');
+ }
+
+ if (arrangeY) {
+ assignProps('marginLeft marginRight paddingLeft paddingRight');
+ }
+
+ const prevStyle = style(viewport, keys(finalPaddingStyle));
+
+ removeClass(viewport, classNameViewportArrange);
+
+ if (!flexboxGlue) {
+ finalPaddingStyle.height = '';
+ }
+
+ style(viewport, finalPaddingStyle);
+
+ return [
+ () => {
+ hideNativeScrollbars(
+ finalViewportOverflowState,
+ directionIsRTL,
+ doViewportArrange,
+ prevStyle
+ );
+ style(viewport, prevStyle);
+ addClass(viewport, classNameViewportArrange);
+ },
+ finalViewportOverflowState,
+ ];
+ }
+ return [noop];
+ };
+
+ return [arrangeViewport, undoViewportArrange];
+ },
+ _envWindowZoom: () => {
+ let size = { w: 0, h: 0 };
+ let dpr = 0;
+
+ return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {
+ const sizeNew = windowSize();
+ const deltaSize = {
+ w: sizeNew.w - size.w,
+ h: sizeNew.h - size.h,
};
- // adjust content arrange / before element
- if (viewportArrange) {
- const { sheet } = viewportArrange;
- if (sheet) {
- const { cssRules } = sheet;
- if (cssRules) {
- if (!cssRules.length) {
- sheet.insertRule(
- `#${attr(viewportArrange, 'id')} + .${classNameViewportArrange}::before {}`,
- 0
- );
- }
+ if (deltaSize.w === 0 && deltaSize.h === 0) {
+ return;
+ }
- // @ts-ignore
- const ruleStyle = cssRules[0].style;
+ const deltaAbsSize = {
+ w: abs(deltaSize.w),
+ h: abs(deltaSize.h),
+ };
+ const deltaAbsRatio = {
+ w: abs(round(sizeNew.w / (size.w / 100.0))),
+ h: abs(round(sizeNew.h / (size.h / 100.0))),
+ };
+ const dprNew = getWindowDPR();
+ const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;
+ const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);
+ const dprChanged = dprNew !== dpr && dprNew > 0;
+ const isZoom = deltaIsBigger && difference && dprChanged;
- ruleStyle.width = arrangeSize.w;
- ruleStyle.height = arrangeSize.h;
- }
+ if (isZoom) {
+ const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();
+
+ assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!
+
+ if (scrollbarSizeChanged) {
+ triggerEvent();
}
- } else {
- style<'--os-vaw' | '--os-vah'>(viewport, {
- '--os-vaw': arrangeSize.w,
- '--os-vah': arrangeSize.h,
- });
- }
- }
-
- return doViewportArrange;
- };
-
- /**
- * Removes all styles applied because of the viewport arrange strategy.
- * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.
- * @param directionIsRTL Whether the direction is RTL or not.
- * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.
- * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.
- */
- const undoViewportArrange: UndoArrangeViewport = (
- showNativeOverlaidScrollbars,
- directionIsRTL,
- viewportOverflowState?
- ) => {
- if (doViewportArrange) {
- const finalViewportOverflowState =
- viewportOverflowState || getViewportOverflowState(showNativeOverlaidScrollbars);
- const { _viewportPaddingStyle: viewportPaddingStyle } = getState();
- const { _scrollbarsHideOffsetArrange } = finalViewportOverflowState;
- const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;
- const finalPaddingStyle: StyleObject = {};
- const assignProps = (props: string) =>
- each(props.split(' '), (prop) => {
- finalPaddingStyle[prop] = viewportPaddingStyle[prop];
- });
-
- if (arrangeX) {
- assignProps('marginBottom paddingTop paddingBottom');
}
- if (arrangeY) {
- assignProps('marginLeft marginRight paddingLeft paddingRight');
- }
-
- const prevStyle = style(viewport, keys(finalPaddingStyle));
-
- removeClass(viewport, classNameViewportArrange);
-
- if (!flexboxGlue) {
- finalPaddingStyle.height = '';
- }
-
- style(viewport, finalPaddingStyle);
-
- return [
- () => {
- hideNativeScrollbars(
- finalViewportOverflowState,
- directionIsRTL,
- doViewportArrange,
- prevStyle
- );
- style(viewport, prevStyle);
- addClass(viewport, classNameViewportArrange);
- },
- finalViewportOverflowState,
- ];
- }
- return [noop];
- };
-
- return [arrangeViewport, undoViewportArrange];
+ size = sizeNew;
+ dpr = dprNew;
+ };
+ },
},
- _envWindowZoom: () => {
- let size = { w: 0, h: 0 };
- let dpr = 0;
-
- return (envInstance, updateNativeScrollbarSizeCache, triggerEvent) => {
- const sizeNew = windowSize();
- const deltaSize = {
- w: sizeNew.w - size.w,
- h: sizeNew.h - size.h,
- };
-
- if (deltaSize.w === 0 && deltaSize.h === 0) {
- return;
- }
-
- const deltaAbsSize = {
- w: abs(deltaSize.w),
- h: abs(deltaSize.h),
- };
- const deltaAbsRatio = {
- w: abs(round(sizeNew.w / (size.w / 100.0))),
- h: abs(round(sizeNew.h / (size.h / 100.0))),
- };
- const dprNew = getWindowDPR();
- const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;
- const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);
- const dprChanged = dprNew !== dpr && dprNew > 0;
- const isZoom = deltaIsBigger && difference && dprChanged;
-
- if (isZoom) {
- const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();
-
- assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!
-
- if (scrollbarSizeChanged) {
- triggerEvent();
- }
- }
-
- size = sizeNew;
- dpr = dprNew;
- };
- },
- },
-};
+ }))();
diff --git a/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts b/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts
index dc0bbf5..bff3226 100644
--- a/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts
+++ b/packages/overlayscrollbars/src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts
@@ -32,7 +32,7 @@ const scrollAmount = 3333333;
const scrollEventName = 'scroll';
export const sizeObserverPluginName = '__osSizeObserverPlugin';
-export const sizeObserverPlugin: Plugin = {
+export const sizeObserverPlugin: Plugin = /* @__PURE__ */ (() => ({
[sizeObserverPluginName]: {
_: (listenerElement, onSizeChangedCallback, observeAppearChange) => {
const observerElementChildren = createDOM(
@@ -96,4 +96,4 @@ export const sizeObserverPlugin: Plugin = {
return [observeAppearChange ? onScroll.bind(0, false) : reset, offListeners];
},
},
-};
+}))();
diff --git a/packages/overlayscrollbars/styles/overlayscrollbars.css b/packages/overlayscrollbars/styles/overlayscrollbars.css
index 57f6d95..09421e9 100644
--- a/packages/overlayscrollbars/styles/overlayscrollbars.css
+++ b/packages/overlayscrollbars/styles/overlayscrollbars.css
@@ -225,6 +225,7 @@ html.os-viewport-scrollbar-hidden::-webkit-scrollbar-corner,
html.os-viewport-scrollbar-hidden,
html.os-viewport-scrollbar-hidden > body[data-overlayscrollbars] {
box-sizing: border-box;
+ margin: 0;
width: 100%;
height: 100%;
}
diff --git a/packages/overlayscrollbars/styles/overlayscrollbars.css.map b/packages/overlayscrollbars/styles/overlayscrollbars.css.map
index b67cf2d..afcfbd1 100644
--- a/packages/overlayscrollbars/styles/overlayscrollbars.css.map
+++ b/packages/overlayscrollbars/styles/overlayscrollbars.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../stdin","../../src/styles/sizeobserver.scss","../overlayscrollbars.css","../../src/styles/trinsicobserver.scss","../../src/styles/structure.scss","../../src/styles/scrollbars.scss"],"names":[],"mappings":"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","file":"overlayscrollbars.css"}
\ No newline at end of file
+{"version":3,"sources":["../stdin","../../src/styles/sizeobserver.scss","../overlayscrollbars.css","../../src/styles/trinsicobserver.scss","../../src/styles/structure.scss","../../src/styles/scrollbars.scss"],"names":[],"mappings":"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","file":"overlayscrollbars.css"}
\ No newline at end of file
diff --git a/packages/overlayscrollbars/styles/overlayscrollbars.min.css b/packages/overlayscrollbars/styles/overlayscrollbars.min.css
index be746d3..e69de29 100644
--- a/packages/overlayscrollbars/styles/overlayscrollbars.min.css
+++ b/packages/overlayscrollbars/styles/overlayscrollbars.min.css
@@ -1,9 +0,0 @@
-/*!
- * OverlayScrollbars
- * Version: 2.0.0-beta.0
- *
- * Copyright (c) Rene Haas | KingSora.
- * https://github.com/KingSora
- *
- * Released under the MIT license.
- */.os-size-observer,.os-size-observer-listener{box-sizing:border-box;direction:inherit;overflow:hidden;pointer-events:none;visibility:hidden}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{left:0;position:absolute;top:0;writing-mode:horizontal-tb}.os-size-observer{border:inherit;bottom:0;box-sizing:inherit;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;left:0;margin:-133px;padding:inherit;right:0;top:0;transform:scale(.1);z-index:-1}.os-size-observer:before{box-sizing:inherit;content:"";flex:none;height:10px;padding:10px;width:10px}.os-size-observer-appear{-webkit-animation:os-size-observer-appear-animation 1ms forwards;animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{border:inherit;box-sizing:border-box;flex:auto;margin:-133px;padding:inherit;position:relative;transform:scale(10)}.os-size-observer-listener.ltr{margin-left:0;margin-right:-266px}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";height:100%;width:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{border:inherit;box-sizing:content-box;display:block;flex:auto;padding:inherit;position:relative}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{bottom:0;direction:ltr;flex:none;overflow:hidden;right:0}.os-size-observer-listener-item-final{transition:none}@-webkit-keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{border:none;box-sizing:border-box;contain:strict;flex:none;height:0;margin:0;max-height:1px;max-width:0;overflow:hidden;padding:0;position:relative;top:calc(100% + 1px);z-index:-1}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{height:1000%;min-height:1px;min-width:1px;width:1000%}.os-environment{--os-custom-prop:-1;height:200px;opacity:0;overflow:scroll;position:fixed;visibility:hidden;width:200px;z-index:var(--os-custom-prop)}.os-environment div{height:200%;margin:10px 0;width:200%}.os-environment.os-environment-flexbox-glue{display:flex;flex-direction:row;flex-wrap:nowrap;height:auto;min-height:200px;min-width:200px;width:auto}.os-environment.os-environment-flexbox-glue div{flex:auto;height:auto;margin:0;max-height:100%;max-width:100%;width:auto}.os-environment.os-environment-flexbox-glue-max{max-height:200px}.os-environment.os-environment-flexbox-glue-max div{overflow:visible}.os-environment.os-environment-flexbox-glue-max div:before{content:"";display:block;height:999px;width:999px}.os-environment,.os-viewport{-ms-overflow-style:scrollbar!important}.os-viewport-scrollbar-hidden.os-environment,.os-viewport-scrollbar-hidden.os-viewport,[data-overlayscrollbars=""],[data-overlayscrollbars~=scrollbarHidden],html.os-viewport-scrollbar-hidden{scrollbar-width:none!important}.os-viewport-scrollbar-hidden.os-environment::-webkit-scrollbar,.os-viewport-scrollbar-hidden.os-environment::-webkit-scrollbar-corner,.os-viewport-scrollbar-hidden.os-viewport::-webkit-scrollbar,.os-viewport-scrollbar-hidden.os-viewport::-webkit-scrollbar-corner,[data-overlayscrollbars=""]::-webkit-scrollbar,[data-overlayscrollbars=""]::-webkit-scrollbar-corner,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar-corner,html.os-viewport-scrollbar-hidden::-webkit-scrollbar,html.os-viewport-scrollbar-hidden::-webkit-scrollbar-corner{background:transparent!important;display:none!important;height:0!important;visibility:hidden!important;width:0!important}html.os-viewport-scrollbar-hidden,html.os-viewport-scrollbar-hidden>body[data-overlayscrollbars]{box-sizing:border-box;height:100%;width:100%}.os-padding,[data-overlayscrollbars~=host]{display:flex;flex-direction:row!important;flex-wrap:nowrap!important;position:relative}.os-padding,.os-viewport{border:none;box-sizing:inherit;flex:auto!important;height:auto;margin:0;padding:0;position:relative;width:100%;z-index:0}.os-viewport{--os-vaw:0;--os-vah:0}.os-viewport.os-viewport-arrange:before{content:"";height:var(--os-vah);min-height:1px;min-width:1px;pointer-events:none;position:absolute;width:var(--os-vaw);z-index:-1}[data-overlayscrollbars~=host],[data-overlayscrollbars~=viewport]{overflow:hidden!important}[data-overlayscrollbars~=overflowVisible]{overflow:visible!important}[data-overlayscrollbars-overflow-x=hidden]{overflow-x:hidden!important}[data-overlayscrollbars-overflow-x=scroll]{overflow-x:scroll!important}[data-overlayscrollbars-overflow-x=hidden]{overflow-y:hidden!important}[data-overlayscrollbars-overflow-y=scroll]{overflow-y:scroll!important}.os-padding,.os-viewport{overflow:hidden}.os-overflow-visible{overflow:visible}.os-content{box-sizing:inherit}.os-scrollbar{contain:strict;opacity:0;pointer-events:none;position:absolute;transition:opacity .3s,visibility .3s,top .3s,right .3s,bottom .3s,left .3s;visibility:hidden;z-index:99999}body>.os-scrollbar{position:fixed}.os-scrollbar-transitionless{transition:none}.os-scrollbar-track{border:none!important;direction:ltr!important;padding:0!important;position:relative}.os-scrollbar-handle{position:absolute}.os-scrollbar-handle,.os-scrollbar-track{height:100%;pointer-events:none;width:100%}.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle,.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{right:0;top:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{left:0;right:auto}.os-scrollbar-interaction.os-scrollbar-visible,.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hidden{opacity:0;visibility:hidden}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless{bottom:0;top:0}.os-theme-none.os-scrollbar,[data-overlayscrollbars~=updating]>.os-scrollbar{display:none!important}.os-theme-dark.os-scrollbar-horizontal,.os-theme-light.os-scrollbar-horizontal{height:10px;right:10px}.os-theme-dark.os-scrollbar-vertical,.os-theme-light.os-scrollbar-vertical{bottom:10px;width:10px}.os-theme-dark.os-scrollbar-rtl.os-scrollbar-horizontal,.os-theme-light.os-scrollbar-rtl.os-scrollbar-horizontal{left:10px;right:0}.os-theme-dark.os-scrollbar,.os-theme-light.os-scrollbar{background:transparent;box-sizing:border-box;padding:2px}.os-theme-dark.os-scrollbar-unusable,.os-theme-dark.os-scrollbar>.os-scrollbar-track,.os-theme-light.os-scrollbar-unusable,.os-theme-light.os-scrollbar>.os-scrollbar-track{background:transparent}.os-theme-dark.os-scrollbar-horizontal>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar-horizontal>.os-scrollbar-track>.os-scrollbar-handle{min-width:30px}.os-theme-dark.os-scrollbar-vertical>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar-vertical>.os-scrollbar-track>.os-scrollbar-handle{min-height:30px}.os-theme-dark.os-scrollbar-transition>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar-transition>.os-scrollbar-track>.os-scrollbar-handle{transition:background-color .3s}.os-theme-dark.os-scrollbar>.os-scrollbar-track,.os-theme-dark.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle,.os-theme-light.os-scrollbar>.os-scrollbar-track,.os-theme-light.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle{border-radius:10px}.os-theme-dark.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle{background:rgba(0,0,0,.4)}.os-theme-light.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle{background:hsla(0,0%,100%,.4)}.os-theme-dark.os-scrollbar:hover>.os-scrollbar-track>.os-scrollbar-handle{background:rgba(0,0,0,.55)}.os-theme-light.os-scrollbar:hover>.os-scrollbar-track>.os-scrollbar-handle{background:hsla(0,0%,100%,.55)}.os-theme-dark.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle.active{background:rgba(0,0,0,.7)}.os-theme-light.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle.active{background:hsla(0,0%,100%,.7)}.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before{bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}.os-theme-dark.os-host-scrollbar-hidden>.os-scrollbar-handle:before{display:none}.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before{bottom:-2px;top:-6px}.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before{left:-6px;right:-2px}.os-theme-dark.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle:before,.os-theme-light.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle:before{left:-2px;right:-6px}
\ No newline at end of file
diff --git a/packages/overlayscrollbars/tests/jest/autoUpdateLoop.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/autoUpdateLoop.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/autoUpdateLoop.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/autoUpdateLoop.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/instances.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/instances.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/instances.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/instances.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/options.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/options.test.ts
similarity index 99%
rename from packages/overlayscrollbars/tests/jest/options.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/options.test.ts
index c6da23c..ce77859 100644
--- a/packages/overlayscrollbars/tests/jest/options.test.ts
+++ b/packages/overlayscrollbars/tests/jest-jsdom/options.test.ts
@@ -5,7 +5,7 @@ describe('options', () => {
expect(defaultOptions).toEqual({
paddingAbsolute: false,
showNativeOverlaidScrollbars: false,
- updating: {
+ update: {
elementEvents: [['img', 'load']],
debounce: [0, 33],
attributes: null,
diff --git a/packages/overlayscrollbars/tests/jest/plugins/optionsValidation/optionsValidation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/optionsValidation.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/plugins/optionsValidation/optionsValidation.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/optionsValidation.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/plugins/optionsValidation/transformation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/transformation.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/plugins/optionsValidation/transformation.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/transformation.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/plugins/optionsValidation/validation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/validation.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/plugins/optionsValidation/validation.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/optionsValidation/validation.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/plugins/plugins.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/plugins/plugins.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/plugins/plugins.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/plugins/plugins.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/setups/structureSetup/structureSetup.elements.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/setups/structureSetup/structureSetup.elements.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/setups/structureSetup/structureSetup.elements.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/cache.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/cache.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/cache.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/cache.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/compatibility/vendors.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/compatibility/vendors.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/compatibility/vendors.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/compatibility/vendors.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/attribute.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/attribute.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/attribute.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/attribute.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/class.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/class.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/class.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/class.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/create.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/create.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/create.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/create.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/dimensions.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/dimensions.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/dimensions.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/dimensions.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/events.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/events.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/events.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/events.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/manipulation.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/manipulation.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/manipulation.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/manipulation.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/offset.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/offset.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/offset.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/offset.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/style.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/style.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/style.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/style.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/dom/traversal.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/dom/traversal.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/dom/traversal.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/dom/traversal.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/eventListeners.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/eventListeners.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/eventListeners.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/eventListeners.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/arrays.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/utils/arrays.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/arrays.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/utils/equal.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/equal.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/utils/equal.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/equal.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/utils/function.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/function.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/utils/function.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/function.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/utils/object.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/object.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/utils/object.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/object.test.ts
diff --git a/packages/overlayscrollbars/tests/jest/support/utils/types.test.ts b/packages/overlayscrollbars/tests/jest-jsdom/support/utils/types.test.ts
similarity index 100%
rename from packages/overlayscrollbars/tests/jest/support/utils/types.test.ts
rename to packages/overlayscrollbars/tests/jest-jsdom/support/utils/types.test.ts
diff --git a/packages/overlayscrollbars/tests/jest-node/treeshaking.test.js b/packages/overlayscrollbars/tests/jest-node/treeshaking.test.js
new file mode 100644
index 0000000..dd315a0
--- /dev/null
+++ b/packages/overlayscrollbars/tests/jest-node/treeshaking.test.js
@@ -0,0 +1,148 @@
+import path from 'path';
+import fs from 'fs';
+import { rollup } from 'rollup';
+import { webpack } from 'webpack';
+import { build } from 'esbuild';
+import { terser } from 'rollup-plugin-terser';
+
+import pkg from '../../package.json';
+import rollupConfig from '../../rollup.config';
+
+const cleanBundle = true;
+const cleanFixture = true;
+const expectedBundleDiff = 1800;
+
+const normalizePath = (pathName) =>
+ pathName ? pathName.split(path.sep).join(path.posix.sep) : pathName;
+
+const fixturesDir = path.join(__dirname, '.fixtures');
+const libraryFixturePath = normalizePath(path.join(fixturesDir, 'lib.js'));
+const unshakedFixturePath = normalizePath(path.join(fixturesDir, 'unshaked.js'));
+const shakedFixturePath = normalizePath(path.join(fixturesDir, 'shaked.js'));
+
+const unshakedFixtureContent = `
+ export * as os from '${libraryFixturePath}';
+`;
+
+const shakedFixtureContent = `
+ export { OverlayScrollbars } from '${libraryFixturePath}';
+`;
+
+const bundleFunctions = {
+ webpack: async (input, output) => {
+ const outputPath = path.dirname(output);
+ const outputfilename = path.basename(output);
+ const compiler = webpack({
+ mode: 'production',
+ entry: input,
+ output: {
+ path: outputPath,
+ filename: outputfilename,
+ library: 'treeshaking',
+ },
+ optimization: {
+ minimize: true,
+ },
+ });
+
+ const result = await new Promise((resolve, reject) => {
+ compiler.run((err, res) => {
+ if (err) {
+ return reject(err);
+ }
+ resolve(res);
+ });
+ });
+
+ return result.compilation.assetsInfo.get(outputfilename).size;
+ },
+ rollup: async (input, output) => {
+ const config = {
+ input,
+ output: {
+ format: 'iife',
+ name: 'treeshaking',
+ file: output,
+ plugins: [terser()],
+ },
+ };
+ const bundle = await rollup(config);
+ await bundle.write(config.output);
+
+ return fs.statSync(config.output.file).size;
+ },
+ esbuild: async (input, output) => {
+ await build({
+ entryPoints: [input],
+ outfile: output,
+ format: 'iife',
+ globalName: 'treeshaking',
+ bundle: true,
+ minify: true,
+ treeShaking: true,
+ });
+
+ return fs.statSync(output).size;
+ },
+};
+
+const testBundler = (bundlerName) => async () => {
+ const bundleFunction = bundleFunctions[bundlerName];
+ const outputDir = path.join(__dirname, `.${bundlerName}`);
+ const unshaked = await bundleFunction(unshakedFixturePath, path.join(outputDir, 'unshaked.js'));
+ const shaked = await bundleFunction(shakedFixturePath, path.join(outputDir, 'shaked.js'));
+
+ cleanBundle && fs.rmSync(outputDir, { recursive: true });
+
+ console.info(`${bundlerName} size`, {
+ unshaked,
+ shaked,
+ diff: unshaked - shaked,
+ });
+
+ expect(unshaked - shaked).toBeGreaterThan(expectedBundleDiff);
+};
+
+describe('tree shaking', () => {
+ // build the fixture
+ beforeAll(async () => {
+ const { module } = pkg;
+ const esmEntryFilename = path.basename(module);
+ const config = rollupConfig.find((inputConfig) => {
+ const { output } = inputConfig;
+ if (output) {
+ const outputArr = Array.isArray(output) ? output : [output];
+ const outputConfig = outputArr.find(({ file }) => path.basename(file) === esmEntryFilename);
+ if (outputConfig) {
+ inputConfig.output = outputConfig;
+ inputConfig.output.sourcemap = false;
+ inputConfig.output.file = libraryFixturePath;
+ inputConfig.plugins = inputConfig.plugins.filter((plugin) => plugin.name !== 'PROJECT');
+ return true;
+ }
+ }
+ return false;
+ });
+
+ const bundle = await rollup(config);
+ await bundle.write(config.output);
+
+ if (!fs.existsSync(fixturesDir)) {
+ fs.mkdirSync(fixturesDir);
+ }
+
+ fs.writeFileSync(unshakedFixturePath, unshakedFixtureContent);
+ fs.writeFileSync(shakedFixturePath, shakedFixtureContent);
+ }, 60000 * 2);
+
+ // clean the fixture
+ afterAll(() => {
+ cleanFixture && fs.rmSync(fixturesDir, { recursive: true });
+ });
+
+ test('webpack', testBundler('webpack'), 60000);
+
+ test('rollup', testBundler('rollup'), 60000);
+
+ test('esbuild', testBundler('esbuild'), 60000);
+});