{"version":3,"file":"scripts.min.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../../assets/js/base/_focus-within.js","../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../node_modules/headroom.js/dist/headroom.js","../../../assets/js/base/_dropdownEvent.js","../../../assets/js/modules/_header.js","../../../assets/js/modules/_flyout.js","../../../assets/js/base/_object-fit-cover.js","../../../assets/js/scripts.js","../../../assets/js/base/_throttle.js"],"sourcesContent":["export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","class FocusWithin {\n\tconstructor(node, className) {\n\t\tthis.node = node;\n\t\tthis.className = className;\n\t\tthis.focused = false;\n\n\t\t// add events with capturing cause focus/blur don't bubble\n\t\tthis.node.addEventListener('focus', this.focus.bind(this), true);\n\t\tthis.node.addEventListener('blur', this.blur.bind(this), true);\n\t}\n\n\ttoggle() {\n\t\treturn this.focused ? this.blur() : this.focus();\n\t}\n\n\tfocus() {\n\t\tthis.focused = true;\n\t\tthis.node.classList.add(this.className);\n\n\t\tthis.node.dispatchEvent(new CustomEvent('site:focus-within:focus'));\n\t}\n\n\tblur() {\n\t\tthis.focused = false;\n\t\tthis.node.classList.remove(this.className);\n\n\t\tthis.node.dispatchEvent(new CustomEvent('site:focus-within:blur'));\n\t}\n}\n\nexport default function ( node, className = 'focus-within' ) {\n\t// pass dom element directly\n\tif ( node instanceof HTMLElement ) {\n\t\treturn new FocusWithin(node, className);\n\t}\n\n\t// pass selector\n\tif ( typeof node === 'string' ) {\n\t\tnode = document.querySelectorAll(node);\n\t}\n\n\t// convert to Array if not an array\n\tif (!Array.isArray(node)) {\n\t\tnode = Array.from(node);\n\t}\n\n\t// convert to FocusWithin objects\n\treturn node.map((n) => new FocusWithin(n, className));\n}\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","/*!\n * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it\n * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js\n * License: MIT\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Headroom = factory());\n}(this, function () { 'use strict';\n\n function isBrowser() {\n return typeof window !== \"undefined\";\n }\n\n /**\n * Used to detect browser support for adding an event listener with options\n * Credit: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n */\n function passiveEventsSupported() {\n var supported = false;\n\n try {\n var options = {\n // eslint-disable-next-line getter-return\n get passive() {\n supported = true;\n }\n };\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (err) {\n supported = false;\n }\n\n return supported;\n }\n\n function isSupported() {\n return !!(\n isBrowser() &&\n function() {}.bind &&\n \"classList\" in document.documentElement &&\n Object.assign &&\n Object.keys &&\n requestAnimationFrame\n );\n }\n\n function isDocument(obj) {\n return obj.nodeType === 9; // Node.DOCUMENT_NODE === 9\n }\n\n function isWindow(obj) {\n // `obj === window` or `obj instanceof Window` is not sufficient,\n // as the obj may be the window of an iframe.\n return obj && obj.document && isDocument(obj.document);\n }\n\n function windowScroller(win) {\n var doc = win.document;\n var body = doc.body;\n var html = doc.documentElement;\n\n return {\n /**\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\n * @return {Number} the scroll height of the document in pixels\n */\n scrollHeight: function() {\n return Math.max(\n body.scrollHeight,\n html.scrollHeight,\n body.offsetHeight,\n html.offsetHeight,\n body.clientHeight,\n html.clientHeight\n );\n },\n\n /**\n * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\n * @return {Number} the height of the viewport in pixels\n */\n height: function() {\n return win.innerHeight || html.clientHeight || body.clientHeight;\n },\n\n /**\n * Gets the Y scroll position\n * @return {Number} pixels the page has scrolled along the Y-axis\n */\n scrollY: function() {\n if (win.pageYOffset !== undefined) {\n return win.pageYOffset;\n }\n\n return (html || body.parentNode || body).scrollTop;\n }\n };\n }\n\n function elementScroller(element) {\n return {\n /**\n * @return {Number} the scroll height of the element in pixels\n */\n scrollHeight: function() {\n return Math.max(\n element.scrollHeight,\n element.offsetHeight,\n element.clientHeight\n );\n },\n\n /**\n * @return {Number} the height of the element in pixels\n */\n height: function() {\n return Math.max(element.offsetHeight, element.clientHeight);\n },\n\n /**\n * Gets the Y scroll position\n * @return {Number} pixels the element has scrolled along the Y-axis\n */\n scrollY: function() {\n return element.scrollTop;\n }\n };\n }\n\n function createScroller(element) {\n return isWindow(element) ? windowScroller(element) : elementScroller(element);\n }\n\n /**\n * @param element EventTarget\n */\n function trackScroll(element, options, callback) {\n var isPassiveSupported = passiveEventsSupported();\n var rafId;\n var scrolled = false;\n var scroller = createScroller(element);\n var lastScrollY = scroller.scrollY();\n var details = {};\n\n function update() {\n var scrollY = Math.round(scroller.scrollY());\n var height = scroller.height();\n var scrollHeight = scroller.scrollHeight();\n\n // reuse object for less memory churn\n details.scrollY = scrollY;\n details.lastScrollY = lastScrollY;\n details.direction = scrollY > lastScrollY ? \"down\" : \"up\";\n details.distance = Math.abs(scrollY - lastScrollY);\n details.isOutOfBounds = scrollY < 0 || scrollY + height > scrollHeight;\n details.top = scrollY <= options.offset[details.direction];\n details.bottom = scrollY + height >= scrollHeight;\n details.toleranceExceeded =\n details.distance > options.tolerance[details.direction];\n\n callback(details);\n\n lastScrollY = scrollY;\n scrolled = false;\n }\n\n function handleScroll() {\n if (!scrolled) {\n scrolled = true;\n rafId = requestAnimationFrame(update);\n }\n }\n\n var eventOptions = isPassiveSupported\n ? { passive: true, capture: false }\n : false;\n\n element.addEventListener(\"scroll\", handleScroll, eventOptions);\n update();\n\n return {\n destroy: function() {\n cancelAnimationFrame(rafId);\n element.removeEventListener(\"scroll\", handleScroll, eventOptions);\n }\n };\n }\n\n function normalizeUpDown(t) {\n return t === Object(t) ? t : { down: t, up: t };\n }\n\n /**\n * UI enhancement for fixed headers.\n * Hides header when scrolling down\n * Shows header when scrolling up\n * @constructor\n * @param {DOMElement} elem the header element\n * @param {Object} options options for the widget\n */\n function Headroom(elem, options) {\n options = options || {};\n Object.assign(this, Headroom.options, options);\n this.classes = Object.assign({}, Headroom.options.classes, options.classes);\n\n this.elem = elem;\n this.tolerance = normalizeUpDown(this.tolerance);\n this.offset = normalizeUpDown(this.offset);\n this.initialised = false;\n this.frozen = false;\n }\n Headroom.prototype = {\n constructor: Headroom,\n\n /**\n * Start listening to scrolling\n * @public\n */\n init: function() {\n if (Headroom.cutsTheMustard && !this.initialised) {\n this.addClass(\"initial\");\n this.initialised = true;\n\n // defer event registration to handle browser\n // potentially restoring previous scroll position\n setTimeout(\n function(self) {\n self.scrollTracker = trackScroll(\n self.scroller,\n { offset: self.offset, tolerance: self.tolerance },\n self.update.bind(self)\n );\n },\n 100,\n this\n );\n }\n\n return this;\n },\n\n /**\n * Destroy the widget, clearing up after itself\n * @public\n */\n destroy: function() {\n this.initialised = false;\n Object.keys(this.classes).forEach(this.removeClass, this);\n this.scrollTracker.destroy();\n },\n\n /**\n * Unpin the element\n * @public\n */\n unpin: function() {\n if (this.hasClass(\"pinned\") || !this.hasClass(\"unpinned\")) {\n this.addClass(\"unpinned\");\n this.removeClass(\"pinned\");\n\n if (this.onUnpin) {\n this.onUnpin.call(this);\n }\n }\n },\n\n /**\n * Pin the element\n * @public\n */\n pin: function() {\n if (this.hasClass(\"unpinned\")) {\n this.addClass(\"pinned\");\n this.removeClass(\"unpinned\");\n\n if (this.onPin) {\n this.onPin.call(this);\n }\n }\n },\n\n /**\n * Freezes the current state of the widget\n * @public\n */\n freeze: function() {\n this.frozen = true;\n this.addClass(\"frozen\");\n },\n\n /**\n * Re-enables the default behaviour of the widget\n * @public\n */\n unfreeze: function() {\n this.frozen = false;\n this.removeClass(\"frozen\");\n },\n\n top: function() {\n if (!this.hasClass(\"top\")) {\n this.addClass(\"top\");\n this.removeClass(\"notTop\");\n\n if (this.onTop) {\n this.onTop.call(this);\n }\n }\n },\n\n notTop: function() {\n if (!this.hasClass(\"notTop\")) {\n this.addClass(\"notTop\");\n this.removeClass(\"top\");\n\n if (this.onNotTop) {\n this.onNotTop.call(this);\n }\n }\n },\n\n bottom: function() {\n if (!this.hasClass(\"bottom\")) {\n this.addClass(\"bottom\");\n this.removeClass(\"notBottom\");\n\n if (this.onBottom) {\n this.onBottom.call(this);\n }\n }\n },\n\n notBottom: function() {\n if (!this.hasClass(\"notBottom\")) {\n this.addClass(\"notBottom\");\n this.removeClass(\"bottom\");\n\n if (this.onNotBottom) {\n this.onNotBottom.call(this);\n }\n }\n },\n\n shouldUnpin: function(details) {\n var scrollingDown = details.direction === \"down\";\n\n return scrollingDown && !details.top && details.toleranceExceeded;\n },\n\n shouldPin: function(details) {\n var scrollingUp = details.direction === \"up\";\n\n return (scrollingUp && details.toleranceExceeded) || details.top;\n },\n\n addClass: function(className) {\n this.elem.classList.add.apply(\n this.elem.classList,\n this.classes[className].split(\" \")\n );\n },\n\n removeClass: function(className) {\n this.elem.classList.remove.apply(\n this.elem.classList,\n this.classes[className].split(\" \")\n );\n },\n\n hasClass: function(className) {\n return this.classes[className].split(\" \").every(function(cls) {\n return this.classList.contains(cls);\n }, this.elem);\n },\n\n update: function(details) {\n if (details.isOutOfBounds) {\n // Ignore bouncy scrolling in OSX\n return;\n }\n\n if (this.frozen === true) {\n return;\n }\n\n if (details.top) {\n this.top();\n } else {\n this.notTop();\n }\n\n if (details.bottom) {\n this.bottom();\n } else {\n this.notBottom();\n }\n\n if (this.shouldUnpin(details)) {\n this.unpin();\n } else if (this.shouldPin(details)) {\n this.pin();\n }\n }\n };\n\n /**\n * Default options\n * @type {Object}\n */\n Headroom.options = {\n tolerance: {\n up: 0,\n down: 0\n },\n offset: 0,\n scroller: isBrowser() ? window : null,\n classes: {\n frozen: \"headroom--frozen\",\n pinned: \"headroom--pinned\",\n unpinned: \"headroom--unpinned\",\n top: \"headroom--top\",\n notTop: \"headroom--not-top\",\n bottom: \"headroom--bottom\",\n notBottom: \"headroom--not-bottom\",\n initial: \"headroom\"\n }\n };\n\n Headroom.cutsTheMustard = isSupported();\n\n return Headroom;\n\n}));\n","/**\n * This class fires events for dropdown menus\n *\n * - supports PointerEvents\n * - supports HoverIntent\n * - prevents following the first link on touch/keyboard click unless already opened\n * - deactivates when blurred for any event\n *\n * Use this by either passing callbacks.activate, callbacks:deactivate, * or by\n * listening for the dropdown:activate or dropdown:deactivate events on the\n * passed node\n *\n * Events Example:\n * ```\n * dropdownEvent(node);\n * node.addEventListener('dropdown:activate', () => {\n * // add dropdown classes\n * });\n * node.addEventListener('dropdown:deactivate', () => {\n * // remove dropdown classes\n * });\n * ```\n\n * Callbacks Example:\n * ```\n * dropdownEvent(node, {\n * activate: function() {\n * // add dropdown classes\n * },\n * deactivate: function() {\n * // remove dropdown classes\n * },\n * });\n * ```\n *\n * jQuery events example\n * ```\n * jQuery('selector').dropdownEvent().on('dropdown:activate', function() {\n * // add dropdown classes\n * }).on('dropdown:deactivate', function() {\n * // remove dropdown classes\n * });\n * ```\n *\n * jQuery callbacks example\n * ```\n * jQuery('selector').dropdownEvent({\n * activate: function() {\n * // add dropdown classes\n * },\n * deactivate: function() {\n * // remove dropdown classes\n * }\n * });\n * ```\n *\n * @class\n */\n\nexport class DropdownEvent {\n\t/**\n\t *\n\t * @param HTMLElement node\n\t * @param {Object} opts\n\t * @param {Integer} [opts.delay=200] - the hover intent delay on mouse events\n\t * @param {Function} opts.activate - the callback function for activate\n\t * @param {Function} opts.deactivate - the callback function for deactivate\n\t * @param {String} [opts.activateEvent=dropdown:activate] - the name of the activate event to listen to\n\t * @param {String} [opts.deactivateEvent=dropdown:deactivate] - the name of the deactivate event to listen to\n\t */\n\tconstructor(node, opts = {}) {\n\t\tthis.node = node;\n\t\tthis.opts = {\n\t\t\tdelay: 200,\n\t\t\tactivate: () => {},\n\t\t\tdeactivate: () => {},\n\t\t\tactivateEvent: 'dropdown:activate',\n\t\t\tdeactivateEvent: 'dropdown:deactivate',\n\t\t};\n\n\t\tfor (let opt in opts) {\n\t\t\tif (opts.hasOwnProperty(opt)) {\n\t\t\t\tthis.opts[opt] = opts[opt];\n\t\t\t}\n\t\t}\n\n\t\tthis.active = false;\n\t\tthis.enterTimeout = null;\n\t\tthis.leaveTimeout = null;\n\n\t\t// prevents the click event from following links (used by touch/keyboard handlers)\n\t\tconst preventClickEvent = function(e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.removeEventListener('click', preventClickEvent);\n\t\t}\n\n\t\t// activate if the event target is a child link\n\t\tconst maybeActivate = (e) => {\n\t\t\tif (this.active) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet target = e.target;\n\t\t\twhile(target.parentNode && target !== this.node) {\n\t\t\t\tif (target.tagName === 'A') {\n\t\t\t\t\ttarget.addEventListener('click', preventClickEvent);\n\t\t\t\t}\n\n\t\t\t\ttarget = target.parentNode;\n\t\t\t}\n\n\t\t\tthis.activate(e);\n\t\t}\n\n\t\t// activate on mouse enter and apply delay\n\t\tconst mouseenter = (e) => {\n\t\t\tif (typeof this.leaveTimeout === 'number') {\n\t\t\t\treturn window.clearTimeout(this.leaveTimeout);\n\t\t\t}\n\n\t\t\tthis.enterTimeout = setTimeout(() => {\n\t\t\t\tthis.activate(e);\n\t\t\t}, this.opts.delay);\n\t\t}\n\n\t\t// deactivate on mouse leave and apply delay\n\t\tconst mouseleave = (e) => {\n\t\t\tif (typeof this.enterTimeout === 'number') {\n\t\t\t\treturn window.clearTimeout(this.enterTimeout);\n\t\t\t}\n\n\t\t\tthis.leaveTimeout = window.setTimeout(() => {\n\t\t\t\tthis.deactivate(e);\n\t\t\t}, this.opts.delay);\n\t\t}\n\n\t\t// handle the touch start event\n\t\tconst touchstart = (e) => {\n\t\t\treturn maybeActivate(e);\n\t\t}\n\n\t\t// handle the keyup event\n\t\tconst keyup = (e) => {\n\t\t\tif ( 'enter' === e.key.toLowerCase() ) {\n\t\t\t\treturn maybeActivate(e);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t// handle the pointer enter and route to touch/mouse event ( treats pen events as mouse )\n\t\tconst pointerenter = (e) => {\n\t\t\treturn 'touch' === e.pointerType ? touchstart(e) : mouseenter(e);\n\t\t}\n\n\t\t// handle the pointer leave and route to touch/mouse event ( treats pen events as mouse )\n\t\tconst pointerleave = (e) => {\n\t\t\treturn 'touch' === e.pointerType ? touchstart(e) : mouseleave(e);\n\t\t}\n\n\t\t// on captured blur detect if the event target is a child of this.node, if not, deactivate\n\t\tconst blur = () => {\n\t\t\tif ( ! this.active ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.setTimeout(() => {\n\t\t\t\tlet target = document.activeElement;\n\t\t\t\twhile ( target && target.parentNode ) {\n\t\t\t\t\tif ( target === this.node ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget = target.parentNode;\n\t\t\t\t}\n\n\t\t\t\tthis.deactivate();\n\t\t\t}, 0);\n\t\t}\n\n\t\tif ( window.PointerEvent ) {\n\t\t\t// add pointer events\n\t\t\tthis.node.addEventListener('pointerenter', pointerenter);\n\t\t\tthis.node.addEventListener('pointerleave', pointerleave);\n\t\t} else {\n\t\t\t// no pointer events - use mouse/touch events directly\n\t\t\tthis.node.addEventListener('touchstart', touchstart);\n\t\t\tthis.node.addEventListener('mouseenter', mouseenter);\n\t\t\tthis.node.addEventListener('mouseleave', mouseleave);\n\t\t}\n\n\t\t// add keyup/blur events\n\t\tthis.node.addEventListener('keyup', keyup);\n\t\tthis.node.addEventListener('blur', blur, true); // capture\n\t}\n\n\t/**\n\t * Activates the dropdown and fires the callback/event\n\t *\n\t * @param {Object} e - passed along to the callback/event as detail\n\t */\n\tactivate(e = {}) {\n\t\tthis.active = true;\n\n\t\tif (typeof this.enterTimeout === 'number') {\n\t\t\twindow.clearTimeout(this.enterTimeout);\n\t\t\tthis.enterTimeout = null;\n\t\t}\n\n\t\tif (typeof this.opts.activate === 'function') {\n\t\t\tthis.opts.activate.call(this.node, e);\n\t\t}\n\n\t\tif (typeof this.opts.activateEvent === 'string') {\n\t\t\tthis.dispatchEvent(this.opts.activateEvent);\n\t\t}\n\t}\n\n\t/**\n\t * Deactivates the dropdown and fires the callback/event\n\t *\n\t * @param {Object} e - passed along to the callback/event as detail\n\t */\n\tdeactivate(e = {}) {\n\t\tthis.active = false;\n\n\t\tif (typeof this.leaveTimeout === 'number') {\n\t\t\twindow.clearTimeout(this.leaveTimeout);\n\t\t\tthis.leaveTimeout = null;\n\t\t}\n\n\t\tif (typeof this.opts.deactivate === 'function') {\n\t\t\tthis.opts.deactivate.call(this.node, e);\n\t\t}\n\n\t\tif (typeof this.opts.deactivateEvent === 'string') {\n\t\t\tthis.dispatchEvent(this.opts.deactivateEvent);\n\t\t}\n\t}\n\n\tdispatchEvent(eventName, node = this.node) {\n\t\tlet event;\n\t\tif (typeof window.Event === 'function') {\n\t\t\tevent = new Event(eventName);\n\t\t} else {\n\t\t\tevent = document.createEvent('Event');\n\t\t\tevent.initEvent(eventName, true, false);\n\t\t}\n\n\t\tnode.dispatchEvent(event);\n\t}\n}\n\n/**\n * This is a factory for the DropdownEvent class that supports nodelists/arrays/selectors\n *\n * @param {HTMLElement|String|NodeList|Array} node\n * @param {opts} opts - see DropdownEvent\n * @return mixed DropdownEvent|Array|false\n *\n * @uses DropdownEvent\n * @uses Array.from\n * @uses Array.isArray\n */\nexport function dropdownEvent(node, opts = {}) {\n\tif (node instanceof HTMLElement) {\n\t\treturn new DropdownEvent(node, opts);\n\t}\n\n\tconst nodes = (typeof node === 'string') ? Array.from(document.querySelectorAll(node)) : (node.length) ? Array.from(node) : [];\n\n\tif (Array.isArray(nodes)) {\n\t\treturn nodes.map((n) => new DropdownEvent(n, opts));\n\t}\n\n\treturn false;\n}\n\n/**\n * Add a jQuery function for those who prefer that way\n */\nif (typeof window.jQuery === 'function') {\n\twindow.jQuery.fn.dropdownEvent = function(opts) {\n\t\treturn this.each(function() {\n\t\t\tconst $this = window.jQuery(this);\n\t\t\t$this.data('dropdownEvent', new DropdownEvent(this, opts));\n\t\t});\n\t};\n}\n\nexport default dropdownEvent;\n","import Headroom from 'headroom.js';\nimport dropdownEvent from '../base/_dropdownEvent.js';\n\nexport default class Header {\n\tconstructor(node = '.header', opts = {}) {\n\t\tthis.node = typeof node === 'string' ? document.querySelector( node ) : node;\n\n\t\tif ( ! this.node instanceof HTMLElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.opts = Object.assign(\n\t\t\t{\n\t\t\t\theadroom: {\n\t\t\t\t\ttolerance: {\n\t\t\t\t\t\tup: 7,\n\t\t\t\t\t\tdown: 5\n\t\t\t\t\t},\n\t\t\t\t\tclasses: {\n\t\t\t\t\t\tinitial : 'header',\n\t\t\t\t\t\tpinned : 'header--pinned',\n\t\t\t\t\t\tunpinned : 'header--unpinned',\n\t\t\t\t\t\ttop : 'header--top',\n\t\t\t\t\t\tnotTop : 'header--not-top',\n\t\t\t\t\t\tbottom : 'header--bottom',\n\t\t\t\t\t\tnotBottom: 'header--not-bottom',\n\t\t\t\t\t\tfrozen : 'header--frozen',\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsearch: '.header__search',\n\t\t\t\tmenu: '.header__menu',\n\t\t\t},\n\t\t\topts\n\t\t);\n\n\t\tif ( typeof this.opts.headroom === 'object' ) {\n\t\t\t// headroom\n\t\t\tthis.headroom = new Headroom(this.node, this.opts.headroom);\n\t\t\tthis.headroom.init();\n\t\t\tthis.headroom.update(this.headroom);\n\t\t}\n\n\t\tthis.search = typeof this.opts.search === 'string' ? this.node.querySelectorAll(this.opts.search) : this.opts.search;\n\t\tthis.hamburger = typeof this.opts.menu === 'string' ? this.node.querySelector(this.opts.menu) : this.opts.menu;\n\n\t\t// dropdowns\n\t\tconst intentActivate = (e) => {\n\t\t\tArray.from( e.target.children ).filter( node => node.classList.contains( 'nav__menu' ) ).forEach( node => node.classList.add( 'nav__menu--visible') );\n\t\t}\n\n\t\tconst intentDeactivate = (e) => {\n\t\t\tArray.from( e.target.children ).filter( node => node.classList.contains( 'nav__menu' ) ).forEach( node => node.classList.remove( 'nav__menu--visible') );\n\t\t}\n\n\t\tArray.from(this.node.querySelectorAll('.menu-item-has-children')).forEach((node) => {\n\t\t\tdropdownEvent(node);\n\t\t\tnode.addEventListener('dropdown:activate', intentActivate);\n\t\t\tnode.addEventListener('dropdown:deactivate', intentDeactivate);\n\t\t});\n\n\t\tthis.node.addEventListener('click', (e) => {\n\t\t\tlet node = e.target;\n\n\t\t\twhile( node && node.parentNode ) {\n\t\t\t\tif ( node === this.node ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( node.matches( '.nav__menu--level-1 .menu-item-has-children > .nav__link' ) ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\t\t});\n\t}\n}\n","export default class Flyout {\n\tconstructor() {\n\t\tthis.node = document.querySelector('.flyout');\n\n\t\tif ( ! this.node ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.classes = {\n\t\t\tbodyOpened : 'fixed',\n\t\t\tcontentOpened : 'flyout__content--opened',\n\t\t\tmenuOpened : 'flyout__submenu--opened',\n\t\t\topened : 'flyout--opened',\n\t\t\ttoggleActive : 'flyout__toggle--active',\n\t\t\tnavHasToggleActive: 'flyout__nav--has-toggle-active',\n\t\t};\n\n\t\tthis.closer = this.node.querySelector('.flyout__close');\n\t\tthis.content = this.node.querySelector('.flyout__content');\n\t\tthis.modeToggle = this.node.querySelector('.flyout__mode');\n\t\tthis.nav = this.node.querySelector('.flyout__nav');\n\t\tthis.backs = this.node.querySelectorAll('.flyout__back');\n\t\tthis.toggles = this.node.querySelectorAll('.flyout__toggle');\n\t\tthis.searchInput = this.node.querySelector('input[name=\"s\"]');\n\n\t\tthis.modes = ['menu', 'search'];\n\t\tthis.setMode('menu');\n\n\t\tif ( this.modeToggle ) {\n\t\t\tthis.modeToggle.addEventListener('click', () => {\n\t\t\t\tif (this.mode === 'menu') {\n\t\t\t\t\tthis.setMode('search');\n\t\t\t\t\tthis.searchInput.focus();\n\t\t\t\t} else {\n\t\t\t\t\tthis.setMode('menu');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( this.closer ) {\n\t\t\tthis.closer.addEventListener('click', () => this.close());\n\t\t}\n\n\t\tif ( this.searchToggle ) {\n\t\t\tthis.searchToggle.addEventListener('click', () => this.mode('search'));\n\t\t}\n\n\t\t// handle esc/tab keys\n\t\tthis.handleKeyup = (e) => {\n\t\t\tif (this.opened) {\n\t\t\t\tif ( e.key === 'Escape' ) {\n\t\t\t\t\treturn this.close();\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'Tab' && ! document.activeElement.closest('.flyout')) {\n\t\t\t\t\t// close the flyout when you tab out of it (if possible)\n\t\t\t\t\treturn this.close();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// handle close\n\t\tthis.node.addEventListener('click', (e) => {\n\t\t\tif (e.target.closest('.flyout__content')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.close();\n\t\t});\n\n\t\tconst openSubmenu = (navItem) => {\n\t\t\tif ( ! navItem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst submenu = navItem.querySelector('.flyout__submenu');\n\t\t\tconst toggle = navItem.querySelector('.flyout__toggle');\n\n\t\t\tthis.nav.classList.add(this.classes.navHasToggleActive);\n\t\t\ttoggle.classList.add(this.classes.toggleActive);\n\t\t\tsubmenu.classList.add(this.classes.menuOpened);\n\t\t\tsubmenu.style.height = `${submenu.scrollHeight}px`;\n\n\t\t\tsubmenu.querySelectorAll( 'a, button' ).forEach( node => {\n\t\t\t\tif ( node.dataset.tabIndex ) {\n\t\t\t\t\tnode.tabIndex = node.dataset.tabIndex;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.content.scrollTo(0,0);\n\t\t}\n\n\t\tconst closeSubmenu = (navItem) => {\n\t\t\tif ( ! navItem ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst submenu = navItem.querySelector('.flyout__submenu');\n\t\t\tconst toggle = navItem.querySelector('.flyout__toggle');\n\n\t\t\tthis.nav.classList.remove(this.classes.navHasToggleActive);\n\t\t\ttoggle.classList.remove(this.classes.toggleActive);\n\t\t\tsubmenu.classList.remove(this.classes.menuOpened);\n\t\t\tsubmenu.style.height = '';\n\n\t\t\tsubmenu.querySelectorAll( 'a, button' ).forEach( node => {\n\t\t\t\tnode.tabIndex = -1;\n\t\t\t} );\n\n\t\t\tthis.content.scrollTo(0,0);\n\t\t}\n\n\t\tthis.node.querySelectorAll('.flyout__submenu a, .flyout__submenu button').forEach( node => {\n\t\t\tnode.dataset.tabIndex = node.tabIndex;\n\t\t\tnode.tabIndex = -1;\n\t\t} );\n\n\t\tthis.backs.forEach(back => {\n\t\t\tback.addEventListener('click', () => closeSubmenu(back.closest('.flyout__item')));\n\t\t});\n\n\t\tthis.toggles.forEach( toggle => {\n\t\t\ttoggle.addEventListener('click', () => {\n\t\t\t\tconst item = toggle.closest('.flyout__item');\n\n\t\t\t\tif (toggle.classList.contains(this.classes.toggleActive)) {\n\t\t\t\t\t// close\n\t\t\t\t\tcloseSubmenu(item);\n\t\t\t\t} else {\n\t\t\t\t\t// open\n\t\t\t\t\topenSubmenu(item);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\topen(mode) {\n\t\tif (mode) {\n\t\t\tthis.setMode(mode);\n\t\t}\n\n\t\tthis.opened = true;\n\t\tthis.node.style.display = 'block';\n\t\tdocument.body.classList.add(this.classes.bodyOpened);\n\t\tdocument.addEventListener('keyup', this.handleKeyup);\n\n\t\tthis.disableTabs();\n\n\t\tthis.previousActiveElement = document.activeElement;\n\n\t\trequestAnimationFrame( () => requestAnimationFrame( () => {\n\t\t\tthis.node.classList.add(this.classes.opened);\n\t\t\tthis.content.classList.add(this.classes.contentOpened);\n\n\t\t\tif (this.mode === 'search' && this.searchInput) {\n\t\t\t\tthis.searchInput.focus();\n\t\t\t} else if ( this.closer ) {\n\t\t\t\tthis.closer.focus();\n\t\t\t}\n\n\t\t\tthis.node.dispatchEvent( new CustomEvent('flyout:open', { bubbles: true, cancelable: false } ) );\n\t\t} ) );\n\t}\n\n\tclose() {\n\t\tthis.opened = false;\n\t\tdocument.removeEventListener('keyup', this.handleKeyup);\n\n\t\tconst onTransitionEnd = (e) => {\n\t\t\tthis.content.removeEventListener('transitionend', onTransitionEnd);\n\n\t\t\tthis.node.style.display = '';\n\n\t\t\tdocument.body.classList.remove(this.classes.bodyOpened);\n\t\t\tthis.node.classList.remove(this.classes.opened);\n\n\t\t\tif (this.previousActiveElement) {\n\t\t\t\tthis.previousActiveElement.focus();\n\t\t\t}\n\n\t\t\tthis.enableTabs();\n\n\t\t\tthis.node.dispatchEvent( new CustomEvent('flyout:close', { bubbles: true, cancelable: false }) );\n\t\t}\n\n\t\tthis.content.addEventListener('transitionend', onTransitionEnd);\n\t\tthis.content.classList.remove(this.classes.contentOpened);\n\n\t}\n\n\ttoggle() {\n\t\tthis.opened ? this.closeSearch() : this.openSearch();\n\t}\n\n\tsetMode( mode = 'menu' ) {\n\t\tif ( ! this.modes.includes( mode ) ) {\n\t\t\treturn this.mode;\n\t\t}\n\n\t\tthis.mode = mode;\n\n\t\tthis.modes.forEach( m => {\n\t\t\tif ( mode === m ) {\n\t\t\t\tthis.node.classList.add(`flyout--${m}`);\n\t\t\t} else {\n\t\t\t\tthis.node.classList.remove(`flyout--${m}`);\n\t\t\t}\n\t\t} );\n\n\t\treturn this.mode;\n\t}\n\n\tgetTabs( scope = document ) {\n\t\treturn Array.from(scope.querySelectorAll([\n\t\t\t'select',\n\t\t\t'input',\n\t\t\t'textarea',\n\t\t\t'button',\n\t\t\t'a',\n\t\t\t'iframe',\n\t\t\t'object',\n\t\t\t'embed',\n\t\t\t'*[contenteditable]',\n\t\t\t'*[tabindex]',\n\t\t].join(', '))).filter(node => {\n\t\t\treturn ! node.closest('.flyout');\n\t\t});\n\t}\n\n\tdisableTabs() {\n\t\tconst tabs = this.getTabs();\n\n\t\ttabs.forEach(node => {\n\t\t\tlet prevTabIndex = node.getAttribute('tabIndex');\n\t\t\tif (prevTabIndex) {\n\t\t\t\tnode.setAttribute('data-tab-index', prevTabIndex);\n\t\t\t}\n\n\t\t\tnode.setAttribute('tabIndex', '-1');\n\t\t});\n\n\t\treturn tabs;\n\t}\n\n\tenableTabs() {\n\t\tconst tabs = this.getTabs();\n\n\t\ttabs.forEach(node => {\n\t\t\tlet prevTabIndex = node.getAttribute('data-tab-index');\n\t\t\tif (prevTabIndex) {\n\t\t\t\tnode.setAttribute('tabIndex', prevTabIndex);\n\t\t\t\tnode.removeAttribute('data-tab-index');\n\t\t\t} else {\n\t\t\t\tnode.removeAttribute('tabIndex');\n\t\t\t}\n\t\t});\n\n\t\treturn tabs;\n\t}\n}\n","/**\n * IE11 Fix to convert object-fit: cover to background-size: cover\n *\n * @param {string|NodeList|Array} nodes\n * @param {string} img the img selector\n * @param {string} position the background position to use\n */\nexport default function objectFitCover( nodes = '.object-fit-cover', img = 'img', position = 'center' ) {\n\tif ( typeof nodes === 'string' ) {\n\t\tnodes = Array.from( document.querySelectorAll( nodes ) );\n\t}\n\n\tif ( ! nodes.length ) {\n\t\treturn;\n\t}\n\n\tfor ( let i = 0, nodesLength = nodes.length; i < nodesLength; i++ ) {\n\t\tlet imgNode = nodes[i].querySelector( img );\n\n\t\tif ( ! imgNode ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnodes[i].style.backgroundPosition = position;\n\t\tnodes[i].style.backgroundSize = 'cover';\n\t\tnodes[i].style.backgroundImage = `url(${imgNode.currentSrc || imgNode.src})`;\n\t\timgNode.style.display = 'none';\n\t}\n}\n\nif ( document.readyState.match(/complete|loaded/) ) {\n\tobjectFitCover();\n} else {\n\tdocument.addEventListener('DOMContentLoaded', objectFitCover);\n}\n","import throttle from './base/_throttle.js';\nimport focusWithin from './base/_focus-within.js';\nimport Header from './modules/_header.js';\nimport Flyout from './modules/_flyout.js';\nimport searchAutocomplete from './modules/_search-autocomplete.js'\n\nimport './base/_object-fit-cover.js';\n\nclass Scripts {\n\tconstructor() {\n\t\tdocument.addEventListener( 'DOMContentLoaded', this.ready.bind( this ) );\n\t\twindow.addEventListener( 'resize', throttle( this.resize.bind( this ), 25 ) );\n\t\tthis.resize();\n\t}\n\n\tready() {\n\t\tfocusWithin( 'label, form, fieldset' );\n\n\t\tthis.header = new Header();\n\t\tthis.flyout = new Flyout();\n\t\t\n\n\t\tthis.header.hamburger.addEventListener('click', () => this.flyout.open('menu'));\n\n\t\tfor (const searchElement of this.header.search) {\n\t\t\tsearchElement.addEventListener('click', () => this.flyout.open('search'));\n\t\t};\n\t}\n\n\tresize() {\n\t\tif ( ! document.body ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// using this to allow css to know if it should exclude the scroll bar in calc's\n\t\tif ( window.innerWidth === document.body.clientWidth ) {\n\t\t\tdocument.documentElement.classList.remove( 'has-scrollbar' );\n\t\t} else {\n\t\t\tdocument.documentElement.classList.add( 'has-scrollbar' );\n\t\t}\n\t}\n}\n\nexport default new Scripts;\n","export default function (fn, time = 50) {\n\tlet timer = null;\n\n\tfunction throttledFn(...args) {\n\t\tif (!timer) {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tfn(...args);\n\t\t\t\ttimer = null;\n\t\t\t}, time)\n\t\t}\n\t}\n\n\tthrottledFn.cancel = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = null;\n\t}\n\n\treturn throttledFn;\n}\n"],"names":["_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","FocusWithin","node","className","focused","addEventListener","this","focus","bind","blur","classList","add","dispatchEvent","CustomEvent","remove","_typeof","obj","Symbol","iterator","constructor","module","isBrowser","window","passiveEventsSupported","supported","options","passive","removeEventListener","err","isSupported","document","documentElement","assign","keys","requestAnimationFrame","isDocument","nodeType","isWindow","windowScroller","win","doc","body","html","scrollHeight","Math","max","offsetHeight","clientHeight","height","innerHeight","scrollY","undefined","pageYOffset","parentNode","scrollTop","elementScroller","element","createScroller","trackScroll","callback","rafId","isPassiveSupported","scrolled","scroller","lastScrollY","details","update","round","direction","distance","abs","isOutOfBounds","top","offset","bottom","toleranceExceeded","tolerance","handleScroll","eventOptions","capture","destroy","cancelAnimationFrame","normalizeUpDown","t","down","up","Headroom","elem","classes","initialised","frozen","init","cutsTheMustard","addClass","setTimeout","self","scrollTracker","forEach","removeClass","unpin","hasClass","onUnpin","call","pin","onPin","freeze","unfreeze","onTop","notTop","onNotTop","onBottom","notBottom","onNotBottom","shouldUnpin","shouldPin","apply","split","every","cls","contains","pinned","unpinned","initial","factory","DropdownEvent","opts","opt","delay","activate","deactivate","activateEvent","deactivateEvent","hasOwnProperty","active","enterTimeout","leaveTimeout","preventClickEvent","e","preventDefault","stopPropagation","maybeActivate","_this","tagName","mouseenter","clearTimeout","mouseleave","touchstart","keyup","toLowerCase","pointerenter","pointerType","pointerleave","activeElement","PointerEvent","eventName","event","Event","createEvent","initEvent","dropdownEvent","HTMLElement","nodes","Array","from","querySelectorAll","isArray","map","n","jQuery","fn","each","data","Header","querySelector","headroom","search","menu","hamburger","intentActivate","children","filter","intentDeactivate","matches","Flyout","bodyOpened","contentOpened","menuOpened","opened","toggleActive","navHasToggleActive","closer","content","modeToggle","nav","backs","toggles","searchInput","modes","setMode","mode","close","searchToggle","handleKeyup","closest","closeSubmenu","navItem","submenu","toggle","style","tabIndex","scrollTo","dataset","back","item","openSubmenu","display","disableTabs","previousActiveElement","_this2","bubbles","cancelable","onTransitionEnd","_this3","enableTabs","closeSearch","openSearch","includes","m","_this4","scope","join","tabs","getTabs","prevTabIndex","getAttribute","setAttribute","removeAttribute","objectFitCover","img","position","nodesLength","imgNode","backgroundPosition","backgroundSize","backgroundImage","currentSrc","src","readyState","match","ready","time","timer","throttledFn","args","cancel","throttle","resize","focusWithin","header","flyout","open","innerWidth","clientWidth"],"mappings":"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"}