{"version":3,"sources":["webpack:///./node_modules/body-scroll-lock/lib/bodyScrollLock.es6.js","webpack:///./src/feature/header/header.js","webpack:///./node_modules/core-js/modules/es.object.get-prototype-of.js"],"names":["hasPassiveEvents","window","passiveTestOptions","addEventListener","removeEventListener","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","allowTouchMove","el","some","lock","options","preventDefault","rawEvent","e","event","target","touches","length","restoreOverflowSetting","setTimeout","undefined","document","body","style","paddingRight","overflow","disableBodyScroll","targetElement","console","error","ontouchstart","targetTouches","clientY","ontouchmove","scrollTop","scrollHeight","clientHeight","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","setOverflowHidden","Header","element","log","classes","navIsOpen","initDomCache","init","this","dom","navController","setNavIsOpen","checked","isNavOpen","classList","toggle","navPanel","forEach","BaseFeature","$","fails","toObject","nativeGetPrototypeOf","CORRECT_PROTOTYPE_GETTER","stat","forced","sham","getPrototypeOf","it"],"mappings":"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","file":"16-3b210246.pkg.js","sourcesContent":["\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\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 = 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\nlet locks = [];\nlet documentListenerAdded = false;\nlet initialClientY = -1;\nlet previousBodyOverflowSetting;\nlet previousBodyPaddingRight;\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(lock => {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n});\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\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 // Setting overflow on body/documentElement synchronously in Desktop Safari slows down\n // the responsiveness for some reason. Setting within a setTimeout fixes this.\n setTimeout(() => {\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 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};\n\nconst restoreOverflowSetting = () => {\n // Setting overflow on body/documentElement synchronously in Desktop Safari slows down\n // the responsiveness for some reason. Setting within a setTimeout fixes this.\n setTimeout(() => {\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\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement => targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n\nconst handleScroll = (event, targetElement) => {\n const 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 if (isIosDevice) {\n // targetElement must be provided, and disableBodyScroll must not have been\n // called on this targetElement before.\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 if (targetElement && !locks.some(lock => lock.targetElement === targetElement)) {\n const lock = {\n targetElement,\n options: options || {}\n };\n\n locks = [...locks, lock];\n\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 }\n } else {\n setOverflowHidden(options);\n const lock = {\n targetElement,\n options: options || {}\n };\n\n locks = [...locks, lock];\n }\n};\n\nexport const clearAllBodyScrollLocks = () => {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(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 locks = [];\n\n // Reset initial clientY.\n initialClientY = -1;\n } else {\n restoreOverflowSetting();\n locks = [];\n }\n};\n\nexport const enableBodyScroll = targetElement => {\n if (isIosDevice) {\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 targetElement.ontouchstart = null;\n targetElement.ontouchmove = null;\n\n locks = locks.filter(lock => lock.targetElement !== targetElement);\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n\n documentListenerAdded = false;\n }\n } else {\n locks = locks.filter(lock => lock.targetElement !== targetElement);\n if (!locks.length) {\n restoreOverflowSetting();\n }\n }\n};\n\n","import { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\r\nimport BaseFeature from '../../foundation/base/base';\r\n\r\nclass Header extends BaseFeature {\r\n\tconstructor(element) {\r\n\t\tsuper(element);\r\n\r\n\t\tthis.el = element;\r\n\t\tthis.log('Header Feature Init');\r\n\r\n\t\tthis.classes = {\r\n\t\t\tnavIsOpen: 'is-open'\r\n\t\t};\r\n\r\n\t\tthis.initDomCache();\r\n\t\tthis.init();\r\n\t}\r\n\r\n\tinit() {\r\n\t\tthis.dom.navController.addEventListener('click', () => {\r\n\t\t\tthis.setNavIsOpen();\r\n\t\t});\r\n\t}\r\n\r\n\tnavIsOpen() {\r\n\t\treturn this.dom.navController.checked;\r\n\t}\r\n\r\n\tsetNavIsOpen() {\r\n\t\tconst isNavOpen = this.navIsOpen();\r\n\r\n\t\t// Toggle the class based on our test\r\n\t\tthis.el.classList.toggle(this.classes.navIsOpen, isNavOpen);\r\n\r\n\t\t// Lock scrolling on body\r\n\t\tif (isNavOpen) {\r\n\t\t\tdisableBodyScroll(this.dom.navPanel, {\r\n\t\t\t\treserveScrollBarGap: true\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tclearAllBodyScrollLocks();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Header;\r\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n"],"sourceRoot":""}