From aadaaea5c02a9a6cca0fb8c5a9aca2af6ac97405 Mon Sep 17 00:00:00 2001 From: Hunter Date: Wed, 7 Apr 2021 16:11:30 +0800 Subject: [PATCH 1/7] feat: 1. bump rollup, rollup-plugin-cleanup 2. remove rollup-plugin-css-only --- package.json | 5 ++-- yarn.lock | 64 +++++++++++++++++++++++----------------------------- 2 files changed, 30 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 55a855e9..f1777d13 100644 --- a/package.json +++ b/package.json @@ -40,10 +40,9 @@ "eslint-plugin-prettier": "^3.1.4", "eslint-plugin-vue": "^6.2.2", "lint-staged": "^10.2.11", - "rollup": "^2.26.3", - "rollup-plugin-cleanup": "^3.1.1", + "rollup": "^2.44.0", + "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-css-only": "^0.4.0", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-vue": "^5.1.9", diff --git a/yarn.lock b/yarn.lock index afef8a22..703ce0f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4290,11 +4290,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -estree-walker@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" - integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4= - estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" @@ -5593,7 +5588,7 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.1.0: +is-core-module@^2.1.0, is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== @@ -5829,9 +5824,9 @@ is-typedarray@~1.0.0: integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-what@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.12.0.tgz#f4405ce4bd6dd420d3ced51a026fb90e03705e55" - integrity sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw== + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== is-whitespace@^0.3.0: version "0.3.0" @@ -7082,7 +7077,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8702,11 +8697,16 @@ querystring-es3@^0.2.0: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@0.2.0, querystring@^0.2.0: +querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -9025,7 +9025,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0: +resolve@1.x, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -9033,6 +9033,14 @@ resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.1.6: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -9098,7 +9106,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-cleanup@^3.1.1: +rollup-plugin-cleanup@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz#8cbc92ecf58babd7c210051929797f137bbf777c" integrity sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ== @@ -9117,14 +9125,6 @@ rollup-plugin-commonjs@^10.1.0: resolve "^1.11.0" rollup-pluginutils "^2.8.1" -rollup-plugin-css-only@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-css-only/-/rollup-plugin-css-only-0.4.0.tgz#eaf10c79b17c88dc95712fe91518e3afedfb657a" - integrity sha512-a9hhQnwajgrVEyyp+QPvOyV5QC9AN6PILO4Teg2+MCKTZgYAQkZy4B1pYjAuMOH9qgyFiJY8hAu6CEVIDU5Zjw== - dependencies: - mkdirp "^0.5.1" - rollup-pluginutils "^1.5.2" - rollup-plugin-node-resolve@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" @@ -9161,14 +9161,6 @@ rollup-plugin-vue@^5.1.9: source-map "0.7.3" vue-runtime-helpers "^1.1.2" -rollup-pluginutils@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" - integrity sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg= - dependencies: - estree-walker "^0.2.1" - minimatch "^3.0.2" - rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" @@ -9176,10 +9168,10 @@ rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: dependencies: estree-walker "^0.6.1" -rollup@^2.26.3: - version "2.38.5" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.38.5.tgz#be41ad4fe0c103a8794377afceb5f22b8f603d6a" - integrity sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ== +rollup@^2.44.0: + version "2.44.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.44.0.tgz#8da324d1c4fd12beef9ae6e12f4068265b6d95eb" + integrity sha512-rGSF4pLwvuaH/x4nAS+zP6UNn5YUDWf/TeEU5IoXSZKBbKRNTCI3qMnYXKZgrC0D2KzS2baiOZt1OlqhMu5rnQ== optionalDependencies: fsevents "~2.3.1" @@ -9245,9 +9237,9 @@ sane@^4.0.3: walker "~1.0.5" sass@^1.18.0: - version "1.32.6" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.6.tgz#e3646c8325cd97ff75a8a15226007f3ccd221393" - integrity sha512-1bcDHDcSqeFtMr0JXI3xc/CXX6c4p0wHHivJdru8W7waM7a1WjKMm4m/Z5sY7CbVw4Whi2Chpcw6DFfSWwGLzQ== + version "1.32.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.8.tgz#f16a9abd8dc530add8834e506878a2808c037bdc" + integrity sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ== dependencies: chokidar ">=2.0.0 <4.0.0" From ae4321a771128aa060e3238b50e8b955ed4d8562 Mon Sep 17 00:00:00 2001 From: Hunter Date: Wed, 7 Apr 2021 18:27:10 +0800 Subject: [PATCH 2/7] feat(example): vite, windicss, vite-plugin-components for Vue 2 --- example/.browserslistrc | 3 - example/.eslintignore | 1 - example/.eslintrc.js | 14 - example/.prettierrc.yaml | 8 - example/babel.config.js | 3 - example/index.html | 13 + example/package.json | 33 +- example/postcss.config.js | 3 - example/public/index.html | 19 - example/public/robots.txt | 2 - .../{VContent.vue => VDescription.vue} | 0 .../src/components/basic/VDynamicAdvanced.vue | 7 +- example/src/components/index.js | 13 - example/src/main.js | 13 +- example/tailwind.config.js | 38 - example/vite.config.js | 8 + example/yarn.lock | 9891 +++-------------- 17 files changed, 1441 insertions(+), 8628 deletions(-) delete mode 100644 example/.browserslistrc delete mode 100644 example/.eslintignore delete mode 100644 example/.eslintrc.js delete mode 100644 example/.prettierrc.yaml delete mode 100644 example/babel.config.js create mode 100644 example/index.html delete mode 100644 example/postcss.config.js delete mode 100644 example/public/index.html delete mode 100644 example/public/robots.txt rename example/src/components/{VContent.vue => VDescription.vue} (100%) delete mode 100644 example/src/components/index.js delete mode 100644 example/tailwind.config.js create mode 100644 example/vite.config.js diff --git a/example/.browserslistrc b/example/.browserslistrc deleted file mode 100644 index 214388fe..00000000 --- a/example/.browserslistrc +++ /dev/null @@ -1,3 +0,0 @@ -> 1% -last 2 versions -not dead diff --git a/example/.eslintignore b/example/.eslintignore deleted file mode 100644 index 53c37a16..00000000 --- a/example/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist \ No newline at end of file diff --git a/example/.eslintrc.js b/example/.eslintrc.js deleted file mode 100644 index 203ee7fb..00000000 --- a/example/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - root: true, - env: { - node: true - }, - extends: ['plugin:vue/essential', 'eslint:recommended', '@vue/prettier'], - parserOptions: { - parser: 'babel-eslint' - }, - rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' - } -} diff --git a/example/.prettierrc.yaml b/example/.prettierrc.yaml deleted file mode 100644 index 45eb8d25..00000000 --- a/example/.prettierrc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# .prettierrc or .prettierrc.yaml -# printWidth: 80 -tabWidth: 2 -semi: false -singleQuote: true -# trailingComma: 'es5' -# bracketSpacing: true -arrowParens: 'avoid' \ No newline at end of file diff --git a/example/babel.config.js b/example/babel.config.js deleted file mode 100644 index 716b0237..00000000 --- a/example/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['@vue/cli-plugin-babel/preset'] -} diff --git a/example/index.html b/example/index.html new file mode 100644 index 00000000..cd8c6064 --- /dev/null +++ b/example/index.html @@ -0,0 +1,13 @@ + + + + + + + Vue Final Modal + + +
+ + + diff --git a/example/package.json b/example/package.json index d47cecae..8c7df083 100644 --- a/example/package.json +++ b/example/package.json @@ -3,37 +3,18 @@ "version": "0.0.0", "private": true, "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "lint": "vue-cli-service lint" + "dev": "vite", + "build": "vite build", + "serve": "vite preview" }, "dependencies": { - "core-js": "^3.6.5", - "tailwindcss": "^1.4.6", - "vue": "^2.6.11", "vue-final-modal": "link:.." }, "devDependencies": { - "@vue/cli-plugin-babel": "~4.4.0", - "@vue/cli-plugin-eslint": "~4.4.0", - "@vue/cli-service": "~4.4.0", - "@vue/eslint-config-prettier": "^6.0.0", - "babel-eslint": "^10.1.0", - "eslint": "^6.7.2", - "eslint-plugin-prettier": "^3.1.3", - "eslint-plugin-vue": "^6.2.2", - "lint-staged": "^9.5.0", - "prettier": "^1.19.1", - "raw-loader": "^4.0.1", - "vue-template-compiler": "^2.6.11" - }, - "gitHooks": { - "pre-commit": "lint-staged" - }, - "lint-staged": { - "*.{js,jsx,vue}": [ - "vue-cli-service lint" - ] + "vite": "^2.1.5", + "vite-plugin-components": "^0.8.3", + "vite-plugin-vue2": "^1.4.3", + "vite-plugin-windicss": "^0.12.5" }, "repository": { "type": "git", diff --git a/example/postcss.config.js b/example/postcss.config.js deleted file mode 100644 index fdc8a498..00000000 --- a/example/postcss.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - plugins: [require('tailwindcss'), require('autoprefixer')] -} diff --git a/example/public/index.html b/example/public/index.html deleted file mode 100644 index cb9b449a..00000000 --- a/example/public/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - Vue Final Modal - - - - - -
- - - diff --git a/example/public/robots.txt b/example/public/robots.txt deleted file mode 100644 index 14267e90..00000000 --- a/example/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / \ No newline at end of file diff --git a/example/src/components/VContent.vue b/example/src/components/VDescription.vue similarity index 100% rename from example/src/components/VContent.vue rename to example/src/components/VDescription.vue diff --git a/example/src/components/basic/VDynamicAdvanced.vue b/example/src/components/basic/VDynamicAdvanced.vue index ea96a3ef..1d5df01a 100644 --- a/example/src/components/basic/VDynamicAdvanced.vue +++ b/example/src/components/basic/VDynamicAdvanced.vue @@ -3,7 +3,7 @@ \n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"VueFinalModal.esm.js","sources":["../lib/utils/focusTrap.js","../lib/utils/bodyScrollLock.js","../lib/VueFinalModal.vue","../lib/PluginCore.js","../lib/utils/errors.js","../lib/Plugin.js"],"sourcesContent":["// stolen from vue-js-modal\n\nconst FOCUSABLE_ELEMENTS_QUERY =\n 'button:not([disabled]), ' +\n 'select:not([disabled]), ' +\n 'a[href]:not([disabled]), ' +\n 'area[href]:not([disabled]), ' +\n '[contentEditable=\"\"]:not([disabled]), ' +\n '[contentEditable=\"true\"]:not([disabled]), ' +\n '[contentEditable=\"TRUE\"]:not([disabled]), ' +\n 'textarea:not([disabled]), ' +\n 'iframe:not([disabled]), ' +\n 'input:not([disabled]), ' +\n 'summary:not([disabled]), ' +\n '[tabindex]:not([tabindex=\"-1\"])'\n\nconst isTabPressed = event => {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["isFocused","element","document","activeElement","FocusTrap","constructor","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","enabled","selector","querySelectorAll","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","isIosDevice","navigator","platform","test","maxTouchPoints","previousBodyOverflowSetting","previousBodyPaddingRight","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","console","error","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file diff --git a/dist/VueFinalModal.umd.js b/dist/VueFinalModal.umd.js index 7d7cdf67..11e64b78 100644 --- a/dist/VueFinalModal.umd.js +++ b/dist/VueFinalModal.umd.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).VueFinalModal=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n1),p=[],m=!1,y=0,b=-1,g=function(e,t){var n=!1;return function(e){for(var t=[];e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t}(e).forEach((function(e){(function(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&function(e,t){return!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0)}(e,t)&&(n=!0)})),n},E=function(e){return p.some((function(){return g(e,-y)}))},w=function(e){var t=e||window.event;return!!E(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},S=function(e,t){if(e){if(!p.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};p=[].concat(a(p),[n]),h?(e.ontouchstart=function(e){1===e.targetTouches.length&&(b=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){y=e.targetTouches[0].clientY-b,!E(e.target)&&(t&&0===t.scrollTop&&y>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&y<0?w(e):e.stopPropagation())}(t,e)},m||(document.addEventListener("touchmove",w,u?{passive:!1}:void 0),m=!0)):function(e){if(void 0===v){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var o=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);v=document.body.style.paddingRight,document.body.style.paddingRight="".concat(o+n,"px")}}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow="hidden")}(t)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")},T=function(e){e?(p=p.filter((function(t){return t.targetElement!==e})),h?(e.ontouchstart=null,e.ontouchmove=null,m&&0===p.length&&(document.removeEventListener("touchmove",w,u?{passive:!1}:void 0),m=!1)):p.length||(void 0!==v&&(document.body.style.paddingRight=v,v=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},C="enter",O="entering",k="leave",_="leavng";var x={type:[String,Object,Array],default:""},M={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:x,overlayClass:x,contentClass:x,styles:x,overlayStyle:x,contentStyle:x,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var n=e(t);return"boolean"===n||"string"===n||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===k)&&this.modalTransitionState===k},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return i({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:i({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:i({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new c,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&T(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();var n=this.api.modals.findIndex((function(e){return e===t}));this.api.modals.splice(n,1)},methods:{mounted:function(){var e=this;if(this.value){if(this.emitEvent("before-open",!1))return;var t=this.getAttachElement();if(t||!1===this.attach){!1!==this.attach&&t.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(t){return t===e}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(t){return t!==e})).forEach((function(e,n){e.getAttachElement()===t&&(e.modalStackIndex=n,e.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){e.startTransitionEnter()}))}else!1!==t&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var e=this,t=this.api.openedModals.findIndex((function(t){return t===e}));if(-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var e=this;this.value&&this.$nextTick((function(){e.lockScroll?S(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):T(e.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=O},afterOverlayEnter:function(){this.overlayTransitionState=C},beforeOverlayLeave:function(){this.overlayTransitionState=_},afterOverlayLeave:function(){this.overlayTransitionState=k},beforeModalEnter:function(){this.modalTransitionState=O},afterModalEnter:function(){this.modalTransitionState=C,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave:function(){this.modalTransitionState=_,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=k,this.modalStackIndex=null,this.lockScroll&&T(this.$refs.vfmContainer);var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer:function(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i({ref:this},e)},emitEvent:function(e,t){var n=!1,o=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle:function(e,t){var n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var $,j=function(e,t,n,o,i,a,r,s,l,c){"boolean"!=typeof r&&(l=s,s=r,r=!1);var u,d="function"==typeof n?n.options:n;if(e&&e.render&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0,i&&(d.functional=!0)),o&&(d._scopeId=o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},d._ssrRegister=u):t&&(u=r?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),u)if(d.functional){var f=d.render;d.render=function(e,t){return u.call(t),f(e,t)}}else{var v=d.beforeCreate;d.beforeCreate=v?[].concat(v,u):[u]}return n},I="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var L={};var N=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),M,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=I?t.media||"default":e,o=L[n]||(L[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===$&&($=document.head||document.getElementsByTagName("head")[0]),$.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var a=o.ids.size-1,r=document.createTextNode(i),s=o.element.childNodes;s[a]&&o.element.removeChild(s[a]),s.length?o.element.insertBefore(r,s[a]):o.element.appendChild(r)}}}(e,t)}}),void 0,void 0),A=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api:function(){return this[this.$_options.key]}},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t){e.ref.params=t.params},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function B(e,t){var n=i({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function D(t,n){var o=function(t,n){var o;return function(){return o={show:function(t){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=0;e--)this.openedModals[e].$emit("input",!1)},toggle:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;oe==document.activeElement;class t{constructor(){this.root=null,this.elements=[],this.onKeyDown=this.onKeyDown.bind(this),this.enable=this.enable.bind(this),this.disable=this.disable.bind(this),this.firstElement=this.firstElement.bind(this),this.lastElement=this.lastElement.bind(this)}lastElement(){return this.elements[this.elements.length-1]||null}firstElement(){return this.elements[0]||null}onKeyDown(t){if((e=>"Tab"===e.key||9===e.keyCode)(t)){if(!t.shiftKey)return!document.activeElement||e(this.lastElement())?(this.firstElement().focus(),void t.preventDefault()):void 0;e(this.firstElement())&&(this.lastElement().focus(),t.preventDefault())}}enabled(){return!!this.root}enable(e){e&&(this.root=e,this.elements=((e,t)=>[...e.querySelectorAll(t)||[]])(this.root,'button:not([disabled]), select:not([disabled]), a[href]:not([disabled]), area[href]:not([disabled]), [contentEditable=""]:not([disabled]), [contentEditable="true"]:not([disabled]), [contentEditable="TRUE"]:not([disabled]), textarea:not([disabled]), iframe:not([disabled]), input:not([disabled]), summary:not([disabled]), [tabindex]:not([tabindex="-1"])'),this.root.addEventListener("keydown",this.onKeyDown))}disable(){this.root.removeEventListener("keydown",this.onKeyDown),this.root=null}}let n=!1;if("undefined"!=typeof window){const e={get passive(){n=!0}};window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}const o="undefined"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||"MacIntel"===window.navigator.platform&&window.navigator.maxTouchPoints>1);let i,s,a=[],l=!1,r=0,d=-1;const c=(e,t)=>{let n=!1;return(e=>{const t=[];for(;e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t})(e).forEach((e=>{(e=>{if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&((e,t)=>!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0))(e,t)&&(n=!0)})),n},u=e=>a.some((()=>c(e,-r))),h=e=>{const t=e||window.event;return!!u(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},f=(e,t)=>{if(!e)return void console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");if(a.some((t=>t.targetElement===e)))return;const c={targetElement:e,options:t||{}};a=[...a,c],o?(e.ontouchstart=e=>{1===e.targetTouches.length&&(d=e.targetTouches[0].clientY)},e.ontouchmove=t=>{1===t.targetTouches.length&&((e,t)=>{r=e.targetTouches[0].clientY-d,!u(e.target)&&(t&&0===t.scrollTop&&r>0||(e=>!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight)(t)&&r<0?h(e):e.stopPropagation())})(t,e)},l||(document.addEventListener("touchmove",h,n?{passive:!1}:void 0),l=!0)):(e=>{if(void 0===s){const t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){const e=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);s=document.body.style.paddingRight,document.body.style.paddingRight=`${e+n}px`}}void 0===i&&(i=document.body.style.overflow,document.body.style.overflow="hidden")})(t)},v=e=>{e?(a=a.filter((t=>t.targetElement!==e)),o?(e.ontouchstart=null,e.ontouchmove=null,l&&0===a.length&&(document.removeEventListener("touchmove",h,n?{passive:!1}:void 0),l=!1)):a.length||(void 0!==s&&(document.body.style.paddingRight=s,s=void 0),void 0!==i&&(document.body.style.overflow=i,i=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},m="enter",p="entering",y="leave",b="leavng";const g={type:[String,Object,Array],default:""};var E={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:g,overlayClass:g,contentClass:g,styles:g,overlayStyle:g,contentStyle:g,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(e){const t=typeof e;return"boolean"===t||"string"===t||e.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:()=>({modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}),computed:{api(){return this[this.$_options.key]},isComponentReadyToBeDestroyed(){return(this.hideOverlay||this.overlayTransitionState===y)&&this.modalTransitionState===y},calculateZIndex(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle(){return{...!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex}}},computedTransition(){return"string"==typeof this.transition?{name:this.transition}:{...this.transition}},computedOverlayTransition(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:{...this.overlayTransition}}},watch:{value(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed(e){e&&(this.visible=!1)}},created(){this.api.modals.push(this)},mounted(){this.$focusTrap=new t,this.mounted()},beforeDestroy(){var e;this.close(),this.lockScroll&&this.$refs.vfmContainer&&v(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();let t=this.api.modals.findIndex((e=>e===this));this.api.modals.splice(t,1)},methods:{mounted(){if(this.value){if(this.emitEvent("before-open",!1))return;let e=this.getAttachElement();if(e||!1===this.attach){!1!==this.attach&&e.appendChild(this.$el);let t=this.api.openedModals.findIndex((e=>e===this));-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((e=>e!==this)).forEach(((t,n)=>{t.getAttachElement()===e&&(t.modalStackIndex=n,t.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((()=>{this.startTransitionEnter()}))}else!1!==e&&console.warn("Unable to locate target ".concat(this.attach))}},close(){let e=this.api.openedModals.findIndex((e=>e===this));if(-1!==e&&this.api.openedModals.splice(e,1),this.api.openedModals.length>0){const e=this.api.openedModals[this.api.openedModals.length-1];(e.focusRetain||e.focusTrap)&&e.$refs.vfmContainer.focus(),!e.hideOverlay&&(e.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll(){this.value&&this.$nextTick((()=>{this.lockScroll?f(this.$refs.vfmContainer,{reserveScrollBarGap:!0}):v(this.$refs.vfmContainer)}))},getAttachElement(){let e;return e=!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach),e},beforeOverlayEnter(){this.overlayTransitionState=p},afterOverlayEnter(){this.overlayTransitionState=m},beforeOverlayLeave(){this.overlayTransitionState=b},afterOverlayLeave(){this.overlayTransitionState=y},beforeModalEnter(){this.modalTransitionState=p},afterModalEnter(){this.modalTransitionState=m,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave(){this.modalTransitionState=b,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave(){this.modalTransitionState=y,this.modalStackIndex=null,this.lockScroll&&v(this.$refs.vfmContainer);let e=!1;const t=this.createModalEvent({type:"closed",stop(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent(e={}){return{ref:this,...e}},emitEvent(e,t){let n=!1;const o=this.createModalEvent({type:e,stop(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle(e,t){const n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var T,S=function(e,t,n,o,i,s,a,l,r,d){"boolean"!=typeof a&&(r=l,l=a,a=!1);var c,u="function"==typeof n?n.options:n;if(e&&e.render&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns,u._compiled=!0,i&&(u.functional=!0)),o&&(u._scopeId=o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,r(e)),e&&e._registeredComponents&&e._registeredComponents.add(s)},u._ssrRegister=c):t&&(c=a?function(e){t.call(this,d(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,l(e))}),c)if(u.functional){var h=u.render;u.render=function(e,t){return c.call(t),h(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,c):[c]}return n},w="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var C={};const k=S({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),E,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=w?t.media||"default":e,o=C[n]||(C[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===T&&(T=document.head||document.getElementsByTagName("head")[0]),T.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var s=o.ids.size-1,a=document.createTextNode(i),l=o.element.childNodes;l[s]&&o.element.removeChild(l[s]),l.length?o.element.insertBefore(a,l[s]):o.element.appendChild(a)}}}(e,t)}}),void 0,void 0);const _=S({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api(){return this[this.$_options.key]}},methods:{slice(e){this.api.dynamicModals.splice(e,1)},beforeOpen(e,t){e.ref.params=t.params},isString:e=>"string"==typeof e}},undefined,false,undefined,!1,void 0,void 0,void 0);function x(e,t){const n={...e};return Object.assign(n.props,{$_options:{type:Object,default:()=>t}}),n}function M(e,t){const n=function(e,t){let n;return function(){return n={show(e,...n){switch(typeof e){case"string":this.toggle(e,!0,...n);break;case"object":{const o={value:!0,id:Symbol("dynamicModal"),component:t.componentName,bind:{},slots:{},on:{},params:n[0]};this.dynamicModals.push(Object.assign(o,e))}}},hide(...e){this.toggle(e,!1)},hideAll(){for(let e=this.openedModals.length-1;e>=0;e--)this.openedModals[e].$emit("input",!1)},toggle(e,...t){(Array.isArray(e)?this.get(...e):this.get(e)).forEach((e=>e.toggle(...t)))},get(...e){return this.modals.filter((t=>e.includes(t.name)))},dynamicModals:[],openedModals:[],modals:[]},e.observable(n)}}(e,t)();Object.defineProperty(e.prototype,t.key,{get:()=>n})}const $={componentName:"VueFinalModal",dynamicContainerName:"ModalsContainer",key:"$vfm"};return e=>({install(t,n){const o=Object.assign({},$,e,n);((e,t,n)=>!(e||t||n)||("undefined"==typeof window||(e&&console.error("[vue-final-modal] Duplicate registration API key of VueFinalModal."),t&&console.error("[vue-final-modal] Duplicate registration componentName of VueFinalModal."),n&&console.error("[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.")),!1))(t.prototype[o.key],t.options.components[o.componentName],t.options.components[o.dynamicContainerName])&&(M(t,o),function(e,t){e.component(t.componentName,x(k,t))}(t,o),function(e,t){e.component(t.dynamicContainerName,x(_,t))}(t,o))}})})); //# sourceMappingURL=VueFinalModal.umd.js.map diff --git a/dist/VueFinalModal.umd.js.map b/dist/VueFinalModal.umd.js.map index adb6c841..46c30d07 100644 --- a/dist/VueFinalModal.umd.js.map +++ b/dist/VueFinalModal.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"VueFinalModal.umd.js","sources":["../lib/utils/focusTrap.js","../lib/utils/bodyScrollLock.js","../lib/VueFinalModal.vue","../lib/PluginCore.js","../lib/utils/errors.js","../lib/Plugin.js"],"sourcesContent":["// stolen from vue-js-modal\n\nconst FOCUSABLE_ELEMENTS_QUERY =\n 'button:not([disabled]), ' +\n 'select:not([disabled]), ' +\n 'a[href]:not([disabled]), ' +\n 'area[href]:not([disabled]), ' +\n '[contentEditable=\"\"]:not([disabled]), ' +\n '[contentEditable=\"true\"]:not([disabled]), ' +\n '[contentEditable=\"TRUE\"]:not([disabled]), ' +\n 'textarea:not([disabled]), ' +\n 'iframe:not([disabled]), ' +\n 'input:not([disabled]), ' +\n 'summary:not([disabled]), ' +\n '[tabindex]:not([tabindex=\"-1\"])'\n\nconst isTabPressed = event => {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"0hEAEA,IAsBMA,EAAyB,SAAAC,UAJN,SAACA,EAASC,YACrBD,EAAQE,iBAAiBD,IAAa,IAI3CC,CAAiBF,EAtBxB,qWAyBIG,EAAY,SAAAH,UACTA,GAAWI,SAASC,eAOvBC,qIAEGC,KAAO,UACPC,SAAW,QAEXC,UAAYC,KAAKD,UAAUE,KAAKD,WAChCE,OAASF,KAAKE,OAAOD,KAAKD,WAC1BG,QAAUH,KAAKG,QAAQF,KAAKD,WAC5BI,aAAeJ,KAAKI,aAAaH,KAAKD,WACtCK,YAAcL,KAAKK,YAAYJ,KAAKD,wDAG3C,kBACSA,KAAKF,SAASE,KAAKF,SAASQ,OAAS,IAAM,iCAGpD,kBACSN,KAAKF,SAAS,IAAM,8BAG7B,SAAUS,MAxCS,SAAAA,SACE,QAAdA,EAAMC,KAAmC,IAAlBD,EAAME,QAwC7BC,CAAaH,QAKdA,EAAMI,gBA7BJjB,SAASC,eAsCWF,EAAUO,KAAKK,qBAClCD,eAAeQ,aACpBL,EAAMM,yBAVFpB,EAAUO,KAAKI,uBACZC,cAAcO,QACnBL,EAAMM,0CAaZ,mBACWb,KAAKH,2BAGhB,SAAOA,GACAA,SAIAA,KAAOA,OACPC,SAAWT,EAAuBW,KAAKH,WAEvCA,KAAKiB,iBAAiB,UAAWd,KAAKD,mCAG7C,gBACOF,KAAKkB,oBAAoB,UAAWf,KAAKD,gBACzCF,KAAO,0CC5FZmB,GAAmB,EACvB,GAAsB,oBAAXC,OAAwB,KAC3BC,EAAqB,eAEvBF,GAAmB,IAIvBC,OAAOH,iBAAiB,cAAe,KAAMI,GAC7CD,OAAOF,oBAAoB,cAAe,KAAMG,GAGlD,IAWIC,EACAC,EAZEC,EACc,oBAAXJ,QACPA,OAAOK,WACPL,OAAOK,UAAUC,WAChB,iBAAiBC,KAAKP,OAAOK,UAAUC,WACP,aAA9BN,OAAOK,UAAUC,UAA2BN,OAAOK,UAAUG,eAAiB,GAE/EC,EAAQ,GACRC,GAAwB,EACxBC,EAAU,EACVC,GAAkB,EA2BhBC,EAAqB,SAACC,EAAIC,OAC1BF,GAAqB,SAXN,SAAAC,WACbE,EAAO,GACNF,GAAI,IACTE,EAAKC,KAAKH,GACNA,EAAGI,UAAUC,SAAS,OAAQ,OAAOH,EACzCF,EAAKA,EAAGM,qBAEHJ,EAKMK,CAAaP,GACrBQ,SAAQ,SAAAR,IA1BM,SAAAA,OACdA,GAAMA,EAAGS,WAAaC,KAAKC,aAAc,OAAO,MAE/CC,EAAQ1B,OAAO2B,iBAAiBb,SAC/B,CAAC,OAAQ,UAAUc,SAASF,EAAMG,YAAcf,EAAGgB,aAAehB,EAAGiB,cAuBtEC,CAAalB,IApBA,SAACA,EAAIC,WACH,IAAjBD,EAAGmB,WAAmBlB,EAAQ,GAC9BD,EAAGmB,UAAYnB,EAAGiB,aAAehB,GAASD,EAAGgB,cAAgBf,EAAQ,GAkB/CmB,CAAapB,EAAIC,KACvCF,GAAqB,MAGlBA,GAIHsB,EAAiB,SAAArB,UAAML,EAAM2B,MAAK,kBAAMvB,EAAmBC,GAAKH,OAEhEf,EAAiB,SAAAyC,OACfC,EAAID,GAAYrC,OAAOV,cAMzB6C,EAAeG,EAAEC,UAIjBD,EAAEE,QAAQnD,OAAS,IAEnBiD,EAAE1C,gBAAgB0C,EAAE1C,kBAEjB,KAgEI6C,EAAoB,SAACC,EAAeC,MAE1CD,OASDjC,EAAM2B,MAAK,SAAAQ,UAAQA,EAAKF,gBAAkBA,UAIxCE,EAAO,CACXF,cAAAA,EACAC,QAASA,GAAW,IAGtBlC,cAAYA,IAAOmC,IAEfxC,GACFsC,EAAcG,aAAe,SAAAvD,GACQ,IAA/BA,EAAMwD,cAAczD,SAEtBuB,EAAiBtB,EAAMwD,cAAc,GAAGnC,UAG5C+B,EAAcK,YAAc,SAAAzD,GACS,IAA/BA,EAAMwD,cAAczD,QAnDT,SAACC,EAAOoD,GAC3B/B,EAAUrB,EAAMwD,cAAc,GAAGnC,QAAUC,GAEvCuB,EAAe7C,EAAMiD,UAIrBG,GAA6C,IAA5BA,EAAcT,WAAmBtB,EAAU,GAV3B,SAAA+B,WACrCA,GAAgBA,EAAcZ,aAAeY,EAAcT,WAAaS,EAAcX,aAclFiB,CAA+BN,IAAkB/B,EAAU,EAHtDf,EAAeN,GAQxBA,EAAM2D,mBAoCAC,CAAa5D,EAAOoD,IAInBhC,IACHjC,SAASoB,iBAAiB,YAAaD,EAAgBG,EAAmB,CAAEoD,SAAS,QAAUC,GAC/F1C,GAAwB,IAnGJ,SAAAiC,WAESS,IAA7BjD,EAAwC,KACpCkD,IAAwBV,IAA2C,IAAhCA,EAAQU,oBAC3CC,EAAetD,OAAOuD,WAAa9E,SAAS+E,gBAAgBC,eAE9DJ,GAAuBC,EAAe,EAAG,KACrCI,EAA2BC,SAAShC,iBAAiBlD,SAASmF,MAAMC,iBAAiB,iBAAkB,IAC7G1D,EAA2B1B,SAASmF,KAAKlC,MAAMoC,aAC/CrF,SAASmF,KAAKlC,MAAMoC,uBAAkBJ,EAA2BJ,cAIjCF,IAAhClD,IACFA,EAA8BzB,SAASmF,KAAKlC,MAAMqC,SAClDtF,SAASmF,KAAKlC,MAAMqC,SAAW,UAuF/BC,CAAkBrB,SArClBsB,QAAQC,MACN,mHAwCOC,EAAmB,SAAAzB,GACzBA,GAQLjC,EAAQA,EAAM2D,QAAO,SAAAxB,UAAQA,EAAKF,gBAAkBA,KAEhDtC,GACFsC,EAAcG,aAAe,KAC7BH,EAAcK,YAAc,KAExBrC,GAA0C,IAAjBD,EAAMpB,SACjCZ,SAASqB,oBAAoB,YAAaF,EAAgBG,EAAmB,CAAEoD,SAAS,QAAUC,GAClG1C,GAAwB,IAEhBD,EAAMpB,cAzGe+D,IAA7BjD,IACF1B,SAASmF,KAAKlC,MAAMoC,aAAe3D,EAInCA,OAA2BiD,QAGOA,IAAhClD,IACFzB,SAASmF,KAAKlC,MAAMqC,SAAW7D,EAI/BA,OAA8BkD,KA4E9Ba,QAAQC,MACN,6JC3HN,0cARA,m/TC5DA,SAASG,EAAcC,EAAW3B,OAC1B4B,OAAkBD,UACxBE,OAAOC,OAAOF,EAAWG,MAAO,CAC9BC,UAAW,CAAEC,KAAMJ,OAAQK,QAAS,kBAAMlC,MAErC4B,EAoDF,SAASO,EAAcC,EAAKpC,OAC3BqC,EAlDR,SAAmBD,EAAKpC,OAClBqC,SAEG,kBACLA,EAAM,CACJC,cAAKC,8BAAUC,mCAAAA,6BACED,QACR,cACEE,mBAAOF,GAAO,UAASC,cAEzB,aAEKE,EAAe,CACnBC,OAAO,EACPC,GAAIC,OAAO,gBACXlB,UAAW3B,EAAQ8C,cACnBzG,KAAM,GACN0G,MAAO,GACPC,GAAI,GACJC,OAAQT,EAAK,SAEVU,cAAc5E,KAAKuD,OAAOC,OAAOY,EAAcH,MAK5DY,2CAAQC,2BAAAA,uBACDX,OAAOW,GAAO,IAErBC,uBACO,IAAIC,EAAIlH,KAAKmH,aAAa7G,OAAS,EAAG4G,GAAK,EAAGA,SAC5CC,aAAaD,GAAGE,MAAM,SAAS,IAGxCf,gBAAOgB,8BAASjB,mCAAAA,qBACCkB,MAAMC,QAAQF,GAAQrH,KAAKwH,iBAAOH,IAAQrH,KAAKwH,IAAIH,IAC3D9E,SAAQ,SAAA4D,UAASA,EAAME,aAANF,EAAgBC,OAE1CoB,0CAAOR,2BAAAA,yBACEhH,KAAKyH,OAAOpC,QAAO,SAAAc,UAASa,EAAMnE,SAASsD,EAAMkB,UAE1DP,cAAe,GACfK,aAAc,GACdM,OAAQ,IAEHzB,EAAI0B,WAAWzB,IAKZ0B,CAAU3B,EAAKpC,EAAf+D,GACZlC,OAAOmC,eAAe5B,EAAI6B,UAAWjE,EAAQpD,IAAK,CAChDgH,sBACSvB,KChEN,ICGD6B,EAAiB,CACrBpB,cAAe,gBACfqB,qBAAsB,kBACtBvH,IAAK,eAeQ,SAAAwH,SAAkB,CAC/BC,iBAAQjC,EAAKpC,OACLsE,EAAWzC,OAAOC,OAAO,GAAIoC,EAAgBE,EAAepE,IAdlD,SAACuE,EAAcC,EAAoBC,WAC/CF,GAAgBC,GAAsBC,KAEtB,oBAAXpH,SAEXkH,GAAgBjD,QAAQC,MDdG,sECe3BiD,GAAsBlD,QAAQC,MDbG,4ECcjCkD,GAA6BnD,QAAQC,MDXrC,uFCO0C,IAgBpCmD,CAJiBtC,EAAI6B,UAAUK,EAAS1H,KACjBwF,EAAIpC,QAAQ2E,WAAWL,EAASxB,eACzBV,EAAIpC,QAAQ2E,WAAWL,EAASH,yBAGhEhC,EAAcC,EAAKkC,GFwClB,SAAqBlC,EAAKpC,GAC/BoC,EAAIT,UAAU3B,EAAQ8C,cAAepB,EAAckD,EAAe5E,IExC9D6E,CAAYzC,EAAKkC,GF0ChB,SAAyBlC,EAAKpC,GACnCoC,EAAIT,UAAU3B,EAAQmE,qBAAsBzC,EAAcoD,EAAiB9E,IE1CvE+E,CAAgB3C,EAAKkC"} \ No newline at end of file +{"version":3,"file":"VueFinalModal.umd.js","sources":["../lib/utils/focusTrap.js","../lib/utils/bodyScrollLock.js","../lib/VueFinalModal.vue","../lib/PluginCore.js","../lib/utils/errors.js","../lib/Plugin.js"],"sourcesContent":["// stolen from vue-js-modal\n\nconst FOCUSABLE_ELEMENTS_QUERY =\n 'button:not([disabled]), ' +\n 'select:not([disabled]), ' +\n 'a[href]:not([disabled]), ' +\n 'area[href]:not([disabled]), ' +\n '[contentEditable=\"\"]:not([disabled]), ' +\n '[contentEditable=\"true\"]:not([disabled]), ' +\n '[contentEditable=\"TRUE\"]:not([disabled]), ' +\n 'textarea:not([disabled]), ' +\n 'iframe:not([disabled]), ' +\n 'input:not([disabled]), ' +\n 'summary:not([disabled]), ' +\n '[tabindex]:not([tabindex=\"-1\"])'\n\nconst isTabPressed = event => {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["isFocused","element","document","activeElement","FocusTrap","constructor","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","enabled","selector","querySelectorAll","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","isIosDevice","navigator","platform","test","maxTouchPoints","previousBodyOverflowSetting","previousBodyPaddingRight","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","console","error","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index c01f323e..f9fdef92 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,8 @@ "scripts": { "build": "rollup -c --environment BUILD:production", "dev": "rollup -c -w --environment BUILD:production", + "dev:example": "yarn --cwd example dev", + "dev:docs": "yarn --cwd docs dev", "test": "jest", "lint": "eslint -c .eslintrc.js --fix --ext .js,.vue docs example lib tests", "coveralls": "jest && cat ./coverage/lcov.info | coveralls" @@ -29,6 +31,7 @@ "@rollup/plugin-babel": "^5.2.2", "@vue/eslint-config-prettier": "^6.0.0", "@vue/test-utils": "^1.1.2", + "autoprefixer": "^9.8.6", "babel-core": "^7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-jest": "^24.9.0", diff --git a/yarn.lock b/yarn.lock index b3fce72f..f33a09ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1533,6 +1533,19 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^9.8.6: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1809,7 +1822,7 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.14.5, browserslist@^4.16.3: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.3: version "4.16.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== @@ -1875,6 +1888,11 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +caniuse-lite@^1.0.30001109: + version "1.0.30001208" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz#a999014a35cebd4f98c405930a057a0d75352eb9" + integrity sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA== + caniuse-lite@^1.0.30001181: version "1.0.30001185" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" @@ -4656,6 +4674,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -4670,6 +4693,11 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + nwsapi@^2.0.7: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -4984,6 +5012,11 @@ postcss-selector-parser@^6.0.2: uniq "^1.0.1" util-deprecate "^1.0.2" +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + postcss@^5.2.5: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -5003,7 +5036,7 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.14: +postcss@^7.0.14, postcss@^7.0.32: version "7.0.35" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== From a51ef885c602c5bdeece91725ee2d5a3ffe8678f Mon Sep 17 00:00:00 2001 From: Hunter Date: Fri, 9 Apr 2021 18:18:44 +0800 Subject: [PATCH 7/7] fix: .babelrc for build and test --- .babelrc | 4 +--- .browserslistrc | 3 --- dist/VueFinalModal.esm.js | 2 +- dist/VueFinalModal.esm.js.map | 2 +- dist/VueFinalModal.umd.js | 2 +- dist/VueFinalModal.umd.js.map | 2 +- 6 files changed, 5 insertions(+), 10 deletions(-) delete mode 100644 .browserslistrc diff --git a/.babelrc b/.babelrc index 394c5435..b9485da3 100644 --- a/.babelrc +++ b/.babelrc @@ -3,9 +3,7 @@ [ "@babel/preset-env", { - "targets": { - "node": "current" - } + "exclude": ["@babel/plugin-transform-regenerator"] } ] ] diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 214388fe..00000000 --- a/.browserslistrc +++ /dev/null @@ -1,3 +0,0 @@ -> 1% -last 2 versions -not dead diff --git a/dist/VueFinalModal.esm.js b/dist/VueFinalModal.esm.js index efbdc37f..73b5b39e 100644 --- a/dist/VueFinalModal.esm.js +++ b/dist/VueFinalModal.esm.js @@ -1,2 +1,2 @@ -const e=e=>e==document.activeElement;class t{constructor(){this.root=null,this.elements=[],this.onKeyDown=this.onKeyDown.bind(this),this.enable=this.enable.bind(this),this.disable=this.disable.bind(this),this.firstElement=this.firstElement.bind(this),this.lastElement=this.lastElement.bind(this)}lastElement(){return this.elements[this.elements.length-1]||null}firstElement(){return this.elements[0]||null}onKeyDown(t){if((e=>"Tab"===e.key||9===e.keyCode)(t)){if(!t.shiftKey)return!document.activeElement||e(this.lastElement())?(this.firstElement().focus(),void t.preventDefault()):void 0;e(this.firstElement())&&(this.lastElement().focus(),t.preventDefault())}}enabled(){return!!this.root}enable(e){e&&(this.root=e,this.elements=((e,t)=>[...e.querySelectorAll(t)||[]])(this.root,'button:not([disabled]), select:not([disabled]), a[href]:not([disabled]), area[href]:not([disabled]), [contentEditable=""]:not([disabled]), [contentEditable="true"]:not([disabled]), [contentEditable="TRUE"]:not([disabled]), textarea:not([disabled]), iframe:not([disabled]), input:not([disabled]), summary:not([disabled]), [tabindex]:not([tabindex="-1"])'),this.root.addEventListener("keydown",this.onKeyDown))}disable(){this.root.removeEventListener("keydown",this.onKeyDown),this.root=null}}let n=!1;if("undefined"!=typeof window){const e={get passive(){n=!0}};window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}const o="undefined"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||"MacIntel"===window.navigator.platform&&window.navigator.maxTouchPoints>1);let i,s,a=[],l=!1,r=0,d=-1;const c=(e,t)=>{let n=!1;return(e=>{const t=[];for(;e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t})(e).forEach((e=>{(e=>{if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&((e,t)=>!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0))(e,t)&&(n=!0)})),n},h=e=>a.some((()=>c(e,-r))),v=e=>{const t=e||window.event;return!!h(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},u=(e,t)=>{if(!e)return void console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");if(a.some((t=>t.targetElement===e)))return;const c={targetElement:e,options:t||{}};a=[...a,c],o?(e.ontouchstart=e=>{1===e.targetTouches.length&&(d=e.targetTouches[0].clientY)},e.ontouchmove=t=>{1===t.targetTouches.length&&((e,t)=>{r=e.targetTouches[0].clientY-d,!h(e.target)&&(t&&0===t.scrollTop&&r>0||(e=>!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight)(t)&&r<0?v(e):e.stopPropagation())})(t,e)},l||(document.addEventListener("touchmove",v,n?{passive:!1}:void 0),l=!0)):(e=>{if(void 0===s){const t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){const e=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);s=document.body.style.paddingRight,document.body.style.paddingRight=`${e+n}px`}}void 0===i&&(i=document.body.style.overflow,document.body.style.overflow="hidden")})(t)},f=e=>{e?(a=a.filter((t=>t.targetElement!==e)),o?(e.ontouchstart=null,e.ontouchmove=null,l&&0===a.length&&(document.removeEventListener("touchmove",v,n?{passive:!1}:void 0),l=!1)):a.length||(void 0!==s&&(document.body.style.paddingRight=s,s=void 0),void 0!==i&&(document.body.style.overflow=i,i=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},m="enter",p="entering",y="leave",b="leavng";const g={type:[String,Object,Array],default:""};var E={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:g,overlayClass:g,contentClass:g,styles:g,overlayStyle:g,contentStyle:g,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(e){const t=typeof e;return"boolean"===t||"string"===t||e.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:()=>({modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}),computed:{api(){return this[this.$_options.key]},isComponentReadyToBeDestroyed(){return(this.hideOverlay||this.overlayTransitionState===y)&&this.modalTransitionState===y},calculateZIndex(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle(){return{...!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex}}},computedTransition(){return"string"==typeof this.transition?{name:this.transition}:{...this.transition}},computedOverlayTransition(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:{...this.overlayTransition}}},watch:{value(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed(e){e&&(this.visible=!1)}},created(){this.api.modals.push(this)},mounted(){this.$focusTrap=new t,this.mounted()},beforeDestroy(){var e;this.close(),this.lockScroll&&this.$refs.vfmContainer&&f(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();let t=this.api.modals.findIndex((e=>e===this));this.api.modals.splice(t,1)},methods:{mounted(){if(this.value){if(this.emitEvent("before-open",!1))return;let e=this.getAttachElement();if(e||!1===this.attach){!1!==this.attach&&e.appendChild(this.$el);let t=this.api.openedModals.findIndex((e=>e===this));-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((e=>e!==this)).forEach(((t,n)=>{t.getAttachElement()===e&&(t.modalStackIndex=n,t.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((()=>{this.startTransitionEnter()}))}else!1!==e&&console.warn("Unable to locate target ".concat(this.attach))}},close(){let e=this.api.openedModals.findIndex((e=>e===this));if(-1!==e&&this.api.openedModals.splice(e,1),this.api.openedModals.length>0){const e=this.api.openedModals[this.api.openedModals.length-1];(e.focusRetain||e.focusTrap)&&e.$refs.vfmContainer.focus(),!e.hideOverlay&&(e.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll(){this.value&&this.$nextTick((()=>{this.lockScroll?u(this.$refs.vfmContainer,{reserveScrollBarGap:!0}):f(this.$refs.vfmContainer)}))},getAttachElement(){let e;return e=!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach),e},beforeOverlayEnter(){this.overlayTransitionState=p},afterOverlayEnter(){this.overlayTransitionState=m},beforeOverlayLeave(){this.overlayTransitionState=b},afterOverlayLeave(){this.overlayTransitionState=y},beforeModalEnter(){this.modalTransitionState=p},afterModalEnter(){this.modalTransitionState=m,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave(){this.modalTransitionState=b,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave(){this.modalTransitionState=y,this.modalStackIndex=null,this.lockScroll&&f(this.$refs.vfmContainer);let e=!1;const t=this.createModalEvent({type:"closed",stop(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent(e={}){return{ref:this,...e}},emitEvent(e,t){let n=!1;const o=this.createModalEvent({type:e,stop(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle(e,t){const n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var T,S=function(e,t,n,o,i,s,a,l,r,d){"boolean"!=typeof a&&(r=l,l=a,a=!1);var c,h="function"==typeof n?n.options:n;if(e&&e.render&&(h.render=e.render,h.staticRenderFns=e.staticRenderFns,h._compiled=!0,i&&(h.functional=!0)),o&&(h._scopeId=o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,r(e)),e&&e._registeredComponents&&e._registeredComponents.add(s)},h._ssrRegister=c):t&&(c=a?function(e){t.call(this,d(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,l(e))}),c)if(h.functional){var v=h.render;h.render=function(e,t){return c.call(t),v(e,t)}}else{var u=h.beforeCreate;h.beforeCreate=u?[].concat(u,c):[c]}return n},w="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var C={};const k=S({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),E,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=w?t.media||"default":e,o=C[n]||(C[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===T&&(T=document.head||document.getElementsByTagName("head")[0]),T.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var s=o.ids.size-1,a=document.createTextNode(i),l=o.element.childNodes;l[s]&&o.element.removeChild(l[s]),l.length?o.element.insertBefore(a,l[s]):o.element.appendChild(a)}}}(e,t)}}),void 0,void 0);const _=S({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api(){return this[this.$_options.key]}},methods:{slice(e){this.api.dynamicModals.splice(e,1)},beforeOpen(e,t){e.ref.params=t.params},isString:e=>"string"==typeof e}},undefined,false,undefined,!1,void 0,void 0,void 0);function x(e,t){const n={...e};return Object.assign(n.props,{$_options:{type:Object,default:()=>t}}),n}function M(e,t){const n=function(e,t){let n;return function(){return n={show(e,...n){switch(typeof e){case"string":this.toggle(e,!0,...n);break;case"object":{const o={value:!0,id:Symbol("dynamicModal"),component:t.componentName,bind:{},slots:{},on:{},params:n[0]};this.dynamicModals.push(Object.assign(o,e))}}},hide(...e){this.toggle(e,!1)},hideAll(){for(let e=this.openedModals.length-1;e>=0;e--)this.openedModals[e].$emit("input",!1)},toggle(e,...t){(Array.isArray(e)?this.get(...e):this.get(e)).forEach((e=>e.toggle(...t)))},get(...e){return this.modals.filter((t=>e.includes(t.name)))},dynamicModals:[],openedModals:[],modals:[]},e.observable(n)}}(e,t)();Object.defineProperty(e.prototype,t.key,{get:()=>n})}const $={componentName:"VueFinalModal",dynamicContainerName:"ModalsContainer",key:"$vfm"};export default e=>({install(t,n){const o=Object.assign({},$,e,n);((e,t,n)=>!(e||t||n)||("undefined"==typeof window||(e&&console.error("[vue-final-modal] Duplicate registration API key of VueFinalModal."),t&&console.error("[vue-final-modal] Duplicate registration componentName of VueFinalModal."),n&&console.error("[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.")),!1))(t.prototype[o.key],t.options.components[o.componentName],t.options.components[o.dynamicContainerName])&&(M(t,o),function(e,t){e.component(t.componentName,x(k,t))}(t,o),function(e,t){e.component(t.dynamicContainerName,x(_,t))}(t,o))}}); +function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n1),p=[],m=!1,y=0,b=-1,g=function(e,t){var n=!1;return function(e){for(var t=[];e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t}(e).forEach((function(e){(function(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&function(e,t){return!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0)}(e,t)&&(n=!0)})),n},E=function(e){return p.some((function(){return g(e,-y)}))},w=function(e){var t=e||window.event;return!!E(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},S=function(e,t){if(e){if(!p.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};p=[].concat(a(p),[n]),h?(e.ontouchstart=function(e){1===e.targetTouches.length&&(b=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){y=e.targetTouches[0].clientY-b,!E(e.target)&&(t&&0===t.scrollTop&&y>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&y<0?w(e):e.stopPropagation())}(t,e)},m||(document.addEventListener("touchmove",w,u?{passive:!1}:void 0),m=!0)):function(e){if(void 0===v){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var o=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);v=document.body.style.paddingRight,document.body.style.paddingRight="".concat(o+n,"px")}}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow="hidden")}(t)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")},T=function(e){e?(p=p.filter((function(t){return t.targetElement!==e})),h?(e.ontouchstart=null,e.ontouchmove=null,m&&0===p.length&&(document.removeEventListener("touchmove",w,u?{passive:!1}:void 0),m=!1)):p.length||(void 0!==v&&(document.body.style.paddingRight=v,v=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},C="enter",O="entering",k="leave",_="leavng";var x={type:[String,Object,Array],default:""},M={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:x,overlayClass:x,contentClass:x,styles:x,overlayStyle:x,contentStyle:x,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var n=e(t);return"boolean"===n||"string"===n||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===k)&&this.modalTransitionState===k},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return i({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:i({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:i({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new c,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&T(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();var n=this.api.modals.findIndex((function(e){return e===t}));this.api.modals.splice(n,1)},methods:{mounted:function(){var e=this;if(this.value){if(this.emitEvent("before-open",!1))return;var t=this.getAttachElement();if(t||!1===this.attach){!1!==this.attach&&t.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(t){return t===e}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(t){return t!==e})).forEach((function(e,n){e.getAttachElement()===t&&(e.modalStackIndex=n,e.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){e.startTransitionEnter()}))}else!1!==t&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var e=this,t=this.api.openedModals.findIndex((function(t){return t===e}));if(-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var e=this;this.value&&this.$nextTick((function(){e.lockScroll?S(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):T(e.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=O},afterOverlayEnter:function(){this.overlayTransitionState=C},beforeOverlayLeave:function(){this.overlayTransitionState=_},afterOverlayLeave:function(){this.overlayTransitionState=k},beforeModalEnter:function(){this.modalTransitionState=O},afterModalEnter:function(){this.modalTransitionState=C,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave:function(){this.modalTransitionState=_,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=k,this.modalStackIndex=null,this.lockScroll&&T(this.$refs.vfmContainer);var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer:function(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i({ref:this},e)},emitEvent:function(e,t){var n=!1,o=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle:function(e,t){var n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var $,I=function(e,t,n,o,i,a,r,s,l,c){"boolean"!=typeof r&&(l=s,s=r,r=!1);var u,d="function"==typeof n?n.options:n;if(e&&e.render&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0,i&&(d.functional=!0)),o&&(d._scopeId=o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},d._ssrRegister=u):t&&(u=r?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),u)if(d.functional){var f=d.render;d.render=function(e,t){return u.call(t),f(e,t)}}else{var v=d.beforeCreate;d.beforeCreate=v?[].concat(v,u):[u]}return n},j="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var L={};var N=I({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),M,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=j?t.media||"default":e,o=L[n]||(L[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===$&&($=document.head||document.getElementsByTagName("head")[0]),$.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var a=o.ids.size-1,r=document.createTextNode(i),s=o.element.childNodes;s[a]&&o.element.removeChild(s[a]),s.length?o.element.insertBefore(r,s[a]):o.element.appendChild(r)}}}(e,t)}}),void 0,void 0),A=I({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api:function(){return this[this.$_options.key]}},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t){e.ref.params=t.params},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function B(e,t){var n=i({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function D(t,n){var o=function(t,n){var o;return function(){return o={show:function(t){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=0;e--)this.openedModals[e].$emit("input",!1)},toggle:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["isFocused","element","document","activeElement","FocusTrap","constructor","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","enabled","selector","querySelectorAll","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","isIosDevice","navigator","platform","test","maxTouchPoints","previousBodyOverflowSetting","previousBodyPaddingRight","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","console","error","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"VueFinalModal.esm.js","sources":["../lib/utils/focusTrap.js","../lib/utils/bodyScrollLock.js","../lib/VueFinalModal.vue","../lib/PluginCore.js","../lib/utils/errors.js","../lib/Plugin.js"],"sourcesContent":["// stolen from vue-js-modal\n\nconst FOCUSABLE_ELEMENTS_QUERY =\n 'button:not([disabled]), ' +\n 'select:not([disabled]), ' +\n 'a[href]:not([disabled]), ' +\n 'area[href]:not([disabled]), ' +\n '[contentEditable=\"\"]:not([disabled]), ' +\n '[contentEditable=\"true\"]:not([disabled]), ' +\n '[contentEditable=\"TRUE\"]:not([disabled]), ' +\n 'textarea:not([disabled]), ' +\n 'iframe:not([disabled]), ' +\n 'input:not([disabled]), ' +\n 'summary:not([disabled]), ' +\n '[tabindex]:not([tabindex=\"-1\"])'\n\nconst isTabPressed = event => {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file diff --git a/dist/VueFinalModal.umd.js b/dist/VueFinalModal.umd.js index 11e64b78..7d7cdf67 100644 --- a/dist/VueFinalModal.umd.js +++ b/dist/VueFinalModal.umd.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).VueFinalModal=t()}(this,(function(){"use strict";const e=e=>e==document.activeElement;class t{constructor(){this.root=null,this.elements=[],this.onKeyDown=this.onKeyDown.bind(this),this.enable=this.enable.bind(this),this.disable=this.disable.bind(this),this.firstElement=this.firstElement.bind(this),this.lastElement=this.lastElement.bind(this)}lastElement(){return this.elements[this.elements.length-1]||null}firstElement(){return this.elements[0]||null}onKeyDown(t){if((e=>"Tab"===e.key||9===e.keyCode)(t)){if(!t.shiftKey)return!document.activeElement||e(this.lastElement())?(this.firstElement().focus(),void t.preventDefault()):void 0;e(this.firstElement())&&(this.lastElement().focus(),t.preventDefault())}}enabled(){return!!this.root}enable(e){e&&(this.root=e,this.elements=((e,t)=>[...e.querySelectorAll(t)||[]])(this.root,'button:not([disabled]), select:not([disabled]), a[href]:not([disabled]), area[href]:not([disabled]), [contentEditable=""]:not([disabled]), [contentEditable="true"]:not([disabled]), [contentEditable="TRUE"]:not([disabled]), textarea:not([disabled]), iframe:not([disabled]), input:not([disabled]), summary:not([disabled]), [tabindex]:not([tabindex="-1"])'),this.root.addEventListener("keydown",this.onKeyDown))}disable(){this.root.removeEventListener("keydown",this.onKeyDown),this.root=null}}let n=!1;if("undefined"!=typeof window){const e={get passive(){n=!0}};window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}const o="undefined"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||"MacIntel"===window.navigator.platform&&window.navigator.maxTouchPoints>1);let i,s,a=[],l=!1,r=0,d=-1;const c=(e,t)=>{let n=!1;return(e=>{const t=[];for(;e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t})(e).forEach((e=>{(e=>{if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;const t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&((e,t)=>!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0))(e,t)&&(n=!0)})),n},u=e=>a.some((()=>c(e,-r))),h=e=>{const t=e||window.event;return!!u(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},f=(e,t)=>{if(!e)return void console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");if(a.some((t=>t.targetElement===e)))return;const c={targetElement:e,options:t||{}};a=[...a,c],o?(e.ontouchstart=e=>{1===e.targetTouches.length&&(d=e.targetTouches[0].clientY)},e.ontouchmove=t=>{1===t.targetTouches.length&&((e,t)=>{r=e.targetTouches[0].clientY-d,!u(e.target)&&(t&&0===t.scrollTop&&r>0||(e=>!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight)(t)&&r<0?h(e):e.stopPropagation())})(t,e)},l||(document.addEventListener("touchmove",h,n?{passive:!1}:void 0),l=!0)):(e=>{if(void 0===s){const t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){const e=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);s=document.body.style.paddingRight,document.body.style.paddingRight=`${e+n}px`}}void 0===i&&(i=document.body.style.overflow,document.body.style.overflow="hidden")})(t)},v=e=>{e?(a=a.filter((t=>t.targetElement!==e)),o?(e.ontouchstart=null,e.ontouchmove=null,l&&0===a.length&&(document.removeEventListener("touchmove",h,n?{passive:!1}:void 0),l=!1)):a.length||(void 0!==s&&(document.body.style.paddingRight=s,s=void 0),void 0!==i&&(document.body.style.overflow=i,i=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},m="enter",p="entering",y="leave",b="leavng";const g={type:[String,Object,Array],default:""};var E={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:g,overlayClass:g,contentClass:g,styles:g,overlayStyle:g,contentStyle:g,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(e){const t=typeof e;return"boolean"===t||"string"===t||e.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:()=>({modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}),computed:{api(){return this[this.$_options.key]},isComponentReadyToBeDestroyed(){return(this.hideOverlay||this.overlayTransitionState===y)&&this.modalTransitionState===y},calculateZIndex(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle(){return{...!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex}}},computedTransition(){return"string"==typeof this.transition?{name:this.transition}:{...this.transition}},computedOverlayTransition(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:{...this.overlayTransition}}},watch:{value(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed(e){e&&(this.visible=!1)}},created(){this.api.modals.push(this)},mounted(){this.$focusTrap=new t,this.mounted()},beforeDestroy(){var e;this.close(),this.lockScroll&&this.$refs.vfmContainer&&v(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();let t=this.api.modals.findIndex((e=>e===this));this.api.modals.splice(t,1)},methods:{mounted(){if(this.value){if(this.emitEvent("before-open",!1))return;let e=this.getAttachElement();if(e||!1===this.attach){!1!==this.attach&&e.appendChild(this.$el);let t=this.api.openedModals.findIndex((e=>e===this));-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((e=>e!==this)).forEach(((t,n)=>{t.getAttachElement()===e&&(t.modalStackIndex=n,t.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((()=>{this.startTransitionEnter()}))}else!1!==e&&console.warn("Unable to locate target ".concat(this.attach))}},close(){let e=this.api.openedModals.findIndex((e=>e===this));if(-1!==e&&this.api.openedModals.splice(e,1),this.api.openedModals.length>0){const e=this.api.openedModals[this.api.openedModals.length-1];(e.focusRetain||e.focusTrap)&&e.$refs.vfmContainer.focus(),!e.hideOverlay&&(e.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll(){this.value&&this.$nextTick((()=>{this.lockScroll?f(this.$refs.vfmContainer,{reserveScrollBarGap:!0}):v(this.$refs.vfmContainer)}))},getAttachElement(){let e;return e=!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach),e},beforeOverlayEnter(){this.overlayTransitionState=p},afterOverlayEnter(){this.overlayTransitionState=m},beforeOverlayLeave(){this.overlayTransitionState=b},afterOverlayLeave(){this.overlayTransitionState=y},beforeModalEnter(){this.modalTransitionState=p},afterModalEnter(){this.modalTransitionState=m,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave(){this.modalTransitionState=b,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave(){this.modalTransitionState=y,this.modalStackIndex=null,this.lockScroll&&v(this.$refs.vfmContainer);let e=!1;const t=this.createModalEvent({type:"closed",stop(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent(e={}){return{ref:this,...e}},emitEvent(e,t){let n=!1;const o=this.createModalEvent({type:e,stop(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle(e,t){const n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var T,S=function(e,t,n,o,i,s,a,l,r,d){"boolean"!=typeof a&&(r=l,l=a,a=!1);var c,u="function"==typeof n?n.options:n;if(e&&e.render&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns,u._compiled=!0,i&&(u.functional=!0)),o&&(u._scopeId=o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,r(e)),e&&e._registeredComponents&&e._registeredComponents.add(s)},u._ssrRegister=c):t&&(c=a?function(e){t.call(this,d(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,l(e))}),c)if(u.functional){var h=u.render;u.render=function(e,t){return c.call(t),h(e,t)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,c):[c]}return n},w="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var C={};const k=S({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),E,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=w?t.media||"default":e,o=C[n]||(C[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===T&&(T=document.head||document.getElementsByTagName("head")[0]),T.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var s=o.ids.size-1,a=document.createTextNode(i),l=o.element.childNodes;l[s]&&o.element.removeChild(l[s]),l.length?o.element.insertBefore(a,l[s]):o.element.appendChild(a)}}}(e,t)}}),void 0,void 0);const _=S({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api(){return this[this.$_options.key]}},methods:{slice(e){this.api.dynamicModals.splice(e,1)},beforeOpen(e,t){e.ref.params=t.params},isString:e=>"string"==typeof e}},undefined,false,undefined,!1,void 0,void 0,void 0);function x(e,t){const n={...e};return Object.assign(n.props,{$_options:{type:Object,default:()=>t}}),n}function M(e,t){const n=function(e,t){let n;return function(){return n={show(e,...n){switch(typeof e){case"string":this.toggle(e,!0,...n);break;case"object":{const o={value:!0,id:Symbol("dynamicModal"),component:t.componentName,bind:{},slots:{},on:{},params:n[0]};this.dynamicModals.push(Object.assign(o,e))}}},hide(...e){this.toggle(e,!1)},hideAll(){for(let e=this.openedModals.length-1;e>=0;e--)this.openedModals[e].$emit("input",!1)},toggle(e,...t){(Array.isArray(e)?this.get(...e):this.get(e)).forEach((e=>e.toggle(...t)))},get(...e){return this.modals.filter((t=>e.includes(t.name)))},dynamicModals:[],openedModals:[],modals:[]},e.observable(n)}}(e,t)();Object.defineProperty(e.prototype,t.key,{get:()=>n})}const $={componentName:"VueFinalModal",dynamicContainerName:"ModalsContainer",key:"$vfm"};return e=>({install(t,n){const o=Object.assign({},$,e,n);((e,t,n)=>!(e||t||n)||("undefined"==typeof window||(e&&console.error("[vue-final-modal] Duplicate registration API key of VueFinalModal."),t&&console.error("[vue-final-modal] Duplicate registration componentName of VueFinalModal."),n&&console.error("[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.")),!1))(t.prototype[o.key],t.options.components[o.componentName],t.options.components[o.dynamicContainerName])&&(M(t,o),function(e,t){e.component(t.componentName,x(k,t))}(t,o),function(e,t){e.component(t.dynamicContainerName,x(_,t))}(t,o))}})})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).VueFinalModal=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n1),p=[],m=!1,y=0,b=-1,g=function(e,t){var n=!1;return function(e){for(var t=[];e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t}(e).forEach((function(e){(function(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&function(e,t){return!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0)}(e,t)&&(n=!0)})),n},E=function(e){return p.some((function(){return g(e,-y)}))},w=function(e){var t=e||window.event;return!!E(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},S=function(e,t){if(e){if(!p.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};p=[].concat(a(p),[n]),h?(e.ontouchstart=function(e){1===e.targetTouches.length&&(b=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){y=e.targetTouches[0].clientY-b,!E(e.target)&&(t&&0===t.scrollTop&&y>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&y<0?w(e):e.stopPropagation())}(t,e)},m||(document.addEventListener("touchmove",w,u?{passive:!1}:void 0),m=!0)):function(e){if(void 0===v){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var o=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);v=document.body.style.paddingRight,document.body.style.paddingRight="".concat(o+n,"px")}}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow="hidden")}(t)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")},T=function(e){e?(p=p.filter((function(t){return t.targetElement!==e})),h?(e.ontouchstart=null,e.ontouchmove=null,m&&0===p.length&&(document.removeEventListener("touchmove",w,u?{passive:!1}:void 0),m=!1)):p.length||(void 0!==v&&(document.body.style.paddingRight=v,v=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},C="enter",O="entering",k="leave",_="leavng";var x={type:[String,Object,Array],default:""},M={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:x,overlayClass:x,contentClass:x,styles:x,overlayStyle:x,contentStyle:x,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var n=e(t);return"boolean"===n||"string"===n||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===k)&&this.modalTransitionState===k},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return i({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:i({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:i({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new c,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&T(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();var n=this.api.modals.findIndex((function(e){return e===t}));this.api.modals.splice(n,1)},methods:{mounted:function(){var e=this;if(this.value){if(this.emitEvent("before-open",!1))return;var t=this.getAttachElement();if(t||!1===this.attach){!1!==this.attach&&t.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(t){return t===e}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(t){return t!==e})).forEach((function(e,n){e.getAttachElement()===t&&(e.modalStackIndex=n,e.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){e.startTransitionEnter()}))}else!1!==t&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var e=this,t=this.api.openedModals.findIndex((function(t){return t===e}));if(-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var e=this;this.value&&this.$nextTick((function(){e.lockScroll?S(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):T(e.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=O},afterOverlayEnter:function(){this.overlayTransitionState=C},beforeOverlayLeave:function(){this.overlayTransitionState=_},afterOverlayLeave:function(){this.overlayTransitionState=k},beforeModalEnter:function(){this.modalTransitionState=O},afterModalEnter:function(){this.modalTransitionState=C,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave:function(){this.modalTransitionState=_,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=k,this.modalStackIndex=null,this.lockScroll&&T(this.$refs.vfmContainer);var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer:function(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i({ref:this},e)},emitEvent:function(e,t){var n=!1,o=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle:function(e,t){var n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var $,j=function(e,t,n,o,i,a,r,s,l,c){"boolean"!=typeof r&&(l=s,s=r,r=!1);var u,d="function"==typeof n?n.options:n;if(e&&e.render&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0,i&&(d.functional=!0)),o&&(d._scopeId=o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},d._ssrRegister=u):t&&(u=r?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),u)if(d.functional){var f=d.render;d.render=function(e,t){return u.call(t),f(e,t)}}else{var v=d.beforeCreate;d.beforeCreate=v?[].concat(v,u):[u]}return n},I="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var L={};var N=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),M,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=I?t.media||"default":e,o=L[n]||(L[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===$&&($=document.head||document.getElementsByTagName("head")[0]),$.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var a=o.ids.size-1,r=document.createTextNode(i),s=o.element.childNodes;s[a]&&o.element.removeChild(s[a]),s.length?o.element.insertBefore(r,s[a]):o.element.appendChild(r)}}}(e,t)}}),void 0,void 0),A=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api:function(){return this[this.$_options.key]}},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t){e.ref.params=t.params},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function B(e,t){var n=i({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function D(t,n){var o=function(t,n){var o;return function(){return o={show:function(t){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=0;e--)this.openedModals[e].$emit("input",!1)},toggle:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["isFocused","element","document","activeElement","FocusTrap","constructor","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","enabled","selector","querySelectorAll","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","isIosDevice","navigator","platform","test","maxTouchPoints","previousBodyOverflowSetting","previousBodyPaddingRight","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","console","error","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"VueFinalModal.umd.js","sources":["../lib/utils/focusTrap.js","../lib/utils/bodyScrollLock.js","../lib/VueFinalModal.vue","../lib/PluginCore.js","../lib/utils/errors.js","../lib/Plugin.js"],"sourcesContent":["// stolen from vue-js-modal\n\nconst FOCUSABLE_ELEMENTS_QUERY =\n 'button:not([disabled]), ' +\n 'select:not([disabled]), ' +\n 'a[href]:not([disabled]), ' +\n 'area[href]:not([disabled]), ' +\n '[contentEditable=\"\"]:not([disabled]), ' +\n '[contentEditable=\"true\"]:not([disabled]), ' +\n '[contentEditable=\"TRUE\"]:not([disabled]), ' +\n 'textarea:not([disabled]), ' +\n 'iframe:not([disabled]), ' +\n 'input:not([disabled]), ' +\n 'summary:not([disabled]), ' +\n '[tabindex]:not([tabindex=\"-1\"])'\n\nconst isTabPressed = event => {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file