(function(){for(var i=0,t=["ms","moz","webkit","o"],n=0;n<t.length&&!window.requestAnimationFrame;++n)window.requestAnimationFrame=window[t[n]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[t[n]+"CancelAnimationFrame"]||window[t[n]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(n){var t=(new Date).getTime(),r=Math.max(0,16-(t-i)),u=window.setTimeout(function(){n(t+r)},r);return i=t+r,u});window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})})(),function(n,t){typeof exports=="object"&&typeof module!="undefined"?t(exports):typeof define=="function"&&define.amd?define(["exports"],t):t(n.StickySidebar={})}(this,function(n){"use strict";function r(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n["default"]:n}function u(n,t){return t={exports:{}},n(t,t.exports),t.exports}var i=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},t=u(function(n,t){(function(n,i){typeof undefined=="function"&&undefined.amd?undefined(["exports"],i):i(t)})(i,function(n){function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function");}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function n(n,t){for(var i,r=0;r<t.length;r++)i=t[r],i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}return function(t,i,r){return i&&n(t.prototype,i),r&&n(t,r),t}}(),t=function(){var n=".stickySidebar",t={topSpacing:0,bottomSpacing:0,containerSelector:!1,innerWrapperSelector:".inner-wrapper-sticky",stickyClass:"is-affixed",resizeSensor:!0,minWidth:!1};return function(){function u(n){var r=this,f=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(i(this,u),this.options=u.extend(t,f),this.sidebar="string"==typeof n?document.querySelector(n):n,"undefined"==typeof this.sidebar)throw new Error("There is no specific sidebar element.");this.sidebarInner=!1;this.container=this.sidebar.parentElement;this.affixedType="STATIC";this.direction="down";this.support={transform:!1,transform3d:!1};this._initialized=!1;this._reStyle=!1;this._breakpoint=!1;this.dimensions={translateY:0,maxTranslateY:0,topSpacing:0,lastTopSpacing:0,bottomSpacing:0,lastBottomSpacing:0,sidebarHeight:0,sidebarWidth:0,containerTop:0,containerHeight:0,viewportHeight:0,viewportTop:0,lastViewportTop:0};["handleEvent"].forEach(function(n){r[n]=r[n].bind(r)});this.initialize()}return r(u,[{key:"initialize",value:function(){var i=this,n,t;if(this._setSupportFeatures(),this.options.innerWrapperSelector&&(this.sidebarInner=this.sidebar.querySelector(this.options.innerWrapperSelector),null===this.sidebarInner&&(this.sidebarInner=!1)),!this.sidebarInner){for(n=document.createElement("div"),n.setAttribute("class","inner-wrapper-sticky"),this.sidebar.appendChild(n);this.sidebar.firstChild!=n;)n.appendChild(this.sidebar.firstChild);this.sidebarInner=this.sidebar.querySelector(".inner-wrapper-sticky")}if(this.options.containerSelector&&(t=document.querySelectorAll(this.options.containerSelector),t=Array.prototype.slice.call(t),t.forEach(function(n){n.contains(i.sidebar)&&(i.container=n)}),!t.length))throw new Error("The container does not contains on the sidebar.");"function"!=typeof this.options.topSpacing&&(this.options.topSpacing=parseInt(this.options.topSpacing)||0);"function"!=typeof this.options.bottomSpacing&&(this.options.bottomSpacing=parseInt(this.options.bottomSpacing)||0);this._widthBreakpoint();this.calcDimensions();this.stickyPosition();this.bindEvents();this._initialized=!0}},{key:"bindEvents",value:function(){window.addEventListener("resize",this,{passive:!0,capture:!1});window.addEventListener("scroll",this,{passive:!0,capture:!1});this.sidebar.addEventListener("update"+n,this);this.options.resizeSensor&&"undefined"!=typeof ResizeSensor&&(new ResizeSensor(this.sidebarInner,this.handleEvent),new ResizeSensor(this.container,this.handleEvent))}},{key:"handleEvent",value:function(n){this.updateSticky(n)}},{key:"calcDimensions",value:function(){if(!this._breakpoint){var n=this.dimensions;n.containerTop=u.offsetRelative(this.container).top;n.containerHeight=this.container.clientHeight;n.containerBottom=n.containerTop+n.containerHeight;n.sidebarHeight=this.sidebarInner.offsetHeight;n.sidebarWidth=this.sidebarInner.offsetWidth;n.viewportHeight=window.innerHeight;n.maxTranslateY=n.containerHeight-n.sidebarHeight;this._calcDimensionsWithScroll()}}},{key:"_calcDimensionsWithScroll",value:function(){var n=this.dimensions;n.sidebarLeft=u.offsetRelative(this.sidebar).left;n.viewportTop=document.documentElement.scrollTop||document.body.scrollTop;n.viewportBottom=n.viewportTop+n.viewportHeight;n.viewportLeft=document.documentElement.scrollLeft||document.body.scrollLeft;n.topSpacing=this.options.topSpacing;n.bottomSpacing=this.options.bottomSpacing;"function"==typeof n.topSpacing&&(n.topSpacing=parseInt(n.topSpacing(this.sidebar))||0);"function"==typeof n.bottomSpacing&&(n.bottomSpacing=parseInt(n.bottomSpacing(this.sidebar))||0);"VIEWPORT-TOP"===this.affixedType?n.topSpacing<n.lastTopSpacing&&(n.translateY+=n.lastTopSpacing-n.topSpacing,this._reStyle=!0):"VIEWPORT-BOTTOM"===this.affixedType&&n.bottomSpacing<n.lastBottomSpacing&&(n.translateY+=n.lastBottomSpacing-n.bottomSpacing,this._reStyle=!0);n.lastTopSpacing=n.topSpacing;n.lastBottomSpacing=n.bottomSpacing}},{key:"isSidebarFitsViewport",value:function(){var n=this.dimensions,t=this.scrollDirection==="down"?n.lastBottomSpacing:n.lastTopSpacing;return this.dimensions.sidebarHeight+t<this.dimensions.viewportHeight}},{key:"observeScrollDir",value:function(){var n=this.dimensions,t;n.lastViewportTop!==n.viewportTop&&(t="down"===this.direction?Math.min:Math.max,n.viewportTop===t(n.viewportTop,n.lastViewportTop)&&(this.direction="down"===this.direction?"up":"down"))}},{key:"getAffixType",value:function(){this._calcDimensionsWithScroll();var n=this.dimensions,i=n.viewportTop+n.topSpacing,t=this.affixedType;return i<=n.containerTop||n.containerHeight<=n.sidebarHeight?(n.translateY=0,t="STATIC"):t="up"===this.direction?this._getAffixTypeScrollingUp():this._getAffixTypeScrollingDown(),n.translateY=Math.max(0,n.translateY),n.translateY=Math.min(n.containerHeight,n.translateY),n.translateY=Math.round(n.translateY),n.lastViewportTop=n.viewportTop,t}},{key:"_getAffixTypeScrollingDown",value:function(){var n=this.dimensions,i=n.sidebarHeight+n.containerTop,r=n.viewportTop+n.topSpacing,u=n.viewportBottom-n.bottomSpacing,t=this.affixedType;return this.isSidebarFitsViewport()?n.sidebarHeight+r>=n.containerBottom?(n.translateY=n.containerBottom-i,t="CONTAINER-BOTTOM"):r>=n.containerTop&&(n.translateY=r-n.containerTop,t="VIEWPORT-TOP"):n.containerBottom<=u?(n.translateY=n.containerBottom-i,t="CONTAINER-BOTTOM"):i+n.translateY<=u?(n.translateY=u-i,t="VIEWPORT-BOTTOM"):n.containerTop+n.translateY<=r&&0!==n.translateY&&n.maxTranslateY!==n.translateY&&(t="VIEWPORT-UNBOTTOM"),t}},{key:"_getAffixTypeScrollingUp",value:function(){var n=this.dimensions,r=n.sidebarHeight+n.containerTop,i=n.viewportTop+n.topSpacing,u=n.viewportBottom-n.bottomSpacing,t=this.affixedType;return i<=n.translateY+n.containerTop?(n.translateY=i-n.containerTop,t="VIEWPORT-TOP"):n.containerBottom<=u?(n.translateY=n.containerBottom-r,t="CONTAINER-BOTTOM"):this.isSidebarFitsViewport()||n.containerTop<=i&&0!==n.translateY&&n.maxTranslateY!==n.translateY&&(t="VIEWPORT-UNBOTTOM"),t}},{key:"_getStyle",value:function(n){var i,t,r;if("undefined"!=typeof n){i={inner:{},outer:{}};t=this.dimensions;switch(n){case"VIEWPORT-TOP":i.inner={position:"fixed",top:t.topSpacing,left:t.sidebarLeft-t.viewportLeft,width:t.sidebarWidth};break;case"VIEWPORT-BOTTOM":i.inner={position:"fixed",top:"auto",left:t.sidebarLeft,bottom:t.bottomSpacing,width:t.sidebarWidth};break;case"CONTAINER-BOTTOM":case"VIEWPORT-UNBOTTOM":r=this._getTranslate(0,t.translateY+"px");i.inner=r?{transform:r}:{position:"absolute",top:t.translateY,width:t.sidebarWidth}}switch(n){case"VIEWPORT-TOP":case"VIEWPORT-BOTTOM":case"VIEWPORT-UNBOTTOM":case"CONTAINER-BOTTOM":i.outer={height:t.sidebarHeight,position:"relative"}}return i.outer=u.extend({height:"",position:""},i.outer),i.inner=u.extend({position:"relative",top:"",left:"",bottom:"",width:"",transform:""},i.inner),i}}},{key:"stickyPosition",value:function(t){var o,f,s,e,h,c;if(!this._breakpoint){t=this._reStyle||t||!1;var l=this.options.topSpacing,a=this.options.bottomSpacing,i=this.getAffixType(),r=this._getStyle(i);if((this.affixedType!=i||t)&&i){o="affix."+i.toLowerCase().replace("viewport-","")+n;u.eventTrigger(this.sidebar,o);"STATIC"===i?u.removeClass(this.sidebar,this.options.stickyClass):u.addClass(this.sidebar,this.options.stickyClass);for(f in r.outer)s="number"==typeof r.outer[f]?"px":"",this.sidebar.style[f]=r.outer[f]+s;for(e in r.inner)h="number"==typeof r.inner[e]?"px":"",this.sidebarInner.style[e]=r.inner[e]+h;c="affixed."+i.toLowerCase().replace("viewport-","")+n;u.eventTrigger(this.sidebar,c)}else this._initialized&&(this.sidebarInner.style.left=r.inner.left);this.affixedType=i}}},{key:"_widthBreakpoint",value:function(){window.innerWidth<=this.options.minWidth?(this._breakpoint=!0,this.affixedType="STATIC",this.sidebar.removeAttribute("style"),u.removeClass(this.sidebar,this.options.stickyClass),this.sidebarInner.removeAttribute("style")):this._breakpoint=!1}},{key:"updateSticky",value:function(){var n=this,t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};this._running||(this._running=!0,function(t){requestAnimationFrame(function(){switch(t){case"scroll":n._calcDimensionsWithScroll();n.observeScrollDir();n.stickyPosition();break;case"resize":default:n._widthBreakpoint();n.calcDimensions();n.stickyPosition(!0)}n._running=!1})}(t.type))}},{key:"_setSupportFeatures",value:function(){var n=this.support;n.transform=u.supportTransform();n.transform3d=u.supportTransform(!0)}},{key:"_getTranslate",value:function(){var n=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0,t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0,i=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;return this.support.transform3d?"translate3d("+n+", "+t+", "+i+")":this.support.translate?"translate("+n+", "+t+")":!1}},{key:"destroy",value:function(){var t,i,r;window.removeEventListener("resize",this,{capture:!1});window.removeEventListener("scroll",this,{capture:!1});this.sidebar.classList.remove(this.options.stickyClass);this.sidebar.style.minHeight="";this.sidebar.removeEventListener("update"+n,this);t={inner:{},outer:{}};t.inner={position:"",top:"",left:"",bottom:"",width:"",transform:""};t.outer={height:"",position:""};for(i in t.outer)this.sidebar.style[i]=t.outer[i];for(r in t.inner)this.sidebarInner.style[r]=t.inner[r];this.options.resizeSensor&&"undefined"!=typeof ResizeSensor&&(ResizeSensor.detach(this.sidebarInner,this.handleEvent),ResizeSensor.detach(this.container,this.handleEvent))}}],[{key:"supportTransform",value:function(n){var i=!1,t=n?"perspective":"transform",r=t.charAt(0).toUpperCase()+t.slice(1),u=document.createElement("support"),f=u.style;return(t+" "+["Webkit","Moz","O","ms"].join(r+" ")+r).split(" ").forEach(function(n){if(f[n]!==undefined)return i=n,!1}),i}},{key:"eventTrigger",value:function(n,t,i){var r;try{r=new CustomEvent(t,{detail:i})}catch(u){r=document.createEvent("CustomEvent");r.initCustomEvent(t,!0,!0,i)}n.dispatchEvent(r)}},{key:"extend",value:function(n,t){var r={};for(var i in n)r[i]="undefined"!=typeof t[i]?t[i]:n[i];return r}},{key:"offsetRelative",value:function(n){var t={left:0,top:0},i,r;do i=n.offsetTop,r=n.offsetLeft,isNaN(i)||(t.top+=i),isNaN(r)||(t.left+=r),n="BODY"===n.tagName?n.parentElement:n.offsetParent;while(n);return t}},{key:"addClass",value:function(n,t){u.hasClass(n,t)||(n.classList?n.classList.add(t):n.className+=" "+t)}},{key:"removeClass",value:function(n,t){u.hasClass(n,t)&&(n.classList?n.classList.remove(t):n.className=n.className.replace(new RegExp("(^|\\b)"+t.split(" ").join("|")+"(\\b|$)","gi")," "))}},{key:"hasClass",value:function(n,t){return n.classList?n.classList.contains(t):new RegExp("(^| )"+t+"( |$)","gi").test(n.className)}},{key:"defaults",get:function(){return t}}]),u}()}();n.default=t;window.StickySidebar=t})}),f=r(t);n["default"]=f;n.__moduleExports=t;Object.defineProperty(n,"__esModule",{value:!0})})