1import{h as i,N as l}from"./vue.00f7c436.js";import{_ as h,bc as u,a5 as d,bd as n,H as c,be as f,O as s,bf as g}from"./index.474d7b13.js";import"./sentry.09480738.js";const p={name:"TmlCarousel",props:{title:String,breakpoints:{type:Object,default:()=>({xs:1,md:2,lg:3})},spacing:{type:Number,default:0},overlap:{type:Number,default:0},ratio:{type:Number},minHeight:String,maxHeight:String,height:String,pageIndicators:{type:String,default:"none"},activeItemOverride:{type:Number,default:null},makeActiveItemFirst:{type:Boolean,default:!1},iconSize:{type:String,default:"1.5em"}},data(){return{faChevronLeft:u.faChevronLeft,faChevronRight:d.faChevronRight,debug:!1,carouselPage:0,carouselViewportWidth:0,carouselScrollX:0,slideCount:0,targetItemIndex:null,slidesPerPage:1}},computed:{recalculatedInnerRatio(){return(this.innerSlideWidth-this.spacing)*this.ratio/(this.outerSlideWidth-this.spacing)},internalOverlap(){return this.pageCount===1?0:this.overlap},pageCount(){return Math.max(Math.ceil(this.slideCount/this.slidesPerPage),1)},innerSlideWidth(){return(this.carouselViewportWidth+this.spacing-this.internalOverlap*2)/this.slidesPerPage},outerSlideWidth(){return(this.carouselViewportWidth+this.spacing-this.internalOverlap)/this.slidesPerPage},clampedOffset(){let e=this.slideCount*this.innerSlideWidth+this.internalOverlap*2-this.carouselViewportWidth-this.spacing;return this.pageCount<=2&&(e-=(this.outerSlideWidth-this.innerSlideWidth)*(this.slidesPerPage-this.pageCount-this.slidesPerPage)+this.internalOverlap),e},calculatedOffset(){return this.carouselPage*(this.innerSlideWidth*this.slidesPerPage)},carouselOffset(){if(this.targetItemIndex!==null){const e=this.targetItemIndex*this.innerSlideWidth;return Math.min(e,this.clampedOffset)}return Math.min(this.calculatedOffset,this.clampedOffset)||0},carouselHasNext(){return this.pageCount-1>this.carouselPage},carouselHasPrevious(){return this.carouselPage>0||this.makeActiveItemFirst&&this.targetItemIndex!==null&&this.targetItemIndex>0},calculatedCarouselPage(){return Math.ceil(this.carouselScrollX/(this.slidesPerPage*this.innerSlideWidth)-.5)}},watch:{activeItemOverride(e){e!==null&&e>=0&&(this.makeActiveItemFirst?this.goToItemAsFirst(e):this.goToItem(e))}},mounted(){window.addEventListener("resize",this.handleResize),this.resizeObserver=new ResizeObserver(()=>{const e=this.getInnerElWidth();e>0&&e!==this.carouselViewportWidth&&this.onResize()}),this.attachResizeObserver(),this.onResize()},updated(){this.attachResizeObserver(),this.carouselViewportWidth===0&&this.getInnerElWidth()>0&&this.onResize()},unmounted(){window.removeEventListener("resize",this.handleResize),this.resizeObserver&&this.resizeObserver.disconnect(),this._observingEl=null},methods:{getBreakpoint:n,attachResizeObserver(){this.resizeObserver&&this.$refs.carouselContainer&&!this._observingEl&&(this.resizeObserver.observe(this.$refs.carouselContainer),this._observingEl=this.$refs.carouselContainer)},onResize(){this.carouselPage=0,this.slidesPerPage=n(this.breakpoints)||1,this.carouselViewportWidth=this.getInnerElWidth(),this.updateScrollX()},handleResize(){this.onResize(),setTimeout(()=>{this.onResize()},100)},getInnerElWidth(){return this.$refs.carouselContainer?this.$refs.carouselContainer.getBoundingClientRect().width:0},getRatioByIndex(e){return this.slideCount?this.atStartOrEndOfCarousel(e)?this.recalculatedInnerRatio:this.ratio:1},atStartOrEndOfCarousel(e){return e<this.slidesPerPage||e>=this.slideCount-this.slidesPerPage},ensureHeight(e){let t=e;return t||(t=[]),Array.isArray(t)&&!t.includes("h-full")?t.push("h-full"):c(t)?t["h-full"]=!0:typeof t=="string"&&(t.split(" ").includes("h-full")||(t=t.concat(" h-full"))),t},updateScrollX(){this.carouselScrollX=this.$refs.carouselScrollBox?this.$refs.carouselScrollBox.scrollLeft:0},move(e){this.carouselPage<=0&&e<0?this.carouselPage=0:this.carouselPage+=e,this.targetItemIndex=null},go(e){this.carouselPage=e,this.targetItemIndex=null},goToItem(e){if(e>=0&&e<this.slideCount){const t=Math.floor(e/this.slidesPerPage),r=e-this.targetItemIndex;Math.abs(r)>this.slidesPerPage&&(this.targetItemIndex=null),this.carouselPage=Math.min(t,this.pageCount-1)}},goToItemAsFirst(e){if(e>=0&&e<this.slideCount){this.targetItemIndex=e;const t=Math.floor(e/this.slidesPerPage);this.carouselPage=Math.min(t,this.pageCount-1)}}}
1,render(){if(!this.$slots.default)return console.warn("TmlCarousel is missing a default slot"),null;let e=this.$slots.default({getRatioByIndex:this.getRatioByIndex});return e=f(e),this.slideCount=e==null?void 0:e.length,this.slideCount?i("div",{class:{"tml-carousel":!0,relative:!0,"overflow-hidden":!0},style:{marginBottom:["none","inset"].includes(this.pageIndicators)?0:"1em"}},[this.title?i("h4",{class:{"px-4":s("md"),"mb-2":!0}},[g(this.title)]):[],i("div",{class:{"carousel-container w-full h-full relative":!0},ref:"carouselContainer"},[i("a",{class:{"carousel-navigation flex justify-center items-center":!0,"carousel-navigation-hidden":s("md")||!this.carouselHasPrevious,left:!0},style:{fontSize:this.iconSize},href:"#",onClick:t=>{t.preventDefault(),t.stopPropagation(),this.move(-1)}},[i(l("font-awesome-icon"),{icon:this.faChevronLeft})]),i("div",{class:{inner:!0,flex:!0,"overflow-x-auto":s("md"),"h-full":!0},style:{transform:s("md")?void 0:`translateX(-${Math.round(this.carouselOffset)}px)`,overflowY:s("md")?"hidden":void 0},ref:"carouselScrollBox",onScroll:()=>{this.updateScrollX()}},[e.map((t,r)=>{const o=r===0,a=this.atStartOrEndOfCarousel(r)?this.outerSlideWidth:this.innerSlideWidth;return t.props.class=this.ensureHeight(t.props.class),i("div",{class:["slide h-full"],style:{flex:`0 0 ${Math.round(a-this.spacing)}px`,marginRight:`${Math.round(this.spacing)}px`,marginLeft:`${o&&this.overlap>0&&s("md")?16:0}px`}},[this.debug?i("div",{class:["h-full"],style:{padding:"8px",boxShadow:"inset 0 0 0 2px red"}},[i("div",["spacing",": ",this.spacing]),i("div",["width",": ",Math.round(a-this.spacing)]),i("div",["index",": ",r]),i("div",["offset",": ",Math.round(this.carouselOffset)]),i("div",["ratio",": ",this.getRatioByIndex(r)])]):t])}),this.overlap>0?i("div",{style:{flex:`0 0 ${s("md")?16-Math.max(1,this.spacing):0}px`},class:["flex","pseudo-carousel-item"]}):[]]),i("a",{class:{"carousel-navigation flex justify-center items-center":!0,"carousel-navigation-hidden":s("md")||!this.carouselHasNext,right:!0},style:{fontSize:this.iconSize},href:"#",onClick:t=>{t.preventDefault(),t.stopPropagation(),this.move(1)}},[i(l("font-awesome-icon"),{icon:this.faChevronRight})])]),i("div",{class:{"flex justify-center items-between absolute carousel-position":!0,"carousel-position-hidden":this.internalOverlap!==0||this.pageCount===1},style:{bottom:`${this.pageIndicators==="inset"?"1em":"-1.5em"}`,pointerEvents:"none"}},Array.from(Array(this.pageCount)).map((t,r)=>i("span",{class:{indicator:!0,active:r===(s("md")?this.calculatedCarouselPage:this.carouselPage)}})))]):null}},C=h(p,[["__scopeId","data-v-29cf5f3a"]]);export{C as default}; 2//# sourceMappingURL=TmlCarousel.32b3139b.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.