{"version":3,"sources":["webpack:///./node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js","webpack:///./src/js/components/magazine-header.js"],"names":["hasPassiveEvents","window","passiveTestOptions","addEventListener","removeEventListener","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","previousBodyOverflowSetting","previousBodyPaddingRight","allowTouchMove","el","some","lock","options","preventDefault","rawEvent","e","event","target","touches","length","restoreOverflowSetting","undefined","document","body","style","paddingRight","overflow","disableBodyScroll","targetElement","concat","arr","Array","isArray","i","arr2","from","_toConsumableArray","ontouchstart","targetTouches","clientY","ontouchmove","scrollTop","scrollHeight","clientHeight","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","_reserveScrollBarGap","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","setOverflowHidden","console","error","clearAllBodyScrollLocks","forEach","enableBodyScroll","filter","Input","_Component","_classCallCheck","_callSuper","arguments","_inherits","key","value","this","dom","$menu","_$","$openButton","$closeButton","focusTrap","createFocusTrap","_this$dom","_on","handleOpen","bind","handleClose","_this","classList","add","setTimeout","activate","remove","deactivate","Component"],"mappings":"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","file":"43.0fd9aa.js","sourcesContent":["function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n var 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\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n return locks.some(function (lock) {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n var 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\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\nvar setOverflowHidden = function setOverflowHidden(options) {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n if (_reserveScrollBarGap && scrollBarGap > 0) {\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = scrollBarGap + 'px';\n }\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\nvar restoreOverflowSetting = function 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\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n var 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 var disableBodyScroll = function disableBodyScroll(targetElement, options) {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n return;\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(function (lock) {\n return lock.targetElement === targetElement;\n })) {\n return;\n }\n\n var lock = {\n targetElement: targetElement,\n options: options || {}\n };\n\n locks = [].concat(_toConsumableArray(locks), [lock]);\n\n if (isIosDevice) {\n targetElement.ontouchstart = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY;\n }\n };\n targetElement.ontouchmove = function (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 var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(function (lock) {\n lock.targetElement.ontouchstart = null;\n lock.targetElement.ontouchmove = null;\n });\n\n if (documentListenerAdded) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n\n // Reset initial clientY.\n initialClientY = -1;\n } else {\n restoreOverflowSetting();\n }\n\n locks = [];\n};\n\nexport var enableBodyScroll = function enableBodyScroll(targetElement) {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n return;\n }\n\n locks = locks.filter(function (lock) {\n return lock.targetElement !== targetElement;\n });\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","import { Component } from '@verndale/core';\r\nimport { createFocusTrap } from 'focus-trap';\r\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\r\n\r\nconst ANIMATION_TIME = 500;\r\n\r\nclass Input extends Component {\r\n setupDefaults() {\r\n this.dom = {\r\n $menu: this.el._$('.mag-header__menu'),\r\n $openButton: this.el._$('.mag-header__trigger-button--open'),\r\n $closeButton: this.el._$('.mag-header__trigger-button--close')\r\n };\r\n\r\n this.focusTrap = createFocusTrap(this.dom.$menu);\r\n }\r\n\r\n addListeners() {\r\n const { $openButton, $closeButton } = this.dom;\r\n\r\n $openButton._on('click', ::this.handleOpen);\r\n $closeButton._on('click', ::this.handleClose);\r\n }\r\n\r\n handleOpen() {\r\n this.el.classList.add('mag-header--open');\r\n disableBodyScroll(this.el);\r\n setTimeout(() => this.focusTrap.activate(), ANIMATION_TIME);\r\n }\r\n\r\n handleClose() {\r\n this.el.classList.remove('mag-header--open');\r\n clearAllBodyScrollLocks();\r\n this.focusTrap.deactivate();\r\n }\r\n}\r\n\r\nexport default Input;\r\n"],"sourceRoot":""}