{"version":3,"file":"testimonialCardsCarousel-CJK5ygKj.js","sources":["../../src/scripts/modules/testimonialCardsCarousel.ts"],"sourcesContent":["import { Component } from '@verndale/core';\nimport { mediaQuery } from '../helpers/media-queries';\nimport QuoteCard from './quoteCard';\nimport { EventBusSingleton } from '../helpers/eventBus';\n\nclass TestimonialCardsCarousel extends Component {\n mq = mediaQuery('tabletLandscape');\n quoteCards: QuoteCard[] = [];\n currentCardControls: QuoteCard | undefined = undefined;\n\n constructor(el: HTMLElement) {\n super(el);\n this.addListeners();\n this.init();\n }\n\n setupDefaults() {\n this.dom = {\n cards: this.el.querySelectorAll('.quote-card'),\n innerContainer: this.el.querySelector('.testimonial-cards-carousel__inner'),\n wrapper: this.el.querySelector('.testimonial-cards-carousel__wrapper'),\n videoControls: this.el.querySelector(\n '.testimonial-cards-carousel__video-controls'\n ),\n controls: this.el.querySelector('.testimonial-cards-carousel__controls')\n };\n\n EventBusSingleton.subscribe('nextSlide', () => {\n this.handleNextClick();\n });\n\n EventBusSingleton.subscribe('prevSlide', () => {\n this.handlePrevClick();\n });\n }\n\n addListeners() {\n if (this.mq) {\n window.addEventListener('resize', this.setContainerHeight.bind(this));\n }\n }\n\n init() {\n this.initQuoteCards();\n this.setContainerHeight();\n this.setInitClasses();\n this.setCurrentCardControls();\n this.showControls();\n this.setEvents();\n this.updateAriaHidden();\n\n if ((this.dom.cards as NodeList).length === 1) {\n this.removeControls();\n this.el.classList.add('testimonial-cards-carousel--single-card');\n }\n }\n\n initQuoteCards() {\n const cards = this.dom.cards as NodeList;\n cards.forEach(card => {\n const cardInstance = new QuoteCard(card as HTMLElement);\n this.quoteCards = [...this.quoteCards, cardInstance];\n });\n }\n\n showControls() {\n const controls = this.el.querySelector(\n '.slide--1 .testimonial-cards-carousel__controls'\n ) as HTMLElement;\n controls.style.opacity = '1';\n }\n\n setInitClasses() {\n const cards = this.el.querySelectorAll('.quote-card');\n cards.forEach((card, index) => {\n card.classList.add('slide');\n card.classList.add(`slide--${cards.length - index}`);\n });\n }\n\n setClasses() {\n const cards = this.el.querySelectorAll('.quote-card');\n cards.forEach((card, index) => {\n card.classList.add(`slide--${cards.length - index}`);\n });\n }\n\n removeClasses() {\n const cards = this.el.querySelectorAll('.quote-card');\n cards.forEach(card => {\n card.classList.remove(`slide--1`);\n card.classList.remove(`slide--2`);\n card.classList.remove(`slide--3`);\n card.classList.remove(`slide--4`);\n });\n }\n\n setEvents() {\n if (this.dom.prevButton) {\n (this.dom.prevButton as HTMLElement).addEventListener(\n 'click',\n this.handlePrevClick.bind(this)\n );\n }\n\n if (this.dom.nextButton) {\n (this.dom.nextButton as HTMLElement).addEventListener(\n 'click',\n this.handleNextClick.bind(this)\n );\n }\n }\n\n removeControls() {\n const buttons = this.el.querySelectorAll('.testimonial-cards-carousel__control');\n buttons.forEach(button => {\n (button as HTMLElement).style.visibility = 'hidden';\n });\n }\n\n setContainerHeight() {\n const innerContainer = this.dom.innerContainer as HTMLElement;\n if (!this.mq.matches) {\n innerContainer.removeAttribute('style');\n\n const cardsHeight = Math.max(\n ...([...(this.dom.cards as NodeList)] as HTMLElement[]).map(card => card.clientHeight)\n );\n\n if (innerContainer) {\n innerContainer.style.height = `${cardsHeight}px`;\n }\n } else {\n innerContainer.removeAttribute('style');\n }\n }\n\n setCurrentCardControls() {\n const currentCard = this.el.querySelector('.slide--1') as HTMLElement;\n if (currentCard) {\n this.currentCardControls = this.quoteCards.find(card => card.id === currentCard.id);\n } else {\n this.currentCardControls = this.quoteCards[this.quoteCards.length - 1];\n }\n\n this.checkProviders();\n }\n\n checkProviders() {\n if (this.currentCardControls) {\n if (this.currentCardControls.provider === 'vimeo') {\n this.showControlsOnProviderChange();\n } else if (this.currentCardControls.provider === 'youtube') {\n this.showControlsOnProviderChange();\n } else if (this.currentCardControls.provider === 'default') {\n this.showControlsOnProviderChange();\n } else {\n this.hideControlsOnProviderChange();\n }\n }\n }\n\n showControlsOnProviderChange() {\n const controls = this.el.querySelector(\n '.slide--1 .testimonial-cards-carousel__controls'\n ) as HTMLElement;\n const videoControls = this.el.querySelector(\n '.slide--1 .testimonial-cards-carousel__video-controls'\n ) as HTMLElement;\n\n controls.classList.add('testimonial-cards-carousel__controls--white-background');\n videoControls.removeAttribute('hidden');\n }\n\n hideControlsOnProviderChange() {\n const controls = this.el.querySelector(\n '.slide--1 .testimonial-cards-carousel__controls'\n ) as HTMLElement;\n const videoControls = this.el.querySelector(\n '.slide--1 .testimonial-cards-carousel__video-controls'\n ) as HTMLElement;\n\n controls.classList.remove('testimonial-cards-carousel__controls--white-background');\n videoControls.setAttribute('hidden', 'true');\n }\n\n setDefaultIconsOnPlayer() {\n const playButton = this.dom.playButton as HTMLElement;\n const muteButton = this.dom.muteButton as HTMLElement;\n\n if (playButton) {\n playButton.removeAttribute('data-active');\n }\n\n if (muteButton) {\n muteButton.removeAttribute('data-active');\n }\n }\n\n toggleControls() {\n const cards = this.el.querySelectorAll('.quote-card');\n\n (cards as NodeList).forEach(card => {\n if ((card as HTMLElement)?.classList.contains('slide--1')) {\n const cardControls = (card as HTMLElement).querySelector(\n '.testimonial-cards-carousel__controls'\n ) as HTMLElement;\n cardControls.style.opacity = '1';\n } else {\n const cardControls = (card as HTMLElement).querySelector(\n '.testimonial-cards-carousel__controls'\n ) as HTMLElement;\n cardControls.style.opacity = '0';\n }\n });\n }\n\n prependList() {\n const cards = this.el.querySelectorAll('.quote-card');\n const wrapper = this.dom.wrapper as HTMLElement;\n [...(cards as NodeList)].slice(cards.length - 1, cards.length);\n const lastCard = cards[cards.length - 1] as HTMLElement;\n\n lastCard.classList.remove('active');\n lastCard.classList.remove('transform-next');\n wrapper.prepend(lastCard);\n this.removeClasses();\n this.setClasses();\n this.toggleControls();\n this.setDefaultIconsOnPlayer();\n this.setCurrentCardControls();\n this.updateAriaHidden();\n }\n\n appendToList() {\n const cards = this.el.querySelectorAll('.quote-card');\n const wrapper = this.dom.wrapper as HTMLElement;\n [...(cards as NodeList)].slice(0, 1);\n const firstCard = cards[0] as HTMLElement;\n\n firstCard.classList.add('transform-prev');\n wrapper.append(firstCard);\n this.removeClasses();\n this.setClasses();\n this.toggleControls();\n this.setDefaultIconsOnPlayer();\n this.setCurrentCardControls();\n this.updateAriaHidden();\n }\n\n handleNextClick() {\n const cards = this.el.querySelectorAll('.quote-card');\n if (cards.length === 1) return;\n const lastCard = cards[cards.length - 1] as HTMLElement;\n const prevLastCard = cards[cards.length - 2] as HTMLElement;\n lastCard.classList.remove('transform-prev');\n lastCard.classList.add('transform-next');\n lastCard.classList.add('active');\n prevLastCard.classList.add('active');\n\n setTimeout(() => {\n this.prependList();\n }, 250);\n }\n\n handlePrevClick() {\n const cards = this.el.querySelectorAll('.quote-card');\n if (cards.length === 1) return;\n const lastCard = cards[cards.length - 1] as HTMLElement;\n const prevLastCard = cards[cards.length - 2] as HTMLElement;\n lastCard.classList.remove('transform-prev');\n lastCard.classList.add('active');\n prevLastCard.classList.remove('active');\n\n setTimeout(() => {\n this.appendToList();\n }, 250);\n }\n\n updateAriaHidden() {\n const cards = this.el.querySelectorAll('.quote-card');\n cards.forEach(card => {\n if (\n card.classList.contains('active') ||\n card.classList.contains('transform-prev') ||\n card.classList.contains('transform-next') ||\n card.classList.contains('slide--1')\n ) {\n card.setAttribute('aria-hidden', 'false');\n card.removeAttribute('inert');\n } else {\n card.setAttribute('aria-hidden', 'true');\n card.setAttribute('inert', '');\n }\n });\n }\n}\n\nexport default TestimonialCardsCarousel;\n"],"names":["TestimonialCardsCarousel","Component","el","__publicField","mediaQuery","EventBusSingleton","card","cardInstance","QuoteCard","controls","cards","index","button","innerContainer","cardsHeight","currentCard","videoControls","playButton","muteButton","cardControls","wrapper","lastCard","firstCard","prevLastCard"],"mappings":"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"}