diff --git a/.eslintignore b/.eslintignore index 2350556..1292825 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,5 @@ node_modules coverage dist +build types \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 47ac87d..4457a56 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -58,7 +58,6 @@ module.exports = { files: ['*.test.*'], rules: { 'no-restricted-syntax': 'off', - 'no-param-reassign': 'off', '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/no-empty-function': 'off', '@typescript-eslint/ban-types': 'off', @@ -71,6 +70,12 @@ module.exports = { 'no-empty-function': 'off', 'no-new-func': 'off', }, + globals: { + page: true, + browser: true, + context: true, + jestPuppeteer: true, + }, }, { files: ['rollup.config.*'], diff --git a/.gitignore b/.gitignore index 9ed5690..d18e3d3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ node_modules/ # generated coverage/ +build/ # local env files .env.local diff --git a/jest-puppeteer.config.js b/jest-puppeteer.config.js new file mode 100644 index 0000000..b866272 --- /dev/null +++ b/jest-puppeteer.config.js @@ -0,0 +1,4 @@ +module.exports = { + browser: 'chromium', + browserContext: 'incognito', +}; diff --git a/jest-puppeteer.env.js b/jest-puppeteer.env.js new file mode 100644 index 0000000..e3a88ea --- /dev/null +++ b/jest-puppeteer.env.js @@ -0,0 +1,101 @@ +const path = require('path'); +const del = require('del'); +const rollup = require('rollup'); +const babel = require('@babel/core'); +const PuppeteerEnvironment = require('jest-environment-puppeteer'); +const resolve = require('./resolve.config.json'); + +const rollupInputFile = 'index'; +const rollupOutputFile = 'index'; +const rollupOutputDir = 'build'; +const rollupNodeEnv = 'build'; + +const getRollupInfos = (testPath) => { + const projectRootPath = path.resolve(__dirname, resolve.projectRoot); + const testDir = path.dirname(testPath); + const input = path.resolve(testDir, rollupInputFile); + const dist = path.resolve(testDir, rollupOutputDir); + const file = rollupOutputFile; + + return { + projectRootPath, + input, + dist, + file, + }; +}; + +const rollupTest = async (testPath) => { + const { projectRootPath, input, dist, file } = getRollupInfos(testPath); + const testPathSplit = path.relative(projectRootPath, testPath).split(path.sep); + + if (testPathSplit.length > 0) { + const env = process.env.NODE_ENV; + + const project = testPathSplit[0]; + const { code: rollupConfigCode } = await babel.transformFileSync('./rollup.config.js', {}); + + process.env.NODE_ENV = rollupNodeEnv; + // eslint-disable-next-line no-eval + let rollupConfig = await eval(rollupConfigCode)( + { 'config-project': project }, + { + input, + dist, + file, + types: null, + minVersions: false, + esmBuild: false, + sourcemap: false, + }, + true + ); + if (!Array.isArray(rollupConfig)) { + rollupConfig = [rollupConfig]; + } + + for (let i = 0; i < rollupConfig.length; i++) { + const inputConfig = rollupConfig[i]; + let { output } = inputConfig; + // eslint-disable-next-line no-await-in-loop + const bundle = await rollup.rollup(inputConfig); + + if (!Array.isArray(output)) { + output = [output]; + } + + for (let v = 0; v < output.length; v++) { + const outputConfig = output[i]; + // eslint-disable-next-line no-await-in-loop + await bundle.write(outputConfig); + } + } + + process.env.NODE_ENV = env; + } +}; + +const cleanRollupTest = async (testPath) => { + const { dist } = getRollupInfos(testPath); + await del(dist); +}; + +class CustomEnvironment extends PuppeteerEnvironment { + constructor(config, context) { + super(config, context); + + this.ctx = context; + } + + async setup() { + await rollupTest(this.ctx.testPath); + await super.setup(); + } + + async teardown() { + await cleanRollupTest(this.ctx.testPath); + await super.teardown(); + } +} + +module.exports = CustomEnvironment; diff --git a/jest.config.js b/jest.config.js index 155b8bf..3aca468 100644 --- a/jest.config.js +++ b/jest.config.js @@ -18,26 +18,14 @@ module.exports = { { ...base, displayName: 'jsdom', + testMatch: ['**/__tests__/jsdom/**/*.test.[jt]s?(x)'], + }, + { + ...base, + preset: 'jest-puppeteer', + displayName: 'puppeteer', + testMatch: ['**/__tests__/puppeteer/**/*.test.[jt]s?(x)'], + testEnvironment: './jest-puppeteer.env.js', }, - // { - // ...base, - // displayName: 'puppeteer', - // globalSetup: './puppeteer.setup.js', - // globalTeardown: './puppeteer.teardown.js', - // testEnvironment: './puppeteer.env.js', - // testMatch: ['**/tests/puppeteer/**/*.[jt]s?(x)'], - // transform: { - // '^.+\\.[jt]sx?$': 'babel-jest', - // '^.+\\.html?$': './jest.html.loader.js', - // }, - // globals: { - // async createPage(glob, html, funcs) { - // const page = await glob.__BROWSER__.newPage(); - // await page.exposeFunction('evalVar', funcs); - // await page.setContent(fs.readFileSync('./puppeteer.html', 'utf8').replace('{{content}}', html)); - // return page; - // }, - // }, - // }, ], }; diff --git a/package-lock.json b/package-lock.json index e96f731..46445cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1201,6 +1201,45 @@ "minimist": "^1.2.0" } }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2209,6 +2248,530 @@ "pretty-format": "^25.2.1" } }, + "@types/jest-environment-puppeteer": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/jest-environment-puppeteer/-/jest-environment-puppeteer-4.3.2.tgz", + "integrity": "sha512-QVR49cGaQMOrWRN7CXlvtPMuVAxa3Z+W3APxhWoSQLG/lvz1y03ECPvS7Y9eK+hgfndK+39400rO6IifDJV9YA==", + "dev": true, + "requires": { + "@jest/environment": "^24", + "@jest/fake-timers": "^24", + "@jest/types": "^24", + "@types/puppeteer": "*", + "jest-mock": "^24" + }, + "dependencies": { + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/yargs": { + "version": "13.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.10.tgz", + "integrity": "sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, "@types/json-schema": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", @@ -3153,6 +3716,30 @@ "wrap-ansi": "^6.2.0" } }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "dev": true, + "requires": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3268,6 +3855,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, "core-js-compat": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", @@ -3388,6 +3981,16 @@ } } }, + "cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc=", + "dev": true, + "requires": { + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" + } + }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -4489,6 +5092,15 @@ } } }, + "expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true, + "requires": { + "os-homedir": "^1.0.1" + } + }, "expect": { "version": "26.1.0", "resolved": "https://registry.npmjs.org/expect/-/expect-26.1.0.tgz", @@ -4573,6 +5185,12 @@ } } }, + "expect-puppeteer": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz", + "integrity": "sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==", + "dev": true + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4797,6 +5415,53 @@ "to-regex-range": "^5.0.1" } }, + "find-file-up": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", + "integrity": "sha1-z2gJG8+fMApA2kEbN9pczlovvqA=", + "dev": true, + "requires": { + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" + } + }, + "find-pkg": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", + "integrity": "sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=", + "dev": true, + "requires": { + "find-file-up": "^0.1.2" + } + }, + "find-process": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.3.tgz", + "integrity": "sha512-+IA+AUsQCf3uucawyTwMWcY+2M3FXq3BRvw3S+j5Jvydjk31f/+NPWpYZOJs+JUs2GvxH4Yfr6Wham0ZtRLlPA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "commander": "^2.11.0", + "debug": "^2.6.8" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -4841,6 +5506,15 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4873,6 +5547,12 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -5042,6 +5722,53 @@ "is-glob": "^4.0.1" } }, + "global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "dev": true, + "requires": { + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" + }, + "dependencies": { + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + } + } + }, + "global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" + }, + "dependencies": { + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -5189,6 +5916,15 @@ } } }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -6119,6 +6855,73 @@ } } }, + "jest-dev-server": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-4.4.0.tgz", + "integrity": "sha512-STEHJ3iPSC8HbrQ3TME0ozGX2KT28lbT4XopPxUm2WimsX3fcB3YOptRh12YphQisMhfqNSNTZUmWyT3HEXS2A==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "cwd": "^0.10.0", + "find-process": "^1.4.3", + "prompts": "^2.3.0", + "spawnd": "^4.4.0", + "tree-kill": "^1.2.2", + "wait-on": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest-diff": { "version": "25.5.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", @@ -6442,6 +7245,70 @@ } } }, + "jest-environment-puppeteer": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-4.4.0.tgz", + "integrity": "sha512-iV8S8+6qkdTM6OBR/M9gKywEk8GDSOe05hspCs5D8qKSwtmlUfdtHfB4cakdc68lC6YfK3AUsLirpfgodCHjzQ==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "cwd": "^0.10.0", + "jest-dev-server": "^4.4.0", + "merge-deep": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest-get-type": { "version": "25.2.6", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", @@ -6997,6 +7864,16 @@ "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true }, + "jest-puppeteer": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-4.4.0.tgz", + "integrity": "sha512-ZaiCTlPZ07B9HW0erAWNX6cyzBqbXMM7d2ugai4epBDKpKvRDpItlRQC6XjERoJELKZsPziFGS0OhhUvTvQAXA==", + "dev": true, + "requires": { + "expect-puppeteer": "^4.4.0", + "jest-environment-puppeteer": "^4.4.0" + } + }, "jest-regex-util": { "version": "26.0.0", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", @@ -7934,6 +8811,12 @@ "language-subtag-registry": "~0.3.2" } }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -8168,6 +9051,28 @@ "object-visit": "^1.0.0" } }, + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8278,6 +9183,24 @@ } } }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -8633,6 +9556,16 @@ "has": "^1.0.3" } }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -8774,6 +9707,12 @@ "lines-and-columns": "^1.1.6" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, "parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", @@ -8834,6 +9773,12 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -9240,6 +10185,15 @@ "util-deprecate": "^1.0.1" } }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, "regenerate": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", @@ -9465,6 +10419,16 @@ "resolve-from": "^5.0.0" } }, + "resolve-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "dev": true, + "requires": { + "expand-tilde": "^1.2.2", + "global-modules": "^0.2.3" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -9602,6 +10566,12 @@ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", "dev": true }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, "rxjs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz", @@ -9840,6 +10810,35 @@ } } }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dev": true, + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dev": true, + "requires": { + "is-buffer": "^1.0.2" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "dev": true + } + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -10097,6 +11096,18 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, + "spawnd": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-4.4.0.tgz", + "integrity": "sha512-jLPOfB6QOEgMOQY15Z6+lwZEhH3F5ncXxIaZ7WHPIapwNNLyjrs61okj3VJ3K6tmP5TZ6cO0VAu9rEY4MD4YQg==", + "dev": true, + "requires": { + "exit": "^0.1.2", + "signal-exit": "^3.0.2", + "tree-kill": "^1.2.2", + "wait-port": "^0.2.7" + } + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -10595,6 +11606,12 @@ "punycode": "^2.1.1" } }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "tsconfig-paths": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", @@ -10830,6 +11847,18 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, "uuid": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", @@ -10965,6 +11994,38 @@ "xml-name-validator": "^3.0.0" } }, + "wait-on": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.3.0.tgz", + "integrity": "sha512-97dEuUapx4+Y12aknWZn7D25kkjMk16PbWoYzpSdA8bYpVfS6hpl2a2pOWZ3c+Tyt3/i4/pglyZctG3J4V1hWQ==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.3", + "core-js": "^2.6.5", + "minimist": "^1.2.0", + "request": "^2.88.0", + "rx": "^4.1.0" + } + }, + "wait-port": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.9.tgz", + "integrity": "sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "commander": "^3.0.2", + "debug": "^4.1.1" + }, + "dependencies": { + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + } + } + }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", diff --git a/package.json b/package.json index b792bd6..651908d 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-typescript": "^5.0.2", "@types/jest": "^25.2.3", + "@types/jest-environment-puppeteer": "^4.3.2", "@types/puppeteer": "^3.0.1", "@typescript-eslint/eslint-plugin": "^3.7.0", "@typescript-eslint/parser": "^3.7.0", @@ -32,6 +33,7 @@ "eslint-plugin-react": "^7.20.3", "eslint-plugin-react-hooks": "^4.0.8", "jest": "^26.0.1", + "jest-puppeteer": "^4.4.0", "mkdirp": "^1.0.4", "prettier": "^2.0.5", "prettier-eslint": "^11.0.0", diff --git a/packages/overlayscrollbars/tests/instances.test.ts b/packages/overlayscrollbars/__tests__/jsdom/instances.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/instances.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/instances.test.ts diff --git a/packages/overlayscrollbars/tests/options.test.ts b/packages/overlayscrollbars/__tests__/jsdom/options.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/options.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/options.test.ts diff --git a/packages/overlayscrollbars/tests/support/compatibility/vendors.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/compatibility/vendors.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/compatibility/vendors.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/compatibility/vendors.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/attribute.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/attribute.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/attribute.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/attribute.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/class.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/class.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/class.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/class.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/create.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/create.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/create.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/create.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/dimensions.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/dimensions.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/dimensions.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/dimensions.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/manipulation.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/manipulation.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/manipulation.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/manipulation.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/offset.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/offset.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/offset.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/offset.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/style.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/style.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/style.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/style.test.ts diff --git a/packages/overlayscrollbars/tests/support/dom/traversal.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/dom/traversal.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/dom/traversal.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/dom/traversal.test.ts diff --git a/packages/overlayscrollbars/tests/support/options/transformation.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/options/transformation.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/options/transformation.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/options/transformation.test.ts diff --git a/packages/overlayscrollbars/tests/support/options/validation.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/options/validation.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/options/validation.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/options/validation.test.ts diff --git a/packages/overlayscrollbars/tests/support/utils/arrays.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/utils/arrays.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/utils/arrays.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/utils/arrays.test.ts diff --git a/packages/overlayscrollbars/tests/support/utils/object.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/utils/object.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/utils/object.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/utils/object.test.ts diff --git a/packages/overlayscrollbars/tests/support/utils/types.test.ts b/packages/overlayscrollbars/__tests__/jsdom/support/utils/types.test.ts similarity index 100% rename from packages/overlayscrollbars/tests/support/utils/types.test.ts rename to packages/overlayscrollbars/__tests__/jsdom/support/utils/types.test.ts diff --git a/packages/overlayscrollbars/__tests__/puppeteer/Environment/index.test.ts b/packages/overlayscrollbars/__tests__/puppeteer/Environment/index.test.ts new file mode 100644 index 0000000..cefcbb7 --- /dev/null +++ b/packages/overlayscrollbars/__tests__/puppeteer/Environment/index.test.ts @@ -0,0 +1,9 @@ +describe('Google', () => { + beforeAll(async () => { + await page.goto('https://google.com'); + }); + + it('should be titled "Google"', async () => { + await expect(page.title()).resolves.toMatch('Google'); + }); +}); diff --git a/packages/overlayscrollbars/__tests__/puppeteer/Environment/index.ts b/packages/overlayscrollbars/__tests__/puppeteer/Environment/index.ts new file mode 100644 index 0000000..6c6530e --- /dev/null +++ b/packages/overlayscrollbars/__tests__/puppeteer/Environment/index.ts @@ -0,0 +1,4 @@ +import { Environment } from 'environment'; + +// eslint-disable-next-line +console.log(new Environment()); diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 797e64c..b434200 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -54,9 +54,6 @@ const addClass = (elm, className) => { classListAction(elm, className, (classList, clazz) => classList.add(clazz)); }; -const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); -const keys = (obj) => (obj ? Object.keys(obj) : []); - function each(source, callback) { if (isArrayLike(source)) { for (let i = 0; i < source.length; i++) { @@ -65,7 +62,7 @@ function each(source, callback) { } } } else if (source) { - each(keys(source), (key) => callback(source[key], key, source)); + each(Object.keys(source), (key) => callback(source[key], key, source)); } return source; @@ -83,6 +80,7 @@ const from = (arr) => { }; const contents = (elm) => (elm ? from(elm.childNodes) : []); +const parent = (elm) => (elm ? elm.parentElement : null); const before = (parentElm, preferredAnchor, insertedElms) => { if (insertedElms) { @@ -123,10 +121,10 @@ const removeElements = (nodes) => { if (isArrayLike(nodes)) { each(from(nodes), (e) => removeElements(e)); } else if (nodes) { - const { parentNode } = nodes; + const parentElm = parent(nodes); - if (parentNode) { - parentNode.removeChild(nodes); + if (parentElm) { + parentElm.removeChild(nodes); } } }; @@ -162,6 +160,9 @@ const clientSize = (elm) => : zeroObj; const getBoundingClientRect = (elm) => elm.getBoundingClientRect(); +const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const keys = (obj) => (obj ? Object.keys(obj) : []); + const cssNumber = { animationiterationcount: 1, columncount: 1, @@ -217,7 +218,7 @@ const zeroObj$1 = { x: 0, y: 0, }; -const offset = (elm) => { +const absoluteCoordinates = (elm) => { const rect = elm ? getBoundingClientRect(elm) : 0; return rect ? { @@ -364,10 +365,10 @@ const rtlScrollBehavior = (parentElm, childElm) => { overflowY: strHidden, }); scrollLeft(parentElm, 0); - const parentOffset = offset(parentElm); - const childOffset = offset(childElm); + const parentOffset = absoluteCoordinates(parentElm); + const childOffset = absoluteCoordinates(childElm); scrollLeft(parentElm, -999); - const childOffsetAfterScroll = offset(childElm); + const childOffsetAfterScroll = absoluteCoordinates(childElm); return { i: parentOffset.x === childOffset.x, n: childOffset.x !== childOffsetAfterScroll.x, @@ -436,7 +437,7 @@ class Environment { removeAttr(envElm, 'style'); removeElements(envElm); - if (nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y) { + if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) { let size = windowSize(); let dpr = windowDPR(); diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index 62d2b56..24e4062 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/dom/class.ts","../src/support/utils/object.ts","../src/support/utils/array.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/classPrivateFieldGet.js","../../../node_modules/@babel/runtime/helpers/classPrivateFieldSet.js","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n if (obj === undefined) return `${obj}`;\r\n if (obj === null) return `${obj}`;\r\n return Object.prototype.toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const proto = 'prototype';\r\n const { hasOwnProperty } = Object[proto];\r\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\r\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\r\n\r\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instaceOfRightHandSide = window.HTMLElement;\r\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\r\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm?.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isString } from 'support/utils/types';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = (action(elm.classList, clazz) as boolean) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n","/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n","import { keys } from 'support/utils/object';\r\nimport { isArrayLike } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T | any, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n each(arr, (elm) => {\r\n result.push(elm);\r\n });\r\n return result;\r\n};\r\n","import { each, from } from 'support/utils/array';\r\n\r\nconst elementIsVisible = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\n\r\nexport const find = (selector: string, elm?: Element | null): ReadonlyArray => {\r\n const arr: Array = [];\r\n\r\n each((elm || document).querySelectorAll(selector), (e: Element) => {\r\n arr.push(e);\r\n });\r\n\r\n return arr;\r\n};\r\n\r\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (elm || document).querySelector(selector);\r\n\r\nexport const is = (elm: Element | null, selector: string): boolean => {\r\n if (elm) {\r\n if (selector === ':visible') {\r\n return elementIsVisible(elm as HTMLElement);\r\n }\r\n if (selector === ':hidden') {\r\n return !elementIsVisible(elm as HTMLElement);\r\n }\r\n if (elm.matches(selector)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const children = (elm: Element | null, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n each(elm && elm.children, (child: Element) => {\r\n if (selector) {\r\n if (child.matches(selector)) {\r\n childs.push(child);\r\n }\r\n } else {\r\n childs.push(child);\r\n }\r\n });\r\n\r\n return childs;\r\n};\r\n\r\nexport const contents = (elm: Element | null): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const { parentNode } = nodes;\r\n if (parentNode) {\r\n parentNode.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\nexport const createDiv = (): HTMLDivElement => document.createElement('div');\r\n\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { WH } from 'support/dom';\r\n\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\nimport { XY } from 'support/dom';\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\nexport const offset = (elm: HTMLElement | null): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\nexport const position = (elm: HTMLElement | null): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n}\n\nmodule.exports = _classPrivateFieldGet;","function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n\n descriptor.value = value;\n }\n\n return value;\n}\n\nmodule.exports = _classPrivateFieldSet;","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): any => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const resizeObserver: any | undefined = jsAPI('ResizeObserver');\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, indexOf, hasOwnProperty, keys } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, OptionsValidated, Func, OptionsValidatedResult } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: OptionsValidated,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidatedResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult.validated;\r\n optionsCopy[prop] = validatedResult.foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n errorEnumStrings.push(...enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n errorPossibleTypes.push(isEnumString ? optionsTemplateTypes.string : currTemplateType);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n foreign: optionsCopy,\r\n validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validate = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: OptionsValidated,\r\n doWriteErrors?: boolean\r\n): OptionsValidatedResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || {}, doWriteErrors || false);\r\n};\r\n\r\nexport { validate, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType; // eslint-disable-line @typescript-eslint/ban-types\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n offset,\r\n offsetSize,\r\n scrollLeft,\r\n jsAPI,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n} from 'support';\r\n\r\ntype OnEnvironmentChanged = (env: Environment) => void;\r\n\r\nconst { abs, round } = Math;\r\n\r\nconst nativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst nativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, 'os-viewport-native-scrollbars-invisible');\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst rtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = offset(parentElm);\r\n const childOffset = offset(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = offset(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst passiveEvents = (): boolean => {\r\n let supportsPassive = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n supportsPassive = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n return supportsPassive;\r\n};\r\n\r\nconst windowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport class Environment {\r\n #onChangedListener: Set = new Set();\r\n\r\n autoUpdateLoop!: boolean;\r\n\r\n nativeScrollbarSize!: XY;\r\n\r\n nativeScrollbarIsOverlaid!: XY;\r\n\r\n nativeScrollbarStyling!: boolean;\r\n\r\n rtlScrollBehavior!: { n: boolean; i: boolean };\r\n\r\n supportPassiveEvents!: boolean;\r\n\r\n supportResizeObserver!: boolean;\r\n\r\n constructor() {\r\n const _self = this;\r\n const { body } = document;\r\n const envDOM = createDOM('
');\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const nScrollBarSize = nativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nScrollBarSize.x === 0,\r\n y: nScrollBarSize.y === 0,\r\n };\r\n\r\n _self.autoUpdateLoop = false;\r\n _self.nativeScrollbarSize = nScrollBarSize;\r\n _self.nativeScrollbarIsOverlaid = nativeScrollbarIsOverlaid;\r\n _self.nativeScrollbarStyling = nativeScrollbarStyling(envElm);\r\n _self.rtlScrollBehavior = rtlScrollBehavior(envElm, envChildElm);\r\n _self.supportPassiveEvents = passiveEvents();\r\n _self.supportResizeObserver = !!jsAPI('ResizeObserver');\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = windowDPR();\r\n const onChangedListener = this.#onChangedListener;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = windowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n const oldScrollbarSize = _self.nativeScrollbarSize;\r\n let newScrollbarSize;\r\n\r\n if (isZoom) {\r\n newScrollbarSize = _self.nativeScrollbarSize = nativeScrollbarSize(body, envElm);\r\n removeElements(envElm);\r\n\r\n if (oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\r\n onChangedListener.forEach((listener) => listener && listener(_self));\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n }\r\n\r\n addListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.add(listener);\r\n }\r\n\r\n removeListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.delete(listener);\r\n }\r\n}\r\n","import { createDOM } from 'support/dom';\r\nimport { Environment } from 'environment';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n new Environment(),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","hasOwnProperty","prop","Object","prototype","call","keys","each","source","callback","key","from","arr","push","contents","childNodes","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","removeElements","nodes","e","parentNode","removeChild","createDiv","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","getBoundingClientRect","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","offset","rect","left","pageYOffset","top","pageXOffset","_classPrivateFieldGet","receiver","privateMap","descriptor","get","TypeError","_classPrivateFieldSet","set","writable","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","target","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","abs","round","Math","nativeScrollbarSize","body","measureElm","cSize","oSize","nativeScrollbarStyling","testElm","ex","rtlScrollBehavior","childElm","strHidden","overflowX","overflowY","parentOffset","childOffset","childOffsetAfterScroll","n","passiveEvents","supportsPassive","addEventListener","defineProperty","windowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","Environment","constructor","Set","_self","envDOM","envElm","envChildElm","nScrollBarSize","nativeScrollbarIsOverlaid","autoUpdateLoop","supportPassiveEvents","supportResizeObserver","size","dpr","onChangedListener","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","oldScrollbarSize","newScrollbarSize","forEach","listener","addListener","removeListener","delete"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/dom/class.ts","../src/support/utils/array.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/utils/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/classPrivateFieldGet.js","../../../node_modules/@babel/runtime/helpers/classPrivateFieldSet.js","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n if (obj === undefined) return `${obj}`;\r\n if (obj === null) return `${obj}`;\r\n return Object.prototype.toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const proto = 'prototype';\r\n const { hasOwnProperty } = Object[proto];\r\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\r\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\r\n\r\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instaceOfRightHandSide = window.HTMLElement;\r\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\r\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm?.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isString } from 'support/utils/types';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = (action(elm.classList, clazz) as boolean) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T | any, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n each(arr, (elm) => {\r\n result.push(elm);\r\n });\r\n return result;\r\n};\r\n","import { each, from } from 'support/utils/array';\r\n\r\nconst elementIsVisible = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nexport const find = (selector: string, elm?: Element | null): ReadonlyArray => {\r\n const arr: Array = [];\r\n\r\n each((elm || document).querySelectorAll(selector), (e: Element) => {\r\n arr.push(e);\r\n });\r\n\r\n return arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (elm || document).querySelector(selector);\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nexport const is = (elm: Element | null, selector: string): boolean => {\r\n if (elm) {\r\n if (selector === ':visible') {\r\n return elementIsVisible(elm as HTMLElement);\r\n }\r\n if (selector === ':hidden') {\r\n return !elementIsVisible(elm as HTMLElement);\r\n }\r\n if (elm.matches(selector)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nexport const children = (elm: Element | null, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n each(elm && elm.children, (child: Element) => {\r\n if (selector) {\r\n if (child.matches(selector)) {\r\n childs.push(child);\r\n }\r\n } else {\r\n childs.push(child);\r\n }\r\n });\r\n\r\n return childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nexport const contents = (elm: Element | null): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (): HTMLDivElement => document.createElement('div');\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { WH } from 'support/dom';\r\n\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the offset- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the offset- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\nimport { XY } from 'support/dom';\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n}\n\nmodule.exports = _classPrivateFieldGet;","function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n\n descriptor.value = value;\n }\n\n return value;\n}\n\nmodule.exports = _classPrivateFieldSet;","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const resizeObserver: any | undefined = jsAPI('ResizeObserver');\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, indexOf, hasOwnProperty, keys } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, OptionsValidated, Func, OptionsValidatedResult } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: OptionsValidated,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidatedResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult.validated;\r\n optionsCopy[prop] = validatedResult.foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n errorEnumStrings.push(...enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n errorPossibleTypes.push(isEnumString ? optionsTemplateTypes.string : currTemplateType);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n foreign: optionsCopy,\r\n validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validate = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: OptionsValidated,\r\n doWriteErrors?: boolean\r\n): OptionsValidatedResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || {}, doWriteErrors || false);\r\n};\r\n\r\nexport { validate, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType; // eslint-disable-line @typescript-eslint/ban-types\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n jsAPI,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n} from 'support';\r\n\r\ntype OnEnvironmentChanged = (env: Environment) => void;\r\n\r\nconst { abs, round } = Math;\r\n\r\nconst nativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst nativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, 'os-viewport-native-scrollbars-invisible');\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst rtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst passiveEvents = (): boolean => {\r\n let supportsPassive = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n supportsPassive = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n return supportsPassive;\r\n};\r\n\r\nconst windowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport class Environment {\r\n #onChangedListener: Set = new Set();\r\n\r\n autoUpdateLoop!: boolean;\r\n\r\n nativeScrollbarSize!: XY;\r\n\r\n nativeScrollbarIsOverlaid!: XY;\r\n\r\n nativeScrollbarStyling!: boolean;\r\n\r\n rtlScrollBehavior!: { n: boolean; i: boolean };\r\n\r\n supportPassiveEvents!: boolean;\r\n\r\n supportResizeObserver!: boolean;\r\n\r\n constructor() {\r\n const _self = this;\r\n const { body } = document;\r\n const envDOM = createDOM('
');\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const nScrollBarSize = nativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nScrollBarSize.x === 0,\r\n y: nScrollBarSize.y === 0,\r\n };\r\n\r\n _self.autoUpdateLoop = false;\r\n _self.nativeScrollbarSize = nScrollBarSize;\r\n _self.nativeScrollbarIsOverlaid = nativeScrollbarIsOverlaid;\r\n _self.nativeScrollbarStyling = nativeScrollbarStyling(envElm);\r\n _self.rtlScrollBehavior = rtlScrollBehavior(envElm, envChildElm);\r\n _self.supportPassiveEvents = passiveEvents();\r\n _self.supportResizeObserver = !!jsAPI('ResizeObserver');\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = windowDPR();\r\n const onChangedListener = this.#onChangedListener;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = windowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n const oldScrollbarSize = _self.nativeScrollbarSize;\r\n let newScrollbarSize;\r\n\r\n if (isZoom) {\r\n newScrollbarSize = _self.nativeScrollbarSize = nativeScrollbarSize(body, envElm);\r\n removeElements(envElm);\r\n\r\n if (oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\r\n onChangedListener.forEach((listener) => listener && listener(_self));\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n }\r\n\r\n addListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.add(listener);\r\n }\r\n\r\n removeListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.delete(listener);\r\n }\r\n}\r\n","import { createDOM } from 'support/dom';\r\nimport { Environment } from 'environment';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n new Environment(),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","Object","keys","key","from","arr","push","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","removeElements","nodes","e","removeChild","createDiv","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","getBoundingClientRect","hasOwnProperty","prop","prototype","call","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","_classPrivateFieldGet","receiver","privateMap","descriptor","get","TypeError","_classPrivateFieldSet","set","writable","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","target","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","abs","round","Math","nativeScrollbarSize","body","measureElm","cSize","oSize","nativeScrollbarStyling","testElm","ex","rtlScrollBehavior","childElm","strHidden","overflowX","overflowY","parentOffset","childOffset","childOffsetAfterScroll","n","passiveEvents","supportsPassive","addEventListener","defineProperty","windowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","Environment","constructor","Set","_self","envDOM","envElm","envChildElm","nScrollBarSize","nativeScrollbarIsOverlaid","autoUpdateLoop","supportPassiveEvents","supportResizeObserver","size","dpr","onChangedListener","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","oldScrollbarSize","newScrollbarSize","forEach","listener","addListener","removeListener","delete"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js index 33c75b7..3d805e5 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.min.js @@ -1 +1 @@ -function e(e){return"number"==typeof e}function t(e){return"string"==typeof e}function r(e){return Array.isArray(e)}function n(t){const n=!!t&&t.length;return r(t)||!function(e){return"function"==typeof e}(t)&&e(n)&&n>-1&&n%1==0}function o(e,t){return function(e,t,r,n){if(void 0===n)return r?r[e]:t;r&&(r[e]=n)}("scrollLeft",0,e,t)}const i=/[^\x20\t\r\n\f]+/g,s=(e,r)=>{((e,r,n)=>{let o,s=0,l=!1;if(e&&t(r)){const t=r.match(i)||[];for(l=t.length>0;o=t[s++];)l=n(e.classList,o)&&l}})(e,r,(e,t)=>e.add(t))},l=e=>e?Object.keys(e):[];function a(e,t){if(n(e))for(let r=0;rt(e[r],r,e));return e}const c=e=>{if(Array.from)return Array.from(e);const t=[];return a(e,e=>{t.push(e)}),t},d=(e,t)=>{((e,t,r)=>{if(r){let o,i=t;e&&(n(r)?(o=document.createDocumentFragment(),a(r,e=>{e===i&&(i=e.previousSibling),o.appendChild(e)})):o=r,t&&(i?i!==t&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(o,i))}})(e,null,t)},u=e=>{if(n(e))a(c(e),e=>u(e));else if(e){const{parentNode:t}=e;t&&t.removeChild(e)}},v=e=>{const t=document.createElement("div");return t.innerHTML=e.trim(),a((r=t)?c(r.childNodes):[],e=>u(e));var r},f={w:0,h:0},h=()=>({w:window.innerWidth,h:window.innerHeight}),w={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},p=(e,t,r)=>null!=t?t.getPropertyValue(r):e.style[r],y=(t,r,n)=>{try{t&&void 0!==t.style[r]&&(t.style[r]=((t,r)=>!w[t.toLowerCase()]&&e(r)?r+"px":r)(r,n))}catch(o){}};function b(e,n){const o=t(n);if(r(n)||o){let t=o?"":{};if(e){const r=window.getComputedStyle(e,null);t=o?p(e,r,n):n.reduce((t,n)=>(t[n]=p(e,r,n),t),t)}return t}a(l(n),t=>y(e,t,n[t]))}const g={x:0,y:0},m=e=>{const t=e?(e=>e.getBoundingClientRect())(e):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:g};var x=function(e,t){var r=t.get(e);if(!r)throw new TypeError("attempted to get private field on non-instance");return r.get?r.get.call(e):r.value};var S=function(e,t,r){var n=t.get(e);if(!n)throw new TypeError("attempted to set private field on non-instance");if(n.set)n.set.call(e,r);else{if(!n.writable)throw new TypeError("attempted to set read only private field");n.value=r}return r};const z=["WebKit","Moz","O","MS","webkit","moz","o","ms"],O={},P=e=>{let t=O[e]||window[e];return r=O,n=e,Object.prototype.hasOwnProperty.call(r,n)||(a(z,r=>{var n;return t=t||window[r+(n=e,n.charAt(0).toUpperCase()+n.slice(1))],!t}),O[e]=t),t;var r,n};P("ResizeObserver");!function(e,t,r){e(r={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&r.path)}},r.exports),r.exports}((function(e){function t(){return e.exports=t=Object.assign||function(e){for(var t=1;t(e[t]=E[0]+t+E[1],e),{}),Math),j=(e,t)=>{d(e,t);const r=(n=t)?{w:n.clientWidth,h:n.clientHeight}:f;var n;const o=(e=>e?{w:e.offsetWidth,h:e.offsetHeight}:f)(t);return{x:o.h-r.h,y:o.w-r.w}},k=()=>{const e=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||e/t};var A=new WeakMap;class T{constructor(){A.set(this,{writable:!0,value:void 0}),S(this,A,new Set);const e=this,{body:t}=document,r=v('
')[0],n=r.firstChild,i=j(t,r),l={x:0===i.x,y:0===i.y};var a,c;if(e.autoUpdateLoop=!1,e.nativeScrollbarSize=i,e.nativeScrollbarIsOverlaid=l,e.nativeScrollbarStyling=(e=>{let t=!1;s(e,"os-viewport-native-scrollbars-invisible");try{t="none"===b(e,"scrollbar-width")||"none"===window.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return t})(r),e.rtlScrollBehavior=((e,t)=>{b(e,{overflowX:"hidden",overflowY:"hidden"}),o(e,0);const r=m(e),n=m(t);o(e,-999);const i=m(t);return{i:r.x===n.x,n:n.x!==i.x}})(r,n),e.supportPassiveEvents=(()=>{let e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(t){}return e})(),e.supportResizeObserver=!!P("ResizeObserver"),c="style",null==(a=r)||a.removeAttribute(c),u(r),l.x&&l.y){let n=h(),o=k();const i=x(this,A);window.addEventListener("resize",()=>{if(i.size){const s=h(),l={w:s.w-n.w,h:s.h-n.h};if(0===l.w&&0===l.h)return;const a={w:L(l.w),h:L(l.h)},c={w:L(C(s.w/(n.w/100))),h:L(C(s.h/(n.h/100)))},d=k(),v=a.w>2&&a.h>2,f=!((e,t)=>{const r=L(e),n=L(t);return!(r===n||r+1===n||r-1===n)})(c.w,c.h),w=d!==o&&o>0,p=v&&f&&w,y=e.nativeScrollbarSize;let b;p&&(b=e.nativeScrollbarSize=j(t,r),u(r),y.x===b.x&&y.y===b.y||i.forEach(t=>t&&t(e))),n=s,o=d}})}}addListener(e){x(this,A).add(e)}removeListener(e){x(this,A).delete(e)}}export default()=>[new T,v('
fdfhdfgh
')]; \ No newline at end of file +function e(e){return"number"==typeof e}function t(e){return"string"==typeof e}function r(e){return Array.isArray(e)}function n(t){const n=!!t&&t.length;return r(t)||!function(e){return"function"==typeof e}(t)&&e(n)&&n>-1&&n%1==0}function o(e,t){return function(e,t,r,n){if(void 0===n)return r?r[e]:t;r&&(r[e]=n)}("scrollLeft",0,e,t)}const i=/[^\x20\t\r\n\f]+/g,s=(e,r)=>{((e,r,n)=>{let o,s=0,l=!1;if(e&&t(r)){const t=r.match(i)||[];for(l=t.length>0;o=t[s++];)l=n(e.classList,o)&&l}})(e,r,(e,t)=>e.add(t))};function l(e,t){if(n(e))for(let r=0;rt(e[r],r,e));return e}const a=e=>{if(Array.from)return Array.from(e);const t=[];return l(e,e=>{t.push(e)}),t},c=(e,t)=>{((e,t,r)=>{if(r){let o,i=t;e&&(n(r)?(o=document.createDocumentFragment(),l(r,e=>{e===i&&(i=e.previousSibling),o.appendChild(e)})):o=r,t&&(i?i!==t&&(i=i.nextSibling):i=e.firstChild),e.insertBefore(o,i))}})(e,null,t)},d=e=>{if(n(e))l(a(e),e=>d(e));else if(e){const r=(t=e)?t.parentElement:null;r&&r.removeChild(e)}var t},u=e=>{const t=document.createElement("div");return t.innerHTML=e.trim(),l((r=t)?a(r.childNodes):[],e=>d(e));var r},v={w:0,h:0},f=()=>({w:window.innerWidth,h:window.innerHeight}),h={animationiterationcount:1,columncount:1,fillopacity:1,flexgrow:1,flexshrink:1,fontweight:1,lineheight:1,opacity:1,order:1,orphans:1,widows:1,zindex:1,zoom:1},w=(e,t,r)=>null!=t?t.getPropertyValue(r):e.style[r],p=(t,r,n)=>{try{t&&void 0!==t.style[r]&&(t.style[r]=((t,r)=>!h[t.toLowerCase()]&&e(r)?r+"px":r)(r,n))}catch(o){}};function y(e,n){const o=t(n);if(r(n)||o){let t=o?"":{};if(e){const r=window.getComputedStyle(e,null);t=o?w(e,r,n):n.reduce((t,n)=>(t[n]=w(e,r,n),t),t)}return t}var i;l((i=n)?Object.keys(i):[],t=>p(e,t,n[t]))}const b={x:0,y:0},g=e=>{const t=e?(e=>e.getBoundingClientRect())(e):0;return t?{x:t.left+window.pageYOffset,y:t.top+window.pageXOffset}:b};var m=function(e,t){var r=t.get(e);if(!r)throw new TypeError("attempted to get private field on non-instance");return r.get?r.get.call(e):r.value};var x=function(e,t,r){var n=t.get(e);if(!n)throw new TypeError("attempted to set private field on non-instance");if(n.set)n.set.call(e,r);else{if(!n.writable)throw new TypeError("attempted to set read only private field");n.value=r}return r};const S=["WebKit","Moz","O","MS","webkit","moz","o","ms"],z={},O=e=>{let t=z[e]||window[e];return r=z,n=e,Object.prototype.hasOwnProperty.call(r,n)||(l(S,r=>{var n;return t=t||window[r+(n=e,n.charAt(0).toUpperCase()+n.slice(1))],!t}),z[e]=t),t;var r,n};O("ResizeObserver");!function(e,t,r){e(r={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&r.path)}},r.exports),r.exports}((function(e){function t(){return e.exports=t=Object.assign||function(e){for(var t=1;t(e[t]=E[0]+t+E[1],e),{}),Math),C=(e,t)=>{c(e,t);const r=(n=t)?{w:n.clientWidth,h:n.clientHeight}:v;var n;const o=(e=>e?{w:e.offsetWidth,h:e.offsetHeight}:v)(t);return{x:o.h-r.h,y:o.w-r.w}},j=()=>{const e=window.screen.deviceXDPI||0,t=window.screen.logicalXDPI||1;return window.devicePixelRatio||e/t};var k=new WeakMap;class A{constructor(){k.set(this,{writable:!0,value:void 0}),x(this,k,new Set);const e=this,{body:t}=document,r=u('
')[0],n=r.firstChild,i=C(t,r),l={x:0===i.x,y:0===i.y};var a,c;if(e.autoUpdateLoop=!1,e.nativeScrollbarSize=i,e.nativeScrollbarIsOverlaid=l,e.nativeScrollbarStyling=(e=>{let t=!1;s(e,"os-viewport-native-scrollbars-invisible");try{t="none"===y(e,"scrollbar-width")||"none"===window.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")}catch(r){}return t})(r),e.rtlScrollBehavior=((e,t)=>{y(e,{overflowX:"hidden",overflowY:"hidden"}),o(e,0);const r=g(e),n=g(t);o(e,-999);const i=g(t);return{i:r.x===n.x,n:n.x!==i.x}})(r,n),e.supportPassiveEvents=(()=>{let e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(t){}return e})(),e.supportResizeObserver=!!O("ResizeObserver"),c="style",null==(a=r)||a.removeAttribute(c),d(r),!l.x||!l.y){let n=f(),o=j();const i=m(this,k);window.addEventListener("resize",()=>{if(i.size){const s=f(),l={w:s.w-n.w,h:s.h-n.h};if(0===l.w&&0===l.h)return;const a={w:P(l.w),h:P(l.h)},c={w:P(L(s.w/(n.w/100))),h:P(L(s.h/(n.h/100)))},u=j(),v=a.w>2&&a.h>2,h=!((e,t)=>{const r=P(e),n=P(t);return!(r===n||r+1===n||r-1===n)})(c.w,c.h),w=u!==o&&o>0,p=v&&h&&w,y=e.nativeScrollbarSize;let b;p&&(b=e.nativeScrollbarSize=C(t,r),d(r),y.x===b.x&&y.y===b.y||i.forEach(t=>t&&t(e))),n=s,o=u}})}}addListener(e){m(this,k).add(e)}removeListener(e){m(this,k).delete(e)}}export default()=>[new A,u('
fdfhdfgh
')]; \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 47d9a45..0f98021 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -65,13 +65,6 @@ }); }; - var hasOwnProperty = function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); - }; - var keys = function keys(obj) { - return obj ? Object.keys(obj) : []; - }; - function each(source, callback) { if (isArrayLike(source)) { for (var i = 0; i < source.length; i++) { @@ -80,7 +73,7 @@ } } } else if (source) { - each(keys(source), function (key) { + each(Object.keys(source), function (key) { return callback(source[key], key, source); }); } @@ -102,6 +95,9 @@ var contents = function contents(elm) { return elm ? from(elm.childNodes) : []; }; + var parent = function parent(elm) { + return elm ? elm.parentElement : null; + }; var before = function before(parentElm, preferredAnchor, insertedElms) { if (insertedElms) { @@ -144,10 +140,10 @@ return removeElements(e); }); } else if (nodes) { - var parentNode = nodes.parentNode; + var parentElm = parent(nodes); - if (parentNode) { - parentNode.removeChild(nodes); + if (parentElm) { + parentElm.removeChild(nodes); } } }; @@ -193,6 +189,13 @@ return elm.getBoundingClientRect(); }; + var hasOwnProperty = function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + }; + var keys = function keys(obj) { + return obj ? Object.keys(obj) : []; + }; + var cssNumber = { animationiterationcount: 1, columncount: 1, @@ -254,7 +257,7 @@ x: 0, y: 0, }; - var offset = function offset(elm) { + var absoluteCoordinates = function absoluteCoordinates(elm) { var rect = elm ? getBoundingClientRect(elm) : 0; return rect ? { @@ -405,10 +408,10 @@ overflowY: strHidden, }); scrollLeft(parentElm, 0); - var parentOffset = offset(parentElm); - var childOffset = offset(childElm); + var parentOffset = absoluteCoordinates(parentElm); + var childOffset = absoluteCoordinates(childElm); scrollLeft(parentElm, -999); - var childOffsetAfterScroll = offset(childElm); + var childOffsetAfterScroll = absoluteCoordinates(childElm); return { i: parentOffset.x === childOffset.x, n: childOffset.x !== childOffsetAfterScroll.x, @@ -478,7 +481,7 @@ removeAttr(envElm, 'style'); removeElements(envElm); - if (nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y) { + if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) { var size = windowSize(); var dpr = windowDPR(); diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index 8748c37..caad1b7 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/dom/class.ts","../src/support/utils/object.ts","../src/support/utils/array.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/classPrivateFieldGet.js","../../../node_modules/@babel/runtime/helpers/classPrivateFieldSet.js","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n if (obj === undefined) return `${obj}`;\r\n if (obj === null) return `${obj}`;\r\n return Object.prototype.toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const proto = 'prototype';\r\n const { hasOwnProperty } = Object[proto];\r\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\r\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\r\n\r\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instaceOfRightHandSide = window.HTMLElement;\r\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\r\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm?.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isString } from 'support/utils/types';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = (action(elm.classList, clazz) as boolean) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n","/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n","import { keys } from 'support/utils/object';\r\nimport { isArrayLike } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T | any, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n each(arr, (elm) => {\r\n result.push(elm);\r\n });\r\n return result;\r\n};\r\n","import { each, from } from 'support/utils/array';\r\n\r\nconst elementIsVisible = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\n\r\nexport const find = (selector: string, elm?: Element | null): ReadonlyArray => {\r\n const arr: Array = [];\r\n\r\n each((elm || document).querySelectorAll(selector), (e: Element) => {\r\n arr.push(e);\r\n });\r\n\r\n return arr;\r\n};\r\n\r\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (elm || document).querySelector(selector);\r\n\r\nexport const is = (elm: Element | null, selector: string): boolean => {\r\n if (elm) {\r\n if (selector === ':visible') {\r\n return elementIsVisible(elm as HTMLElement);\r\n }\r\n if (selector === ':hidden') {\r\n return !elementIsVisible(elm as HTMLElement);\r\n }\r\n if (elm.matches(selector)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const children = (elm: Element | null, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n each(elm && elm.children, (child: Element) => {\r\n if (selector) {\r\n if (child.matches(selector)) {\r\n childs.push(child);\r\n }\r\n } else {\r\n childs.push(child);\r\n }\r\n });\r\n\r\n return childs;\r\n};\r\n\r\nexport const contents = (elm: Element | null): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const { parentNode } = nodes;\r\n if (parentNode) {\r\n parentNode.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\nexport const createDiv = (): HTMLDivElement => document.createElement('div');\r\n\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { WH } from 'support/dom';\r\n\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\nimport { XY } from 'support/dom';\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\nexport const offset = (elm: HTMLElement | null): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\nexport const position = (elm: HTMLElement | null): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n}\n\nmodule.exports = _classPrivateFieldGet;","function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n\n descriptor.value = value;\n }\n\n return value;\n}\n\nmodule.exports = _classPrivateFieldSet;","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): any => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const resizeObserver: any | undefined = jsAPI('ResizeObserver');\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, indexOf, hasOwnProperty, keys } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, OptionsValidated, Func, OptionsValidatedResult } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: OptionsValidated,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidatedResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult.validated;\r\n optionsCopy[prop] = validatedResult.foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n errorEnumStrings.push(...enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n errorPossibleTypes.push(isEnumString ? optionsTemplateTypes.string : currTemplateType);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n foreign: optionsCopy,\r\n validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validate = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: OptionsValidated,\r\n doWriteErrors?: boolean\r\n): OptionsValidatedResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || {}, doWriteErrors || false);\r\n};\r\n\r\nexport { validate, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType; // eslint-disable-line @typescript-eslint/ban-types\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n offset,\r\n offsetSize,\r\n scrollLeft,\r\n jsAPI,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n} from 'support';\r\n\r\ntype OnEnvironmentChanged = (env: Environment) => void;\r\n\r\nconst { abs, round } = Math;\r\n\r\nconst nativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst nativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, 'os-viewport-native-scrollbars-invisible');\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst rtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = offset(parentElm);\r\n const childOffset = offset(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = offset(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst passiveEvents = (): boolean => {\r\n let supportsPassive = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n supportsPassive = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n return supportsPassive;\r\n};\r\n\r\nconst windowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport class Environment {\r\n #onChangedListener: Set = new Set();\r\n\r\n autoUpdateLoop!: boolean;\r\n\r\n nativeScrollbarSize!: XY;\r\n\r\n nativeScrollbarIsOverlaid!: XY;\r\n\r\n nativeScrollbarStyling!: boolean;\r\n\r\n rtlScrollBehavior!: { n: boolean; i: boolean };\r\n\r\n supportPassiveEvents!: boolean;\r\n\r\n supportResizeObserver!: boolean;\r\n\r\n constructor() {\r\n const _self = this;\r\n const { body } = document;\r\n const envDOM = createDOM('
');\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const nScrollBarSize = nativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nScrollBarSize.x === 0,\r\n y: nScrollBarSize.y === 0,\r\n };\r\n\r\n _self.autoUpdateLoop = false;\r\n _self.nativeScrollbarSize = nScrollBarSize;\r\n _self.nativeScrollbarIsOverlaid = nativeScrollbarIsOverlaid;\r\n _self.nativeScrollbarStyling = nativeScrollbarStyling(envElm);\r\n _self.rtlScrollBehavior = rtlScrollBehavior(envElm, envChildElm);\r\n _self.supportPassiveEvents = passiveEvents();\r\n _self.supportResizeObserver = !!jsAPI('ResizeObserver');\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = windowDPR();\r\n const onChangedListener = this.#onChangedListener;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = windowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n const oldScrollbarSize = _self.nativeScrollbarSize;\r\n let newScrollbarSize;\r\n\r\n if (isZoom) {\r\n newScrollbarSize = _self.nativeScrollbarSize = nativeScrollbarSize(body, envElm);\r\n removeElements(envElm);\r\n\r\n if (oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\r\n onChangedListener.forEach((listener) => listener && listener(_self));\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n }\r\n\r\n addListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.add(listener);\r\n }\r\n\r\n removeListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.delete(listener);\r\n }\r\n}\r\n","import { createDOM } from 'support/dom';\r\nimport { Environment } from 'environment';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n new Environment(),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","hasOwnProperty","prop","Object","prototype","call","keys","each","source","callback","key","from","arr","push","contents","childNodes","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","removeElements","nodes","e","parentNode","removeChild","createDiv","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","getBoundingClientRect","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","offset","rect","left","pageYOffset","top","pageXOffset","_classPrivateFieldGet","receiver","privateMap","descriptor","get","TypeError","_classPrivateFieldSet","set","writable","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","target","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","abs","Math","round","nativeScrollbarSize","body","measureElm","cSize","oSize","nativeScrollbarStyling","testElm","ex","rtlScrollBehavior","childElm","strHidden","overflowX","overflowY","parentOffset","childOffset","childOffsetAfterScroll","n","passiveEvents","supportsPassive","addEventListener","defineProperty","windowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","Environment","Set","_self","envDOM","envElm","envChildElm","nScrollBarSize","nativeScrollbarIsOverlaid","autoUpdateLoop","supportPassiveEvents","supportResizeObserver","size","dpr","onChangedListener","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","oldScrollbarSize","newScrollbarSize","forEach","listener","addListener","removeListener","delete"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/types.ts","../src/support/dom/attribute.ts","../src/support/dom/class.ts","../src/support/utils/array.ts","../src/support/dom/traversal.ts","../src/support/dom/manipulation.ts","../src/support/dom/create.ts","../src/support/dom/dimensions.ts","../src/support/utils/object.ts","../src/support/dom/style.ts","../src/support/dom/offset.ts","../../../node_modules/@babel/runtime/helpers/classPrivateFieldGet.js","../../../node_modules/@babel/runtime/helpers/classPrivateFieldSet.js","../src/support/compatibility/vendors.ts","../src/support/compatibility/apis.ts","../../../node_modules/@babel/runtime/helpers/extends.js","../src/support/options/validation.ts","../src/environment/environment.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'typings';\r\n\r\nexport const type: (obj: any) => string = (obj) => {\r\n if (obj === undefined) return `${obj}`;\r\n if (obj === null) return `${obj}`;\r\n return Object.prototype.toString\r\n .call(obj)\r\n .replace(/^\\[object (.+)\\]$/, '$1')\r\n .toLowerCase();\r\n};\r\n\r\nexport function isNumber(obj: any): obj is number {\r\n return typeof obj === 'number';\r\n}\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === 'string';\r\n}\r\n\r\nexport function isBoolean(obj: any): obj is boolean {\r\n return typeof obj === 'boolean';\r\n}\r\n\r\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\r\n return typeof obj === 'function';\r\n}\r\n\r\nexport function isUndefined(obj: any): obj is undefined {\r\n return obj === undefined;\r\n}\r\n\r\nexport function isNull(obj: any): obj is null {\r\n return obj === null;\r\n}\r\n\r\nexport function isArray(obj: any): obj is Array {\r\n return Array.isArray(obj);\r\n}\r\n\r\nexport function isObject(obj: any): boolean {\r\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n}\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport function isArrayLike(obj: any): obj is ArrayLike {\r\n const length = !!obj && obj.length;\r\n return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\r\n}\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isPlainObject(obj: any): obj is PlainObject {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const proto = 'prototype';\r\n const { hasOwnProperty } = Object[proto];\r\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\r\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\r\n\r\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n}\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport function isHTMLElement(obj: any): obj is HTMLElement {\r\n const instaceOfRightHandSide = window.HTMLElement;\r\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\r\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\r\n}\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport function isEmptyObject(obj: any): boolean {\r\n /* eslint-disable no-restricted-syntax, guard-for-in */\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n}\r\n","import { isUndefined } from 'support/utils/types';\r\n\r\ntype GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value';\r\n\r\nfunction getSetProp(\r\n topLeft: GetSetPropName,\r\n fallback: number | string,\r\n elm: HTMLElement | HTMLInputElement | null,\r\n value?: number | string\r\n): number | string | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm[topLeft] : fallback;\r\n }\r\n elm && (elm[topLeft] = value);\r\n}\r\n\r\n/**\r\n * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given.\r\n * Returns null if the element has no attribute with the given name.\r\n * @param elm The element of which the attribute shall be get or set.\r\n * @param attrName The attribute name which shall be get or set.\r\n * @param value The value of the attribute which shall be set.\r\n */\r\nexport function attr(elm: HTMLElement | null, attrName: string): string | null;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value: string): void;\r\nexport function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void {\r\n if (isUndefined(value)) {\r\n return elm ? elm.getAttribute(attrName) : null;\r\n }\r\n elm && elm.setAttribute(attrName, value);\r\n}\r\n\r\n/**\r\n * Removes the given attribute from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute name.\r\n */\r\nexport const removeAttr = (elm: Element | null, attrName: string): void => {\r\n elm?.removeAttribute(attrName);\r\n};\r\n\r\n/**\r\n * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollLeft value shall be get or set.\r\n * @param value The scrollLeft value which shall be set.\r\n */\r\nexport function scrollLeft(elm: HTMLElement | null): number;\r\nexport function scrollLeft(elm: HTMLElement | null, value: number): void;\r\nexport function scrollLeft(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollLeft', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the scrollTop value of the given element depending whether the value attribute is given.\r\n * @param elm The element of which the scrollTop value shall be get or set.\r\n * @param value The scrollTop value which shall be set.\r\n */\r\nexport function scrollTop(elm: HTMLElement | null): number;\r\nexport function scrollTop(elm: HTMLElement | null, value: number): void;\r\nexport function scrollTop(elm: HTMLElement | null, value?: number): number | void {\r\n return getSetProp('scrollTop', 0, elm, value) as number;\r\n}\r\n\r\n/**\r\n * Gets or sets the value of the given input element depending whether the value attribute is given.\r\n * @param elm The input element of which the value shall be get or set.\r\n * @param value The value which shall be set.\r\n */\r\nexport function val(elm: HTMLInputElement | null): string;\r\nexport function val(elm: HTMLInputElement | null, value: string): void;\r\nexport function val(elm: HTMLInputElement | null, value?: string): string | void {\r\n return getSetProp('value', '', elm, value) as string;\r\n}\r\n","import { isString } from 'support/utils/types';\r\n\r\nconst rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\r\nconst classListAction = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => {\r\n let clazz: string;\r\n let i = 0;\r\n let result = false;\r\n\r\n if (elm && isString(className)) {\r\n const classes: Array = className.match(rnothtmlwhite) || [];\r\n result = classes.length > 0;\r\n while ((clazz = classes[i++])) {\r\n result = (action(elm.classList, clazz) as boolean) && result;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: Element | null, className: string): boolean =>\r\n classListAction(elm, className, (classList, clazz) => classList.contains(clazz));\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n */\r\nexport const addClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.add(clazz));\r\n};\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: Element | null, className: string): void => {\r\n classListAction(elm, className, (classList, clazz) => classList.remove(clazz));\r\n};\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\n/**\r\n * Iterates through a array or object\r\n * @param arrayLikeOrObject The array or object through which shall be iterated.\r\n * @param callback The function which is responsible for the iteration.\r\n * If the function returns true its treated like a \"continue\" statement.\r\n * If the function returns false its treated like a \"break\" statement.\r\n */\r\nexport function each(\r\n array: Array | ReadonlyArray,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray;\r\nexport function each(\r\n array: Array | ReadonlyArray | null,\r\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void\r\n): Array | ReadonlyArray | null;\r\nexport function each(\r\n arrayLikeObject: ArrayLike,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike;\r\nexport function each(\r\n arrayLikeObject: ArrayLike | null,\r\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void\r\n): ArrayLike | null;\r\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\r\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\r\nexport function each(\r\n source: ArrayLike | PlainObject | null,\r\n callback: (value: T | any, indexOrKey: any, source: any) => boolean | void\r\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\nexport const indexOf = (arr: Array, item: T, fromIndex?: number): number => arr.indexOf(item, fromIndex);\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr: ArrayLike) => {\r\n if (Array.from) {\r\n return Array.from(arr);\r\n }\r\n const result: Array = [];\r\n each(arr, (elm) => {\r\n result.push(elm);\r\n });\r\n return result;\r\n};\r\n","import { each, from } from 'support/utils/array';\r\n\r\nconst elementIsVisible = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nexport const find = (selector: string, elm?: Element | null): ReadonlyArray => {\r\n const arr: Array = [];\r\n\r\n each((elm || document).querySelectorAll(selector), (e: Element) => {\r\n arr.push(e);\r\n });\r\n\r\n return arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nexport const findFirst = (selector: string, elm?: Element | null): Element | null => (elm || document).querySelector(selector);\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nexport const is = (elm: Element | null, selector: string): boolean => {\r\n if (elm) {\r\n if (selector === ':visible') {\r\n return elementIsVisible(elm as HTMLElement);\r\n }\r\n if (selector === ':hidden') {\r\n return !elementIsVisible(elm as HTMLElement);\r\n }\r\n if (elm.matches(selector)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nexport const children = (elm: Element | null, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n each(elm && elm.children, (child: Element) => {\r\n if (selector) {\r\n if (child.matches(selector)) {\r\n childs.push(child);\r\n }\r\n } else {\r\n childs.push(child);\r\n }\r\n });\r\n\r\n return childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nexport const contents = (elm: Element | null): ReadonlyArray => (elm ? from(elm.childNodes) : []);\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nexport const parent = (elm: Node | null): Node | null => (elm ? elm.parentElement : null);\r\n","import { isArrayLike } from 'support/utils/types';\r\nimport { each, from } from 'support/utils/array';\r\nimport { parent } from 'support/dom/traversal';\r\n\r\ntype NodeCollection = ArrayLike | Node | undefined | null;\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n */\r\nconst before = (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection): void => {\r\n if (insertedElms) {\r\n let anchor: Node | null = preferredAnchor;\r\n let fragment: DocumentFragment | Node | undefined | null;\r\n\r\n // parent must be defined\r\n if (parentElm) {\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n */\r\nexport const appendChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, null, children);\r\n};\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n */\r\nexport const prependChildren = (node: Node | null, children: NodeCollection): void => {\r\n before(node, node && node.firstChild, children);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertBefore = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node, insertedNodes);\r\n};\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n */\r\nexport const insertAfter = (node: Node | null, insertedNodes: NodeCollection): void => {\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n};\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n if (parentElm) {\r\n parentElm.removeChild(nodes);\r\n }\r\n }\r\n};\r\n","import { each } from 'support/utils/array';\r\nimport { contents } from 'support/dom/traversal';\r\nimport { removeElements } from 'support/dom/manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (): HTMLDivElement => document.createElement('div');\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import { WH } from 'support/dom';\r\n\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (): WH => ({\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n});\r\n\r\n/**\r\n * Returns the offset- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the offset- width and height shall be returned.\r\n */\r\nexport const offsetSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.offsetWidth,\r\n h: elm.offsetHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = (elm: HTMLElement | null): WH =>\r\n elm\r\n ? {\r\n w: elm.clientWidth,\r\n h: elm.clientHeight,\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n","import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types';\r\nimport { each } from 'support/utils/array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean => Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport function assignDeep(target: T, object1: U): T & U;\r\nexport function assignDeep(target: T, object1: U, object2: V): T & U & V;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\nexport function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y;\r\nexport function assignDeep(\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(keys(source), (key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && (isPlainObject(copy) || copyIsArray)) {\r\n const src = target[key];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key] = copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n}\r\n","import { each, keys } from 'support/utils';\r\nimport { isString, isNumber, isArray } from 'support/utils/types';\r\nimport { PlainObject } from 'typings';\r\n\r\ntype CssStyles = { [key: string]: string | number };\r\nconst cssNumber = {\r\n animationiterationcount: 1,\r\n columncount: 1,\r\n fillopacity: 1,\r\n flexgrow: 1,\r\n flexshrink: 1,\r\n fontweight: 1,\r\n lineheight: 1,\r\n opacity: 1,\r\n order: 1,\r\n orphans: 1,\r\n widows: 1,\r\n zindex: 1,\r\n zoom: 1,\r\n};\r\n\r\nconst adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val);\r\nconst getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string =>\r\n /* istanbul ignore next */\r\n computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop];\r\nconst setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => {\r\n try {\r\n if (elm && elm.style[prop] !== undefined) {\r\n elm.style[prop] = adaptCSSVal(prop, val);\r\n }\r\n } catch (e) {}\r\n};\r\n\r\n/**\r\n * Gets or sets the passed styles to the passed element.\r\n * @param elm The element to which the styles shall be applied to / be read from.\r\n * @param styles The styles which shall be set or read.\r\n */\r\nexport function style(elm: HTMLElement | null, styles: CssStyles): void;\r\nexport function style(elm: HTMLElement | null, styles: string): string;\r\nexport function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string };\r\nexport function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void {\r\n const getSingleStyle = isString(styles);\r\n const getStyles = isArray(styles) || getSingleStyle;\r\n\r\n if (getStyles) {\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n if (elm) {\r\n const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null);\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(elm, computedStyle, styles as string)\r\n : (styles as Array).reduce((result, key) => {\r\n result[key] = getCSSVal(elm, computedStyle, key as string);\r\n return result;\r\n }, getStylesResult);\r\n }\r\n return getStylesResult;\r\n }\r\n each(keys(styles), (key) => setCSSVal(elm, key, styles[key]));\r\n}\r\n\r\n/**\r\n * Hides the passed element (display: none).\r\n * @param elm The element which shall be hidden.\r\n */\r\nexport const hide = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'none' });\r\n};\r\n\r\n/**\r\n * Shows the passed element (display: block).\r\n * @param elm The element which shall be shown.\r\n */\r\nexport const show = (elm: HTMLElement | null): void => {\r\n style(elm, { display: 'block' });\r\n};\r\n","import { getBoundingClientRect } from 'support/dom/dimensions';\r\nimport { XY } from 'support/dom';\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElement | null): XY => {\r\n const rect = elm ? getBoundingClientRect(elm) : 0;\r\n return rect\r\n ? {\r\n x: rect.left + window.pageYOffset,\r\n y: rect.top + window.pageXOffset,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElement | null): XY =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n}\n\nmodule.exports = _classPrivateFieldGet;","function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = privateMap.get(receiver);\n\n if (!descriptor) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n\n descriptor.value = value;\n }\n\n return value;\n}\n\nmodule.exports = _classPrivateFieldSet;","import { each, hasOwnProperty } from 'support/utils';\r\nimport { createDiv } from 'support/dom';\r\n\r\nconst firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\r\nconst getDummyStyle = (): CSSStyleDeclaration => createDiv().style;\r\n\r\n// https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\r\n\r\nexport const cssPrefixes: ReadonlyArray = ['-webkit-', '-moz-', '-o-', '-ms-'];\r\nexport const jsPrefixes: ReadonlyArray = ['WebKit', 'Moz', 'O', 'MS', 'webkit', 'moz', 'o', 'ms'];\r\n\r\nexport const jsCache: { [key: string]: any } = {};\r\nexport const cssCache: { [key: string]: string } = {};\r\n\r\n/**\r\n * Gets the name of the given CSS property with vendor prefix if it isn't supported without, or undefined if unsupported.\r\n * @param name The name of the CSS property which shall be get.\r\n */\r\nexport const cssProperty = (name: string): string | undefined => {\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const uppercasedName: string = firstLetterToUpper(name);\r\n const elmStyle: CSSStyleDeclaration = getDummyStyle();\r\n\r\n each(cssPrefixes, (prefix: string) => {\r\n const prefixWithoutDashes: string = prefix.replace(/-/g, '');\r\n const resultPossibilities: Array = [\r\n name, // transition\r\n prefix + name, // -webkit-transition\r\n prefixWithoutDashes + uppercasedName, // webkitTransition\r\n firstLetterToUpper(prefixWithoutDashes) + uppercasedName, // WebkitTransition\r\n ];\r\n result = resultPossibilities.find((resultPossibility: string) => elmStyle[resultPossibility] !== undefined);\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the name of the given CSS property value(s), with vendor prefix if it isn't supported wuthout, or undefined if no value is supported.\r\n * @param property The CSS property to which the CSS property value(s) belong.\r\n * @param values The value(s) separated by spaces which shall be get.\r\n * @param suffix A suffix which is added to each value in case the value is a function or something else more advanced.\r\n */\r\nexport const cssPropertyValue = (property: string, values: string, suffix?: string): string | undefined => {\r\n const name = `${property} ${values}`;\r\n let result: string | undefined = cssCache[name];\r\n\r\n if (hasOwnProperty(cssCache, name)) {\r\n return result;\r\n }\r\n\r\n const dummyStyle: CSSStyleDeclaration = getDummyStyle();\r\n const possbleValues: Array = values.split(' ');\r\n const preparedSuffix: string = suffix || '';\r\n const cssPrefixesWithFirstEmpty = [''].concat(cssPrefixes);\r\n\r\n each(possbleValues, (possibleValue: string) => {\r\n each(cssPrefixesWithFirstEmpty, (prefix: string) => {\r\n const prop = prefix + possibleValue;\r\n dummyStyle.cssText = `${property}:${prop}${preparedSuffix}`;\r\n if (dummyStyle.length) {\r\n result = prop;\r\n return false;\r\n }\r\n });\r\n return !result;\r\n });\r\n\r\n cssCache[name] = result;\r\n return result;\r\n};\r\n\r\n/**\r\n * Get the requested JS function, object or constructor with vendor prefix if it isn't supported without or undefined if unsupported.\r\n * @param name The name of the JS function, object or constructor.\r\n */\r\nexport const jsAPI = (name: string): T | undefined => {\r\n let result: any = jsCache[name] || window[name];\r\n\r\n if (hasOwnProperty(jsCache, name)) {\r\n return result;\r\n }\r\n\r\n each(jsPrefixes, (prefix: string) => {\r\n result = result || window[prefix + firstLetterToUpper(name)];\r\n return !result;\r\n });\r\n\r\n jsCache[name] = result;\r\n return result;\r\n};\r\n","import { jsAPI } from 'support/compatibility/vendors';\r\n\r\nexport const resizeObserver: any | undefined = jsAPI('ResizeObserver');\r\n","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import { each, indexOf, hasOwnProperty, keys } from 'support/utils';\r\nimport { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'support/utils/types';\r\nimport { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, OptionsValidated, Func, OptionsValidatedResult } from 'support/options';\r\nimport { PlainObject } from 'typings';\r\n\r\nconst { stringify } = JSON;\r\n\r\n/**\r\n * A prefix and suffix tuple which serves as recognition pattern for template types.\r\n */\r\nconst templateTypePrefixSuffix: readonly [string, string] = ['__TPL_', '_TYPE__'];\r\n/**\r\n * A object which serves as a mapping for \"normal\" types and template types.\r\n * Key = normal type string\r\n * value = template type string\r\n */\r\nconst optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number', 'string', 'array', 'object', 'function', 'null'].reduce(\r\n (result, item) => {\r\n result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1];\r\n return result;\r\n },\r\n {} as OptionsTemplateTypesDictionary\r\n);\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n * @param propPath The propertyPath which lead to this object. (used for error logging)\r\n */\r\nconst validateRecursive = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff: OptionsValidated,\r\n doWriteErrors?: boolean,\r\n propPath?: string\r\n): OptionsValidatedResult => {\r\n const validatedOptions: OptionsValidated = {};\r\n const optionsCopy: T = { ...options };\r\n const props = keys(template).filter((prop) => hasOwnProperty(options, prop));\r\n\r\n each(props, (prop: Extract) => {\r\n const optionsDiffValue: any = isUndefined(optionsDiff[prop]) ? {} : optionsDiff[prop];\r\n const optionsValue: any = options[prop];\r\n const templateValue: PlainObject | string | OptionsTemplateTypes | Array = template[prop];\r\n const templateIsComplex = isPlainObject(templateValue);\r\n const propPrefix = propPath ? `${propPath}.` : '';\r\n\r\n // if the template has a object as value, it means that the options are complex (verschachtelt)\r\n if (templateIsComplex && isPlainObject(optionsValue)) {\r\n const validatedResult = validateRecursive(optionsValue, templateValue as PlainObject, optionsDiffValue, doWriteErrors, propPrefix + prop);\r\n validatedOptions[prop] = validatedResult.validated;\r\n optionsCopy[prop] = validatedResult.foreign as any;\r\n\r\n each([optionsCopy, validatedOptions], (value) => {\r\n if (isEmptyObject(value[prop])) {\r\n delete value[prop];\r\n }\r\n });\r\n } else if (!templateIsComplex) {\r\n let isValid = false;\r\n const errorEnumStrings: Array = [];\r\n const errorPossibleTypes: Array = [];\r\n const optionsValueType = type(optionsValue);\r\n const templateValueArr: Array = !isArray(templateValue)\r\n ? [templateValue as string | OptionsTemplateTypes]\r\n : (templateValue as Array);\r\n\r\n each(templateValueArr, (currTemplateType) => {\r\n // if currType value isn't inside possibleTemplateTypes we assume its a enum string value\r\n const isEnumString = indexOf(Object.values(optionsTemplateTypes), currTemplateType) < 0;\r\n if (isEnumString && isString(optionsValue)) {\r\n // split it into a array which contains all possible values for example: [\"yes\", \"no\", \"maybe\"]\r\n const enumStringSplit = currTemplateType.split(' ');\r\n isValid = !!enumStringSplit.find((possibility) => possibility === optionsValue);\r\n\r\n // build error message\r\n errorEnumStrings.push(...enumStringSplit);\r\n } else {\r\n isValid = optionsTemplateTypes[optionsValueType] === currTemplateType;\r\n }\r\n\r\n // build error message\r\n errorPossibleTypes.push(isEnumString ? optionsTemplateTypes.string : currTemplateType);\r\n\r\n // continue if invalid, break if valid\r\n return !isValid;\r\n });\r\n\r\n if (isValid) {\r\n const doStringifyComparison = isArray(optionsValue) || isPlainObject(optionsValue);\r\n if (doStringifyComparison ? stringify(optionsValue) !== stringify(optionsDiffValue) : optionsValue !== optionsDiffValue) {\r\n validatedOptions[prop] = optionsValue;\r\n }\r\n } else if (doWriteErrors) {\r\n console.warn(\r\n `${\r\n `The option \"${propPrefix}${prop}\" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of \"${optionsValue}\".\\r\\n` +\r\n `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\\r\\n`\r\n }${errorEnumStrings.length > 0 ? `\\r\\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`\r\n );\r\n }\r\n\r\n delete optionsCopy[prop];\r\n }\r\n });\r\n\r\n return {\r\n foreign: optionsCopy,\r\n validated: validatedOptions,\r\n };\r\n};\r\n\r\n/**\r\n * Validates the given options object according to the given template object and returns a object which looks like:\r\n * {\r\n * foreign : a object which consists of properties which aren't defined inside the template. (foreign properties)\r\n * validated : a object which consists only of valid properties. (property name is inside the template and value has a correct type)\r\n * }\r\n * @param options The options object which shall be validated.\r\n * @param template The template according to which the options object shall be validated.\r\n * @param optionsDiff When provided the returned validated object will only have properties which are different to this objects properties.\r\n * Example (assume all properties are valid to the template):\r\n * Options object : { a: 'a', b: 'b', c: 'c' }\r\n * optionsDiff object : { a: 'a', b: 'b', c: undefined }\r\n * Returned validated object : { c: 'c' }\r\n * Because the value of the properties a and b didn't change, they aren't included in the returned object.\r\n * Without the optionsDiff object the returned validated object would be: { a: 'a', b: 'b', c: 'c' }\r\n * @param doWriteErrors True if errors shall be logged into the console, false otherwise.\r\n */\r\nconst validate = (\r\n options: T,\r\n template: OptionsTemplate>,\r\n optionsDiff?: OptionsValidated,\r\n doWriteErrors?: boolean\r\n): OptionsValidatedResult => {\r\n /*\r\n if (!isEmptyObject(foreign) && doWriteErrors)\r\n console.warn(`The following options are discarded due to invalidity:\\r\\n ${window.JSON.stringify(foreign, null, 2)}`);\r\n\r\n //add values, which aren't specified in the template, to the finished validated object to prevent them from being discarded\r\n if (keepForeignProps) {\r\n Object.assign(result.validated, foreign);\r\n }\r\n */\r\n return validateRecursive(options, template, optionsDiff || {}, doWriteErrors || false);\r\n};\r\n\r\nexport { validate, optionsTemplateTypes };\r\n\r\ntype OptionsTemplateTypesDictionary = {\r\n readonly boolean: OptionsTemplateType;\r\n readonly number: OptionsTemplateType;\r\n readonly string: OptionsTemplateType;\r\n readonly array: OptionsTemplateType>;\r\n readonly object: OptionsTemplateType; // eslint-disable-line @typescript-eslint/ban-types\r\n readonly function: OptionsTemplateType;\r\n readonly null: OptionsTemplateType;\r\n};\r\n","import {\r\n createDOM,\r\n addClass,\r\n style,\r\n appendChildren,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n scrollLeft,\r\n jsAPI,\r\n XY,\r\n removeAttr,\r\n removeElements,\r\n windowSize,\r\n} from 'support';\r\n\r\ntype OnEnvironmentChanged = (env: Environment) => void;\r\n\r\nconst { abs, round } = Math;\r\n\r\nconst nativeScrollbarSize = (body: HTMLElement, measureElm: HTMLElement): XY => {\r\n appendChildren(body, measureElm);\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h,\r\n y: oSize.w - cSize.w,\r\n };\r\n};\r\n\r\nconst nativeScrollbarStyling = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n addClass(testElm, 'os-viewport-native-scrollbars-invisible');\r\n try {\r\n result =\r\n style(testElm, 'scrollbar-width') === 'none' || window.getComputedStyle(testElm, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\r\n } catch (ex) {}\r\n\r\n return result;\r\n};\r\n\r\nconst rtlScrollBehavior = (parentElm: HTMLElement, childElm: HTMLElement): { i: boolean; n: boolean } => {\r\n const strHidden = 'hidden';\r\n style(parentElm, { overflowX: strHidden, overflowY: strHidden });\r\n scrollLeft(parentElm, 0);\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollLeft(parentElm, -999); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n};\r\n\r\nconst passiveEvents = (): boolean => {\r\n let supportsPassive = false;\r\n try {\r\n /* eslint-disable */\r\n // @ts-ignore\r\n window.addEventListener(\r\n 'test',\r\n null,\r\n Object.defineProperty({}, 'passive', {\r\n get: function () {\r\n supportsPassive = true;\r\n },\r\n })\r\n );\r\n /* eslint-enable */\r\n } catch (e) {}\r\n return supportsPassive;\r\n};\r\n\r\nconst windowDPR = (): number => {\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = window.screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = window.screen.logicalXDPI || 1;\r\n return window.devicePixelRatio || dDPI / sDPI;\r\n};\r\n\r\nconst diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = abs(valOne);\r\n const absValTwo = abs(valTwo);\r\n return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\r\n};\r\n\r\nexport class Environment {\r\n #onChangedListener: Set = new Set();\r\n\r\n autoUpdateLoop!: boolean;\r\n\r\n nativeScrollbarSize!: XY;\r\n\r\n nativeScrollbarIsOverlaid!: XY;\r\n\r\n nativeScrollbarStyling!: boolean;\r\n\r\n rtlScrollBehavior!: { n: boolean; i: boolean };\r\n\r\n supportPassiveEvents!: boolean;\r\n\r\n supportResizeObserver!: boolean;\r\n\r\n constructor() {\r\n const _self = this;\r\n const { body } = document;\r\n const envDOM = createDOM('
');\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n\r\n const nScrollBarSize = nativeScrollbarSize(body, envElm);\r\n const nativeScrollbarIsOverlaid = {\r\n x: nScrollBarSize.x === 0,\r\n y: nScrollBarSize.y === 0,\r\n };\r\n\r\n _self.autoUpdateLoop = false;\r\n _self.nativeScrollbarSize = nScrollBarSize;\r\n _self.nativeScrollbarIsOverlaid = nativeScrollbarIsOverlaid;\r\n _self.nativeScrollbarStyling = nativeScrollbarStyling(envElm);\r\n _self.rtlScrollBehavior = rtlScrollBehavior(envElm, envChildElm);\r\n _self.supportPassiveEvents = passiveEvents();\r\n _self.supportResizeObserver = !!jsAPI('ResizeObserver');\r\n\r\n removeAttr(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n if (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y) {\r\n let size = windowSize();\r\n let dpr = windowDPR();\r\n const onChangedListener = this.#onChangedListener;\r\n\r\n window.addEventListener('resize', () => {\r\n if (onChangedListener.size) {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) return;\r\n\r\n const deltaAbsSize = {\r\n w: abs(deltaSize.w),\r\n h: abs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: abs(round(sizeNew.w / (size.w / 100.0))),\r\n h: abs(round(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = windowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dpr > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n\r\n const oldScrollbarSize = _self.nativeScrollbarSize;\r\n let newScrollbarSize;\r\n\r\n if (isZoom) {\r\n newScrollbarSize = _self.nativeScrollbarSize = nativeScrollbarSize(body, envElm);\r\n removeElements(envElm);\r\n\r\n if (oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\r\n onChangedListener.forEach((listener) => listener && listener(_self));\r\n }\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n }\r\n });\r\n }\r\n }\r\n\r\n addListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.add(listener);\r\n }\r\n\r\n removeListener(listener: OnEnvironmentChanged): void {\r\n this.#onChangedListener.delete(listener);\r\n }\r\n}\r\n","import { createDOM } from 'support/dom';\r\nimport { Environment } from 'environment';\r\n\r\nconst abc = {\r\n a: 1,\r\n b: 1,\r\n c: 1,\r\n};\r\n\r\nexport default () => {\r\n return [\r\n new Environment(),\r\n createDOM(\r\n '\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n fdfhdfgh\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
'\r\n ),\r\n ];\r\n};\r\n"],"names":["isNumber","obj","isString","isFunction","isUndefined","undefined","isArray","Array","isArrayLike","length","getSetProp","topLeft","fallback","elm","value","removeAttr","attrName","removeAttribute","scrollLeft","rnothtmlwhite","classListAction","className","action","clazz","i","result","classes","match","classList","addClass","add","each","source","callback","Object","keys","key","from","arr","push","contents","childNodes","parent","parentElement","before","parentElm","preferredAnchor","insertedElms","anchor","fragment","document","createDocumentFragment","insertedElm","previousSibling","appendChild","firstChild","nextSibling","insertBefore","appendChildren","node","children","removeElements","nodes","e","removeChild","createDiv","createElement","createDOM","html","createdDiv","innerHTML","trim","zeroObj","w","h","windowSize","window","innerWidth","innerHeight","offsetSize","offsetWidth","offsetHeight","clientSize","clientWidth","clientHeight","getBoundingClientRect","hasOwnProperty","prop","prototype","call","cssNumber","animationiterationcount","columncount","fillopacity","flexgrow","flexshrink","fontweight","lineheight","opacity","order","orphans","widows","zindex","zoom","adaptCSSVal","val","toLowerCase","getCSSVal","computedStyle","getPropertyValue","style","setCSSVal","styles","getSingleStyle","getStyles","getStylesResult","getComputedStyle","reduce","x","y","absoluteCoordinates","rect","left","pageYOffset","top","pageXOffset","_classPrivateFieldGet","receiver","privateMap","descriptor","get","TypeError","_classPrivateFieldSet","set","writable","firstLetterToUpper","str","charAt","toUpperCase","slice","jsPrefixes","jsCache","jsAPI","name","prefix","resizeObserver","_extends","module","assign","target","arguments","apply","templateTypePrefixSuffix","optionsTemplateTypes","item","abs","Math","round","nativeScrollbarSize","body","measureElm","cSize","oSize","nativeScrollbarStyling","testElm","ex","rtlScrollBehavior","childElm","strHidden","overflowX","overflowY","parentOffset","childOffset","childOffsetAfterScroll","n","passiveEvents","supportsPassive","addEventListener","defineProperty","windowDPR","dDPI","screen","deviceXDPI","sDPI","logicalXDPI","devicePixelRatio","diffBiggerThanOne","valOne","valTwo","absValOne","absValTwo","Environment","Set","_self","envDOM","envElm","envChildElm","nScrollBarSize","nativeScrollbarIsOverlaid","autoUpdateLoop","supportPassiveEvents","supportResizeObserver","size","dpr","onChangedListener","sizeNew","deltaSize","deltaAbsSize","deltaAbsRatio","dprNew","deltaIsBigger","difference","dprChanged","isZoom","oldScrollbarSize","newScrollbarSize","forEach","listener","addListener","removeListener","delete"],"mappings":"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"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index 4214450..3cba894 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e=e||self).OverlayScrollbars=r()}(this,(function(){"use strict";function e(e){return"number"==typeof e}function r(e){return"string"==typeof e}function t(e){return Array.isArray(e)}function n(r){var n=!!r&&r.length;return t(r)||!function(e){return"function"==typeof e}(r)&&e(n)&&n>-1&&n%1==0}function i(e,r){return function(e,r,t,n){if(void 0===n)return t?t[e]:r;t&&(t[e]=n)}("scrollLeft",0,e,r)}var o=/[^\x20\t\r\n\f]+/g,a=function(e,t){!function(e,t,n){var i,a=0,s=!1;if(e&&r(t)){var c=t.match(o)||[];for(s=c.length>0;i=c[a++];)s=n(e.classList,i)&&s}}(e,t,(function(e,r){return e.add(r)}))},s=function(e){return e?Object.keys(e):[]};function c(e,r){if(n(e))for(var t=0;t
')[0],s=o.firstChild,c=j(n,o),u={x:0===c.x,y:0===c.y};if(t.autoUpdateLoop=!1,t.nativeScrollbarSize=c,t.nativeScrollbarIsOverlaid=u,t.nativeScrollbarStyling=function(e){var r=!1;a(e,"os-viewport-native-scrollbars-invisible");try{r="none"===b(e,"scrollbar-width")||"none"===window.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")}catch(t){}return r}(o),t.rtlScrollBehavior=function(e,r){b(e,{overflowX:"hidden",overflowY:"hidden"}),i(e,0);var t=m(e),n=m(r);i(e,-999);var o=m(r);return{i:t.x===n.x,n:n.x!==o.x}}(o,s),t.supportPassiveEvents=function(){var e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(r){}return e}(),t.supportResizeObserver=!!P("ResizeObserver"),r="style",null==(e=o)||e.removeAttribute(r),f(o),u.x&&u.y){var l=h(),v=k(),w=x(this,A);window.addEventListener("resize",(function(){if(w.size){var e=h(),r={w:e.w-l.w,h:e.h-l.h};if(0===r.w&&0===r.h)return;var i,a={w:L(r.w),h:L(r.h)},s={w:L(C(e.w/(l.w/100))),h:L(C(e.h/(l.h/100)))},c=k(),u=a.w>2&&a.h>2,d=(b=s.h,g=L(s.w),m=L(b),!(g!==m&&g+1!==m&&g-1!==m)),p=u&&d&&(c!==v&&v>0),y=t.nativeScrollbarSize;p&&(i=t.nativeScrollbarSize=j(n,o),f(o),y.x===i.x&&y.y===i.y||w.forEach((function(e){return e&&e(t)}))),l=e,v=c}var b,g,m}))}}var r=e.prototype;return r.addListener=function(e){x(this,A).add(e)},r.removeListener=function(e){x(this,A).delete(e)},e}();return function(){return[new M,d('
fdfhdfgh
')]}})); \ No newline at end of file +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e=e||self).OverlayScrollbars=r()}(this,(function(){"use strict";function e(e){return"number"==typeof e}function r(e){return"string"==typeof e}function t(e){return Array.isArray(e)}function n(r){var n=!!r&&r.length;return t(r)||!function(e){return"function"==typeof e}(r)&&e(n)&&n>-1&&n%1==0}function i(e,r){return function(e,r,t,n){if(void 0===n)return t?t[e]:r;t&&(t[e]=n)}("scrollLeft",0,e,r)}var o=/[^\x20\t\r\n\f]+/g,a=function(e,t){!function(e,t,n){var i,a=0,s=!1;if(e&&r(t)){var c=t.match(o)||[];for(s=c.length>0;i=c[a++];)s=n(e.classList,i)&&s}}(e,t,(function(e,r){return e.add(r)}))};function s(e,r){if(n(e))for(var t=0;t
')[0],s=o.firstChild,c=j(n,o),l={x:0===c.x,y:0===c.y};if(t.autoUpdateLoop=!1,t.nativeScrollbarSize=c,t.nativeScrollbarIsOverlaid=l,t.nativeScrollbarStyling=function(e){var r=!1;a(e,"os-viewport-native-scrollbars-invisible");try{r="none"===y(e,"scrollbar-width")||"none"===window.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")}catch(t){}return r}(o),t.rtlScrollBehavior=function(e,r){y(e,{overflowX:"hidden",overflowY:"hidden"}),i(e,0);var t=g(e),n=g(r);i(e,-999);var o=g(r);return{i:t.x===n.x,n:n.x!==o.x}}(o,s),t.supportPassiveEvents=function(){var e=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(r){}return e}(),t.supportResizeObserver=!!z("ResizeObserver"),r="style",null==(e=o)||e.removeAttribute(r),u(o),!l.x||!l.y){var d=v(),h=C(),w=m(this,k);window.addEventListener("resize",(function(){if(w.size){var e=v(),r={w:e.w-d.w,h:e.h-d.h};if(0===r.w&&0===r.h)return;var i,a={w:P(r.w),h:P(r.h)},s={w:P(L(e.w/(d.w/100))),h:P(L(e.h/(d.h/100)))},c=C(),l=a.w>2&&a.h>2,f=(b=s.h,g=P(s.w),m=P(b),!(g!==m&&g+1!==m&&g-1!==m)),p=l&&f&&(c!==h&&h>0),y=t.nativeScrollbarSize;p&&(i=t.nativeScrollbarSize=j(n,o),u(o),y.x===i.x&&y.y===i.y||w.forEach((function(e){return e&&e(t)}))),d=e,h=c}var b,g,m}))}}var r=e.prototype;return r.addListener=function(e){m(this,k).add(e)},r.removeListener=function(e){m(this,k).delete(e)},e}();return function(){return[new A,f('
fdfhdfgh
')]}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/index.html b/packages/overlayscrollbars/index.html index 5344e60..2f15a14 100644 --- a/packages/overlayscrollbars/index.html +++ b/packages/overlayscrollbars/index.html @@ -3,8 +3,7 @@ - - Server Syncing API + OverlayScrollbars diff --git a/packages/overlayscrollbars/src/support/utils/array.ts b/packages/overlayscrollbars/src/support/utils/array.ts index e07fe0e..eeab397 100644 --- a/packages/overlayscrollbars/src/support/utils/array.ts +++ b/packages/overlayscrollbars/src/support/utils/array.ts @@ -1,4 +1,3 @@ -import { keys } from 'support/utils/object'; import { isArrayLike } from 'support/utils/types'; import { PlainObject } from 'typings'; @@ -38,7 +37,7 @@ export function each( } } } else if (source) { - each(keys(source), (key) => callback(source[key], key, source)); + each(Object.keys(source), (key) => callback(source[key], key, source)); } return source; } diff --git a/packages/overlayscrollbars/types/environment/index.d.ts b/packages/overlayscrollbars/types/environment/index.d.ts index c0f4de3..3482389 100644 --- a/packages/overlayscrollbars/types/environment/index.d.ts +++ b/packages/overlayscrollbars/types/environment/index.d.ts @@ -1 +1,3 @@ +import { Environment } from 'environment/environment'; export * from 'environment/environment'; +export declare type OSEnvironment = Omit; diff --git a/packages/overlayscrollbars/types/support/compatibility/vendors.d.ts b/packages/overlayscrollbars/types/support/compatibility/vendors.d.ts index be2a719..66c344f 100644 --- a/packages/overlayscrollbars/types/support/compatibility/vendors.d.ts +++ b/packages/overlayscrollbars/types/support/compatibility/vendors.d.ts @@ -8,4 +8,4 @@ export declare const cssCache: { }; export declare const cssProperty: (name: string) => string | undefined; export declare const cssPropertyValue: (property: string, values: string, suffix?: string | undefined) => string | undefined; -export declare const jsAPI: (name: string) => any; +export declare const jsAPI: (name: string) => T | undefined; diff --git a/packages/overlayscrollbars/types/support/dom/offset.d.ts b/packages/overlayscrollbars/types/support/dom/offset.d.ts index 843468a..c81a0bb 100644 --- a/packages/overlayscrollbars/types/support/dom/offset.d.ts +++ b/packages/overlayscrollbars/types/support/dom/offset.d.ts @@ -1,3 +1,3 @@ import { XY } from 'support/dom'; -export declare const offset: (elm: HTMLElement | null) => XY; -export declare const position: (elm: HTMLElement | null) => XY; +export declare const absoluteCoordinates: (elm: HTMLElement | null) => XY; +export declare const offsetCoordinates: (elm: HTMLElement | null) => XY; diff --git a/packages/overlayscrollbars/types/support/utils/extend.d.ts b/packages/overlayscrollbars/types/support/utils/extend.d.ts deleted file mode 100644 index fa1762f..0000000 --- a/packages/overlayscrollbars/types/support/utils/extend.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare function extend(target: T, object1: U): T & U; -export declare function extend(target: T, object1: U, object2: V): T & U & V; -export declare function extend(target: T, object1: U, object2: V, object3: W): T & U & V & W; -export declare function extend(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X; -export declare function extend(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y; diff --git a/packages/overlayscrollbars/types/support/utils/index.d.ts b/packages/overlayscrollbars/types/support/utils/index.d.ts index e275e87..3a3a49c 100644 --- a/packages/overlayscrollbars/types/support/utils/index.d.ts +++ b/packages/overlayscrollbars/types/support/utils/index.d.ts @@ -1,4 +1,3 @@ export * from 'support/utils/array'; export * from 'support/utils/object'; -export * from 'support/utils/extend'; export * from 'support/utils/types'; diff --git a/packages/overlayscrollbars/types/support/utils/object.d.ts b/packages/overlayscrollbars/types/support/utils/object.d.ts index 8efca0b..ac4acaf 100644 --- a/packages/overlayscrollbars/types/support/utils/object.d.ts +++ b/packages/overlayscrollbars/types/support/utils/object.d.ts @@ -1,2 +1,7 @@ export declare const hasOwnProperty: (obj: any, prop: string | number | symbol) => boolean; export declare const keys: (obj: any) => Array; +export declare function assignDeep(target: T, object1: U): T & U; +export declare function assignDeep(target: T, object1: U, object2: V): T & U & V; +export declare function assignDeep(target: T, object1: U, object2: V, object3: W): T & U & V & W; +export declare function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X; +export declare function assignDeep(target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T & U & V & W & X & Y; diff --git a/resolve.config.json b/resolve.config.json index 44c89ed..dd6b7c8 100644 --- a/resolve.config.json +++ b/resolve.config.json @@ -1,4 +1,5 @@ { "extensions": [".json", ".js", "jsx", ".ts", ".tsx", ".html"], - "directories": ["node_modules", "src"] + "directories": ["node_modules", "src"], + "projectRoot": "./packages" } diff --git a/rollup.config.js b/rollup.config.js index 6c96ff2..e61f6c4 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -9,8 +9,19 @@ import fs from 'fs'; import path from 'path'; import resolve from './resolve.config.json'; -const projectRootPath = './packages'; const buildConfigNames = ['build.config.js', 'build.config.json']; +const buildConfigDefaults = { + input: './src/index', + src: './src', + dist: './dist', + types: './types', + tests: './__tests__', + cache: [], + minVersions: true, + sourcemap: true, + esmBuild: true, + exports: 'auto', +}; const legacyBabelConfig = { presets: [ @@ -41,51 +52,50 @@ const esmBabelConfig = { ], }; +const appendExtension = (file) => { + if (path.extname(file) === '') { + return file + resolve.extensions.find((ext) => fs.existsSync(path.resolve(`${file}${ext}`))); + } + return file; +}; + const getBuildConfig = (projectPath) => { const buildConfigName = buildConfigNames.find((name) => fs.existsSync(path.resolve(projectPath, name))); return buildConfigName ? path.resolve(projectPath, buildConfigName) : ''; }; -export default async (config, overwriteBuildConfig) => { +const resolvePath = (projectPath, rPath, appendExt) => { + const result = rPath ? (path.isAbsolute(rPath) ? rPath : path.resolve(projectPath, rPath)) : null; + return result && appendExt ? appendExtension(result) : result; +}; + +export default async (config, overwriteBuildConfig, silent) => { const { 'config-project': project } = config; - const defaultInputName = './src/index'; - const projectPath = path.resolve(__dirname, projectRootPath, project); + const projectPath = path.resolve(__dirname, resolve.projectRoot, project); const packageJSONPath = path.resolve(projectPath, 'package.json'); const tsconfigJSONPath = path.resolve(projectPath, 'tsconfig.json'); const buildConfigPath = getBuildConfig(projectPath); const isTypeScriptProject = fs.existsSync(tsconfigJSONPath); - const buildConfigDefaults = { - input: defaultInputName + resolve.extensions.find((ext) => fs.existsSync(path.resolve(projectPath, `${defaultInputName}${ext}`))), - src: './src', - dist: './dist', - types: './types', - tests: './tests', - cache: [], - minVersions: true, - sourcemap: true, - esmBuild: true, - name: project, - exports: 'auto', - }; const buildConfig = { ...buildConfigDefaults, + ...{ name: project, file: project }, ...(await import(buildConfigPath)), ...(overwriteBuildConfig || {}), }; - const { input, src, dist, types, tests, cache, minVersions, sourcemap, esmBuild, name, exports, globals } = buildConfig; + const { input, src, dist, types, tests, file, cache, minVersions, sourcemap, esmBuild, name, exports, globals } = buildConfig; const { devDependencies = {}, peerDependencies = {} } = await import(packageJSONPath); - const srcPath = src ? path.resolve(projectPath, src) : null; - const distPath = dist ? path.resolve(projectPath, dist) : null; - const typesPath = types ? path.resolve(projectPath, types) : null; - const testsPath = tests ? path.resolve(projectPath, tests) : null; - const inputPath = input ? path.resolve(projectPath, input) : null; + const srcPath = resolvePath(projectPath, src); + const distPath = resolvePath(projectPath, dist); + const typesPath = resolvePath(projectPath, types); + const testsPath = resolvePath(projectPath, tests); + const inputPath = resolvePath(projectPath, input, true); const genOutputConfig = (esm) => ({ format: esm ? 'esm' : 'umd', - file: path.resolve(distPath, `${project}${esm ? '.esm' : ''}.js`), + file: path.resolve(distPath, `${file}${esm ? '.esm' : ''}.js`), sourcemap, ...(esm ? {} @@ -157,10 +167,12 @@ export default async (config, overwriteBuildConfig) => { }; }; - console.log(''); - console.log('PROJECT : ', project); - console.log('ENV : ', process.env.NODE_ENV); - console.log('CONFIG : ', buildConfig); + if (!silent) { + console.log(''); + console.log('PROJECT : ', project); + console.log('ENV : ', process.env.NODE_ENV); + console.log('CONFIG : ', buildConfig); + } const legacy = await genConfig({ esm: false, typeDeclaration: true }); const esm = esmBuild ? await genConfig({ esm: true, typeDeclaration: false }) : null; @@ -176,7 +188,7 @@ export default async (config, overwriteBuildConfig) => { name: 'deleteGeneratedDirs', options() { const deletedDirs = del.sync([distPath, typesPath].filter((curr) => curr !== null)); - if (deletedDirs.length > 0) { + if (deletedDirs.length > 0 && !silent) { console.log('Deleted directories:\n', deletedDirs.join('\n')); } }, @@ -188,7 +200,7 @@ export default async (config, overwriteBuildConfig) => { writeBundle() { const cacheDirs = cache.map((dir) => path.resolve(projectPath, dir)); const deletedDirs = del.sync(cacheDirs); - if (deletedDirs.length > 0) { + if (deletedDirs.length > 0 && !silent) { console.log('Deleted cache:\n', deletedDirs.join('\n')); } },