diff --git a/.eslintrc.js b/.eslintrc.js index cd334ba..9ee19e1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -31,12 +31,15 @@ module.exports = { 'no-continue': 'off', 'no-param-reassign': 'off', 'no-nested-ternary': 'off', + 'no-underscore-dangle': 'off', + 'no-unused-expressions': ['error', { allowShortCircuit: true, allowTernary: true }], 'no-console': ['error', { allow: ['warn', 'error'] }], 'no-empty': ['error', { allowEmptyCatch: true }], 'no-cond-assign': ['error', 'except-parens'], camelcase: ['error', { allow: ['^__', '^UNSAFE_'] }], 'consistent-return': 'off', 'import/prefer-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', diff --git a/.prettierrc b/.prettierrc index 523eaf9..61c64cd 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,6 +6,7 @@ "jsxBracketSameLine": true, "arrowParens": "always", "endOfLine": "lf", + "parser": "babel", "overrides": [ { "files": "*.vue", diff --git a/jest.config.js b/jest.config.js index d6484b7..155b8bf 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,7 +3,7 @@ const resolve = require('./resolve.config'); // For a detailed explanation regarding each configuration property, visit: // https://jestjs.io/docs/en/configuration.html -module.exports = { +const base = { clearMocks: true, collectCoverage: true, coverageDirectory: 'coverage', @@ -12,3 +12,32 @@ module.exports = { testPathIgnorePatterns: ['\\\\node_modules\\\\'], verbose: true, }; + +module.exports = { + projects: [ + { + ...base, + displayName: 'jsdom', + }, + // { + // ...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 8989696..2833eb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2136,6 +2136,15 @@ "integrity": "sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA==", "dev": true }, + "@types/puppeteer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-3.0.1.tgz", + "integrity": "sha512-t03eNKCvWJXhQ8wkc5C6GYuSqMEdKLOX0GLMGtks25YZr38wKZlKTwGM/BoAPVtdysX7Bb9tdwrDS1+NrW3RRA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -2166,6 +2175,16 @@ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.0.tgz", @@ -2259,6 +2278,12 @@ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "acorn": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", @@ -2287,6 +2312,12 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true + }, "aggregate-error": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", @@ -2357,6 +2388,48 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2711,6 +2784,12 @@ } } }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -2720,6 +2799,17 @@ "tweetnacl": "^0.14.3" } }, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2766,12 +2856,37 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "bufferutil": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.1.tgz", + "integrity": "sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==", + "dev": true, + "requires": { + "node-gyp-build": "~3.7.0" + } + }, "builtin-modules": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", @@ -2813,6 +2928,17 @@ "integrity": "sha512-fOjqRmHjRXv1H1YD6QVLb96iKqnu17TjcLSaX64TwhGYed0P1E1CCWZ9OujbbK4Z/7zax7zAzvQidzdtjx8RcA==", "dev": true }, + "canvas": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz", + "integrity": "sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA==", + "dev": true, + "requires": { + "nan": "^2.14.0", + "node-pre-gyp": "^0.11.0", + "simple-get": "^3.0.3" + } + }, "capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -2851,6 +2977,12 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -2918,6 +3050,12 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -2994,6 +3132,12 @@ "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", @@ -3151,6 +3295,21 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-freeze": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", @@ -3241,12 +3400,36 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "devtools-protocol": { + "version": "0.0.781568", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.781568.tgz", + "integrity": "sha512-9Uqnzy6m6zEStluH9iyJ3iHyaQziFnMnLeC8vK0eN6smiJmIx7+yB64d67C2lH/LZra+5cGscJAJsNXO+MdPMg==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "diff-sequences": { "version": "25.2.6", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", @@ -4347,6 +4530,29 @@ } } }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -4409,6 +4615,15 @@ "bser": "2.1.1" } }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -4572,6 +4787,12 @@ "map-cache": "^0.2.2" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -4583,6 +4804,15 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4608,6 +4838,59 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -4768,6 +5051,12 @@ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4861,6 +5150,16 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } + }, "human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -4876,12 +5175,27 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", @@ -4938,6 +5252,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, "inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", @@ -7624,12 +7944,36 @@ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", "dev": true }, + "lodash.hasin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.hasin/-/lodash.hasin-4.5.2.tgz", + "integrity": "sha1-+R41I3jSHvcJC552h8LKNcW01So=", + "dev": true + }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", + "dev": true + }, + "lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.omitby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.omitby/-/lodash.omitby-4.6.0.tgz", + "integrity": "sha1-XBX/R1StVVAWtTwEExHo8HkgR5E=", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -7775,6 +8119,12 @@ "picomatch": "^2.0.5" } }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + }, "mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", @@ -7796,6 +8146,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -7811,6 +8167,25 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -7833,13 +8208,16 @@ } }, "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" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "ms": { "version": "2.1.2", @@ -7853,6 +8231,12 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -7878,6 +8262,28 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "needle": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -7894,6 +8300,12 @@ "semver": "^5.7.0" } }, + "node-gyp-build": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", + "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==", + "dev": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -7930,12 +8342,60 @@ } } }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "dev": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "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" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "node-releases": { "version": "1.1.59", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==", "dev": true }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -7954,6 +8414,32 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -7963,6 +8449,24 @@ "path-key": "^2.0.0" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -8131,12 +8635,28 @@ "word-wrap": "~1.2.3" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-each-series": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", @@ -8251,6 +8771,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -8374,6 +8900,17 @@ "table": "^5.2.3", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "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" + } + } } }, "eslint-utils": { @@ -8500,6 +9037,12 @@ } } }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -8527,6 +9070,12 @@ "react-is": "^16.8.1" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -8549,6 +9098,26 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "puppeteer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.2.1.tgz", + "integrity": "sha512-PZoZG7u+T6N1GFWBQmGVG162Ak5MAy8nYSVpeeQrwJK2oYUlDWpHEJPcd/zopyuEMTv7DiztS1blgny1txR2qw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.781568", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + } + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -8564,6 +9133,26 @@ "safe-buffer": "^5.1.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -8601,6 +9190,17 @@ "type-fest": "^0.8.1" } }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "regenerate": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", @@ -8878,6 +9478,20 @@ "fsevents": "~2.1.2" } }, + "rollup-plugin-prettier": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-prettier/-/rollup-plugin-prettier-2.1.0.tgz", + "integrity": "sha512-2uPhHkBMVBZeb4cruQrYrjOTtoqHNvnUB5UIzmMu8JBXCfQ+0/JxDclEmnBd44MjO14VmXvfr0GanQaZjCxSbQ==", + "dev": true, + "requires": { + "diff": "4.0.2", + "lodash.hasin": "4.5.2", + "lodash.isempty": "4.4.0", + "lodash.isnil": "4.0.0", + "lodash.omitby": "4.6.0", + "magic-string": "0.25.7" + } + }, "rollup-plugin-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-6.1.0.tgz", @@ -9128,6 +9742,12 @@ } } }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -9219,6 +9839,23 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dev": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -9584,6 +10221,23 @@ "es-abstract": "^1.17.5" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -9711,6 +10365,57 @@ } } }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "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" + } + } + } + }, + "tar-fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", + "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "dev": true, + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -9954,6 +10659,16 @@ "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", "dev": true }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -10061,6 +10776,21 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "utf-8-validate": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz", + "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==", + "dev": true, + "requires": { + "node-gyp-build": "~3.7.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, "uuid": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", @@ -10269,6 +10999,48 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -10326,6 +11098,17 @@ "dev": true, "requires": { "mkdirp": "^0.5.1" + }, + "dependencies": { + "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" + } + } } }, "write-file-atomic": { @@ -10364,6 +11147,12 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -10392,6 +11181,16 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index 812247b..d9b84bb 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,12 @@ "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-typescript": "^5.0.2", "@types/jest": "^25.2.3", + "@types/puppeteer": "^3.0.1", "@typescript-eslint/eslint-plugin": "^3.7.0", "@typescript-eslint/parser": "^3.7.0", "babel-jest": "^26.0.1", + "bufferutil": "^4.0.1", + "canvas": "^2.6.1", "del": "^5.1.0", "eslint": "^7.5.0", "eslint-config-airbnb": "^18.2.0", @@ -28,15 +31,20 @@ "eslint-plugin-react": "^7.20.3", "eslint-plugin-react-hooks": "^4.0.8", "jest": "^26.0.1", + "mkdirp": "^1.0.4", + "prettier": "^2.0.5", "prettier-eslint": "^11.0.0", + "puppeteer": "^5.2.1", "rollup": "^2.22.1", + "rollup-plugin-prettier": "^2.1.0", "rollup-plugin-terser": "^6.1.0", "rollup-plugin-typescript2": "^0.27.1", "tslib": "^2.0.0", - "typescript": "^3.9.7" + "typescript": "^3.9.7", + "utf-8-validate": "^5.0.2" }, "scripts": { - "test": "jest --coverage", + "test": "jest --coverage --runInBand --detectOpenHandles", "build": "npx rollup -c --config-project='overlayscrollbars' && npx rollup -c --config-project='overlayscrollbars-jquery'", "lint": "npx eslint --fix ." } diff --git a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js index a6728ec..50e5e5a 100644 --- a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js +++ b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js @@ -3,7 +3,7 @@ import j from 'jquery'; var abc = 'abc'; const a = 1 + 1; var file = { - a + a, }; const a$1 = 'a'; const b = 'b'; diff --git a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js.map b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js.map index 2f50f0b..cf09fcc 100644 --- a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js.map +++ b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars-jquery.esm.js","sources":["../src/dir/abc.js","../src/file.js","../src/test.js","../src/index.js"],"sourcesContent":["export default 'abc';\n","const a = 1 + 1;\nexport default {\n a,\n};\n","export const a = 'a';\nexport const b = 'b';\nexport const c = 'c';\n","import abc from 'dir/abc';\nimport not from 'dir/not.png';\nimport file from 'file';\nimport j from 'jquery';\nimport { a, b, c } from 'test';\n\nexport default j('div');\nexport { a, b, c, file, abc, not };\n"],"names":["a","b","c","j"],"mappings":";;AAAA,UAAe,KAAf;ACAA,MAAMA,CAAC,GAAG,IAAI,CAAd;AACA,WAAe;AACbA,EAAAA;AADa,CAAf;ACDY,MAACA,GAAC,GAAG,GAAL;AACA,MAACC,CAAC,GAAG,GAAL;AACA,MAACC,CAAC,GAAG,GAAL;ACIZ,YAAeC,CAAC,CAAC,KAAD,CAAhB;;"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars-jquery.esm.js","sources":["../src/dir/abc.js","../src/file.js","../src/test.js","../src/index.js"],"sourcesContent":["export default 'abc';\r\n","const a = 1 + 1;\r\nexport default {\r\n a,\r\n};\r\n","export const a = 'a';\r\nexport const b = 'b';\r\nexport const c = 'c';\r\n","import abc from 'dir/abc';\r\nimport not from 'dir/not.png';\r\nimport file from 'file';\r\nimport j from 'jquery';\r\nimport { a, b, c } from 'test';\r\n\r\nexport default j('div');\r\nexport { a, b, c, file, abc, not };\r\n"],"names":["a","b","c","j"],"mappings":";;AAAA,UAAe,KAAf;ACAA,MAAMA,CAAC,GAAG,IAAI,CAAd;AACA,WAAe;AACbA,EAAAA;AADa,CAAf;ACDY,MAACA,GAAC,GAAG,GAAL;AACA,MAACC,CAAC,GAAG,GAAL;AACA,MAACC,CAAC,GAAG,GAAL;ACIZ,YAAeC,CAAC,CAAC,KAAD,CAAhB;;;"} \ No newline at end of file diff --git a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js index 5755a16..a9072fd 100644 --- a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js +++ b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js @@ -1,48 +1,32 @@ (function (global, factory) { - if (typeof define === "function" && define.amd) { - define("OverlayScrollbars", ["exports", "dir/not.png", "jquery"], factory); - } else if (typeof exports !== "undefined") { - factory(exports, require("dir/not.png"), require("jquery")); - } else { - var mod = { - exports: {} - }; - factory(mod.exports, global.not, global.jQuery); - global.OverlayScrollbars = mod.exports; - } -})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _not, _jquery) { - "use strict"; - - Object.defineProperty(_exports, "__esModule", { - value: true - }); - Object.defineProperty(_exports, "not", { - enumerable: true, - get: function get() { - return _not.default; - } - }); - _exports.file = _exports.c = _exports.b = _exports.abc = _exports.a = _exports.default = void 0; - _not = _interopRequireDefault(_not); - _jquery = _interopRequireDefault(_jquery); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + typeof exports === 'object' && typeof module !== 'undefined' + ? factory(exports, require('dir/not.png'), require('jquery')) + : typeof define === 'function' && define.amd + ? define(['exports', 'dir/not.png', 'jquery'], factory) + : ((global = global || self), factory((global.OverlayScrollbars = {}), global.not_png, global.jQuery)); +})(this, function (exports, not_png, j) { + 'use strict'; + not_png = not_png && Object.prototype.hasOwnProperty.call(not_png, 'default') ? not_png['default'] : not_png; + j = j && Object.prototype.hasOwnProperty.call(j, 'default') ? j['default'] : j; var abc = 'abc'; - _exports.abc = abc; var a = 1 + 1; var file = { - a: a + a: a, }; - _exports.file = file; var a$1 = 'a'; - _exports.a = a$1; var b = 'b'; - _exports.b = b; var c = 'c'; - _exports.c = c; - var index = (0, _jquery.default)('div'); - var _default = index; - _exports.default = _default; + var index = j('div'); + exports.not = not_png; + exports.a = a$1; + exports.abc = abc; + exports.b = b; + exports.c = c; + exports.default = index; + exports.file = file; + Object.defineProperty(exports, '__esModule', { + value: true, + }); }); //# sourceMappingURL=overlayscrollbars-jquery.js.map diff --git a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js.map b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js.map index 01b7ca1..b7dece4 100644 --- a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js.map +++ b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars-jquery.js","sources":["../src/dir/abc.js","../src/file.js","../src/test.js","../src/index.js"],"sourcesContent":["export default 'abc';\n","const a = 1 + 1;\nexport default {\n a,\n};\n","export const a = 'a';\nexport const b = 'b';\nexport const c = 'c';\n","import abc from 'dir/abc';\nimport not from 'dir/not.png';\nimport file from 'file';\nimport j from 'jquery';\nimport { a, b, c } from 'test';\n\nexport default j('div');\nexport { a, b, c, file, abc, not };\n"],"names":["a","b","c"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAe,KAAf;;ACAA,MAAMA,CAAC,GAAG,IAAI,CAAd;AACA,aAAe;AACbA,IAAAA,CAAC,EAADA;AADa,GAAf;;ACDY,MAACA,GAAC,GAAG,GAAL;;AACA,MAACC,CAAC,GAAG,GAAL;;AACA,MAACC,CAAC,GAAG,GAAL;;ACIZ,cAAe,qBAAE,KAAF,CAAf;"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars-jquery.js","sources":["../src/dir/abc.js","../src/file.js","../src/test.js","../src/index.js"],"sourcesContent":["export default 'abc';\r\n","const a = 1 + 1;\r\nexport default {\r\n a,\r\n};\r\n","export const a = 'a';\r\nexport const b = 'b';\r\nexport const c = 'c';\r\n","import abc from 'dir/abc';\r\nimport not from 'dir/not.png';\r\nimport file from 'file';\r\nimport j from 'jquery';\r\nimport { a, b, c } from 'test';\r\n\r\nexport default j('div');\r\nexport { a, b, c, file, abc, not };\r\n"],"names":["a","b","c","j"],"mappings":";;;;;;;;;;;YAAe;ACAf,MAAMA,CAAC,GAAG,IAAI,CAAd;aACe;AACbA,IAAAA,CAAC,EAADA;AADa;MCDFA,GAAC,GAAG;MACJC,CAAC,GAAG;MACJC,CAAC,GAAG;cCIFC,CAAC,CAAC,KAAD;;;;;;;;;;;;"} \ No newline at end of file diff --git a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.min.js b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.min.js index 854f28a..5f7caff 100644 --- a/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.min.js +++ b/packages/overlayscrollbars-jquery/dist/overlayscrollbars-jquery.min.js @@ -1 +1 @@ -!function(e,r){if("function"==typeof define&&define.amd)define("OverlayScrollbars",["exports","dir/not.png","jquery"],r);else if("undefined"!=typeof exports)r(exports,require("dir/not.png"),require("jquery"));else{var t={exports:{}};r(t.exports,e.not,e.jQuery),e.OverlayScrollbars=t.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e,r,t){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"not",{enumerable:!0,get:function(){return r.default}}),e.file=e.c=e.b=e.abc=e.a=e.default=void 0,r=n(r),t=n(t);e.abc="abc";var f={a:2};e.file=f;e.a="a";e.b="b";e.c="c";var o=(0,t.default)("div");e.default=o})); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("dir/not.png"),require("jquery")):"function"==typeof define&&define.amd?define(["exports","dir/not.png","jquery"],t):t((e=e||self).OverlayScrollbars={},e.not_png,e.jQuery)}(this,(function(e,t,r){"use strict";t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;var o={a:2},n=(r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r)("div");e.not=t,e.a="a",e.abc="abc",e.b="b",e.c="c",e.default=n,e.file=o,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js index 435bc17..588d917 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js @@ -12,10 +12,10 @@ function isArray(obj) { function isArrayLike(obj) { const length = !!obj && obj.length; - return isArray(obj) || !isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0; + return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); } -const keys = obj => obj ? Object.keys(obj) : []; +const keys = (obj) => (obj ? Object.keys(obj) : []); function each(source, callback) { if (isArrayLike(source)) { @@ -25,21 +25,19 @@ function each(source, callback) { } } } else if (source) { - each(keys(source), key => callback(source[key], key, source)); + each(keys(source), (key) => callback(source[key], key, source)); } return source; } -const contents = elm => elm ? Array.from(elm.childNodes) : []; +const contents = (elm) => (elm ? Array.from(elm.childNodes) : []); -const removeElements = nodes => { +const removeElements = (nodes) => { if (isArrayLike(nodes)) { - each(Array.from(nodes), e => removeElements(e)); + each(Array.from(nodes), (e) => removeElements(e)); } else if (nodes) { - const { - parentNode - } = nodes; + const { parentNode } = nodes; if (parentNode) { parentNode.removeChild(nodes); @@ -49,25 +47,23 @@ const removeElements = nodes => { const createDiv = () => document.createElement('div'); -const createDOM = html => { +const createDOM = (html) => { const createdDiv = createDiv(); createdDiv.innerHTML = html.trim(); - return each(contents(createdDiv), elm => removeElements(elm)); + return each(contents(createdDiv), (elm) => removeElements(elm)); }; const abc = { a: 1, b: 1, - c: 1 + c: 1, }; var index = () => { - const { - a, - b, - c - } = abc; - return [createDOM('\ + const { a, b, c } = abc; + return [ + createDOM( + '\
\
\
\ @@ -88,7 +84,12 @@ var index = () => {
\
\
\ - '), a, b, c]; + ' + ), + a, + b, + c, + ]; }; export default index; diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.esm.js.map index cceb4c1..5975614 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/core/utils/types.ts","../src/core/utils/object.ts","../src/core/utils/array.ts","../src/core/dom/traversal.ts","../src/core/dom/manipulation.ts","../src/core/dom/create.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'core/typings';\n\nexport const type: (obj: any) => string = (obj) => {\n if (obj === undefined) return `${obj}`;\n if (obj === null) return `${obj}`;\n return Object.prototype.toString\n .call(obj)\n .replace(/^\\[object (.+)\\]$/, '$1')\n .toLowerCase();\n};\n\nexport function isNumber(obj: any): obj is number {\n return typeof obj === 'number';\n}\n\nexport function isString(obj: any): obj is string {\n return typeof obj === 'string';\n}\n\nexport function isBoolean(obj: any): obj is boolean {\n return typeof obj === 'boolean';\n}\n\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\n return typeof obj === 'function';\n}\n\nexport function isUndefined(obj: any): obj is undefined {\n return obj === undefined;\n}\n\nexport function isNull(obj: any): obj is null {\n return obj === null;\n}\n\nexport function isArray(obj: any): obj is Array {\n return Array.isArray(obj);\n}\n\nexport function isObject(obj: any): boolean {\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\n}\n\n/**\n * Returns true if the given object is array like, false otherwise.\n * @param obj The Object\n */\nexport function isArrayLike(obj: any): obj is ArrayLike {\n const length = !!obj && obj.length;\n return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\n}\n\n/**\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\n * @param obj The Object.\n */\nexport function isPlainObject(obj: any): obj is PlainObject {\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\n\n let key;\n const proto = 'prototype';\n const { hasOwnProperty } = Object[proto];\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\n\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n return false;\n }\n\n /* eslint-disable no-restricted-syntax */\n for (key in obj) {\n /**/\n }\n /* eslint-enable */\n\n return isUndefined(key) || hasOwnProperty.call(obj, key);\n}\n\n/**\n * Checks whether the given object is a HTMLElement.\n * @param obj The object which shall be checked.\n */\nexport function isHTMLElement(obj: any): obj is HTMLElement {\n const instaceOfRightHandSide = window.HTMLElement;\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\n}\n\n/**\n * Returns true if the given object is empty, false otherwise.\n * @param obj The Object.\n */\nexport function isEmptyObject(obj: any): boolean {\n /* eslint-disable no-restricted-syntax, guard-for-in */\n for (const name in obj) return false;\n return true;\n /* eslint-enable */\n}\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 = (obj: any, prop: string | number | symbol) =>\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: any) => (obj ? Object.keys(obj) : []);\r\n","import { keys } from 'core/utils/object';\nimport { isArrayLike } from 'core/utils/types';\nimport { PlainObject } from 'core/typings';\n\n/**\n * Iterates through a array or object\n * @param arrayLikeOrObject The array or object through which shall be iterated.\n * @param callback The function which is responsible for the iteration.\n * If the function returns true its treated like a \"continue\" statement.\n * If the function returns false its treated like a \"break\" statement.\n */\nexport function each(\n array: Array | ReadonlyArray,\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void,\n): Array | ReadonlyArray;\nexport function each(\n array: Array | ReadonlyArray | null,\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void,\n): Array | ReadonlyArray | null;\nexport function each(\n arrayLikeObject: ArrayLike,\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void,\n): ArrayLike;\nexport function each(\n arrayLikeObject: ArrayLike | null,\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void,\n): ArrayLike | null;\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\nexport function each(\n source: ArrayLike | PlainObject | null,\n callback: (value: T | any, indexOrKey: any, source: any) => boolean | void,\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\n if (isArrayLike(source)) {\n for (let i = 0; i < source.length; i++) {\n if (callback(source[i], i, source) === false) {\n break;\n }\n }\n } else if (source) {\n each(keys(source), (key) => callback(source[key], key, source));\n }\n return source;\n}\n\n/**\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\n * @param arr The array.\n * @param item The item.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\nexport const indexOf: (arr: Array, item: T, fromIndex?: number) => number = (arr, item, fromIndex) => arr.indexOf(item, fromIndex);\n","import { each } from 'core/utils/array';\n\nconst elementIsVisible: (elm: HTMLElement) => boolean = (elm) => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\n\nexport const find: (selector: string, elm?: Element | null) => ReadonlyArray = (selector, elm?) => {\n const arr: Array = [];\n\n each((elm || document).querySelectorAll(selector), (e: Element) => {\n arr.push(e);\n });\n\n return arr;\n};\n\nexport const findFirst: (selector: string, elm?: Element | null) => Element | null = (selector, elm?) => (elm || document).querySelector(selector);\n\nexport const is: (elm: Element | null, selector: string) => boolean = (elm, selector) => {\n if (elm) {\n if (selector === ':visible') {\n return elementIsVisible(elm as HTMLElement);\n }\n if (selector === ':hidden') {\n return !elementIsVisible(elm as HTMLElement);\n }\n if (elm.matches(selector)) {\n return true;\n }\n }\n return false;\n};\n\nexport const children: (elm: Element | null, selector?: string) => ReadonlyArray = (elm, selector?) => {\n const childs: Array = [];\n\n each(elm && elm.children, (child: Element) => {\n if (selector) {\n if (child.matches(selector)) {\n childs.push(child);\n }\n } else {\n childs.push(child);\n }\n });\n\n return childs;\n};\n\nexport const contents: (elm: Element | null) => ReadonlyArray = (elm) => (elm ? Array.from(elm.childNodes) : []);\n\nexport const parent: (elm: Node | null) => Node | null = (elm) => (elm ? elm.parentElement : null);\n","import { isArrayLike } from 'core/utils/types';\nimport { each } from 'core/utils/array';\nimport { parent } from 'core/dom/traversal';\n\ntype NodeCollection = ArrayLike | Node | undefined | null;\n\n/**\n * Inserts Nodes before the given preferredAnchor element.\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\n * @param insertedElms The Nodes which shall be inserted.\n */\nconst before: (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection) => void = (\n parentElm,\n preferredAnchor,\n insertedElms,\n) => {\n if (insertedElms) {\n let anchor: Node | null = preferredAnchor;\n let fragment: DocumentFragment | Node | undefined | null;\n\n // parent must be defined\n if (parentElm) {\n if (isArrayLike(insertedElms)) {\n fragment = document.createDocumentFragment();\n\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\n each(insertedElms, (insertedElm) => {\n if (insertedElm === anchor) {\n anchor = insertedElm.previousSibling;\n }\n fragment!.appendChild(insertedElm);\n });\n } else {\n fragment = insertedElms;\n }\n\n // if the preferred anchor isn't null set it to a valid anchor\n if (preferredAnchor) {\n if (!anchor) {\n anchor = parentElm.firstChild;\n } else if (anchor !== preferredAnchor) {\n anchor = anchor.nextSibling;\n }\n }\n\n parentElm.insertBefore(fragment, anchor);\n }\n }\n};\n\n/**\n * Appends the given children at the end of the given Node.\n * @param node The Node to which the children shall be appended.\n * @param children The Nodes which shall be appended.\n */\nexport const appendChildren: (node: Node | null, children: NodeCollection) => void = (node, children) => {\n before(node, null, children);\n};\n\n/**\n * Prepends the given children at the start of the given Node.\n * @param node The Node to which the children shall be prepended.\n * @param children The Nodes which shall be prepended.\n */\nexport const prependChildren: (node: Node | null, children: NodeCollection) => void = (node, children) => {\n before(node, node && node.firstChild, children);\n};\n\n/**\n * Inserts the given Nodes before the given Node.\n * @param node The Node before which the given Nodes shall be inserted.\n * @param insertedNodes The Nodes which shall be inserted.\n */\nexport const insertBefore: (node: Node | null, insertedNodes: NodeCollection) => void = (node, insertedNodes) => {\n before(parent(node), node, insertedNodes);\n};\n\n/**\n * Inserts the given Nodes after the given Node.\n * @param node The Node after which the given Nodes shall be inserted.\n * @param insertedNodes The Nodes which shall be inserted.\n */\nexport const insertAfter: (node: Node | null, insertedNodes: NodeCollection) => void = (node, insertedNodes) => {\n before(parent(node), node && node.nextSibling, insertedNodes);\n};\n\n/**\n * Removes the given Nodes from their parent.\n * @param nodes The Nodes which shall be removed.\n */\nexport const removeElements: (nodes: NodeCollection) => void = (nodes) => {\n if (isArrayLike(nodes)) {\n each(Array.from(nodes), (e) => removeElements(e));\n } else if (nodes) {\n const { parentNode } = nodes;\n if (parentNode) {\n parentNode.removeChild(nodes);\n }\n }\n};\n","import { each } from 'core/utils/array';\nimport { contents } from 'core/dom/traversal';\nimport { removeElements } from 'core/dom/manipulation';\n\nexport const createDiv: () => HTMLDivElement = () => document.createElement('div');\n\nexport const createDOM: (html: string) => ReadonlyArray = (html) => {\n const createdDiv = createDiv();\n createdDiv.innerHTML = html.trim();\n\n return each(contents(createdDiv), (elm) => removeElements(elm));\n};\n","import { createDOM } from 'core/dom';\n\n/*\nexport * from 'core/compatibility';\nexport * from 'core/utils';\nexport * from 'core/dom';\nexport * from 'core/options';\nexport * from 'instances';\n*/\n\nconst abc = {\n a: 1,\n b: 1,\n c: 1,\n};\n\nexport default () => {\n const { a, b, c } = abc;\n return [\n createDOM(\n '\\\n
\\\n
\\\n
\\\n
\\\n
\\\n fdfhdfgh\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
'\n ),\n a,\n b,\n c,\n ];\n};\n"],"names":["isNumber","obj","isFunction","isArray","Array","isArrayLike","length","keys","Object","each","source","callback","i","key","contents","elm","from","childNodes","removeElements","nodes","e","parentNode","removeChild","createDiv","document","createElement","createDOM","html","createdDiv","innerHTML","trim","abc","a","b","c"],"mappings":"SAWgBA,SAASC;AACvB,SAAO,OAAOA,GAAP,KAAe,QAAtB;AACD;;SAUeC,WAAWD;AACzB,SAAO,OAAOA,GAAP,KAAe,UAAtB;AACD;;SAUeE,QAAQF;AACtB,SAAOG,KAAK,CAACD,OAAN,CAAcF,GAAd,CAAP;AACD;;SAUeI,YAAyCJ;AACvD,QAAMK,MAAM,GAAG,CAAC,CAACL,GAAF,IAASA,GAAG,CAACK,MAA5B;AACA,SAAOH,OAAO,CAACF,GAAD,CAAP,IAAiB,CAACC,UAAU,CAACD,GAAD,CAAX,IAAoBD,QAAQ,CAACM,MAAD,CAA5B,IAAwCA,MAAM,GAAG,CAAC,CAAlD,IAAuDA,MAAM,GAAG,CAAT,IAAc,CAA7F;;;ACrCK,MAAMC,IAAI,GAAiCN,GAAD,IAAeA,GAAG,GAAGO,MAAM,CAACD,IAAP,CAAYN,GAAZ,CAAH,GAAsB,EAAlF;;SCiBSQ,KACdC,QACAC;AAEA,MAAIN,WAAW,CAACK,MAAD,CAAf,EAAyB;AACvB,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAAM,CAACJ,MAA3B,EAAmCM,CAAC,EAApC,EAAwC;AACtC,UAAID,QAAQ,CAACD,MAAM,CAACE,CAAD,CAAP,EAAYA,CAAZ,EAAeF,MAAf,CAAR,KAAmC,KAAvC,EAA8C;AAC5C;AACD;AACF;AACF,GAND,MAMO,IAAIA,MAAJ,EAAY;AACjBD,IAAAA,IAAI,CAACF,IAAI,CAACG,MAAD,CAAL,EAAgBG,GAAD,IAASF,QAAQ,CAACD,MAAM,CAACG,GAAD,CAAP,EAAcA,GAAd,EAAmBH,MAAnB,CAAhC,CAAJ;AACD;;AACD,SAAOA,MAAP;;;ACKK,MAAMI,QAAQ,GAAuDC,GAAD,IAAUA,GAAG,GAAGX,KAAK,CAACY,IAAN,CAAsBD,GAAG,CAACE,UAA1B,CAAH,GAA2C,EAA5H;;AC4CA,MAAMC,cAAc,GAAqCC,KAAD;AAC7D,MAAId,WAAW,CAACc,KAAD,CAAf,EAAwB;AACtBV,IAAAA,IAAI,CAACL,KAAK,CAACY,IAAN,CAAWG,KAAX,CAAD,EAAqBC,CAAD,IAAOF,cAAc,CAACE,CAAD,CAAzC,CAAJ;AACD,GAFD,MAEO,IAAID,KAAJ,EAAW;AAChB,UAAM;AAAEE,MAAAA;AAAF,QAAiBF,KAAvB;;AACA,QAAIE,UAAJ,EAAgB;AACdA,MAAAA,UAAU,CAACC,WAAX,CAAuBH,KAAvB;AACD;AACF;AACF,CATM;;ACvFA,MAAMI,SAAS,GAAyB,MAAMC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAA9C;;AAEA,MAAMC,SAAS,GAA2CC,IAAD;AAC9D,QAAMC,UAAU,GAAGL,SAAS,EAA5B;AACAK,EAAAA,UAAU,CAACC,SAAX,GAAuBF,IAAI,CAACG,IAAL,EAAvB;AAEA,SAAOrB,IAAI,CAACK,QAAQ,CAACc,UAAD,CAAT,EAAwBb,GAAD,IAASG,cAAc,CAACH,GAAD,CAA9C,CAAX;AACD,CALM;;ACIP,MAAMgB,GAAG,GAAG;AACVC,EAAAA,CAAC,EAAE,CADO;AAEVC,EAAAA,CAAC,EAAE,CAFO;AAGVC,EAAAA,CAAC,EAAE;AAHO,CAAZ;;AAMA,YAAe;AACb,QAAM;AAAEF,IAAAA,CAAF;AAAKC,IAAAA,CAAL;AAAQC,IAAAA;AAAR,MAAcH,GAApB;AACA,SAAO,CACLL,SAAS,CACP;;;;;;;;;;;;;;;;;;;;;WADO,CADJ,EAyBLM,CAzBK,EA0BLC,CA1BK,EA2BLC,CA3BK,CAAP;AA6BD,CA/BD;;"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.esm.js","sources":["../src/support/utils/types.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/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","/**\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","import { each } 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 ? Array.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 '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(Array.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 { createDOM } from 'support/dom';\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 const { a, b, c } = abc;\r\n return [\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 a,\r\n b,\r\n c,\r\n ];\r\n};\r\n"],"names":["isNumber","obj","isFunction","isArray","Array","isArrayLike","length","keys","Object","each","source","callback","i","key","contents","elm","from","childNodes","removeElements","nodes","e","parentNode","removeChild","createDiv","document","createElement","createDOM","html","createdDiv","innerHTML","trim","abc","a","b","c"],"mappings":"SAWgBA,SAASC;AACvB,SAAO,OAAOA,GAAP,KAAe,QAAtB;AACD;;SAUeC,WAAWD;AACzB,SAAO,OAAOA,GAAP,KAAe,UAAtB;AACD;;SAUeE,QAAQF;AACtB,SAAOG,KAAK,CAACD,OAAN,CAAcF,GAAd,CAAP;AACD;;SAUeI,YAAyCJ;AACvD,QAAMK,MAAM,GAAG,CAAC,CAACL,GAAF,IAASA,GAAG,CAACK,MAA5B;AACA,SAAOH,OAAO,CAACF,GAAD,CAAP,KAAiB,CAACC,UAAU,CAACD,GAAD,CAAX,IAAoBD,QAAQ,CAACM,MAAD,CAA5B,IAAwCA,MAAM,GAAG,CAAC,CAAlD,IAAuDA,MAAM,GAAG,CAAT,IAAc,EAA7F;;;ACrCK,MAAMC,IAAI,IAAIN,IAAD,KAA8BA,GAAG,GAAGO,MAAM,CAACD,IAAP,CAAYN,GAAZ,CAAH,GAAsB,GAApE;;SCiBSQ,KACdC,QACAC;AAEA,MAAIN,WAAW,CAACK,MAAD,CAAf,EAAyB;AACvB,SAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAAM,CAACJ,MAA3B,EAAmCM,CAAC,EAApC,EAAwC;AACtC,UAAID,QAAQ,CAACD,MAAM,CAACE,CAAD,CAAP,EAAYA,CAAZ,EAAeF,MAAf,CAAR,KAAmC,KAAvC,EAA8C;AAC5C;AACD;AACF;AACF,GAND,MAMO,IAAIA,MAAJ,EAAY;AACjBD,IAAAA,IAAI,CAACF,IAAI,CAACG,MAAD,CAAL,GAAgBG,IAAD,IAASF,QAAQ,CAACD,MAAM,CAACG,GAAD,CAAP,EAAcA,GAAd,EAAmBH,MAAnB,CAAhC,CAAJ;AACD;;AACD,SAAOA,MAAP;;;ACKK,MAAMI,QAAQ,IAAIC,IAAD,KAAoDA,GAAG,GAAGX,KAAK,CAACY,IAAN,CAAsBD,GAAG,CAACE,UAA1B,CAAH,GAA2C,GAAnH;;ACwCA,MAAMC,cAAc,IAAIC,MAAD;AAC5B,MAAId,WAAW,CAACc,KAAD,CAAf,EAAwB;AACtBV,IAAAA,IAAI,CAACL,KAAK,CAACY,IAAN,CAAWG,KAAX,CAAD,GAAqBC,EAAD,IAAOF,cAAc,CAACE,CAAD,CAAzC,CAAJ;AACD,GAFD,MAEO,IAAID,KAAJ,EAAW;AAChB,UAAM,CAAEE,CAAAA,UAAF,KAAiBF,KAAvB;;AACA,QAAIE,UAAJ,EAAgB;AACdA,MAAAA,UAAU,CAACC,WAAX,CAAuBH,KAAvB;AACD;AACF;AACF,CATM;;ACnFA,MAAMI,SAAS,GAAG,MAAsBC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAxC;;AAEA,MAAMC,SAAS,IAAIC,KAAD;AACvB,QAAMC,UAAU,GAAGL,SAAS,EAA5B;AACAK,EAAAA,UAAU,CAACC,SAAX,GAAuBF,IAAI,CAACG,IAAL,EAAvB;AAEA,SAAOrB,IAAI,CAACK,QAAQ,CAACc,UAAD,CAAT,GAAwBb,IAAD,IAASG,cAAc,CAACH,GAAD,CAA9C,CAAX;AACD,CALM;;ACJP,MAAMgB,GAAG,GAAG;AACVC,EAAAA,CAAC,EAAE,CADO;AAEVC,EAAAA,CAAC,EAAE,CAFO;AAGVC,EAAAA,CAAC,EAAE;AAHO,CAAZ;;AAMA,YAAe;AACb,QAAM,CAAEF,CAAAA,CAAF,CAAKC,CAAAA,CAAL,CAAQC,CAAAA,CAAR,KAAcH,GAApB;AACA,SAAO;IACLL,SAAS;MACP;;;;;;;;;;;;;;;;;;;;;;IADO,CADJ;IAyBLM,CAzBK;IA0BLC,CA1BK;IA2BLC;EA3BK,CAAP;AA6BD,CA/BD;;;"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js b/packages/overlayscrollbars/dist/overlayscrollbars.js index 3aba4ae..ca8757b 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js @@ -1,22 +1,11 @@ (function (global, factory) { - if (typeof define === "function" && define.amd) { - define("OverlayScrollbars", ["exports"], factory); - } else if (typeof exports !== "undefined") { - factory(exports); - } else { - var mod = { - exports: {} - }; - factory(mod.exports); - global.OverlayScrollbars = mod.exports; - } -})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports) { - "use strict"; - - Object.defineProperty(_exports, "__esModule", { - value: true - }); - _exports.default = void 0; + typeof exports === 'object' && typeof module !== 'undefined' + ? (module.exports = factory()) + : typeof define === 'function' && define.amd + ? define(factory) + : ((global = global || self), (global.OverlayScrollbars = factory())); +})(this, function () { + 'use strict'; function isNumber(obj) { return typeof obj === 'number'; @@ -32,7 +21,7 @@ function isArrayLike(obj) { var length = !!obj && obj.length; - return isArray(obj) || !isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0; + return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); } var keys = function keys(obj) { @@ -88,14 +77,16 @@ var abc = { a: 1, b: 1, - c: 1 + c: 1, }; var index = function index() { var a = abc.a, - b = abc.b, - c = abc.c; - return [createDOM('\ + b = abc.b, + c = abc.c; + return [ + createDOM( + '\
\
\
\ @@ -116,10 +107,14 @@
\
\
\ - '), a, b, c]; + ' + ), + a, + b, + c, + ]; }; - var _default = index; - _exports.default = _default; + return index; }); //# sourceMappingURL=overlayscrollbars.js.map diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.js.map b/packages/overlayscrollbars/dist/overlayscrollbars.js.map index d61b41a..c02f08b 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.js.map +++ b/packages/overlayscrollbars/dist/overlayscrollbars.js.map @@ -1 +1 @@ -{"version":3,"file":"overlayscrollbars.js","sources":["../src/core/utils/types.ts","../src/core/utils/object.ts","../src/core/utils/array.ts","../src/core/dom/traversal.ts","../src/core/dom/manipulation.ts","../src/core/dom/create.ts","../src/index.ts"],"sourcesContent":["import { PlainObject } from 'core/typings';\n\nexport const type: (obj: any) => string = (obj) => {\n if (obj === undefined) return `${obj}`;\n if (obj === null) return `${obj}`;\n return Object.prototype.toString\n .call(obj)\n .replace(/^\\[object (.+)\\]$/, '$1')\n .toLowerCase();\n};\n\nexport function isNumber(obj: any): obj is number {\n return typeof obj === 'number';\n}\n\nexport function isString(obj: any): obj is string {\n return typeof obj === 'string';\n}\n\nexport function isBoolean(obj: any): obj is boolean {\n return typeof obj === 'boolean';\n}\n\nexport function isFunction(obj: any): obj is (...args: Array) => unknown {\n return typeof obj === 'function';\n}\n\nexport function isUndefined(obj: any): obj is undefined {\n return obj === undefined;\n}\n\nexport function isNull(obj: any): obj is null {\n return obj === null;\n}\n\nexport function isArray(obj: any): obj is Array {\n return Array.isArray(obj);\n}\n\nexport function isObject(obj: any): boolean {\n return typeof obj === 'object' && !isArray(obj) && !isNull(obj);\n}\n\n/**\n * Returns true if the given object is array like, false otherwise.\n * @param obj The Object\n */\nexport function isArrayLike(obj: any): obj is ArrayLike {\n const length = !!obj && obj.length;\n return isArray(obj) || (!isFunction(obj) && isNumber(length) && length > -1 && length % 1 == 0); // eslint-disable-line eqeqeq\n}\n\n/**\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\n * @param obj The Object.\n */\nexport function isPlainObject(obj: any): obj is PlainObject {\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\n\n let key;\n const proto = 'prototype';\n const { hasOwnProperty } = Object[proto];\n const hasOwnConstructor = hasOwnProperty.call(obj, 'constructor');\n const hasIsPrototypeOf = obj.constructor && obj.constructor[proto] && hasOwnProperty.call(obj.constructor[proto], 'isPrototypeOf');\n\n if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n return false;\n }\n\n /* eslint-disable no-restricted-syntax */\n for (key in obj) {\n /**/\n }\n /* eslint-enable */\n\n return isUndefined(key) || hasOwnProperty.call(obj, key);\n}\n\n/**\n * Checks whether the given object is a HTMLElement.\n * @param obj The object which shall be checked.\n */\nexport function isHTMLElement(obj: any): obj is HTMLElement {\n const instaceOfRightHandSide = window.HTMLElement;\n const doInstanceOf = isObject(instaceOfRightHandSide) || isFunction(instaceOfRightHandSide);\n return !!(doInstanceOf ? obj instanceof instaceOfRightHandSide : obj && isObject(obj) && obj.nodeType === 1 && isString(obj.nodeName));\n}\n\n/**\n * Returns true if the given object is empty, false otherwise.\n * @param obj The Object.\n */\nexport function isEmptyObject(obj: any): boolean {\n /* eslint-disable no-restricted-syntax, guard-for-in */\n for (const name in obj) return false;\n return true;\n /* eslint-enable */\n}\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 = (obj: any, prop: string | number | symbol) =>\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: any) => (obj ? Object.keys(obj) : []);\r\n","import { keys } from 'core/utils/object';\nimport { isArrayLike } from 'core/utils/types';\nimport { PlainObject } from 'core/typings';\n\n/**\n * Iterates through a array or object\n * @param arrayLikeOrObject The array or object through which shall be iterated.\n * @param callback The function which is responsible for the iteration.\n * If the function returns true its treated like a \"continue\" statement.\n * If the function returns false its treated like a \"break\" statement.\n */\nexport function each(\n array: Array | ReadonlyArray,\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void,\n): Array | ReadonlyArray;\nexport function each(\n array: Array | ReadonlyArray | null,\n callback: (value: T, indexOrKey: number, source: Array) => boolean | void,\n): Array | ReadonlyArray | null;\nexport function each(\n arrayLikeObject: ArrayLike,\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void,\n): ArrayLike;\nexport function each(\n arrayLikeObject: ArrayLike | null,\n callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void,\n): ArrayLike | null;\nexport function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject;\nexport function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null;\nexport function each(\n source: ArrayLike | PlainObject | null,\n callback: (value: T | any, indexOrKey: any, source: any) => boolean | void,\n): Array | ReadonlyArray | ArrayLike | PlainObject | null {\n if (isArrayLike(source)) {\n for (let i = 0; i < source.length; i++) {\n if (callback(source[i], i, source) === false) {\n break;\n }\n }\n } else if (source) {\n each(keys(source), (key) => callback(source[key], key, source));\n }\n return source;\n}\n\n/**\n * Returns the index of the given inside the given array or -1 if the given item isn't part of the given array.\n * @param arr The array.\n * @param item The item.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\nexport const indexOf: (arr: Array, item: T, fromIndex?: number) => number = (arr, item, fromIndex) => arr.indexOf(item, fromIndex);\n","import { each } from 'core/utils/array';\n\nconst elementIsVisible: (elm: HTMLElement) => boolean = (elm) => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\n\nexport const find: (selector: string, elm?: Element | null) => ReadonlyArray = (selector, elm?) => {\n const arr: Array = [];\n\n each((elm || document).querySelectorAll(selector), (e: Element) => {\n arr.push(e);\n });\n\n return arr;\n};\n\nexport const findFirst: (selector: string, elm?: Element | null) => Element | null = (selector, elm?) => (elm || document).querySelector(selector);\n\nexport const is: (elm: Element | null, selector: string) => boolean = (elm, selector) => {\n if (elm) {\n if (selector === ':visible') {\n return elementIsVisible(elm as HTMLElement);\n }\n if (selector === ':hidden') {\n return !elementIsVisible(elm as HTMLElement);\n }\n if (elm.matches(selector)) {\n return true;\n }\n }\n return false;\n};\n\nexport const children: (elm: Element | null, selector?: string) => ReadonlyArray = (elm, selector?) => {\n const childs: Array = [];\n\n each(elm && elm.children, (child: Element) => {\n if (selector) {\n if (child.matches(selector)) {\n childs.push(child);\n }\n } else {\n childs.push(child);\n }\n });\n\n return childs;\n};\n\nexport const contents: (elm: Element | null) => ReadonlyArray = (elm) => (elm ? Array.from(elm.childNodes) : []);\n\nexport const parent: (elm: Node | null) => Node | null = (elm) => (elm ? elm.parentElement : null);\n","import { isArrayLike } from 'core/utils/types';\nimport { each } from 'core/utils/array';\nimport { parent } from 'core/dom/traversal';\n\ntype NodeCollection = ArrayLike | Node | undefined | null;\n\n/**\n * Inserts Nodes before the given preferredAnchor element.\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\n * @param insertedElms The Nodes which shall be inserted.\n */\nconst before: (parentElm: Node | null, preferredAnchor: Node | null, insertedElms: NodeCollection) => void = (\n parentElm,\n preferredAnchor,\n insertedElms,\n) => {\n if (insertedElms) {\n let anchor: Node | null = preferredAnchor;\n let fragment: DocumentFragment | Node | undefined | null;\n\n // parent must be defined\n if (parentElm) {\n if (isArrayLike(insertedElms)) {\n fragment = document.createDocumentFragment();\n\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\n each(insertedElms, (insertedElm) => {\n if (insertedElm === anchor) {\n anchor = insertedElm.previousSibling;\n }\n fragment!.appendChild(insertedElm);\n });\n } else {\n fragment = insertedElms;\n }\n\n // if the preferred anchor isn't null set it to a valid anchor\n if (preferredAnchor) {\n if (!anchor) {\n anchor = parentElm.firstChild;\n } else if (anchor !== preferredAnchor) {\n anchor = anchor.nextSibling;\n }\n }\n\n parentElm.insertBefore(fragment, anchor);\n }\n }\n};\n\n/**\n * Appends the given children at the end of the given Node.\n * @param node The Node to which the children shall be appended.\n * @param children The Nodes which shall be appended.\n */\nexport const appendChildren: (node: Node | null, children: NodeCollection) => void = (node, children) => {\n before(node, null, children);\n};\n\n/**\n * Prepends the given children at the start of the given Node.\n * @param node The Node to which the children shall be prepended.\n * @param children The Nodes which shall be prepended.\n */\nexport const prependChildren: (node: Node | null, children: NodeCollection) => void = (node, children) => {\n before(node, node && node.firstChild, children);\n};\n\n/**\n * Inserts the given Nodes before the given Node.\n * @param node The Node before which the given Nodes shall be inserted.\n * @param insertedNodes The Nodes which shall be inserted.\n */\nexport const insertBefore: (node: Node | null, insertedNodes: NodeCollection) => void = (node, insertedNodes) => {\n before(parent(node), node, insertedNodes);\n};\n\n/**\n * Inserts the given Nodes after the given Node.\n * @param node The Node after which the given Nodes shall be inserted.\n * @param insertedNodes The Nodes which shall be inserted.\n */\nexport const insertAfter: (node: Node | null, insertedNodes: NodeCollection) => void = (node, insertedNodes) => {\n before(parent(node), node && node.nextSibling, insertedNodes);\n};\n\n/**\n * Removes the given Nodes from their parent.\n * @param nodes The Nodes which shall be removed.\n */\nexport const removeElements: (nodes: NodeCollection) => void = (nodes) => {\n if (isArrayLike(nodes)) {\n each(Array.from(nodes), (e) => removeElements(e));\n } else if (nodes) {\n const { parentNode } = nodes;\n if (parentNode) {\n parentNode.removeChild(nodes);\n }\n }\n};\n","import { each } from 'core/utils/array';\nimport { contents } from 'core/dom/traversal';\nimport { removeElements } from 'core/dom/manipulation';\n\nexport const createDiv: () => HTMLDivElement = () => document.createElement('div');\n\nexport const createDOM: (html: string) => ReadonlyArray = (html) => {\n const createdDiv = createDiv();\n createdDiv.innerHTML = html.trim();\n\n return each(contents(createdDiv), (elm) => removeElements(elm));\n};\n","import { createDOM } from 'core/dom';\n\n/*\nexport * from 'core/compatibility';\nexport * from 'core/utils';\nexport * from 'core/dom';\nexport * from 'core/options';\nexport * from 'instances';\n*/\n\nconst abc = {\n a: 1,\n b: 1,\n c: 1,\n};\n\nexport default () => {\n const { a, b, c } = abc;\n return [\n createDOM(\n '\\\n
\\\n
\\\n
\\\n
\\\n
\\\n fdfhdfgh\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
\\\n
'\n ),\n a,\n b,\n c,\n ];\n};\n"],"names":["isNumber","obj","isFunction","isArray","Array","isArrayLike","length","keys","Object","each","source","callback","i","key","contents","elm","from","childNodes","removeElements","nodes","e","parentNode","removeChild","createDiv","document","createElement","createDOM","html","createdDiv","innerHTML","trim","abc","a","b","c"],"mappings":";;;;;;;;;;;;;;;;;;;;WAWgBA,SAASC;AACvB,WAAO,OAAOA,GAAP,KAAe,QAAtB;AACD;;WAUeC,WAAWD;AACzB,WAAO,OAAOA,GAAP,KAAe,UAAtB;AACD;;WAUeE,QAAQF;AACtB,WAAOG,KAAK,CAACD,OAAN,CAAcF,GAAd,CAAP;AACD;;WAUeI,YAAyCJ;AACvD,QAAMK,MAAM,GAAG,CAAC,CAACL,GAAF,IAASA,GAAG,CAACK,MAA5B;AACA,WAAOH,OAAO,CAACF,GAAD,CAAP,IAAiB,CAACC,UAAU,CAACD,GAAD,CAAX,IAAoBD,QAAQ,CAACM,MAAD,CAA5B,IAAwCA,MAAM,GAAG,CAAC,CAAlD,IAAuDA,MAAM,GAAG,CAAT,IAAc,CAA7F;;;ACrCK,MAAMC,IAAI,GAAgC,SAApCA,IAAoC,CAACN,GAAD;AAAA,WAAeA,GAAG,GAAGO,MAAM,CAACD,IAAP,CAAYN,GAAZ,CAAH,GAAsB,EAAxC;AAAA,GAA1C;;WCiBSQ,KACdC,QACAC;AAEA,QAAIN,WAAW,CAACK,MAAD,CAAf,EAAyB;AACvB,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAAM,CAACJ,MAA3B,EAAmCM,CAAC,EAApC,EAAwC;AACtC,YAAID,QAAQ,CAACD,MAAM,CAACE,CAAD,CAAP,EAAYA,CAAZ,EAAeF,MAAf,CAAR,KAAmC,KAAvC,EAA8C;AAC5C;AACD;AACF;AACF,KAND,MAMO,IAAIA,MAAJ,EAAY;AACjBD,MAAAA,IAAI,CAACF,IAAI,CAACG,MAAD,CAAL,EAAe,UAACG,GAAD;AAAA,eAASF,QAAQ,CAACD,MAAM,CAACG,GAAD,CAAP,EAAcA,GAAd,EAAmBH,MAAnB,CAAjB;AAAA,OAAf,CAAJ;AACD;;AACD,WAAOA,MAAP;;;ACKK,MAAMI,QAAQ,GAAsD,SAA9DA,QAA8D,CAACC,GAAD;AAAA,WAAUA,GAAG,GAAGX,KAAK,CAACY,IAAN,CAAsBD,GAAG,CAACE,UAA1B,CAAH,GAA2C,EAAxD;AAAA,GAApE;;AC4CA,MAAMC,cAAc,GAAoC,SAAlDA,cAAkD,CAACC,KAAD;AAC7D,QAAId,WAAW,CAACc,KAAD,CAAf,EAAwB;AACtBV,MAAAA,IAAI,CAACL,KAAK,CAACY,IAAN,CAAWG,KAAX,CAAD,EAAoB,UAACC,CAAD;AAAA,eAAOF,cAAc,CAACE,CAAD,CAArB;AAAA,OAApB,CAAJ;AACD,KAFD,MAEO,IAAID,KAAJ,EAAW;AAAA,UACRE,UADQ,GACOF,KADP,CACRE,UADQ;;AAEhB,UAAIA,UAAJ,EAAgB;AACdA,QAAAA,UAAU,CAACC,WAAX,CAAuBH,KAAvB;AACD;AACF;AACF,GATM;;ACvFA,MAAMI,SAAS,GAAyB,SAAlCA,SAAkC;AAAA,WAAMC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAN;AAAA,GAAxC;;AAEA,MAAMC,SAAS,GAA0C,SAAnDA,SAAmD,CAACC,IAAD;AAC9D,QAAMC,UAAU,GAAGL,SAAS,EAA5B;AACAK,IAAAA,UAAU,CAACC,SAAX,GAAuBF,IAAI,CAACG,IAAL,EAAvB;AAEA,WAAOrB,IAAI,CAACK,QAAQ,CAACc,UAAD,CAAT,EAAuB,UAACb,GAAD;AAAA,aAASG,cAAc,CAACH,GAAD,CAAvB;AAAA,KAAvB,CAAX;AACD,GALM;;ACIP,MAAMgB,GAAG,GAAG;AACVC,IAAAA,CAAC,EAAE,CADO;AAEVC,IAAAA,CAAC,EAAE,CAFO;AAGVC,IAAAA,CAAC,EAAE;AAHO,GAAZ;;AAMA,cAAe,cAAA;QACLF,IAAYD,IAAZC;QAAGC,IAASF,IAATE;QAAGC,IAAMH,IAANG;AACd,WAAO,CACLR,SAAS,CACP;;;;;;;;;;;;;;;;;;;;;WADO,CADJ,EAyBLM,CAzBK,EA0BLC,CA1BK,EA2BLC,CA3BK,CAAP;AA6BD,GA/BD;;"} \ No newline at end of file +{"version":3,"file":"overlayscrollbars.js","sources":["../src/support/utils/types.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/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","/**\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","import { each } 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 ? Array.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 '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(Array.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 { createDOM } from 'support/dom';\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 const { a, b, c } = abc;\r\n return [\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 a,\r\n b,\r\n c,\r\n ];\r\n};\r\n"],"names":["isNumber","obj","isFunction","isArray","Array","isArrayLike","length","keys","Object","each","source","callback","i","key","contents","elm","from","childNodes","removeElements","nodes","e","parentNode","removeChild","createDiv","document","createElement","createDOM","html","createdDiv","innerHTML","trim","abc","a","b","c"],"mappings":";;;;;;;;;WAWgBA,SAASC;AACvB,WAAO,OAAOA,GAAP,KAAe,QAAtB;AACD;;WAUeC,WAAWD;AACzB,WAAO,OAAOA,GAAP,KAAe,UAAtB;AACD;;WAUeE,QAAQF;AACtB,WAAOG,KAAK,CAACD,OAAN,CAAcF,GAAd,CAAP;AACD;;WAUeI,YAAyCJ;AACvD,QAAMK,MAAM,GAAG,CAAC,CAACL,GAAF,IAASA,GAAG,CAACK,MAA5B;AACA,WAAOH,OAAO,CAACF,GAAD,CAAP,KAAiB,CAACC,UAAU,CAACD,GAAD,CAAX,IAAoBD,QAAQ,CAACM,MAAD,CAA5B,IAAwCA,MAAM,GAAG,CAAC,CAAlD,IAAuDA,MAAM,GAAG,CAAT,IAAc,EAA7F;;;ACrCK,MAAMC,IAAI,GAAG,SAAPA,IAAO,CAACN,GAAD;AAAA,WAA8BA,GAAG,GAAGO,MAAM,CAACD,IAAP,CAAYN,GAAZ,CAAH,GAAsB,EAAvD;AAAA,GAAb;;WCiBSQ,KACdC,QACAC;AAEA,QAAIN,WAAW,CAACK,MAAD,CAAf,EAAyB;AACvB,WAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,MAAM,CAACJ,MAA3B,EAAmCM,CAAC,EAApC,EAAwC;AACtC,YAAID,QAAQ,CAACD,MAAM,CAACE,CAAD,CAAP,EAAYA,CAAZ,EAAeF,MAAf,CAAR,KAAmC,KAAvC,EAA8C;AAC5C;AACD;AACF;AACF,KAND,MAMO,IAAIA,MAAJ,EAAY;AACjBD,MAAAA,IAAI,CAACF,IAAI,CAACG,MAAD,CAAL,EAAe,UAACG,GAAD;AAAA,eAASF,QAAQ,CAACD,MAAM,CAACG,GAAD,CAAP,EAAcA,GAAd,EAAmBH,MAAnB,CAAjB;AAAA,OAAf,CAAJ;AACD;;AACD,WAAOA,MAAP;;;ACKK,MAAMI,QAAQ,GAAG,SAAXA,QAAW,CAACC,GAAD;AAAA,WAAoDA,GAAG,GAAGX,KAAK,CAACY,IAAN,CAAsBD,GAAG,CAACE,UAA1B,CAAH,GAA2C,EAAlG;AAAA,GAAjB;;ACwCA,MAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,KAAD;AAC5B,QAAId,WAAW,CAACc,KAAD,CAAf,EAAwB;AACtBV,MAAAA,IAAI,CAACL,KAAK,CAACY,IAAN,CAAWG,KAAX,CAAD,EAAoB,UAACC,CAAD;AAAA,eAAOF,cAAc,CAACE,CAAD,CAArB;AAAA,OAApB,CAAJ;AACD,KAFD,MAEO,IAAID,KAAJ,EAAW;AAAA,UACRE,UADQ,GACOF,KADP,CACRE,UADQ;;AAEhB,UAAIA,UAAJ,EAAgB;AACdA,QAAAA,UAAU,CAACC,WAAX,CAAuBH,KAAvB;AACD;AACF;AACF,GATM;;ACnFA,MAAMI,SAAS,GAAG,SAAZA,SAAY;AAAA,WAAsBC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAtB;AAAA,GAAlB;;AAEA,MAAMC,SAAS,GAAG,SAAZA,SAAY,CAACC,IAAD;AACvB,QAAMC,UAAU,GAAGL,SAAS,EAA5B;AACAK,IAAAA,UAAU,CAACC,SAAX,GAAuBF,IAAI,CAACG,IAAL,EAAvB;AAEA,WAAOrB,IAAI,CAACK,QAAQ,CAACc,UAAD,CAAT,EAAuB,UAACb,GAAD;AAAA,aAASG,cAAc,CAACH,GAAD,CAAvB;AAAA,KAAvB,CAAX;AACD,GALM;;ACJP,MAAMgB,GAAG,GAAG;AACVC,IAAAA,CAAC,EAAE,CADO;AAEVC,IAAAA,CAAC,EAAE,CAFO;AAGVC,IAAAA,CAAC,EAAE;AAHO,GAAZ;;cAMe,cAAA;QACLF,IAAYD,IAAZC;MAAGC,IAASF,IAATE;MAAGC,IAAMH,IAANG;AACd,WAAO;MACLR,SAAS;QACP;;;;;;;;;;;;;;;;;;;;;;MADO,CADJ;MAyBLM,CAzBK;MA0BLC,CA1BK;MA2BLC;IA3BK,CAAP;AA6BD;;;;"} \ No newline at end of file diff --git a/packages/overlayscrollbars/dist/overlayscrollbars.min.js b/packages/overlayscrollbars/dist/overlayscrollbars.min.js index 7363e02..9ad2e66 100644 --- a/packages/overlayscrollbars/dist/overlayscrollbars.min.js +++ b/packages/overlayscrollbars/dist/overlayscrollbars.min.js @@ -1 +1 @@ -!function(r,e){if("function"==typeof define&&define.amd)define("OverlayScrollbars",["exports"],e);else if("undefined"!=typeof exports)e(exports);else{var o={exports:{}};e(o.exports),r.OverlayScrollbars=o.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(r){function e(r){var e=!!r&&r.length;return function(r){return Array.isArray(r)}(r)||!function(r){return"function"==typeof r}(r)&&function(r){return"number"==typeof r}(e)&&e>-1&&e%1==0}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;function o(r,s){if(e(r))for(var i=0;i
fdfhdfgh
'),r,e,o]};r.default=t})); \ No newline at end of file +!function(r,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(r=r||self).OverlayScrollbars=o()}(this,(function(){"use strict";function r(r){var o=!!r&&r.length;return function(r){return Array.isArray(r)}(r)||!function(r){return"function"==typeof r}(r)&&function(r){return"number"==typeof r}(o)&&o>-1&&o%1==0}function o(s,e){if(r(s))for(var n=0;n
fdfhdfgh
'),r,o,t]}})); \ No newline at end of file diff --git a/packages/overlayscrollbars/src/core/compatibility/index.ts b/packages/overlayscrollbars/src/core/compatibility/index.ts deleted file mode 100644 index 3b8d5e2..0000000 --- a/packages/overlayscrollbars/src/core/compatibility/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from 'core/compatibility/vendors'; -export * from 'core/compatibility/apis'; -export * from 'core/compatibility/events'; diff --git a/packages/overlayscrollbars/src/core/dom/attribute.ts b/packages/overlayscrollbars/src/core/dom/attribute.ts deleted file mode 100644 index 036a409..0000000 --- a/packages/overlayscrollbars/src/core/dom/attribute.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given. - * Returns null if the element has no attribute with the given name. - * @param elm The element of which the attribute shall be get or set. - * @param attrName The attribute name which shall be get or set. - * @param value The value of the attribute which shall be set. - */ -export const attr = (elm: Element, attrName: string, value?: string): string | null | void => { - if (value === undefined) { - return elm.getAttribute(attrName); - } - elm.setAttribute(attrName, value); -}; - -/** - * Removes the given attribute from the given element. - * @param elm The element of which the attribute shall be removed. - * @param attrName The attribute name. - */ -export const removeAttr = (elm: Element, attrName: string): void => { - elm.removeAttribute(attrName); -}; - -/** - * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given. - * @param elm The element of which the scrollLeft value shall be get or set. - * @param value The scrollLeft value which shall be set. - */ -export const scrollLeft = (elm: HTMLElement, value?: number): number | void => { - if (value === undefined) { - return elm.scrollLeft; - } - elm.scrollLeft = value; -}; - -/** - * Gets or sets the scrollTop value of the given element depending whether the value attribute is given. - * @param elm The element of which the scrollTop value shall be get or set. - * @param value The scrollTop value which shall be set. - */ -export const scrollTop = (elm: HTMLElement, value?: number): number | void => { - if (value === undefined) { - return elm.scrollTop; - } - elm.scrollTop = value; -}; - -/** - * Gets or sets the value of the given input element depending whether the value attribute is given. - * @param elm The input element of which the value shall be get or set. - * @param value The value which shall be set. - */ -export const val = (elm: HTMLInputElement, value?: string): string | void => { - if (value === undefined) { - return elm.value; - } - elm.value = value; -}; diff --git a/packages/overlayscrollbars/src/core/dom/class.ts b/packages/overlayscrollbars/src/core/dom/class.ts deleted file mode 100644 index c00cd62..0000000 --- a/packages/overlayscrollbars/src/core/dom/class.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { isString } from 'core/utils/types'; - -const rnothtmlwhite = /[^\x20\t\r\n\f]+/g; - -/** - * Check whether the given element has the given class name. - * @param elm The element. - * @param className The class name. - */ -export const hasClass = (elm: Element, className: string): boolean => elm.classList.contains(className); - -/** - * Adds the given class name(s) to the given element. - * @param elm The element. - * @param className The class name(s) which shall be added. (separated by spaces) - */ -export const addClass = (elm: Element, className: string): void => { - let clazz: string; - let i = 0; - - if (isString(className)) { - const classes: Array = className.match(rnothtmlwhite) || []; - while ((clazz = classes[i++])) { - elm.classList.add(clazz); - } - } -}; - -/** - * Removes the given class name(s) from the given element. - * @param elm The element. - * @param className The class name(s) which shall be removed. (separated by spaces) - */ -export const removeClass = (elm: Element, className: string): void => { - let clazz: string; - let i = 0; - - if (isString(className)) { - const classes: Array = className.match(rnothtmlwhite) || []; - while ((clazz = classes[i++])) { - elm.classList.remove(clazz); - } - } -}; - -/** - * Adds or removes the given class name(s) from the given element depending on the given condition. - * Condition true means add class name(s), false means remove class name(s). - * @param elm The element. - * @param className The class name(s) which shall be added or removed. (separated by spaces) - */ -export const conditionalClass = (elm: Element, className: string, condition: boolean): void => { - if (condition) { - addClass(elm, className); - } else { - removeClass(elm, className); - } -}; diff --git a/packages/overlayscrollbars/src/core/dom/index.ts b/packages/overlayscrollbars/src/core/dom/index.ts deleted file mode 100644 index e8eb32f..0000000 --- a/packages/overlayscrollbars/src/core/dom/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from 'core/dom/attribute'; -export * from 'core/dom/class'; -export * from 'core/dom/create'; -export * from 'core/dom/style'; -export * from 'core/dom/manipulation'; -export * from 'core/dom/offset'; -export * from 'core/dom/traversal'; diff --git a/packages/overlayscrollbars/src/core/dom/offset.ts b/packages/overlayscrollbars/src/core/dom/offset.ts deleted file mode 100644 index b7dae8d..0000000 --- a/packages/overlayscrollbars/src/core/dom/offset.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const offset = (elm: HTMLElement) => { - const rect = elm.getBoundingClientRect(); - return { - top: rect.top + window.pageXOffset, - left: rect.left + window.pageYOffset, - }; -}; - -export const position = (elm: HTMLElement) => ({ - top: elm.offsetTop, - left: elm.offsetLeft, -}); diff --git a/packages/overlayscrollbars/src/core/dom/style.ts b/packages/overlayscrollbars/src/core/dom/style.ts deleted file mode 100644 index 1588bbb..0000000 --- a/packages/overlayscrollbars/src/core/dom/style.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { each, keys } from 'core/utils'; -import { isString, isNumber, isUndefined } from 'core/utils/types'; - -type cssStyleObj = { [key: string]: string | number }; - -const cssNumber = { - animationIterationCount: true, - columnCount: true, - fillOpacity: true, - flexGrow: true, - flexShrink: true, - fontWeight: true, - lineHeight: true, - opacity: true, - order: true, - orphans: true, - widows: true, - zIndex: true, - zoom: true, -}; - -const parseCSSVal = (prop: string, val: string | number): string | number => - !cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val; - -const setCSSVal = (elm: HTMLElement, prop: string, val: string | number): void => { - try { - if (elm.style[prop] !== undefined) { - elm.style[prop] = parseCSSVal(prop, val); - } - } catch (e) {} -}; - -export function style(elm: HTMLElement, styles: string | cssStyleObj): string; -export function style(elm: HTMLElement, styles: string | cssStyleObj, val: string | number): void; -export function style(elm: HTMLElement, styles: string | cssStyleObj, val?: string | number): string | void { - const getCptStyle = window.getComputedStyle; - - if (isString(styles)) { - if (isUndefined(val)) { - const cptStyle: CSSStyleDeclaration = getCptStyle(elm, null); - - // https://bugzilla.mozilla.org/show_bug.cgi?id=548397 can be null sometimes if iframe with display: none (firefox only!) - return cptStyle != null ? cptStyle.getPropertyValue(styles) : elm.style[styles]; - } - setCSSVal(elm, styles, val); - } else { - each(keys(styles), (key) => setCSSVal(elm, key, styles[key])); - } -} - -export const hide = (elm: HTMLElement): void => { - elm.style.display = 'none'; -}; - -export const show = (elm: HTMLElement): void => { - elm.style.display = 'block'; -}; diff --git a/packages/overlayscrollbars/src/core/options/index.ts b/packages/overlayscrollbars/src/core/options/index.ts deleted file mode 100644 index 9bb9056..0000000 --- a/packages/overlayscrollbars/src/core/options/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from 'core/options/validation'; -export * from 'core/options/transformation'; diff --git a/packages/overlayscrollbars/src/core/utils/index.ts b/packages/overlayscrollbars/src/core/utils/index.ts deleted file mode 100644 index db59a3a..0000000 --- a/packages/overlayscrollbars/src/core/utils/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from 'core/utils/array'; -export * from 'core/utils/object'; -export * from 'core/utils/extend'; -export * from 'core/utils/types'; diff --git a/packages/overlayscrollbars/src/index.ts b/packages/overlayscrollbars/src/index.ts index bd35943..4e2649e 100644 --- a/packages/overlayscrollbars/src/index.ts +++ b/packages/overlayscrollbars/src/index.ts @@ -1,12 +1,4 @@ -import { createDOM } from 'core/dom'; - -/* -export * from 'core/compatibility'; -export * from 'core/utils'; -export * from 'core/dom'; -export * from 'core/options'; -export * from 'instances'; -*/ +import { createDOM } from 'support/dom'; const abc = { a: 1, diff --git a/packages/overlayscrollbars/src/options/index.ts b/packages/overlayscrollbars/src/options/index.ts new file mode 100644 index 0000000..d4f6692 --- /dev/null +++ b/packages/overlayscrollbars/src/options/index.ts @@ -0,0 +1,100 @@ +export * from 'options/options'; + +export type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical'; + +export type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll'; + +export type VisibilityBehavior = 'visible' | 'hidden' | 'auto'; + +export type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move'; + +export type ScrollBehavior = 'always' | 'ifneeded' | 'never'; + +export type BasicEventCallback = (this: any) => void; + +export type ScrollEventCallback = (this: any, args?: UIEvent) => void; + +export type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void; + +export type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void; + +export type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void; + +export type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void; + +export type UpdatedCallback = (this: any, args?: UpdatedArgs) => void; + +export interface Options { + className?: string | null; + resize?: ResizeBehavior; + sizeAutoCapable?: boolean; + clipAlways?: boolean; + normalizeRTL?: boolean; + paddingAbsolute?: boolean; + autoUpdate?: boolean | null; + autoUpdateInterval?: number; + updateOnLoad?: string | ReadonlyArray | null; + nativeScrollbarsOverlaid?: { + showNativeScrollbars?: boolean; + initialize?: boolean; + }; + overflowBehavior?: { + x?: OverflowBehavior; + y?: OverflowBehavior; + }; + scrollbars?: { + visibility?: VisibilityBehavior; + autoHide?: AutoHideBehavior; + autoHideDelay?: number; + dragScrolling?: boolean; + clickScrolling?: boolean; + touchSupport?: boolean; + snapHandle?: boolean; + }; + textarea?: { + dynWidth?: boolean; + dynHeight?: boolean; + inheritedAttrs?: string | ReadonlyArray | null; + }; + callbacks?: { + onInitialized?: BasicEventCallback | null; + onInitializationWithdrawn?: BasicEventCallback | null; + onDestroyed?: BasicEventCallback | null; + onScrollStart?: ScrollEventCallback | null; + onScroll?: ScrollEventCallback | null; + onScrollStop?: ScrollEventCallback | null; + onOverflowChanged?: OverflowChangedCallback | null; + onOverflowAmountChanged?: OverflowAmountChangedCallback | null; + onDirectionChanged?: DirectionChangedCallback | null; + onContentSizeChanged?: SizeChangedCallback | null; + onHostSizeChanged?: SizeChangedCallback | null; + onUpdated?: UpdatedCallback | null; + }; +} + +export interface OverflowChangedArgs { + x: boolean; + y: boolean; + xScrollable: boolean; + yScrollable: boolean; + clipped: boolean; +} + +export interface OverflowAmountChangedArgs { + x: number; + y: number; +} + +export interface DirectionChangedArgs { + isRTL: number; + dir: string; +} + +export interface SizeChangedArgs { + width: number; + height: number; +} + +export interface UpdatedArgs { + forced: boolean; +} diff --git a/packages/overlayscrollbars/src/options.ts b/packages/overlayscrollbars/src/options/options.ts similarity index 94% rename from packages/overlayscrollbars/src/options.ts rename to packages/overlayscrollbars/src/options/options.ts index 84922be..60a9266 100644 --- a/packages/overlayscrollbars/src/options.ts +++ b/packages/overlayscrollbars/src/options/options.ts @@ -1,6 +1,13 @@ -import { OptionsTemplate, OptionsTemplateValue, OptionsAndOptionsTemplateValue, OptionsAndOptionsTemplate, Func } from 'core/typings'; -import { optionsTemplateTypes as oTypes, transform } from 'core/options'; -import { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'typings'; +import { + optionsTemplateTypes as oTypes, + transform, + OptionsTemplate, + OptionsTemplateValue, + OptionsAndOptionsTemplateValue, + OptionsAndOptionsTemplate, + Func, +} from 'support/options'; +import { ResizeBehavior, OverflowBehavior, VisibilityBehavior, AutoHideBehavior, Options } from 'options'; const classNameAllowedValues: OptionsTemplateValue = [oTypes.string, oTypes.null]; const numberAllowedValues: OptionsTemplateValue = oTypes.number; diff --git a/packages/overlayscrollbars/src/core/compatibility/apis.ts b/packages/overlayscrollbars/src/support/compatibility/apis.ts similarity index 57% rename from packages/overlayscrollbars/src/core/compatibility/apis.ts rename to packages/overlayscrollbars/src/support/compatibility/apis.ts index a624940..3724de2 100644 --- a/packages/overlayscrollbars/src/core/compatibility/apis.ts +++ b/packages/overlayscrollbars/src/support/compatibility/apis.ts @@ -1,3 +1,3 @@ -import { jsAPI } from 'core/compatibility/vendors'; +import { jsAPI } from 'support/compatibility/vendors'; export const resizeObserver: any | undefined = jsAPI('ResizeObserver'); diff --git a/packages/overlayscrollbars/src/core/compatibility/events.ts b/packages/overlayscrollbars/src/support/compatibility/events.ts similarity index 100% rename from packages/overlayscrollbars/src/core/compatibility/events.ts rename to packages/overlayscrollbars/src/support/compatibility/events.ts diff --git a/packages/overlayscrollbars/src/support/compatibility/index.ts b/packages/overlayscrollbars/src/support/compatibility/index.ts new file mode 100644 index 0000000..1bdf704 --- /dev/null +++ b/packages/overlayscrollbars/src/support/compatibility/index.ts @@ -0,0 +1,3 @@ +export * from 'support/compatibility/vendors'; +export * from 'support/compatibility/apis'; +export * from 'support/compatibility/events'; diff --git a/packages/overlayscrollbars/src/core/compatibility/vendors.ts b/packages/overlayscrollbars/src/support/compatibility/vendors.ts similarity index 97% rename from packages/overlayscrollbars/src/core/compatibility/vendors.ts rename to packages/overlayscrollbars/src/support/compatibility/vendors.ts index aa6d729..c7f3d6c 100644 --- a/packages/overlayscrollbars/src/core/compatibility/vendors.ts +++ b/packages/overlayscrollbars/src/support/compatibility/vendors.ts @@ -1,5 +1,5 @@ -import { each, hasOwnProperty } from 'core/utils'; -import { createDiv } from 'core/dom'; +import { each, hasOwnProperty } from 'support/utils'; +import { createDiv } from 'support/dom'; const firstLetterToUpper = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1); const getDummyStyle = (): CSSStyleDeclaration => createDiv().style; diff --git a/packages/overlayscrollbars/src/support/dom/attribute.ts b/packages/overlayscrollbars/src/support/dom/attribute.ts new file mode 100644 index 0000000..a95491d --- /dev/null +++ b/packages/overlayscrollbars/src/support/dom/attribute.ts @@ -0,0 +1,73 @@ +import { isUndefined } from 'support/utils/types'; + +type GetSetPropName = 'scrollLeft' | 'scrollTop' | 'value'; + +function getSetProp( + topLeft: GetSetPropName, + fallback: number | string, + elm: HTMLElement | HTMLInputElement | null, + value?: number | string +): number | string | void { + if (isUndefined(value)) { + return elm ? elm[topLeft] : fallback; + } + elm && (elm[topLeft] = value); +} + +/** + * Gets or sets a attribute with the given attribute of the given element depending whether the value attribute is given. + * Returns null if the element has no attribute with the given name. + * @param elm The element of which the attribute shall be get or set. + * @param attrName The attribute name which shall be get or set. + * @param value The value of the attribute which shall be set. + */ +export function attr(elm: HTMLElement | null, attrName: string): string | null; +export function attr(elm: HTMLElement | null, attrName: string, value: string): void; +export function attr(elm: HTMLElement | null, attrName: string, value?: string): string | null | void { + if (isUndefined(value)) { + return elm ? elm.getAttribute(attrName) : null; + } + elm && elm.setAttribute(attrName, value); +} + +/** + * Removes the given attribute from the given element. + * @param elm The element of which the attribute shall be removed. + * @param attrName The attribute name. + */ +export const removeAttr = (elm: Element | null, attrName: string): void => { + elm?.removeAttribute(attrName); +}; + +/** + * Gets or sets the scrollLeft value of the given element depending whether the value attribute is given. + * @param elm The element of which the scrollLeft value shall be get or set. + * @param value The scrollLeft value which shall be set. + */ +export function scrollLeft(elm: HTMLElement | null): number; +export function scrollLeft(elm: HTMLElement | null, value: number): void; +export function scrollLeft(elm: HTMLElement | null, value?: number): number | void { + return getSetProp('scrollLeft', 0, elm, value) as number; +} + +/** + * Gets or sets the scrollTop value of the given element depending whether the value attribute is given. + * @param elm The element of which the scrollTop value shall be get or set. + * @param value The scrollTop value which shall be set. + */ +export function scrollTop(elm: HTMLElement | null): number; +export function scrollTop(elm: HTMLElement | null, value: number): void; +export function scrollTop(elm: HTMLElement | null, value?: number): number | void { + return getSetProp('scrollTop', 0, elm, value) as number; +} + +/** + * Gets or sets the value of the given input element depending whether the value attribute is given. + * @param elm The input element of which the value shall be get or set. + * @param value The value which shall be set. + */ +export function val(elm: HTMLInputElement | null): string; +export function val(elm: HTMLInputElement | null, value: string): void; +export function val(elm: HTMLInputElement | null, value?: string): string | void { + return getSetProp('value', '', elm, value) as string; +} diff --git a/packages/overlayscrollbars/src/support/dom/class.ts b/packages/overlayscrollbars/src/support/dom/class.ts new file mode 100644 index 0000000..022d7d5 --- /dev/null +++ b/packages/overlayscrollbars/src/support/dom/class.ts @@ -0,0 +1,43 @@ +import { isString } from 'support/utils/types'; + +const rnothtmlwhite = /[^\x20\t\r\n\f]+/g; +const classListAction = (elm: Element | null, className: string, action: (elmClassList: DOMTokenList, clazz: string) => boolean | void): boolean => { + let clazz: string; + let i = 0; + let result = false; + + if (elm && isString(className)) { + const classes: Array = className.match(rnothtmlwhite) || []; + result = classes.length > 0; + while ((clazz = classes[i++])) { + result = (action(elm.classList, clazz) as boolean) && result; + } + } + return result; +}; + +/** + * Check whether the given element has the given class name(s). + * @param elm The element. + * @param className The class name(s). + */ +export const hasClass = (elm: Element | null, className: string): boolean => + classListAction(elm, className, (classList, clazz) => classList.contains(clazz)); + +/** + * Adds the given class name(s) to the given element. + * @param elm The element. + * @param className The class name(s) which shall be added. (separated by spaces) + */ +export const addClass = (elm: Element | null, className: string): void => { + classListAction(elm, className, (classList, clazz) => classList.add(clazz)); +}; + +/** + * Removes the given class name(s) from the given element. + * @param elm The element. + * @param className The class name(s) which shall be removed. (separated by spaces) + */ +export const removeClass = (elm: Element | null, className: string): void => { + classListAction(elm, className, (classList, clazz) => classList.remove(clazz)); +}; diff --git a/packages/overlayscrollbars/src/core/dom/create.ts b/packages/overlayscrollbars/src/support/dom/create.ts similarity index 65% rename from packages/overlayscrollbars/src/core/dom/create.ts rename to packages/overlayscrollbars/src/support/dom/create.ts index e15e617..d39c5fc 100644 --- a/packages/overlayscrollbars/src/core/dom/create.ts +++ b/packages/overlayscrollbars/src/support/dom/create.ts @@ -1,6 +1,6 @@ -import { each } from 'core/utils/array'; -import { contents } from 'core/dom/traversal'; -import { removeElements } from 'core/dom/manipulation'; +import { each } from 'support/utils/array'; +import { contents } from 'support/dom/traversal'; +import { removeElements } from 'support/dom/manipulation'; export const createDiv = (): HTMLDivElement => document.createElement('div'); diff --git a/packages/overlayscrollbars/src/support/dom/events.ts b/packages/overlayscrollbars/src/support/dom/events.ts new file mode 100644 index 0000000..1e5578f --- /dev/null +++ b/packages/overlayscrollbars/src/support/dom/events.ts @@ -0,0 +1,6 @@ +export const on = (target: EventTarget, type: string, listener: EventListenerOrEventListenerObject | null, options: AddEventListenerOptions): void => { + + + + target.addEventListener(type, listener, options); +}; \ No newline at end of file diff --git a/packages/overlayscrollbars/src/support/dom/index.ts b/packages/overlayscrollbars/src/support/dom/index.ts new file mode 100644 index 0000000..9dccb22 --- /dev/null +++ b/packages/overlayscrollbars/src/support/dom/index.ts @@ -0,0 +1,7 @@ +export * from 'support/dom/attribute'; +export * from 'support/dom/class'; +export * from 'support/dom/create'; +export * from 'support/dom/style'; +export * from 'support/dom/manipulation'; +export * from 'support/dom/offset'; +export * from 'support/dom/traversal'; diff --git a/packages/overlayscrollbars/src/core/dom/manipulation.ts b/packages/overlayscrollbars/src/support/dom/manipulation.ts similarity index 95% rename from packages/overlayscrollbars/src/core/dom/manipulation.ts rename to packages/overlayscrollbars/src/support/dom/manipulation.ts index c396860..05a17e0 100644 --- a/packages/overlayscrollbars/src/core/dom/manipulation.ts +++ b/packages/overlayscrollbars/src/support/dom/manipulation.ts @@ -1,6 +1,6 @@ -import { isArrayLike } from 'core/utils/types'; -import { each } from 'core/utils/array'; -import { parent } from 'core/dom/traversal'; +import { isArrayLike } from 'support/utils/types'; +import { each } from 'support/utils/array'; +import { parent } from 'support/dom/traversal'; type NodeCollection = ArrayLike | Node | undefined | null; diff --git a/packages/overlayscrollbars/src/support/dom/offset.ts b/packages/overlayscrollbars/src/support/dom/offset.ts new file mode 100644 index 0000000..a7ffc84 --- /dev/null +++ b/packages/overlayscrollbars/src/support/dom/offset.ts @@ -0,0 +1,22 @@ +const zeroObj = { + left: 0, + top: 0, +}; + +export const offset = (elm: HTMLElement | null) => { + const rect = elm ? elm.getBoundingClientRect() : 0; + return rect + ? { + left: rect.left + window.pageYOffset, + top: rect.top + window.pageXOffset, + } + : zeroObj; +}; + +export const position = (elm: HTMLElement | null) => + elm + ? { + left: elm.offsetLeft, + top: elm.offsetTop, + } + : zeroObj; diff --git a/packages/overlayscrollbars/src/support/dom/style.ts b/packages/overlayscrollbars/src/support/dom/style.ts new file mode 100644 index 0000000..cc00b06 --- /dev/null +++ b/packages/overlayscrollbars/src/support/dom/style.ts @@ -0,0 +1,63 @@ +import { each, keys } from 'support/utils'; +import { isString, isNumber, isArray } from 'support/utils/types'; +import { PlainObject } from 'typings'; + +type CssStyles = { [key: string]: string | number }; +const cssNumber = { + 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, +}; + +const adaptCSSVal = (prop: string, val: string | number): string | number => (!cssNumber[prop.toLowerCase()] && isNumber(val) ? `${val}px` : val); +const getCSSVal = (elm: HTMLElement, computedStyle: CSSStyleDeclaration, prop: string): string => + /* istanbul ignore next */ + computedStyle != null ? computedStyle.getPropertyValue(prop) : elm.style[prop]; +const setCSSVal = (elm: HTMLElement | null, prop: string, val: string | number): void => { + try { + if (elm && elm.style[prop] !== undefined) { + elm.style[prop] = adaptCSSVal(prop, val); + } + } catch (e) {} +}; + +export function style(elm: HTMLElement | null, styles: CssStyles): void; +export function style(elm: HTMLElement | null, styles: string): string; +export function style(elm: HTMLElement | null, styles: Array | string): { [key: string]: string }; +export function style(elm: HTMLElement | null, styles: CssStyles | Array | string): { [key: string]: string } | string | void { + const getSingleStyle = isString(styles); + const getStyles = isArray(styles) || getSingleStyle; + + if (getStyles) { + let getStylesResult: string | PlainObject = getSingleStyle ? '' : {}; + if (elm) { + const computedStyle: CSSStyleDeclaration = window.getComputedStyle(elm, null); + getStylesResult = getSingleStyle + ? getCSSVal(elm, computedStyle, styles as string) + : (styles as Array).reduce((result, key) => { + result[key] = getCSSVal(elm, computedStyle, key as string); + return result; + }, getStylesResult); + } + return getStylesResult; + } + each(keys(styles), (key) => setCSSVal(elm, key, styles[key])); +} + +export const hide = (elm: HTMLElement | null): void => { + style(elm, { display: 'none' }); +}; + +export const show = (elm: HTMLElement | null): void => { + style(elm, { display: 'block' }); +}; diff --git a/packages/overlayscrollbars/src/core/dom/traversal.ts b/packages/overlayscrollbars/src/support/dom/traversal.ts similarity index 96% rename from packages/overlayscrollbars/src/core/dom/traversal.ts rename to packages/overlayscrollbars/src/support/dom/traversal.ts index 7c82178..8f190e2 100644 --- a/packages/overlayscrollbars/src/core/dom/traversal.ts +++ b/packages/overlayscrollbars/src/support/dom/traversal.ts @@ -1,4 +1,4 @@ -import { each } from 'core/utils/array'; +import { each } from 'support/utils/array'; const elementIsVisible = (elm: HTMLElement): boolean => !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length); diff --git a/packages/overlayscrollbars/src/support/index.ts b/packages/overlayscrollbars/src/support/index.ts new file mode 100644 index 0000000..25ec35a --- /dev/null +++ b/packages/overlayscrollbars/src/support/index.ts @@ -0,0 +1,4 @@ +export * from 'support/compatibility'; +export * from 'support/dom'; +export * from 'support/options'; +export * from 'support/utils'; diff --git a/packages/overlayscrollbars/src/core/typings.ts b/packages/overlayscrollbars/src/support/options/index.ts similarity index 90% rename from packages/overlayscrollbars/src/core/typings.ts rename to packages/overlayscrollbars/src/support/options/index.ts index 4cdb18d..56a4c5b 100644 --- a/packages/overlayscrollbars/src/core/typings.ts +++ b/packages/overlayscrollbars/src/support/options/index.ts @@ -1,6 +1,8 @@ -export type PlainObject = { [name: string]: T }; +import { PlainObject } from 'typings'; + +export * from 'support/options/validation'; +export * from 'support/options/transformation'; -// Options Template Typings: export type Func = (this: any, ...args: any[]) => any; export type OptionsTemplateType = ExtractPropsKey; export type OptionsTemplateTypes = keyof OptionsTemplateTypeMap; @@ -42,9 +44,9 @@ type OptionsTemplateTypeMap = { __TPL_null_TYPE__: null; __TPL_object_TYPE__: object; // eslint-disable-line @typescript-eslint/ban-types }; -type ExtractPropsKey = { - [P in keyof T]: TProps extends T[P] ? P : never; -}[keyof T]; type OptionsTemplateValueNonEnum = | OptionsTemplateType | [OptionsTemplateType, ...Array]; +type ExtractPropsKey = { + [P in keyof T]: TProps extends T[P] ? P : never; +}[keyof T]; \ No newline at end of file diff --git a/packages/overlayscrollbars/src/core/options/transformation.ts b/packages/overlayscrollbars/src/support/options/transformation.ts similarity index 80% rename from packages/overlayscrollbars/src/core/options/transformation.ts rename to packages/overlayscrollbars/src/support/options/transformation.ts index bc40cc7..5e6df38 100644 --- a/packages/overlayscrollbars/src/core/options/transformation.ts +++ b/packages/overlayscrollbars/src/support/options/transformation.ts @@ -1,6 +1,7 @@ -import { OptionsTemplate, OptionsAndOptionsTemplate, PlainObject, OptionsTemplateTypes } from 'core/typings'; -import { isArray, isObject } from 'core/utils/types'; -import { each, keys } from 'core/utils'; +import { OptionsTemplate, OptionsAndOptionsTemplate, OptionsTemplateTypes } from 'support/options'; +import { PlainObject } from 'typings'; +import { isArray, isObject } from 'support/utils/types'; +import { each, keys } from 'support/utils'; /** * Transforms the given OptionsAndOptionsTemplate object to its corresponding generic (T) Object or its corresponding Template object. @@ -10,11 +11,11 @@ import { each, keys } from 'core/utils'; export function transform>(optionsWithOptionsTemplate: OptionsAndOptionsTemplate): T; export function transform>( optionsWithOptionsTemplate: OptionsAndOptionsTemplate, - toTemplate: true | void, + toTemplate: true | void ): OptionsTemplate; export function transform>( optionsWithOptionsTemplate: OptionsAndOptionsTemplate, - toTemplate?: true | void, + toTemplate?: true | void ): OptionsTemplate | T { const result: any = {}; diff --git a/packages/overlayscrollbars/src/core/options/validation.ts b/packages/overlayscrollbars/src/support/options/validation.ts similarity index 94% rename from packages/overlayscrollbars/src/core/options/validation.ts rename to packages/overlayscrollbars/src/support/options/validation.ts index 24f6ed3..b64ab61 100644 --- a/packages/overlayscrollbars/src/core/options/validation.ts +++ b/packages/overlayscrollbars/src/support/options/validation.ts @@ -1,14 +1,7 @@ -import { each, indexOf, hasOwnProperty, keys } from 'core/utils'; -import { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'core/utils/types'; -import { - PlainObject, - OptionsTemplate, - OptionsTemplateTypes, - OptionsTemplateType, - OptionsValidated, - Func, - OptionsValidatedResult, -} from 'core/typings'; +import { each, indexOf, hasOwnProperty, keys } from 'support/utils'; +import { type, isArray, isUndefined, isEmptyObject, isPlainObject, isString } from 'support/utils/types'; +import { OptionsTemplate, OptionsTemplateTypes, OptionsTemplateType, OptionsValidated, Func, OptionsValidatedResult } from 'support/options'; +import { PlainObject } from 'typings'; const { stringify } = JSON; @@ -26,7 +19,7 @@ const optionsTemplateTypes: OptionsTemplateTypesDictionary = ['boolean', 'number result[item] = templateTypePrefixSuffix[0] + item + templateTypePrefixSuffix[1]; return result; }, - {} as OptionsTemplateTypesDictionary, + {} as OptionsTemplateTypesDictionary ); /** @@ -52,7 +45,7 @@ const validateRecursive = ( template: OptionsTemplate>, optionsDiff: OptionsValidated, doWriteErrors?: boolean, - propPath?: string, + propPath?: string ): OptionsValidatedResult => { const validatedOptions: OptionsValidated = {}; const optionsCopy: T = { ...options }; @@ -116,7 +109,7 @@ const validateRecursive = ( `${ `The option "${propPrefix}${prop}" wasn't set, because it doesn't accept the type [ ${optionsValueType.toUpperCase()} ] with the value of "${optionsValue}".\r\n` + `Accepted types are: [ ${errorPossibleTypes.join(', ').toUpperCase()} ].\r\n` - }${errorEnumStrings.length > 0 ? `\r\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}`, + }${errorEnumStrings.length > 0 ? `\r\nValid strings are: [ ${errorEnumStrings.join(', ')} ].` : ''}` ); } @@ -151,7 +144,7 @@ const validate = ( options: T, template: OptionsTemplate>, optionsDiff?: OptionsValidated, - doWriteErrors?: boolean, + doWriteErrors?: boolean ): OptionsValidatedResult => { /* if (!isEmptyObject(foreign) && doWriteErrors) diff --git a/packages/overlayscrollbars/src/core/utils/array.ts b/packages/overlayscrollbars/src/support/utils/array.ts similarity index 94% rename from packages/overlayscrollbars/src/core/utils/array.ts rename to packages/overlayscrollbars/src/support/utils/array.ts index c7a4e7a..e19e9b7 100644 --- a/packages/overlayscrollbars/src/core/utils/array.ts +++ b/packages/overlayscrollbars/src/support/utils/array.ts @@ -1,6 +1,6 @@ -import { keys } from 'core/utils/object'; -import { isArrayLike } from 'core/utils/types'; -import { PlainObject } from 'core/typings'; +import { keys } from 'support/utils/object'; +import { isArrayLike } from 'support/utils/types'; +import { PlainObject } from 'typings'; /** * Iterates through a array or object diff --git a/packages/overlayscrollbars/src/core/utils/extend.ts b/packages/overlayscrollbars/src/support/utils/extend.ts similarity index 92% rename from packages/overlayscrollbars/src/core/utils/extend.ts rename to packages/overlayscrollbars/src/support/utils/extend.ts index a3ae067..406841d 100644 --- a/packages/overlayscrollbars/src/core/utils/extend.ts +++ b/packages/overlayscrollbars/src/support/utils/extend.ts @@ -1,6 +1,6 @@ -import { isArray, isFunction, isPlainObject, isNull } from 'core/utils/types'; -import { each } from 'core/utils/array'; -import { keys } from 'core/utils/object'; +import { isArray, isFunction, isPlainObject, isNull } from 'support/utils/types'; +import { each } from 'support/utils/array'; +import { keys } from 'support/utils/object'; // https://github.com/jquery/jquery/blob/master/src/core.js#L116 export function extend(target: T, object1: U): T & U; diff --git a/packages/overlayscrollbars/src/support/utils/index.ts b/packages/overlayscrollbars/src/support/utils/index.ts new file mode 100644 index 0000000..e275e87 --- /dev/null +++ b/packages/overlayscrollbars/src/support/utils/index.ts @@ -0,0 +1,4 @@ +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/src/core/utils/object.ts b/packages/overlayscrollbars/src/support/utils/object.ts similarity index 100% rename from packages/overlayscrollbars/src/core/utils/object.ts rename to packages/overlayscrollbars/src/support/utils/object.ts diff --git a/packages/overlayscrollbars/src/core/utils/types.ts b/packages/overlayscrollbars/src/support/utils/types.ts similarity index 98% rename from packages/overlayscrollbars/src/core/utils/types.ts rename to packages/overlayscrollbars/src/support/utils/types.ts index ff6334a..74c2813 100644 --- a/packages/overlayscrollbars/src/core/utils/types.ts +++ b/packages/overlayscrollbars/src/support/utils/types.ts @@ -1,4 +1,4 @@ -import { PlainObject } from 'core/typings'; +import { PlainObject } from 'typings'; export const type: (obj: any) => string = (obj) => { if (obj === undefined) return `${obj}`; diff --git a/packages/overlayscrollbars/src/typings.ts b/packages/overlayscrollbars/src/typings.ts index 3307426..74f20e0 100644 --- a/packages/overlayscrollbars/src/typings.ts +++ b/packages/overlayscrollbars/src/typings.ts @@ -1,101 +1,4 @@ -export type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical'; - -export type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll'; - -export type VisibilityBehavior = 'visible' | 'hidden' | 'auto'; - -export type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move'; - -export type ScrollBehavior = 'always' | 'ifneeded' | 'never'; - -export type BasicEventCallback = (this: any) => void; - -export type ScrollEventCallback = (this: any, args?: UIEvent) => void; - -export type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void; - -export type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void; - -export type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void; - -export type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void; - -export type UpdatedCallback = (this: any, args?: UpdatedArgs) => void; - -export interface Options { - className?: string | null; - resize?: ResizeBehavior; - sizeAutoCapable?: boolean; - clipAlways?: boolean; - normalizeRTL?: boolean; - paddingAbsolute?: boolean; - autoUpdate?: boolean | null; - autoUpdateInterval?: number; - updateOnLoad?: string | ReadonlyArray | null; - nativeScrollbarsOverlaid?: { - showNativeScrollbars?: boolean; - initialize?: boolean; - }; - overflowBehavior?: { - x?: OverflowBehavior; - y?: OverflowBehavior; - }; - scrollbars?: { - visibility?: VisibilityBehavior; - autoHide?: AutoHideBehavior; - autoHideDelay?: number; - dragScrolling?: boolean; - clickScrolling?: boolean; - touchSupport?: boolean; - snapHandle?: boolean; - }; - textarea?: { - dynWidth?: boolean; - dynHeight?: boolean; - inheritedAttrs?: string | ReadonlyArray | null; - }; - callbacks?: { - onInitialized?: BasicEventCallback | null; - onInitializationWithdrawn?: BasicEventCallback | null; - onDestroyed?: BasicEventCallback | null; - onScrollStart?: ScrollEventCallback | null; - onScroll?: ScrollEventCallback | null; - onScrollStop?: ScrollEventCallback | null; - onOverflowChanged?: OverflowChangedCallback | null; - onOverflowAmountChanged?: OverflowAmountChangedCallback | null; - onDirectionChanged?: DirectionChangedCallback | null; - onContentSizeChanged?: SizeChangedCallback | null; - onHostSizeChanged?: SizeChangedCallback | null; - onUpdated?: UpdatedCallback | null; - }; -} - -export interface OverflowChangedArgs { - x: boolean; - y: boolean; - xScrollable: boolean; - yScrollable: boolean; - clipped: boolean; -} - -export interface OverflowAmountChangedArgs { - x: number; - y: number; -} - -export interface DirectionChangedArgs { - isRTL: number; - dir: string; -} - -export interface SizeChangedArgs { - width: number; - height: number; -} - -export interface UpdatedArgs { - forced: boolean; -} +export type PlainObject = { [name: string]: T }; /* export namespace OverlayScrollbars { diff --git a/packages/overlayscrollbars/tests/core/dom/classes.test.ts b/packages/overlayscrollbars/tests/core/dom/classes.test.ts deleted file mode 100644 index a3af435..0000000 --- a/packages/overlayscrollbars/tests/core/dom/classes.test.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { addClass, removeClass, hasClass, conditionalClass } from 'core/dom/class'; - -const testElm = document.body; -const removeAllClassNames = () => { - while (testElm.classList.length > 0) { - const classToRemove = testElm.classList.item(0); - if (classToRemove) { - testElm.classList.remove(classToRemove); - } - } -}; -const hasClassName = (className: string) => testElm.classList.contains(className); - -describe('dom class names', () => { - afterEach(() => { - removeAllClassNames(); - }); - - test('add none', () => { - addClass(testElm, ''); - // @ts-ignore - addClass(testElm, null); - // @ts-ignore - addClass(testElm, 2); - expect(testElm.classList.length).toBe(0); - }); - - test('add single', () => { - addClass(testElm, 'test-class'); - expect(hasClassName('test-class')).toBe(true); - }); - - test('add multiple', () => { - addClass(testElm, 'test-class test-class2'); - expect(hasClassName('test-class')).toBe(true); - expect(hasClassName('test-class2')).toBe(true); - }); - - test('remove none', () => { - addClass(testElm, 'test-class'); - removeClass(testElm, ''); - // @ts-ignore - removeClass(testElm, null); - // @ts-ignore - removeClass(testElm, 2); - expect(testElm.classList.length).toBe(1); - }); - - test('remove single', () => { - addClass(testElm, 'test-class'); - expect(hasClassName('test-class')).toBe(true); - removeClass(testElm, 'test-class'); - expect(hasClassName('test-class')).toBe(false); - }); - - test('remove multiple', () => { - addClass(testElm, 'test-class test-class2'); - removeClass(testElm, 'test-class test-class2'); - expect(hasClassName('test-class')).toBe(false); - expect(hasClassName('test-class2')).toBe(false); - }); - - test('has', () => { - addClass(testElm, 'test-class'); - expect(hasClass(testElm, 'test-class')).toBe(true); - }); - - test('conditional single', () => { - conditionalClass(testElm, 'test-class', true); - expect(hasClass(testElm, 'test-class')).toBe(true); - conditionalClass(testElm, 'test-class', false); - expect(hasClass(testElm, 'test-class')).toBe(false); - }); - - test('conditional multiple', () => { - conditionalClass(testElm, 'test-class test-class2', true); - expect(hasClass(testElm, 'test-class')).toBe(true); - expect(hasClass(testElm, 'test-class2')).toBe(true); - conditionalClass(testElm, 'test-class test-class2', false); - expect(hasClass(testElm, 'test-class')).toBe(false); - expect(hasClass(testElm, 'test-class2')).toBe(false); - }); -}); diff --git a/packages/overlayscrollbars/tests/options.test.ts b/packages/overlayscrollbars/tests/options.test.ts index 458ab29..fba6972 100644 --- a/packages/overlayscrollbars/tests/options.test.ts +++ b/packages/overlayscrollbars/tests/options.test.ts @@ -1,4 +1,4 @@ -import { validate } from 'core/options'; +import { validate } from 'support/options'; import { defaultOptions, optionsTemplate } from 'options'; describe('options', () => { diff --git a/packages/overlayscrollbars/tests/core/compatibility/vendors.test.ts b/packages/overlayscrollbars/tests/support/compatibility/vendors.test.ts similarity index 96% rename from packages/overlayscrollbars/tests/core/compatibility/vendors.test.ts rename to packages/overlayscrollbars/tests/support/compatibility/vendors.test.ts index 9a37ef9..8c1a017 100644 --- a/packages/overlayscrollbars/tests/core/compatibility/vendors.test.ts +++ b/packages/overlayscrollbars/tests/support/compatibility/vendors.test.ts @@ -1,4 +1,4 @@ -import { jsAPI, cssProperty, cssPropertyValue } from 'core/compatibility/vendors'; +import { jsAPI, cssProperty, cssPropertyValue } from 'support/compatibility/vendors'; describe('vendors', () => { describe('jsAPI', () => { diff --git a/packages/overlayscrollbars/tests/core/dom/attributes.test.ts b/packages/overlayscrollbars/tests/support/dom/attribute.test.ts similarity index 68% rename from packages/overlayscrollbars/tests/core/dom/attributes.test.ts rename to packages/overlayscrollbars/tests/support/dom/attribute.test.ts index d8c9324..cbc0b8e 100644 --- a/packages/overlayscrollbars/tests/core/dom/attributes.test.ts +++ b/packages/overlayscrollbars/tests/support/dom/attribute.test.ts @@ -1,4 +1,4 @@ -import { attr, removeAttr, val, scrollLeft, scrollTop } from 'core/dom/attribute'; +import { attr, removeAttr, val, scrollLeft, scrollTop } from 'support/dom/attribute'; const testElm = document.body; const setAttribute = (name: string, value: string) => { @@ -39,6 +39,11 @@ describe('dom attributes', () => { removeAttribute(attrName); }); + + test('null', () => { + expect(attr(null, 'hi')).toBe(null); + expect(attr(null, 'hi', '123')).toBe(undefined); + }); }); describe('scrollLeft', () => { @@ -53,6 +58,11 @@ describe('dom attributes', () => { expect(scrollLeft(testElm)).toBe(100); setScrollLeft(0); }); + + test('null', () => { + expect(scrollLeft(null)).toBe(0); + expect(scrollLeft(null, 0)).toBe(undefined); + }); }); describe('scrollTop', () => { @@ -67,6 +77,11 @@ describe('dom attributes', () => { expect(scrollTop(testElm)).toBe(100); setScrollTop(0); }); + + test('null', () => { + expect(scrollTop(null)).toBe(0); + expect(scrollTop(null, 0)).toBe(undefined); + }); }); describe('val', () => { @@ -84,14 +99,25 @@ describe('dom attributes', () => { val(input, ''); expect(val(input)).toBe(''); }); + + test('null', () => { + expect(val(null)).toBe(''); + expect(val(null, '123')).toBe(undefined); + }); }); - test('remove attribute', () => { - const attrName = 'data-test-remove'; + describe('remove attribute', () => { + test('normal', () => { + const attrName = 'data-test-remove'; - setAttribute(attrName, '123'); - removeAttr(testElm, attrName); + setAttribute(attrName, '123'); + removeAttr(testElm, attrName); - expect(attr(testElm, attrName)).toBeNull(); + expect(attr(testElm, attrName)).toBeNull(); + }); + + test('null', () => { + expect(removeAttr(null, 'hi')).toBe(undefined); + }); }); }); diff --git a/packages/overlayscrollbars/tests/support/dom/class.test.ts b/packages/overlayscrollbars/tests/support/dom/class.test.ts new file mode 100644 index 0000000..ab19a4f --- /dev/null +++ b/packages/overlayscrollbars/tests/support/dom/class.test.ts @@ -0,0 +1,95 @@ +import { addClass, removeClass, hasClass } from 'support/dom/class'; + +const testElm = document.body; +const removeAllClassNames = () => { + while (testElm.classList.length > 0) { + const classToRemove = testElm.classList.item(0); + if (classToRemove) { + testElm.classList.remove(classToRemove); + } + } +}; +const hasClassName = (className: string) => testElm.classList.contains(className); + +describe('dom class names', () => { + afterEach(() => { + removeAllClassNames(); + }); + + describe('add', () => { + test('none', () => { + addClass(testElm, ''); + // @ts-ignore + addClass(testElm, null); + // @ts-ignore + addClass(testElm, 2); + expect(testElm.classList.length).toBe(0); + }); + + test('single', () => { + addClass(testElm, 'test-class'); + expect(hasClassName('test-class')).toBe(true); + }); + + test('multiple', () => { + addClass(testElm, 'test-class test-class2'); + expect(hasClassName('test-class')).toBe(true); + expect(hasClassName('test-class2')).toBe(true); + }); + + test('null', () => { + expect(addClass(null, 'abc')).toBe(undefined); + }); + }); + + describe('remove', () => { + test('none', () => { + addClass(testElm, 'test-class'); + removeClass(testElm, ''); + // @ts-ignore + removeClass(testElm, null); + // @ts-ignore + removeClass(testElm, 2); + expect(testElm.classList.length).toBe(1); + }); + + test('single', () => { + addClass(testElm, 'test-class'); + expect(hasClassName('test-class')).toBe(true); + removeClass(testElm, 'test-class'); + expect(hasClassName('test-class')).toBe(false); + }); + + test('multiple', () => { + addClass(testElm, 'test-class test-class2'); + removeClass(testElm, 'test-class test-class2'); + expect(hasClassName('test-class')).toBe(false); + expect(hasClassName('test-class2')).toBe(false); + }); + + test('null', () => { + expect(removeClass(null, 'abc')).toBe(undefined); + }); + }); + + describe('has', () => { + test('none', () => { + expect(hasClass(testElm, '')).toBe(false); + }); + + test('single', () => { + addClass(testElm, 'test-class'); + expect(hasClass(testElm, 'test-class')).toBe(true); + }); + + test('multiple', () => { + addClass(testElm, 'test-class test-class2'); + expect(hasClass(testElm, 'test-class test-class2')).toBe(true); + expect(hasClass(testElm, 'test-class test-class2 test-class3')).toBe(false); + }); + + test('null', () => { + expect(hasClass(null, 'abc')).toBe(false); + }); + }); +}); diff --git a/packages/overlayscrollbars/tests/core/dom/create.test.ts b/packages/overlayscrollbars/tests/support/dom/create.test.ts similarity index 95% rename from packages/overlayscrollbars/tests/core/dom/create.test.ts rename to packages/overlayscrollbars/tests/support/dom/create.test.ts index f390c9e..1890d80 100644 --- a/packages/overlayscrollbars/tests/core/dom/create.test.ts +++ b/packages/overlayscrollbars/tests/support/dom/create.test.ts @@ -1,5 +1,5 @@ -import { each } from 'core/utils'; -import { createDiv, createDOM } from 'core/dom/create'; +import { each } from 'support/utils'; +import { createDiv, createDOM } from 'support/dom/create'; const slotElm = document.body; const testHTML = diff --git a/packages/overlayscrollbars/tests/core/dom/manipulation.test.ts b/packages/overlayscrollbars/tests/support/dom/manipulation.test.ts similarity index 98% rename from packages/overlayscrollbars/tests/core/dom/manipulation.test.ts rename to packages/overlayscrollbars/tests/support/dom/manipulation.test.ts index 4205bd4..8c3c02c 100644 --- a/packages/overlayscrollbars/tests/core/dom/manipulation.test.ts +++ b/packages/overlayscrollbars/tests/support/dom/manipulation.test.ts @@ -1,5 +1,5 @@ -import { createDiv, contents, appendChildren, prependChildren, insertBefore, insertAfter, removeElements } from 'core/dom'; -import { each, isArray, isHTMLElement } from 'core/utils'; +import { createDiv, contents, appendChildren, prependChildren, insertBefore, insertAfter, removeElements } from 'support/dom'; +import { each, isArray, isHTMLElement } from 'support/utils'; const slotElm = document.body; const fillSlotElm = () => { diff --git a/packages/overlayscrollbars/tests/support/dom/offset.test.ts b/packages/overlayscrollbars/tests/support/dom/offset.test.ts new file mode 100644 index 0000000..df6960e --- /dev/null +++ b/packages/overlayscrollbars/tests/support/dom/offset.test.ts @@ -0,0 +1,36 @@ +import { isNumber, isPlainObject } from 'support/utils/types'; +import { offset, position } from 'support/dom/offset'; + +describe('dom offset', () => { + describe('offset', () => { + test('returns correct object with DOM element', () => { + const result = offset(document.body); + expect(isPlainObject(result)).toBe(true); + expect(isNumber(result.left)).toBe(true); + expect(isNumber(result.top)).toBe(true); + }); + + test('returns correct object with null', () => { + const result = offset(null); + expect(isPlainObject(result)).toBe(true); + expect(result.left).toBe(0); + expect(result.top).toBe(0); + }); + }); + + describe('position', () => { + test('returns correct object with DOM element', () => { + const result = position(document.body); + expect(isPlainObject(result)).toBe(true); + expect(isNumber(result.left)).toBe(true); + expect(isNumber(result.top)).toBe(true); + }); + + test('returns correct object with null', () => { + const result = position(null); + expect(isPlainObject(result)).toBe(true); + expect(result.left).toBe(0); + expect(result.top).toBe(0); + }); + }); +}); diff --git a/packages/overlayscrollbars/tests/support/dom/style.test.ts b/packages/overlayscrollbars/tests/support/dom/style.test.ts new file mode 100644 index 0000000..f0d2891 --- /dev/null +++ b/packages/overlayscrollbars/tests/support/dom/style.test.ts @@ -0,0 +1,93 @@ +import { isString, isPlainObject, isEmptyObject } from 'support/utils/types'; +import { style, hide, show } from 'support/dom/style'; + +describe('dom style', () => { + afterEach(() => { + document.body.removeAttribute('style'); + }); + + describe('style', () => { + describe('get', () => { + test('single', () => { + expect(isString(style(document.body, 'width'))).toBe(true); + }); + + test('multiple', () => { + const widthHeight = style(document.body, ['width', 'height']); + expect(isPlainObject(widthHeight)).toBe(true); + expect(isString(widthHeight.width)).toBe(true); + expect(isString(widthHeight.height)).toBe(true); + }); + + test('null', () => { + expect(style(null, 'width')).toBe(''); + + const widthHeight = style(null, ['width', 'height']); + expect(isPlainObject(widthHeight)).toBe(true); + expect(isEmptyObject(widthHeight)).toBe(true); + }); + }); + + describe('set', () => { + test('single', () => { + expect(document.body.style.width).toBe(''); + style(document.body, { width: '123px' }); + expect(document.body.style.width).toBe('123px'); + }); + + test('single add px', () => { + expect(document.body.style.width).toBe(''); + style(document.body, { width: 123 }); + expect(document.body.style.width).toBe('123px'); + }); + + test('single dont add px', () => { + expect(document.body.style.opacity).toBe(''); + style(document.body, { opacity: 0.5 }); + expect(document.body.style.opacity).toBe('0.5'); + }); + + test('multiple', () => { + expect(document.body.style.width).toBe(''); + expect(document.body.style.height).toBe(''); + expect(document.body.style.opacity).toBe(''); + expect(document.body.style.zIndex).toBe(''); + expect(document.body.style.lineHeight).toBe(''); + style(document.body, { width: '123px', height: 321, opacity: '0.5', zIndex: 1 }); + expect(document.body.style.width).toBe('123px'); + expect(document.body.style.height).toBe('321px'); + expect(document.body.style.opacity).toBe('0.5'); + expect(document.body.style.zIndex).toBe('1'); + }); + + test('null', () => { + expect(style(null, { width: '123px' })).toBe(undefined); + expect(style(null, { width: '123px', height: '321px' })).toBe(undefined); + }); + }); + }); + + describe('hide', () => { + test('normal', () => { + expect(document.body.style.display).toBe(''); + hide(document.body); + expect(document.body.style.display).toBe('none'); + }); + + test('null', () => { + expect(hide(null)).toBe(undefined); + }); + }); + + describe('show', () => { + test('normal', () => { + expect(document.body.style.display).toBe(''); + show(document.body); + expect(document.body.style.display).toBe('block'); + }); + + test('null', () => { + expect(show(null)).toBe(undefined); + }); + }); +}); diff --git a/packages/overlayscrollbars/tests/core/dom/traversal.test.ts b/packages/overlayscrollbars/tests/support/dom/traversal.test.ts similarity index 98% rename from packages/overlayscrollbars/tests/core/dom/traversal.test.ts rename to packages/overlayscrollbars/tests/support/dom/traversal.test.ts index e9116a3..f7b64ed 100644 --- a/packages/overlayscrollbars/tests/core/dom/traversal.test.ts +++ b/packages/overlayscrollbars/tests/support/dom/traversal.test.ts @@ -1,4 +1,4 @@ -import { find, findFirst, is, children, contents, parent, createDiv } from 'core/dom'; +import { find, findFirst, is, children, contents, parent, createDiv } from 'support/dom'; const slotElm = document.body; const testHTML = '

