{"version":3,"file":"main.js","sources":["../src/main.ts","../../node_modules/headroom.js/dist/headroom.js"],"sourcesContent":["import Headroom from \"headroom.js\";\nvar myElement = document.getElementById('site-header');\nvar headroom = new Headroom(myElement);\nheadroom.init();\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"],"names":["module","isBrowser","window","normalizeUpDown","t","Object","down","up","Headroom","elem","options","assign","this","classes","tolerance","offset","initialised","frozen","prototype","constructor","init","cutsTheMustard","addClass","setTimeout","self","scrollTracker","element","callback","rafId","isPassiveSupported","supported","addEventListener","removeEventListener","err","passiveEventsSupported","scrolled","scroller","obj","document","nodeType","isDocument","doc","win","body","html","documentElement","scrollHeight","Math","max","offsetHeight","clientHeight","height","innerHeight","scrollY","undefined","pageYOffset","parentNode","scrollTop","elementScroller","createScroller","lastScrollY","details","update","round","direction","distance","abs","isOutOfBounds","top","bottom","toleranceExceeded","handleScroll","requestAnimationFrame","eventOptions","passive","capture","destroy","cancelAnimationFrame","trackScroll","bind","keys","forEach","removeClass","unpin","hasClass","onUnpin","call","pin","onPin","freeze","unfreeze","onTop","notTop","onNotTop","onBottom","notBottom","onNotBottom","shouldUnpin","shouldPin","className","classList","add","apply","split","remove","every","cls","contains","pinned","unpinned","initial","factory","getElementById"],"mappings":"sKAEgB;;;;;;ACKiDA,UAGzD,oBAEGC,UACkB,oBAAXC,gBAmLPC,EAAgBC,UAChBA,IAAMC,OAAOD,GAAKA,EAAI,CAAEE,KAAMF,EAAGG,GAAIH,YAWrCI,EAASC,EAAMC,GACtBA,EAAUA,GAAW,GACrBL,OAAOM,OAAOC,KAAMJ,EAASE,QAASA,QACjCG,QAAUR,OAAOM,OAAO,GAAIH,EAASE,QAAQG,QAASH,EAAQG,cAE9DJ,KAAOA,OACPK,UAAYX,EAAgBS,KAAKE,gBACjCC,OAASZ,EAAgBS,KAAKG,aAC9BC,aAAc,OACdC,QAAS,SAEhBT,EAASU,UAAY,CACnBC,YAAaX,EAMbY,KAAM,kBACAZ,EAASa,iBAAmBT,KAAKI,mBAC9BM,SAAS,gBACTN,aAAc,EAInBO,YACE,SAASC,GACPA,EAAKC,uBA3FMC,EAAShB,EAASiB,OAEjCC,EADAC,iBAxHAC,GAAY,UAGVpB,EAAU,eAGVoB,GAAY,IAGhB5B,OAAO6B,iBAAiB,OAAQrB,EAASA,GACzCR,OAAO8B,oBAAoB,OAAQtB,EAASA,GAC5C,MAAOuB,GACPH,GAAY,SAGPA,EAyGkBI,GAErBC,GAAW,EACXC,WAXkBV,UA/ENW,EAgFAX,IA7EFW,EAAIC,mBAPAD,UACM,IAAjBA,EAAIE,SAMmBC,CAAWH,EAAIC,WAIzCG,GADkBC,EA0EoBhB,GAzE5BY,SACVK,EAAOF,EAAIE,KACXC,EAAOH,EAAII,gBAER,CAKLC,aAAc,kBACLC,KAAKC,IACVL,EAAKG,aACLF,EAAKE,aACLH,EAAKM,aACLL,EAAKK,aACLN,EAAKO,aACLN,EAAKM,eAQTC,OAAQ,kBACCT,EAAIU,aAAeR,EAAKM,cAAgBP,EAAKO,cAOtDG,QAAS,uBACiBC,IAApBZ,EAAIa,YACCb,EAAIa,aAGLX,GAAQD,EAAKa,YAAcb,GAAMc,sBAKtB/B,SAChB,CAILoB,aAAc,kBACLC,KAAKC,IACVtB,EAAQoB,aACRpB,EAAQuB,aACRvB,EAAQwB,eAOZC,OAAQ,kBACCJ,KAAKC,IAAItB,EAAQuB,aAAcvB,EAAQwB,eAOhDG,QAAS,kBACA3B,EAAQ+B,YAMkCC,CAAgBhC,OA1E/CgB,EAClBD,EACAE,EACAC,EATYP,EA0FDsB,CAAejC,GAC1BkC,EAAcxB,EAASiB,UACvBQ,EAAU,YAELC,QACHT,EAAUN,KAAKgB,MAAM3B,EAASiB,WAC9BF,EAASf,EAASe,SAClBL,EAAeV,EAASU,eAG5Be,EAAQR,QAAUA,EAClBQ,EAAQD,YAAcA,EACtBC,EAAQG,UAAYX,EAAUO,EAAc,OAAS,KACrDC,EAAQI,SAAWlB,KAAKmB,IAAIb,EAAUO,GACtCC,EAAQM,cAAgBd,EAAU,GAAKA,EAAUF,EAASL,EAC1De,EAAQO,IAAMf,GAAW3C,EAAQK,OAAO8C,EAAQG,WAChDH,EAAQQ,OAAShB,EAAUF,GAAUL,EACrCe,EAAQS,kBACNT,EAAQI,SAAWvD,EAAQI,UAAU+C,EAAQG,WAE/CrC,EAASkC,GAETD,EAAcP,EACdlB,GAAW,WAGJoC,IACFpC,IACHA,GAAW,EACXP,EAAQ4C,sBAAsBV,QAI9BW,IAAe5C,GACf,CAAE6C,SAAS,EAAMC,SAAS,UAG9BjD,EAAQK,iBAAiB,SAAUwC,EAAcE,GACjDX,IAEO,CACLc,QAAS,WACPC,qBAAqBjD,GACrBF,EAAQM,oBAAoB,SAAUuC,EAAcE,KA4C3BK,CACnBtD,EAAKY,SACL,CAAErB,OAAQS,EAAKT,OAAQD,UAAWU,EAAKV,WACvCU,EAAKsC,OAAOiB,KAAKvD,MAGrB,IACAZ,OAIGA,MAOTgE,QAAS,gBACF5D,aAAc,EACnBX,OAAO2E,KAAKpE,KAAKC,SAASoE,QAAQrE,KAAKsE,YAAatE,WAC/Ca,cAAcmD,WAOrBO,MAAO,YACDvE,KAAKwE,SAAS,WAAcxE,KAAKwE,SAAS,mBACvC9D,SAAS,iBACT4D,YAAY,UAEbtE,KAAKyE,cACFA,QAAQC,KAAK1E,QASxB2E,IAAK,WACC3E,KAAKwE,SAAS,mBACX9D,SAAS,eACT4D,YAAY,YAEbtE,KAAK4E,YACFA,MAAMF,KAAK1E,QAStB6E,OAAQ,gBACDxE,QAAS,OACTK,SAAS,WAOhBoE,SAAU,gBACHzE,QAAS,OACTiE,YAAY,WAGnBd,IAAK,WACExD,KAAKwE,SAAS,cACZ9D,SAAS,YACT4D,YAAY,UAEbtE,KAAK+E,YACFA,MAAML,KAAK1E,QAKtBgF,OAAQ,WACDhF,KAAKwE,SAAS,iBACZ9D,SAAS,eACT4D,YAAY,OAEbtE,KAAKiF,eACFA,SAASP,KAAK1E,QAKzByD,OAAQ,WACDzD,KAAKwE,SAAS,iBACZ9D,SAAS,eACT4D,YAAY,aAEbtE,KAAKkF,eACFA,SAASR,KAAK1E,QAKzBmF,UAAW,WACJnF,KAAKwE,SAAS,oBACZ9D,SAAS,kBACT4D,YAAY,UAEbtE,KAAKoF,kBACFA,YAAYV,KAAK1E,QAK5BqF,YAAa,SAASpC,SACsB,SAAtBA,EAAQG,YAEHH,EAAQO,KAAOP,EAAQS,mBAGlD4B,UAAW,SAASrC,SACsB,OAAtBA,EAAQG,WAEHH,EAAQS,mBAAsBT,EAAQO,KAG/D9C,SAAU,SAAS6E,QACZ1F,KAAK2F,UAAUC,IAAIC,MACtB1F,KAAKH,KAAK2F,UACVxF,KAAKC,QAAQsF,GAAWI,MAAM,OAIlCrB,YAAa,SAASiB,QACf1F,KAAK2F,UAAUI,OAAOF,MACzB1F,KAAKH,KAAK2F,UACVxF,KAAKC,QAAQsF,GAAWI,MAAM,OAIlCnB,SAAU,SAASe,UACVvF,KAAKC,QAAQsF,GAAWI,MAAM,KAAKE,OAAM,SAASC,UAChD9F,KAAKwF,UAAUO,SAASD,KAC9B9F,KAAKH,OAGVqD,OAAQ,SAASD,GACXA,EAAQM,gBAKQ,IAAhBvD,KAAKK,SAIL4C,EAAQO,SACLA,WAEAwB,SAGH/B,EAAQQ,YACLA,cAEA0B,YAGHnF,KAAKqF,YAAYpC,QACdsB,QACIvE,KAAKsF,UAAUrC,SACnB0B,SASX/E,EAASE,QAAU,CACjBI,UAAW,CACTP,GAAI,EACJD,KAAM,GAERS,OAAQ,EACRqB,SAAUnC,IAAcC,OAAS,KACjCW,QAAS,CACPI,OAAQ,mBACR2F,OAAQ,mBACRC,SAAU,qBACVzC,IAAK,gBACLwB,OAAQ,oBACRvB,OAAQ,mBACR0B,UAAW,uBACXe,QAAS,aAIbtG,EAASa,kBAvYLpB,KACA,aAAc8E,MACd,cAAezC,SAASO,iBACxBxC,OAAOM,QACPN,OAAO2E,MACPR,uBAoYGhE,EA3ayEuG,MDLlE,CADAzE,SAAS0E,eAAe,gBAE/B5F"}