{"version":3,"sources":["webpack://@verndale/toolkit/./src/js/modules/community-nav-row.js","webpack://@verndale/toolkit/./node_modules/headroom.js/dist/headroom.js"],"names":["Module","Component","e","url","eventId","Boxever","_boxever_settings","eventToSend","data","Headroom","global","factory","module","isBrowser","passiveEventsSupported","supported","options","isSupported","isDocument","obj","isWindow","windowScroller","win","doc","body","html","elementScroller","element","createScroller","trackScroll","callback","isPassiveSupported","rafId","scrolled","scroller","lastScrollY","details","update","scrollY","height","scrollHeight","handleScroll","eventOptions","normalizeUpDown","elem","self","scrollingDown","scrollingUp","className","cls"],"mappings":"+KAGA,MAAMA,UAAeC,WAAU,CAC7B,eAAgB,CACd,KAAK,IAAM,CACT,gBAAiB,KAAK,GAAG,GAAG,oCAAoC,EAChE,OAAQ,KAAK,GAAG,GAAG,oCAAoC,EACvD,UAAW,GAAG,cAAc,EAC5B,WAAY,GAAG,qBAAqB,EACpC,UAAW,KAAK,GAAG,IAAI,kCAAkC,CAC3D,EAEA,KAAK,cAAgB,8BACrB,KAAK,MAAM,CACb,CAEA,cAAe,CACb,KAAK,IAAI,gBAAgB,IAAI,QAAS,KAAK,0BAA0B,KAAK,IAAI,CAAC,EAC/E,KAAK,IAAI,UAAU,IAAI,SAAU,KAAK,qBAAqB,KAAK,IAAI,CAAC,EACrE,KAAK,IAAI,UAAU,IAAI,QAAS,KAAK,gBAAgB,KAAK,IAAI,CAAC,CACjE,CAEA,2BAA4B,CACP,KAAK,GAAG,UAAU,SAAS,KAAK,aAAa,EAG9D,KAAK,SAAS,EAEd,KAAK,OAAO,CAEhB,CAEA,qCAAqCC,EAAG,CACP,CAAC,KAAK,IAAI,OAAO,SAASA,EAAE,MAAM,GAG/D,KAAK,SAAS,CAElB,CAEA,qBAAqBA,EAAG,CACtBA,EAAE,eAAe,EACjB,KAAK,IAAI,WAAW,OAAO,EAC3B,UAAU,UAAU,UAAU,KAAK,IAAI,WAAW,KAAK,CACzD,CAEA,gBAAgBA,EAAG,CACjBA,EAAE,eAAe,EAEjB,IAAIC,EAAMD,EAAE,OAAO,aAAa,MAAM,EAClCE,EAAUF,EAAE,OAAO,aAAa,eAAe,EAEnD,KAAM,CAAE,QAAAG,EAAS,kBAAAC,CAAkB,EAAI,OAEvC,GAAI,CAACD,GAAW,CAACC,GAAqB,CAACF,EAAS,CAC9C,OAAO,SAAWD,EAClB,MACF,CAEA,MAAMI,EAAc,CAClB,QAAS,MACT,KAAMH,EACN,IAAK,OAAO,kBAAkB,YAC9B,WAAYC,EAAQ,MAAM,CAC5B,EAEAA,EAAQ,YACNE,EACAC,GAAQ,CACN,OAAO,SAAWL,CACpB,EACA,MACF,CACF,CAEA,QAAS,CACP,KAAK,GAAG,UAAU,IAAI,KAAK,aAAa,EACxC,SAAS,IAAI,YAAa,KAAK,qCAAqC,KAAK,IAAI,CAAC,CAChF,CAEA,UAAW,CACT,KAAK,GAAG,UAAU,OAAO,KAAK,aAAa,EAC3C,SAAS,oBAAoB,QAAS,KAAK,qCAAqC,KAAK,IAAI,CAAC,CAC5F,CAEA,OAAQ,CACN,IAAIM,KAAS,KAAK,GAAI,CACpB,OAAQ,KAAK,GAAG,UAChB,QAAU,CACR,QAAU,oBACV,OAAS,6BACT,SAAW,4BACX,IAAM,IACN,OAAS,IACT,OAAS,IACT,UAAY,IACZ,OAAQ,GACV,CACF,CAAC,EAAE,KAAK,CACV,CACF,CAEA,UAAeT,C,oBCvGf;AAAA;AAAA;AAAA;AAAA,IAMC,SAAUU,EAAQC,EAAS,CACqCC,EAAO,QAAUD,EAAQ,CAG1F,GAAE,KAAM,UAAY,CAAE,aAEpB,SAASE,GAAY,CACnB,OAAO,OAAO,OAAW,GAC3B,CAMA,SAASC,GAAyB,CAChC,IAAIC,EAAY,GAEhB,GAAI,CACF,IAAIC,EAAU,CAEZ,IAAI,SAAU,CACZD,EAAY,EACd,CACF,EACA,OAAO,iBAAiB,OAAQC,EAASA,CAAO,EAChD,OAAO,oBAAoB,OAAQA,EAASA,CAAO,CACrD,MAAE,CACAD,EAAY,EACd,CAEA,OAAOA,CACT,CAEA,SAASE,GAAc,CACrB,MAAO,CAAC,EACNJ,EAAU,GACV,UAAW,CAAC,EAAE,MACd,cAAe,SAAS,iBACxB,OAAO,QACP,OAAO,MACP,sBAEJ,CAEA,SAASK,EAAWC,EAAK,CACvB,OAAOA,EAAI,WAAa,CAC1B,CAEA,SAASC,EAASD,EAAK,CAGrB,OAAOA,GAAOA,EAAI,UAAYD,EAAWC,EAAI,QAAQ,CACvD,CAEA,SAASE,EAAeC,EAAK,CAC3B,IAAIC,EAAMD,EAAI,SACVE,EAAOD,EAAI,KACXE,EAAOF,EAAI,gBAEf,MAAO,CAKL,aAAc,UAAW,CACvB,OAAO,KAAK,IACVC,EAAK,aACLC,EAAK,aACLD,EAAK,aACLC,EAAK,aACLD,EAAK,aACLC,EAAK,YACP,CACF,EAMA,OAAQ,UAAW,CACjB,OAAOH,EAAI,aAAeG,EAAK,cAAgBD,EAAK,YACtD,EAMA,QAAS,UAAW,CAClB,OAAIF,EAAI,cAAgB,OACfA,EAAI,aAGLG,GAAQD,EAAK,YAAcA,GAAM,SAC3C,CACF,CACF,CAEA,SAASE,EAAgBC,EAAS,CAChC,MAAO,CAIL,aAAc,UAAW,CACvB,OAAO,KAAK,IACVA,EAAQ,aACRA,EAAQ,aACRA,EAAQ,YACV,CACF,EAKA,OAAQ,UAAW,CACjB,OAAO,KAAK,IAAIA,EAAQ,aAAcA,EAAQ,YAAY,CAC5D,EAMA,QAAS,UAAW,CAClB,OAAOA,EAAQ,SACjB,CACF,CACF,CAEA,SAASC,EAAeD,EAAS,CAC/B,OAAOP,EAASO,CAAO,EAAIN,EAAeM,CAAO,EAAID,EAAgBC,CAAO,CAC9E,CAKA,SAASE,EAAYF,EAASX,EAASc,EAAU,CAC/C,IAAIC,EAAqBjB,EAAuB,EAC5CkB,EACAC,EAAW,GACXC,EAAWN,EAAeD,CAAO,EACjCQ,EAAcD,EAAS,QAAQ,EAC/BE,EAAU,CAAC,EAEf,SAASC,GAAS,CAChB,IAAIC,EAAU,KAAK,MAAMJ,EAAS,QAAQ,CAAC,EACvCK,EAASL,EAAS,OAAO,EACzBM,EAAeN,EAAS,aAAa,EAGzCE,EAAQ,QAAUE,EAClBF,EAAQ,YAAcD,EACtBC,EAAQ,UAAYE,EAAUH,EAAc,OAAS,KACrDC,EAAQ,SAAW,KAAK,IAAIE,EAAUH,CAAW,EACjDC,EAAQ,cAAgBE,EAAU,GAAKA,EAAUC,EAASC,EAC1DJ,EAAQ,IAAME,GAAWtB,EAAQ,OAAOoB,EAAQ,WAChDA,EAAQ,OAASE,EAAUC,GAAUC,EACrCJ,EAAQ,kBACNA,EAAQ,SAAWpB,EAAQ,UAAUoB,EAAQ,WAE/CN,EAASM,CAAO,EAEhBD,EAAcG,EACdL,EAAW,EACb,CAEA,SAASQ,GAAe,CACjBR,IACHA,EAAW,GACXD,EAAQ,sBAAsBK,CAAM,EAExC,CAEA,IAAIK,EAAeX,EACf,CAAE,QAAS,GAAM,QAAS,EAAM,EAChC,GAEJ,OAAAJ,EAAQ,iBAAiB,SAAUc,EAAcC,CAAY,EAC7DL,EAAO,EAEA,CACL,QAAS,UAAW,CAClB,qBAAqBL,CAAK,EAC1BL,EAAQ,oBAAoB,SAAUc,EAAcC,CAAY,CAClE,CACF,CACF,CAEA,SAASC,EAAgB,EAAG,CAC1B,OAAO,IAAM,OAAO,CAAC,EAAI,EAAI,CAAE,KAAM,EAAG,GAAI,CAAE,CAChD,CAUA,SAASlC,EAASmC,EAAM5B,EAAS,CAC/BA,EAAUA,GAAW,CAAC,EACtB,OAAO,OAAO,KAAMP,EAAS,QAASO,CAAO,EAC7C,KAAK,QAAU,OAAO,OAAO,CAAC,EAAGP,EAAS,QAAQ,QAASO,EAAQ,OAAO,EAE1E,KAAK,KAAO4B,EACZ,KAAK,UAAYD,EAAgB,KAAK,SAAS,EAC/C,KAAK,OAASA,EAAgB,KAAK,MAAM,EACzC,KAAK,YAAc,GACnB,KAAK,OAAS,EAChB,CACA,OAAAlC,EAAS,UAAY,CACnB,YAAaA,EAMb,KAAM,UAAW,CACf,OAAIA,EAAS,gBAAkB,CAAC,KAAK,cACnC,KAAK,SAAS,SAAS,EACvB,KAAK,YAAc,GAInB,WACE,SAASoC,EAAM,CACbA,EAAK,cAAgBhB,EACnBgB,EAAK,SACL,CAAE,OAAQA,EAAK,OAAQ,UAAWA,EAAK,SAAU,EACjDA,EAAK,OAAO,KAAKA,CAAI,CACvB,CACF,EACA,IACA,IACF,GAGK,IACT,EAMA,QAAS,UAAW,CAClB,KAAK,YAAc,GACnB,OAAO,KAAK,KAAK,OAAO,EAAE,QAAQ,KAAK,YAAa,IAAI,EACxD,KAAK,cAAc,QAAQ,CAC7B,EAMA,MAAO,UAAW,EACZ,KAAK,SAAS,QAAQ,GAAK,CAAC,KAAK,SAAS,UAAU,KACtD,KAAK,SAAS,UAAU,EACxB,KAAK,YAAY,QAAQ,EAErB,KAAK,SACP,KAAK,QAAQ,KAAK,IAAI,EAG5B,EAMA,IAAK,UAAW,CACV,KAAK,SAAS,UAAU,IAC1B,KAAK,SAAS,QAAQ,EACtB,KAAK,YAAY,UAAU,EAEvB,KAAK,OACP,KAAK,MAAM,KAAK,IAAI,EAG1B,EAMA,OAAQ,UAAW,CACjB,KAAK,OAAS,GACd,KAAK,SAAS,QAAQ,CACxB,EAMA,SAAU,UAAW,CACnB,KAAK,OAAS,GACd,KAAK,YAAY,QAAQ,CAC3B,EAEA,IAAK,UAAW,CACT,KAAK,SAAS,KAAK,IACtB,KAAK,SAAS,KAAK,EACnB,KAAK,YAAY,QAAQ,EAErB,KAAK,OACP,KAAK,MAAM,KAAK,IAAI,EAG1B,EAEA,OAAQ,UAAW,CACZ,KAAK,SAAS,QAAQ,IACzB,KAAK,SAAS,QAAQ,EACtB,KAAK,YAAY,KAAK,EAElB,KAAK,UACP,KAAK,SAAS,KAAK,IAAI,EAG7B,EAEA,OAAQ,UAAW,CACZ,KAAK,SAAS,QAAQ,IACzB,KAAK,SAAS,QAAQ,EACtB,KAAK,YAAY,WAAW,EAExB,KAAK,UACP,KAAK,SAAS,KAAK,IAAI,EAG7B,EAEA,UAAW,UAAW,CACf,KAAK,SAAS,WAAW,IAC5B,KAAK,SAAS,WAAW,EACzB,KAAK,YAAY,QAAQ,EAErB,KAAK,aACP,KAAK,YAAY,KAAK,IAAI,EAGhC,EAEA,YAAa,SAAST,EAAS,CAC7B,IAAIU,EAAgBV,EAAQ,YAAc,OAE1C,OAAOU,GAAiB,CAACV,EAAQ,KAAOA,EAAQ,iBAClD,EAEA,UAAW,SAASA,EAAS,CAC3B,IAAIW,EAAcX,EAAQ,YAAc,KAExC,OAAQW,GAAeX,EAAQ,mBAAsBA,EAAQ,GAC/D,EAEA,SAAU,SAASY,EAAW,CAC5B,KAAK,KAAK,UAAU,IAAI,MACtB,KAAK,KAAK,UACV,KAAK,QAAQA,GAAW,MAAM,GAAG,CACnC,CACF,EAEA,YAAa,SAASA,EAAW,CAC/B,KAAK,KAAK,UAAU,OAAO,MACzB,KAAK,KAAK,UACV,KAAK,QAAQA,GAAW,MAAM,GAAG,CACnC,CACF,EAEA,SAAU,SAASA,EAAW,CAC5B,OAAO,KAAK,QAAQA,GAAW,MAAM,GAAG,EAAE,MAAM,SAASC,EAAK,CAC5D,OAAO,KAAK,UAAU,SAASA,CAAG,CACpC,EAAG,KAAK,IAAI,CACd,EAEA,OAAQ,SAASb,EAAS,CACpBA,EAAQ,eAKR,KAAK,SAAW,KAIhBA,EAAQ,IACV,KAAK,IAAI,EAET,KAAK,OAAO,EAGVA,EAAQ,OACV,KAAK,OAAO,EAEZ,KAAK,UAAU,EAGb,KAAK,YAAYA,CAAO,EAC1B,KAAK,MAAM,EACF,KAAK,UAAUA,CAAO,GAC/B,KAAK,IAAI,EAEb,CACF,EAMA3B,EAAS,QAAU,CACjB,UAAW,CACT,GAAI,EACJ,KAAM,CACR,EACA,OAAQ,EACR,SAAUI,EAAU,EAAI,OAAS,KACjC,QAAS,CACP,OAAQ,mBACR,OAAQ,mBACR,SAAU,qBACV,IAAK,gBACL,OAAQ,oBACR,OAAQ,mBACR,UAAW,uBACX,QAAS,UACX,CACF,EAEAJ,EAAS,eAAiBQ,EAAY,EAE/BR,CAET,CAAC,C","file":"Areas/SunriseSeniorLiving/Scripts/4445.26756f6deb303608187d.bundle.js","sourcesContent":["import { Component } from '@verndale/core';\nimport Headroom from 'headroom.js';\n\nclass Module extends Component {\n  setupDefaults() {\n    this.dom = {\n      $displayTrigger: this.el._$('.community-nav-row__expand-trigger'),\n      $panel: this.el._$('.community-nav-row__to-stick-panel'),\n      $copyForm: _$('.share-popup'),\n      $copyField: _$('.share-popup__input'),      \n      $navLinks: this.el._$$('.community-nav-row__primary-link'),\n    };\n\n    this.expandedClass = 'community-nav-row--expanded';\n    this.stick();\n  }\n\n  addListeners() {\n    this.dom.$displayTrigger._on('click', this.handleDisplayTriggerClick.bind(this))\n    this.dom.$copyForm._on('submit', this.handleCopyFormSubmit.bind(this))\n    this.dom.$navLinks._on('click', this.handleLinkClick.bind(this))\n  }\n\n  handleDisplayTriggerClick() {\n    const isExpanded = this.el.classList.contains(this.expandedClass);\n\n    if (isExpanded) {\n      this.collapse()\n    } else {\n      this.expand();\n    }\n  }\n\n  handleListenToOutsidePrimaryNavPanel(e) {\n    const hasClickedOutsidePanel = !this.dom.$panel.contains(e.target);\n\n    if (hasClickedOutsidePanel) {\n      this.collapse();\n    }\n  }\n\n  handleCopyFormSubmit(e) {\n    e.preventDefault();\n    this.dom.$copyField.select();\n    navigator.clipboard.writeText(this.dom.$copyField.value);\n  }\n\n  handleLinkClick(e) {\n    e.preventDefault();\n\n    var url = e.target.getAttribute('href');\n    var eventId = e.target.getAttribute('data-event-id');\n\n    const { Boxever, _boxever_settings } = window;\n\n    if (!Boxever || !_boxever_settings || !eventId) {\n      window.location = url;\n      return;\n    }\n\n    const eventToSend = {\n      channel: 'WEB',\n      type: eventId,\n      pos: window._boxever_settings.pointOfSale,\n      browser_id: Boxever.getID()\n    };\n\n    Boxever.eventCreate(\n      eventToSend,\n      data => {\n        window.location = url;\n      },\n      'json'\n    );\n  }\n\n  expand() {\n    this.el.classList.add(this.expandedClass);\n    document._on('mousedown', this.handleListenToOutsidePrimaryNavPanel.bind(this));\n  }\n\n  collapse() {\n    this.el.classList.remove(this.expandedClass);\n    document.removeEventListener('click', this.handleListenToOutsidePrimaryNavPanel.bind(this));\n  }\n\n  stick() {\n    new Headroom(this.el, {\n      offset: this.el.offsetTop,\n      classes : {\n        initial : 'community-nav-row',\n        pinned : 'community-nav-row--visible',\n        unpinned : 'community-nav-row--hidden',\n        top : '-',\n        notTop : '-',\n        bottom : '-',\n        notBottom : '-',\n        frozen: '-'\n      }\n    }).init();\n  }\n}\n\nexport default Module;\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"],"sourceRoot":""}