2

abc'; @@ -39,7 +39,7 @@ describe('dom traversal', () => { const allNative = document.querySelector('#parent')?.querySelectorAll('*'); expect(all.length).toBe(allNative?.length); - expect(Array.from(all)).toEqual(Array.from(allNative)); + expect(Array.from(all)).toEqual(Array.from(allNative!)); }); test('all with null parent', () => { diff --git a/packages/overlayscrollbars/tests/core/options/transformation.test.ts b/packages/overlayscrollbars/tests/support/options/transformation.test.ts similarity index 92% rename from packages/overlayscrollbars/tests/core/options/transformation.test.ts rename to packages/overlayscrollbars/tests/support/options/transformation.test.ts index 9eef91f..bccda40 100644 --- a/packages/overlayscrollbars/tests/core/options/transformation.test.ts +++ b/packages/overlayscrollbars/tests/support/options/transformation.test.ts @@ -1,5 +1,5 @@ -import { OptionsTemplate, OptionsAndOptionsTemplate, PlainObject } from 'core/typings'; -import { optionsTemplateTypes as oTypes, transform } from 'core/options'; +import { PlainObject } from 'typings'; +import { optionsTemplateTypes as oTypes, transform, OptionsTemplate, OptionsAndOptionsTemplate } from 'support/options'; type TestOptionsObj = { propA: 'propA'; null: null }; type TestOptionsEnum = 'A' | 'B' | 'C'; diff --git a/packages/overlayscrollbars/tests/core/options/validation.test.ts b/packages/overlayscrollbars/tests/support/options/validation.test.ts similarity index 98% rename from packages/overlayscrollbars/tests/core/options/validation.test.ts rename to packages/overlayscrollbars/tests/support/options/validation.test.ts index 965c3df..74e426d 100644 --- a/packages/overlayscrollbars/tests/core/options/validation.test.ts +++ b/packages/overlayscrollbars/tests/support/options/validation.test.ts @@ -1,6 +1,5 @@ -import { validate, optionsTemplateTypes as oTypes } from 'core/options'; -import { extend, isEmptyObject } from 'core/utils'; -import { OptionsTemplate } from 'core/typings'; +import { validate, optionsTemplateTypes as oTypes, OptionsTemplate } from 'support/options'; +import { extend, isEmptyObject } from 'support/utils'; type TestOptionsObj = { propA: 'propA'; null: null }; type TestOptionsEnum = 'A' | 'B' | 'C'; @@ -217,7 +216,7 @@ describe('options validation', () => { nested: { num: -1293, abc: 'C' }, }, foreignObj, - { nested: foreignObj }, + { nested: foreignObj } ); const result = validate(modifiedOptions, template, options); const { validated } = result; @@ -354,7 +353,7 @@ describe('options validation', () => { func: {}, }, foreignObj, - { nested: foreignObj }, + { nested: foreignObj } ); const result = validate(modifiedOptions, template); const { validated, foreign } = result; diff --git a/packages/overlayscrollbars/tests/core/utils/arrays.test.ts b/packages/overlayscrollbars/tests/support/utils/arrays.test.ts similarity index 98% rename from packages/overlayscrollbars/tests/core/utils/arrays.test.ts rename to packages/overlayscrollbars/tests/support/utils/arrays.test.ts index c00ad73..30c1a25 100644 --- a/packages/overlayscrollbars/tests/core/utils/arrays.test.ts +++ b/packages/overlayscrollbars/tests/support/utils/arrays.test.ts @@ -1,4 +1,4 @@ -import { each, indexOf } from 'core/utils/array'; +import { each, indexOf } from 'support/utils/array'; describe('array utilities', () => { describe('each', () => { diff --git a/packages/overlayscrollbars/tests/core/utils/extend.test.ts b/packages/overlayscrollbars/tests/support/utils/extend.test.ts similarity index 98% rename from packages/overlayscrollbars/tests/core/utils/extend.test.ts rename to packages/overlayscrollbars/tests/support/utils/extend.test.ts index f5b2cb2..4ee6125 100644 --- a/packages/overlayscrollbars/tests/core/utils/extend.test.ts +++ b/packages/overlayscrollbars/tests/support/utils/extend.test.ts @@ -1,5 +1,5 @@ -import { extend } from 'core/utils/extend'; -import { isPlainObject } from 'core/utils/types'; +import { extend } from 'support/utils/extend'; +import { isPlainObject } from 'support/utils/types'; // type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T type Deep = { diff --git a/packages/overlayscrollbars/tests/core/utils/object.test.ts b/packages/overlayscrollbars/tests/support/utils/object.test.ts similarity index 91% rename from packages/overlayscrollbars/tests/core/utils/object.test.ts rename to packages/overlayscrollbars/tests/support/utils/object.test.ts index 16019fc..a84d71c 100644 --- a/packages/overlayscrollbars/tests/core/utils/object.test.ts +++ b/packages/overlayscrollbars/tests/support/utils/object.test.ts @@ -1,4 +1,4 @@ -import { keys, hasOwnProperty } from 'core/utils/object'; +import { keys, hasOwnProperty } from 'support/utils/object'; describe('object utilities', () => { describe('keys', () => { diff --git a/packages/overlayscrollbars/tests/core/utils/types.test.ts b/packages/overlayscrollbars/tests/support/utils/types.test.ts similarity index 99% rename from packages/overlayscrollbars/tests/core/utils/types.test.ts rename to packages/overlayscrollbars/tests/support/utils/types.test.ts index 1a491a2..052e254 100644 --- a/packages/overlayscrollbars/tests/core/utils/types.test.ts +++ b/packages/overlayscrollbars/tests/support/utils/types.test.ts @@ -12,7 +12,7 @@ import { isPlainObject, isEmptyObject, isHTMLElement, -} from 'core/utils/types'; +} from 'support/utils/types'; const testfn = function () {}; const testfnAsync = async function () {}; diff --git a/packages/overlayscrollbars/types/core/compatibility/index.d.ts b/packages/overlayscrollbars/types/core/compatibility/index.d.ts deleted file mode 100644 index 3b8d5e2..0000000 --- a/packages/overlayscrollbars/types/core/compatibility/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from 'core/compatibility/vendors'; -export * from 'core/compatibility/apis'; -export * from 'core/compatibility/events'; diff --git a/packages/overlayscrollbars/types/core/dom/attribute.d.ts b/packages/overlayscrollbars/types/core/dom/attribute.d.ts deleted file mode 100644 index be80826..0000000 --- a/packages/overlayscrollbars/types/core/dom/attribute.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare const attr: (elm: Element, attrName: string, value?: string) => string | null | void; -export declare const removeAttr: (elm: Element, attrName: string) => void; -export declare const scrollLeft: (elm: HTMLElement, value?: number) => number | void; -export declare const scrollTop: (elm: HTMLElement, value?: number) => number | void; -export declare const val: (elm: HTMLInputElement, value?: string) => string | void; diff --git a/packages/overlayscrollbars/types/core/dom/class.d.ts b/packages/overlayscrollbars/types/core/dom/class.d.ts deleted file mode 100644 index e098e95..0000000 --- a/packages/overlayscrollbars/types/core/dom/class.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare const hasClass: (elm: Element, className: string) => boolean; -export declare const addClass: (elm: Element, className: string) => void; -export declare const removeClass: (elm: Element, className: string) => void; -export declare const conditionalClass: (elm: Element, className: string, condition: boolean) => void; diff --git a/packages/overlayscrollbars/types/core/dom/index.d.ts b/packages/overlayscrollbars/types/core/dom/index.d.ts deleted file mode 100644 index e8eb32f..0000000 --- a/packages/overlayscrollbars/types/core/dom/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from 'core/dom/attribute'; -export * from 'core/dom/class'; -export * from 'core/dom/create'; -export * from 'core/dom/style'; -export * from 'core/dom/manipulation'; -export * from 'core/dom/offset'; -export * from 'core/dom/traversal'; diff --git a/packages/overlayscrollbars/types/core/dom/offset.d.ts b/packages/overlayscrollbars/types/core/dom/offset.d.ts deleted file mode 100644 index 3ac393d..0000000 --- a/packages/overlayscrollbars/types/core/dom/offset.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare const offset: (elm: HTMLElement) => { - top: number; - left: number; -}; -export declare const position: (elm: HTMLElement) => { - top: number; - left: number; -}; diff --git a/packages/overlayscrollbars/types/core/dom/style.d.ts b/packages/overlayscrollbars/types/core/dom/style.d.ts deleted file mode 100644 index 99dfb17..0000000 --- a/packages/overlayscrollbars/types/core/dom/style.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare type cssStyleObj = { - [key: string]: string | number; -}; -export declare function style(elm: HTMLElement, styles: string | cssStyleObj): string; -export declare function style(elm: HTMLElement, styles: string | cssStyleObj, val: string | number): void; -export declare const hide: (elm: HTMLElement) => void; -export declare const show: (elm: HTMLElement) => void; -export {}; diff --git a/packages/overlayscrollbars/types/core/options/index.d.ts b/packages/overlayscrollbars/types/core/options/index.d.ts deleted file mode 100644 index 9bb9056..0000000 --- a/packages/overlayscrollbars/types/core/options/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from 'core/options/validation'; -export * from 'core/options/transformation'; diff --git a/packages/overlayscrollbars/types/core/utils/index.d.ts b/packages/overlayscrollbars/types/core/utils/index.d.ts deleted file mode 100644 index db59a3a..0000000 --- a/packages/overlayscrollbars/types/core/utils/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from 'core/utils/array'; -export * from 'core/utils/object'; -export * from 'core/utils/extend'; -export * from 'core/utils/types'; diff --git a/packages/overlayscrollbars/types/options/index.d.ts b/packages/overlayscrollbars/types/options/index.d.ts new file mode 100644 index 0000000..7f329bf --- /dev/null +++ b/packages/overlayscrollbars/types/options/index.d.ts @@ -0,0 +1,82 @@ +export * from 'options/options'; +export declare type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical'; +export declare type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll'; +export declare type VisibilityBehavior = 'visible' | 'hidden' | 'auto'; +export declare type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move'; +export declare type ScrollBehavior = 'always' | 'ifneeded' | 'never'; +export declare type BasicEventCallback = (this: any) => void; +export declare type ScrollEventCallback = (this: any, args?: UIEvent) => void; +export declare type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void; +export declare type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void; +export declare type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void; +export declare type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void; +export declare type UpdatedCallback = (this: any, args?: UpdatedArgs) => void; +export interface Options { + className?: string | null; + resize?: ResizeBehavior; + sizeAutoCapable?: boolean; + clipAlways?: boolean; + normalizeRTL?: boolean; + paddingAbsolute?: boolean; + autoUpdate?: boolean | null; + autoUpdateInterval?: number; + updateOnLoad?: string | ReadonlyArray | null; + nativeScrollbarsOverlaid?: { + showNativeScrollbars?: boolean; + initialize?: boolean; + }; + overflowBehavior?: { + x?: OverflowBehavior; + y?: OverflowBehavior; + }; + scrollbars?: { + visibility?: VisibilityBehavior; + autoHide?: AutoHideBehavior; + autoHideDelay?: number; + dragScrolling?: boolean; + clickScrolling?: boolean; + touchSupport?: boolean; + snapHandle?: boolean; + }; + textarea?: { + dynWidth?: boolean; + dynHeight?: boolean; + inheritedAttrs?: string | ReadonlyArray | null; + }; + callbacks?: { + onInitialized?: BasicEventCallback | null; + onInitializationWithdrawn?: BasicEventCallback | null; + onDestroyed?: BasicEventCallback | null; + onScrollStart?: ScrollEventCallback | null; + onScroll?: ScrollEventCallback | null; + onScrollStop?: ScrollEventCallback | null; + onOverflowChanged?: OverflowChangedCallback | null; + onOverflowAmountChanged?: OverflowAmountChangedCallback | null; + onDirectionChanged?: DirectionChangedCallback | null; + onContentSizeChanged?: SizeChangedCallback | null; + onHostSizeChanged?: SizeChangedCallback | null; + onUpdated?: UpdatedCallback | null; + }; +} +export interface OverflowChangedArgs { + x: boolean; + y: boolean; + xScrollable: boolean; + yScrollable: boolean; + clipped: boolean; +} +export interface OverflowAmountChangedArgs { + x: number; + y: number; +} +export interface DirectionChangedArgs { + isRTL: number; + dir: string; +} +export interface SizeChangedArgs { + width: number; + height: number; +} +export interface UpdatedArgs { + forced: boolean; +} diff --git a/packages/overlayscrollbars/types/options.d.ts b/packages/overlayscrollbars/types/options/options.d.ts similarity index 58% rename from packages/overlayscrollbars/types/options.d.ts rename to packages/overlayscrollbars/types/options/options.d.ts index 122501a..c272cba 100644 --- a/packages/overlayscrollbars/types/options.d.ts +++ b/packages/overlayscrollbars/types/options/options.d.ts @@ -1,4 +1,4 @@ -import { OptionsTemplate } from 'core/typings'; -import { Options } from 'typings'; +import { OptionsTemplate } from 'support/options'; +import { Options } from 'options'; export declare const optionsTemplate: OptionsTemplate>; export declare const defaultOptions: Options; diff --git a/packages/overlayscrollbars/types/core/compatibility/apis.d.ts b/packages/overlayscrollbars/types/support/compatibility/apis.d.ts similarity index 100% rename from packages/overlayscrollbars/types/core/compatibility/apis.d.ts rename to packages/overlayscrollbars/types/support/compatibility/apis.d.ts diff --git a/packages/overlayscrollbars/types/core/compatibility/events.d.ts b/packages/overlayscrollbars/types/support/compatibility/events.d.ts similarity index 100% rename from packages/overlayscrollbars/types/core/compatibility/events.d.ts rename to packages/overlayscrollbars/types/support/compatibility/events.d.ts diff --git a/packages/overlayscrollbars/types/support/compatibility/index.d.ts b/packages/overlayscrollbars/types/support/compatibility/index.d.ts new file mode 100644 index 0000000..1bdf704 --- /dev/null +++ b/packages/overlayscrollbars/types/support/compatibility/index.d.ts @@ -0,0 +1,3 @@ +export * from 'support/compatibility/vendors'; +export * from 'support/compatibility/apis'; +export * from 'support/compatibility/events'; diff --git a/packages/overlayscrollbars/types/core/compatibility/vendors.d.ts b/packages/overlayscrollbars/types/support/compatibility/vendors.d.ts similarity index 87% rename from packages/overlayscrollbars/types/core/compatibility/vendors.d.ts rename to packages/overlayscrollbars/types/support/compatibility/vendors.d.ts index 3acf2d5..be2a719 100644 --- a/packages/overlayscrollbars/types/core/compatibility/vendors.d.ts +++ b/packages/overlayscrollbars/types/support/compatibility/vendors.d.ts @@ -7,5 +7,5 @@ export declare const cssCache: { [key: string]: string; }; export declare const cssProperty: (name: string) => string | undefined; -export declare const cssPropertyValue: (property: string, values: string, suffix?: string) => string | undefined; +export declare const cssPropertyValue: (property: string, values: string, suffix?: string | undefined) => string | undefined; export declare const jsAPI: (name: string) => any; diff --git a/packages/overlayscrollbars/types/support/dom/attribute.d.ts b/packages/overlayscrollbars/types/support/dom/attribute.d.ts new file mode 100644 index 0000000..9fb01fc --- /dev/null +++ b/packages/overlayscrollbars/types/support/dom/attribute.d.ts @@ -0,0 +1,9 @@ +export declare function attr(elm: HTMLElement | null, attrName: string): string | null; +export declare function attr(elm: HTMLElement | null, attrName: string, value: string): void; +export declare const removeAttr: (elm: Element | null, attrName: string) => void; +export declare function scrollLeft(elm: HTMLElement | null): number; +export declare function scrollLeft(elm: HTMLElement | null, value: number): void; +export declare function scrollTop(elm: HTMLElement | null): number; +export declare function scrollTop(elm: HTMLElement | null, value: number): void; +export declare function val(elm: HTMLInputElement | null): string; +export declare function val(elm: HTMLInputElement | null, value: string): void; diff --git a/packages/overlayscrollbars/types/support/dom/class.d.ts b/packages/overlayscrollbars/types/support/dom/class.d.ts new file mode 100644 index 0000000..eafcb19 --- /dev/null +++ b/packages/overlayscrollbars/types/support/dom/class.d.ts @@ -0,0 +1,3 @@ +export declare const hasClass: (elm: Element | null, className: string) => boolean; +export declare const addClass: (elm: Element | null, className: string) => void; +export declare const removeClass: (elm: Element | null, className: string) => void; diff --git a/packages/overlayscrollbars/types/core/dom/create.d.ts b/packages/overlayscrollbars/types/support/dom/create.d.ts similarity index 100% rename from packages/overlayscrollbars/types/core/dom/create.d.ts rename to packages/overlayscrollbars/types/support/dom/create.d.ts diff --git a/packages/overlayscrollbars/types/support/dom/events.d.ts b/packages/overlayscrollbars/types/support/dom/events.d.ts new file mode 100644 index 0000000..02a1512 --- /dev/null +++ b/packages/overlayscrollbars/types/support/dom/events.d.ts @@ -0,0 +1 @@ +export declare const on: (target: EventTarget, type: string, listener: EventListenerOrEventListenerObject | null, options: AddEventListenerOptions) => void; diff --git a/packages/overlayscrollbars/types/support/dom/index.d.ts b/packages/overlayscrollbars/types/support/dom/index.d.ts new file mode 100644 index 0000000..9dccb22 --- /dev/null +++ b/packages/overlayscrollbars/types/support/dom/index.d.ts @@ -0,0 +1,7 @@ +export * from 'support/dom/attribute'; +export * from 'support/dom/class'; +export * from 'support/dom/create'; +export * from 'support/dom/style'; +export * from 'support/dom/manipulation'; +export * from 'support/dom/offset'; +export * from 'support/dom/traversal'; diff --git a/packages/overlayscrollbars/types/core/dom/manipulation.d.ts b/packages/overlayscrollbars/types/support/dom/manipulation.d.ts similarity index 100% rename from packages/overlayscrollbars/types/core/dom/manipulation.d.ts rename to packages/overlayscrollbars/types/support/dom/manipulation.d.ts diff --git a/packages/overlayscrollbars/types/support/dom/offset.d.ts b/packages/overlayscrollbars/types/support/dom/offset.d.ts new file mode 100644 index 0000000..9c1e680 --- /dev/null +++ b/packages/overlayscrollbars/types/support/dom/offset.d.ts @@ -0,0 +1,8 @@ +export declare const offset: (elm: HTMLElement | null) => { + left: number; + top: number; +}; +export declare const position: (elm: HTMLElement | null) => { + left: number; + top: number; +}; diff --git a/packages/overlayscrollbars/types/support/dom/style.d.ts b/packages/overlayscrollbars/types/support/dom/style.d.ts new file mode 100644 index 0000000..057e7c9 --- /dev/null +++ b/packages/overlayscrollbars/types/support/dom/style.d.ts @@ -0,0 +1,11 @@ +declare type CssStyles = { + [key: string]: string | number; +}; +export declare function style(elm: HTMLElement | null, styles: CssStyles): void; +export declare function style(elm: HTMLElement | null, styles: string): string; +export declare function style(elm: HTMLElement | null, styles: Array | string): { + [key: string]: string; +}; +export declare const hide: (elm: HTMLElement | null) => void; +export declare const show: (elm: HTMLElement | null) => void; +export {}; diff --git a/packages/overlayscrollbars/types/core/dom/traversal.d.ts b/packages/overlayscrollbars/types/support/dom/traversal.d.ts similarity index 76% rename from packages/overlayscrollbars/types/core/dom/traversal.d.ts rename to packages/overlayscrollbars/types/support/dom/traversal.d.ts index 8fee561..8fa9a76 100644 --- a/packages/overlayscrollbars/types/core/dom/traversal.d.ts +++ b/packages/overlayscrollbars/types/support/dom/traversal.d.ts @@ -1,6 +1,6 @@ -export declare const find: (selector: string, elm?: Element | null) => ReadonlyArray; -export declare const findFirst: (selector: string, elm?: Element | null) => Element | null; +export declare const find: (selector: string, elm?: Element | null | undefined) => ReadonlyArray; +export declare const findFirst: (selector: string, elm?: Element | null | undefined) => Element | null; export declare const is: (elm: Element | null, selector: string) => boolean; -export declare const children: (elm: Element | null, selector?: string) => ReadonlyArray; +export declare const children: (elm: Element | null, selector?: string | undefined) => ReadonlyArray; export declare const contents: (elm: Element | null) => ReadonlyArray; export declare const parent: (elm: Node | null) => Node | null; diff --git a/packages/overlayscrollbars/types/support/index.d.ts b/packages/overlayscrollbars/types/support/index.d.ts new file mode 100644 index 0000000..25ec35a --- /dev/null +++ b/packages/overlayscrollbars/types/support/index.d.ts @@ -0,0 +1,4 @@ +export * from 'support/compatibility'; +export * from 'support/dom'; +export * from 'support/options'; +export * from 'support/utils'; diff --git a/packages/overlayscrollbars/types/core/typings.d.ts b/packages/overlayscrollbars/types/support/options/index.d.ts similarity index 93% rename from packages/overlayscrollbars/types/core/typings.d.ts rename to packages/overlayscrollbars/types/support/options/index.d.ts index ff451db..945a27c 100644 --- a/packages/overlayscrollbars/types/core/typings.d.ts +++ b/packages/overlayscrollbars/types/support/options/index.d.ts @@ -1,6 +1,6 @@ -export declare type PlainObject = { - [name: string]: T; -}; +import { PlainObject } from 'typings'; +export * from 'support/options/validation'; +export * from 'support/options/transformation'; export declare type Func = (this: any, ...args: any[]) => any; export declare type OptionsTemplateType = ExtractPropsKey; export declare type OptionsTemplateTypes = keyof OptionsTemplateTypeMap; @@ -29,8 +29,7 @@ declare type OptionsTemplateTypeMap = { __TPL_null_TYPE__: null; __TPL_object_TYPE__: object; }; +declare type OptionsTemplateValueNonEnum = OptionsTemplateType | [OptionsTemplateType, ...Array]; declare type ExtractPropsKey = { [P in keyof T]: TProps extends T[P] ? P : never; }[keyof T]; -declare type OptionsTemplateValueNonEnum = OptionsTemplateType | [OptionsTemplateType, ...Array]; -export {}; diff --git a/packages/overlayscrollbars/types/core/options/transformation.d.ts b/packages/overlayscrollbars/types/support/options/transformation.d.ts similarity index 78% rename from packages/overlayscrollbars/types/core/options/transformation.d.ts rename to packages/overlayscrollbars/types/support/options/transformation.d.ts index 89e470f..48e3a8f 100644 --- a/packages/overlayscrollbars/types/core/options/transformation.d.ts +++ b/packages/overlayscrollbars/types/support/options/transformation.d.ts @@ -1,3 +1,3 @@ -import { OptionsTemplate, OptionsAndOptionsTemplate } from 'core/typings'; +import { OptionsTemplate, OptionsAndOptionsTemplate } from 'support/options'; export declare function transform>(optionsWithOptionsTemplate: OptionsAndOptionsTemplate): T; export declare function transform>(optionsWithOptionsTemplate: OptionsAndOptionsTemplate, toTemplate: true | void): OptionsTemplate; diff --git a/packages/overlayscrollbars/types/core/options/validation.d.ts b/packages/overlayscrollbars/types/support/options/validation.d.ts similarity index 82% rename from packages/overlayscrollbars/types/core/options/validation.d.ts rename to packages/overlayscrollbars/types/support/options/validation.d.ts index 25784eb..fb69df7 100644 --- a/packages/overlayscrollbars/types/core/options/validation.d.ts +++ b/packages/overlayscrollbars/types/support/options/validation.d.ts @@ -1,4 +1,5 @@ -import { PlainObject, OptionsTemplate, OptionsTemplateType, OptionsValidated, Func, OptionsValidatedResult } from 'core/typings'; +import { OptionsTemplate, OptionsTemplateType, OptionsValidated, Func, OptionsValidatedResult } from 'support/options'; +import { PlainObject } from 'typings'; declare const optionsTemplateTypes: OptionsTemplateTypesDictionary; declare const validate: >(options: T, template: OptionsTemplate>, optionsDiff?: OptionsValidated | undefined, doWriteErrors?: boolean | undefined) => OptionsValidatedResult; export { validate, optionsTemplateTypes }; diff --git a/packages/overlayscrollbars/types/core/utils/array.d.ts b/packages/overlayscrollbars/types/support/utils/array.d.ts similarity index 87% rename from packages/overlayscrollbars/types/core/utils/array.d.ts rename to packages/overlayscrollbars/types/support/utils/array.d.ts index d34a61f..f07353f 100644 --- a/packages/overlayscrollbars/types/core/utils/array.d.ts +++ b/packages/overlayscrollbars/types/support/utils/array.d.ts @@ -1,8 +1,8 @@ -import { PlainObject } from 'core/typings'; +import { PlainObject } from 'typings'; export declare function each(array: Array | ReadonlyArray, callback: (value: T, indexOrKey: number, source: Array) => boolean | void): Array | ReadonlyArray; export declare function each(array: Array | ReadonlyArray | null, callback: (value: T, indexOrKey: number, source: Array) => boolean | void): Array | ReadonlyArray | null; export declare function each(arrayLikeObject: ArrayLike, callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void): ArrayLike; export declare function each(arrayLikeObject: ArrayLike | null, callback: (value: T, indexOrKey: number, source: ArrayLike) => boolean | void): ArrayLike | null; export declare function each(obj: PlainObject, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject; export declare function each(obj: PlainObject | null, callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | void): PlainObject | null; -export declare const indexOf: (arr: Array, item: T, fromIndex?: number) => number; +export declare const indexOf: (arr: T[], item: T, fromIndex?: number | undefined) => number; diff --git a/packages/overlayscrollbars/types/core/utils/extend.d.ts b/packages/overlayscrollbars/types/support/utils/extend.d.ts similarity index 100% rename from packages/overlayscrollbars/types/core/utils/extend.d.ts rename to packages/overlayscrollbars/types/support/utils/extend.d.ts diff --git a/packages/overlayscrollbars/types/support/utils/index.d.ts b/packages/overlayscrollbars/types/support/utils/index.d.ts new file mode 100644 index 0000000..e275e87 --- /dev/null +++ b/packages/overlayscrollbars/types/support/utils/index.d.ts @@ -0,0 +1,4 @@ +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/core/utils/object.d.ts b/packages/overlayscrollbars/types/support/utils/object.d.ts similarity index 100% rename from packages/overlayscrollbars/types/core/utils/object.d.ts rename to packages/overlayscrollbars/types/support/utils/object.d.ts diff --git a/packages/overlayscrollbars/types/core/utils/types.d.ts b/packages/overlayscrollbars/types/support/utils/types.d.ts similarity index 95% rename from packages/overlayscrollbars/types/core/utils/types.d.ts rename to packages/overlayscrollbars/types/support/utils/types.d.ts index 7ceca08..680b739 100644 --- a/packages/overlayscrollbars/types/core/utils/types.d.ts +++ b/packages/overlayscrollbars/types/support/utils/types.d.ts @@ -1,4 +1,4 @@ -import { PlainObject } from 'core/typings'; +import { PlainObject } from 'typings'; export declare const type: (obj: any) => string; export declare function isNumber(obj: any): obj is number; export declare function isString(obj: any): obj is string; diff --git a/packages/overlayscrollbars/types/typings.d.ts b/packages/overlayscrollbars/types/typings.d.ts index 1d58cc7..5b7643b 100644 --- a/packages/overlayscrollbars/types/typings.d.ts +++ b/packages/overlayscrollbars/types/typings.d.ts @@ -1,81 +1,3 @@ -export declare type ResizeBehavior = 'none' | 'both' | 'horizontal' | 'vertical'; -export declare type OverflowBehavior = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll'; -export declare type VisibilityBehavior = 'visible' | 'hidden' | 'auto'; -export declare type AutoHideBehavior = 'never' | 'scroll' | 'leave' | 'move'; -export declare type ScrollBehavior = 'always' | 'ifneeded' | 'never'; -export declare type BasicEventCallback = (this: any) => void; -export declare type ScrollEventCallback = (this: any, args?: UIEvent) => void; -export declare type OverflowChangedCallback = (this: any, args?: OverflowChangedArgs) => void; -export declare type OverflowAmountChangedCallback = (this: any, args?: OverflowAmountChangedArgs) => void; -export declare type DirectionChangedCallback = (this: any, args?: DirectionChangedArgs) => void; -export declare type SizeChangedCallback = (this: any, args?: SizeChangedArgs) => void; -export declare type UpdatedCallback = (this: any, args?: UpdatedArgs) => void; -export interface Options { - className?: string | null; - resize?: ResizeBehavior; - sizeAutoCapable?: boolean; - clipAlways?: boolean; - normalizeRTL?: boolean; - paddingAbsolute?: boolean; - autoUpdate?: boolean | null; - autoUpdateInterval?: number; - updateOnLoad?: string | ReadonlyArray | null; - nativeScrollbarsOverlaid?: { - showNativeScrollbars?: boolean; - initialize?: boolean; - }; - overflowBehavior?: { - x?: OverflowBehavior; - y?: OverflowBehavior; - }; - scrollbars?: { - visibility?: VisibilityBehavior; - autoHide?: AutoHideBehavior; - autoHideDelay?: number; - dragScrolling?: boolean; - clickScrolling?: boolean; - touchSupport?: boolean; - snapHandle?: boolean; - }; - textarea?: { - dynWidth?: boolean; - dynHeight?: boolean; - inheritedAttrs?: string | ReadonlyArray | null; - }; - callbacks?: { - onInitialized?: BasicEventCallback | null; - onInitializationWithdrawn?: BasicEventCallback | null; - onDestroyed?: BasicEventCallback | null; - onScrollStart?: ScrollEventCallback | null; - onScroll?: ScrollEventCallback | null; - onScrollStop?: ScrollEventCallback | null; - onOverflowChanged?: OverflowChangedCallback | null; - onOverflowAmountChanged?: OverflowAmountChangedCallback | null; - onDirectionChanged?: DirectionChangedCallback | null; - onContentSizeChanged?: SizeChangedCallback | null; - onHostSizeChanged?: SizeChangedCallback | null; - onUpdated?: UpdatedCallback | null; - }; -} -export interface OverflowChangedArgs { - x: boolean; - y: boolean; - xScrollable: boolean; - yScrollable: boolean; - clipped: boolean; -} -export interface OverflowAmountChangedArgs { - x: number; - y: number; -} -export interface DirectionChangedArgs { - isRTL: number; - dir: string; -} -export interface SizeChangedArgs { - width: number; - height: number; -} -export interface UpdatedArgs { - forced: boolean; -} +export declare type PlainObject = { + [name: string]: T; +}; diff --git a/resolve.config.json b/resolve.config.json index 777a95c..44c89ed 100644 --- a/resolve.config.json +++ b/resolve.config.json @@ -1,4 +1,4 @@ { - "extensions": [".json", ".js", "jsx", ".ts", ".tsx"], + "extensions": [".json", ".js", "jsx", ".ts", ".tsx", ".html"], "directories": ["node_modules", "src"] } diff --git a/rollup.config.js b/rollup.config.js index d6392d1..b712733 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,7 @@ import rollupCommonjs from '@rollup/plugin-commonjs'; import rollupResolve from '@rollup/plugin-node-resolve'; import rollupTypescript from 'rollup-plugin-typescript2'; +import rollupPrettier from 'rollup-plugin-prettier'; import { getBabelOutputPlugin as rollupBabelOutputPlugin } from '@rollup/plugin-babel'; import { terser as rollupTerser } from 'rollup-plugin-terser'; import del from 'del'; @@ -16,6 +17,7 @@ const legacyOutputBabelConfig = { [ '@babel/preset-env', { + loose: true, targets: { ie: '11', }, @@ -29,6 +31,7 @@ const esmOutputBabelConfig = { [ '@babel/preset-env', { + loose: true, bugfixes: true, targets: { esmodules: true, @@ -70,24 +73,16 @@ export default async (config) => { const mainOutputArray = [ { - format: 'esm', + format: 'umd', name, globals, exports, file: path.resolve(distPath, `${project}.js`), sourcemap: legacySourceMap, plugins: [ - rollupBabelOutputPlugin({ - ...legacyOutputBabelConfig, - plugins: [ - [ - '@babel/plugin-transform-modules-umd', - { - moduleId: name, - globals, - }, - ], - ], + rollupBabelOutputPlugin(legacyOutputBabelConfig), + rollupPrettier({ + sourcemap: legacySourceMap && 'silent', }), ], }, @@ -95,7 +90,12 @@ export default async (config) => { format: 'esm', file: path.resolve(distPath, `${project}.esm.js`), sourcemap: modulesSourceMap, - plugins: [rollupBabelOutputPlugin(esmOutputBabelConfig)], + plugins: [ + rollupBabelOutputPlugin(esmOutputBabelConfig), + rollupPrettier({ + sourcemap: modulesSourceMap && 'silent', + }), + ], }, ];