UNPKG

@frsource/tiny-carousel-core

Version:

Core module for @frsource/tiny-carousel, based on CSS scroll snap feature 🚀

3 lines (2 loc) • 2.69 kB
import{on as t,addScrollEndListener as i,off as s,findXSnapIndex as h}from"@frsource/tiny-carousel-utils";function r(t,i){for(var s=0;s<i.length;s++){var h=i[s];h.enumerable=h.enumerable||!1,h.configurable=!0,"value"in h&&(h.writable=!0),Object.defineProperty(t,h.key,h)}}var n={active:0,className:"frs-tc",classNameOverflow:"frs-tc--o",itemClassName:"frs-tc-item",hideScrollClassName:"frs-hide-scroll",overflow:!0,items:[]},o=/*#__PURE__*/function(){function o(t,i){void 0===i&&(i={}),this.carouselElement=void 0,this.config=void 0,this.t=void 0,this.i=void 0,this.h=void 0,this.carouselElement=t,this.config=Object.assign({},n,i),this.i=this.resetActive.bind(this),this.h=this.handleOverflow.bind(this)}o.updateDefaultConfig=function(t){Object.assign(n,t)};var e,c,u,f=o.prototype;return f.handleOverflow=function(){this.config.overflow&&this.config.items.length&&(-1!==this.active&&this.active!==this.config.items.length||this.goTo(this.active))},f.use=function(t){return t.install.apply(t,[this].concat([].slice.call(arguments,1))),this},f.init=function(){var s=this;return t(this.carouselElement,"scroll",this.i,{passive:!0}),this.h=i(this.carouselElement,this.h),this.config.items.length||(this.config.items=this.findPossibleItems()),this.carouselElement.classList.add(this.config.className),this.carouselElement.classList.add(this.config.hideScrollClassName),this.config.overflow&&this.carouselElement.classList.add(this.config.classNameOverflow),this.config.items.forEach(function(t){var i=t.classList,h=t.dataset;i.contains(s.config.itemClassName)||(h.tcACls="",i.add(s.config.itemClassName))}),this.goTo(this.config.active),this},f.destroy=function(){return s(this.carouselElement,"scroll",this.i),s(this.carouselElement,"scroll",this.h),this},f.goTo=function(t){var i=this.config.items.length;if(i){if(this.config.overflow){for(;t<0;)t+=i;for(;t>=i;)t-=i}else t<0?t=0:t>=i&&(t=i-1);this.carouselElement.scrollLeft=this.config.items[t].offsetLeft}return this},f.next=function(){return this.goTo(this.active+1)},f.prev=function(){return this.goTo(this.active-1)},f.resetActive=function(){this.t=void 0},f.findPossibleItems=function(){var t=Array.from(this.carouselElement.children),i=this.config.itemClassName,s=t.filter(function(t){return!("tcACls"in t.dataset)&&t.classList.contains(i)});return s.length?s:t},e=o,u=[{key:"defaultConfig",get:function(){return Object.assign({},n)}}],(c=[{key:"active",get:function(){return void 0!==this.t||(this.t=h(this.carouselElement,this.config.items,this.config.overflow)),this.t}}])&&r(e.prototype,c),u&&r(e,u),Object.defineProperty(e,"prototype",{writable:!1}),o}();export{o as TinyCarousel}; //# sourceMappingURL=index.module.js.map