UNPKG

ngx-bootstrap

Version:
1 lines 52.8 kB
{"version":3,"file":"ngx-bootstrap-carousel.mjs","sources":["../../../../src/carousel/carousel.config.ts","../../../../src/carousel/utils.ts","../../../../src/carousel/carousel.component.ts","../../../../src/carousel/carousel.component.html","../../../../src/carousel/slide.component.ts","../../../../src/carousel/carousel.module.ts","../../../../src/carousel/ngx-bootstrap-carousel.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CarouselConfig {\n /* Default interval of auto changing of slides */\n interval = 5000;\n\n /* Is loop of auto changing of slides can be paused */\n noPause = false;\n\n /* Is slides can wrap from the last to the first slide */\n noWrap = false;\n\n /* Show carousel-indicators */\n showIndicators = true;\n\n /* Slides can be paused on focus */\n pauseOnFocus = false;\n\n /* If `true` - carousel indicators indicate slides chunks works ONLY if singleSlideOffset = FALSE */\n indicatorsByChunk = false;\n\n /* If value more then 1 — carousel works in multilist mode */\n itemsPerSlide = 1;\n\n /* If `true` — carousel shifts by one element. By default carousel shifts by number\n of visible elements (itemsPerSlide field) */\n singleSlideOffset = false;\n}\n","/**\n * Returns the index of the last element in the array where predicate is true, and -1\n * otherwise.\n * @param array The source array to search in\n * @param predicate find calls predicate once for each element of the array, in descending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n */\nexport function findLastIndex<T>(array: T[], predicate: (value: T, index: number, obj: T[]) => boolean): number {\n let l = array.length;\n\n while (l--) {\n if (predicate(array[l], l, array)) {\n return l;\n }\n }\n\n return -1;\n}\n\nexport function chunkByNumber<T>(array: T[], size: number): T[][] {\n const out = [];\n const n = Math.ceil(array.length / size);\n let i = 0;\n\n while (i < n) {\n const chunk = array.splice(0, i === n - 1 && size < array.length ? array.length : size);\n\n out.push(chunk);\n i++;\n }\n\n return out;\n}\n\nexport function isNumber(value?: unknown): value is number {\n return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';\n}\n","/***\n * pause (not yet supported) (?string='hover') - event group name which pauses\n * the cycling of the carousel, if hover pauses on mouseenter and resumes on\n * mouseleave keyboard (not yet supported) (?boolean=true) - if false\n * carousel will not react to keyboard events\n * note: swiping not yet supported\n */\n/****\n * Problems:\n * 1) if we set an active slide via model changes, .active class remains on a\n * current slide.\n * 2) if we have only one slide, we shouldn't show prev/next nav buttons\n * 3) if first or last slide is active and noWrap is true, there should be\n * \"disabled\" class on the nav buttons.\n * 4) default interval should be equal 5000\n */\n\nimport {\n Component, EventEmitter, Input, NgZone, OnDestroy, Output, AfterViewInit, Inject, PLATFORM_ID\n} from '@angular/core';\nimport { isPlatformBrowser, NgIf, NgFor, NgStyle } from '@angular/common';\n\nimport { LinkedList, getBsVer, IBsVersion } from 'ngx-bootstrap/utils';\nimport { SlideComponent } from './slide.component';\nimport { CarouselConfig } from './carousel.config';\nimport { findLastIndex, chunkByNumber, isNumber } from './utils';\nimport { SlideWithIndex, IndexedSlideList } from './models';\n\nexport enum Direction {\n UNKNOWN,\n NEXT,\n PREV\n}\n\nlet _currentId = 1;\n\n/**\n * Base element to create carousel\n */\n@Component({\n selector: 'carousel',\n templateUrl: './carousel.component.html',\n standalone: true,\n imports: [NgIf, NgFor, NgStyle]\n})\nexport class CarouselComponent implements AfterViewInit, OnDestroy {\n /* If `true` — carousel will not cycle continuously and will have hard stops (prevent looping) */\n @Input() noWrap = false;\n /* If `true` — will disable pausing on carousel mouse hover */\n @Input() noPause = false;\n /* If `true` — carousel-indicators are visible */\n @Input() showIndicators = true;\n /* If `true` - autoplay will be stopped on focus */\n @Input() pauseOnFocus = false;\n /* If `true` - carousel indicators indicate slides chunks\n works ONLY if singleSlideOffset = FALSE */\n @Input() indicatorsByChunk = false;\n /* If value more then 1 — carousel works in multilist mode */\n @Input() itemsPerSlide = 1;\n /* If `true` — carousel shifts by one element. By default carousel shifts by number\n of visible elements (itemsPerSlide field) */\n @Input() singleSlideOffset = false;\n /** Turn on/off animation. Animation doesn't work for multilist carousel */\n @Input() isAnimated = false;\n\n /** Will be emitted when active slide has been changed. Part of two-way-bindable [(activeSlide)] property */\n @Output()\n activeSlideChange = new EventEmitter<number>(false);\n\n /** Will be emitted when active slides has been changed in multilist mode */\n @Output()\n slideRangeChange = new EventEmitter<number[]|void>();\n\n /** Index of currently displayed slide(started for 0) */\n @Input()\n set activeSlide(index: number) {\n if (this.multilist) {\n return;\n }\n\n if (isNumber(index)) {\n this.customActiveSlide = index;\n }\n\n if (this._slides.length && index !== this._currentActiveSlide) {\n this._select(index);\n }\n }\n\n get activeSlide(): number {\n return this._currentActiveSlide || 0;\n }\n\n /* Index to start display slides from it */\n @Input()\n startFromIndex = 0;\n\n /**\n * Delay of item cycling in milliseconds. If false, carousel won't cycle\n * automatically.\n */\n @Input()\n get interval(): number {\n return this._interval;\n }\n\n set interval(value: number) {\n this._interval = value;\n this.restartTimer();\n }\n\n get slides(): SlideComponent[] {\n return this._slides.toArray();\n }\n\n get isFirstSlideVisible(): boolean {\n const indexes = this.getVisibleIndexes();\n if (!indexes || (indexes instanceof Array && !indexes.length)) {\n return false;\n }\n\n return indexes.includes(0);\n }\n\n get isLastSlideVisible(): boolean {\n const indexes = this.getVisibleIndexes();\n if (!indexes || (indexes instanceof Array && !indexes.length)) {\n return false;\n }\n\n return indexes.includes(this._slides.length -1);\n }\n\n protected currentInterval?: number;\n protected _currentActiveSlide?: number;\n protected _interval = 5000;\n protected _slides: LinkedList<SlideComponent> = new LinkedList<SlideComponent>();\n protected _chunkedSlides?: SlideWithIndex[][];\n protected _slidesWithIndexes?: SlideWithIndex[];\n protected _currentVisibleSlidesIndex = 0;\n protected isPlaying = false;\n protected destroyed = false;\n private customActiveSlide?: number;\n currentId = 0;\n\n get _bsVer(): IBsVersion {\n return getBsVer();\n }\n\n constructor(config: CarouselConfig, private ngZone: NgZone, @Inject(PLATFORM_ID) public platformId: number) {\n Object.assign(this, config);\n this.currentId = _currentId++;\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.singleSlideOffset) {\n this.indicatorsByChunk = false;\n }\n if (this.multilist) {\n this._chunkedSlides = chunkByNumber(\n this.mapSlidesAndIndexes(),\n this.itemsPerSlide\n );\n this.selectInitialSlides();\n }\n\n if (this.customActiveSlide && !this.multilist) {\n this._select(this.customActiveSlide);\n }\n }, 0);\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n }\n\n /**\n * Adds new slide. If this slide is first in collection - set it as active\n * and starts auto changing\n * @param slide\n */\n addSlide(slide: SlideComponent): void {\n this._slides.add(slide);\n\n if (this.multilist && this._slides.length <= this.itemsPerSlide) {\n slide.active = true;\n }\n\n if (!this.multilist && this.isAnimated) {\n slide.isAnimated = true;\n }\n\n if (!this.multilist && this._slides.length === 1) {\n this._currentActiveSlide = undefined;\n if (!this.customActiveSlide) {\n this.activeSlide = 0;\n }\n this.play();\n }\n\n if (this.multilist && this._slides.length > this.itemsPerSlide) {\n this.play();\n }\n }\n\n /**\n * Removes specified slide. If this slide is active - will roll to another\n * slide\n * @param slide\n */\n removeSlide(slide: SlideComponent): void {\n const remIndex = this._slides.indexOf(slide);\n\n if (this._currentActiveSlide === remIndex) {\n // removing of active slide\n let nextSlideIndex: number;\n if (this._slides.length > 1) {\n // if this slide last - will roll to first slide, if noWrap flag is\n // FALSE or to previous, if noWrap is TRUE in case, if this slide in\n // middle of collection, index of next slide is same to removed\n nextSlideIndex = !this.isLast(remIndex)\n ? remIndex\n : this.noWrap ? remIndex - 1 : 0;\n }\n this._slides.remove(remIndex);\n\n // prevents exception with changing some value after checking\n setTimeout(() => {\n this._select(nextSlideIndex);\n }, 0);\n } else {\n this._slides.remove(remIndex);\n const currentSlideIndex = this.getCurrentSlideIndex();\n setTimeout(() => {\n // after removing, need to actualize index of current active slide\n this._currentActiveSlide = currentSlideIndex;\n this.activeSlideChange.emit(this._currentActiveSlide);\n }, 0);\n }\n }\n\n nextSlideFromInterval(force = false): void {\n this.move(Direction.NEXT, force);\n }\n\n /**\n * Rolling to next slide\n * @param force: {boolean} if true - will ignore noWrap flag\n */\n nextSlide(force = false): void {\n if (this.isPlaying) {\n this.restartTimer();\n }\n this.move(Direction.NEXT, force);\n }\n\n /**\n * Rolling to previous slide\n * @param force: {boolean} if true - will ignore noWrap flag\n */\n previousSlide(force = false): void {\n if (this.isPlaying) {\n this.restartTimer();\n }\n this.move(Direction.PREV, force);\n }\n\n getFirstVisibleIndex(): number {\n return this.slides.findIndex(this.getActive);\n }\n\n getLastVisibleIndex(): number {\n return findLastIndex(this.slides, this.getActive);\n }\n\n getActive = (slide: SlideComponent) => slide.active;\n\n move(direction: Direction, force = false): void {\n const firstVisibleIndex = this.getFirstVisibleIndex();\n const lastVisibleIndex = this.getLastVisibleIndex();\n\n if (this.noWrap) {\n if (\n direction === Direction.NEXT &&\n this.isLast(lastVisibleIndex) ||\n direction === Direction.PREV &&\n firstVisibleIndex === 0\n ) {\n return;\n }\n }\n\n if (!this.multilist) {\n this.activeSlide = this.findNextSlideIndex(direction, force) || 0;\n } else {\n this.moveMultilist(direction);\n }\n }\n\n /**\n * Swith slides by enter, space and arrows keys\n * @internal\n */\n keydownPress(event: KeyboardEvent) {\n if (event.keyCode === 13 || event.key === 'Enter' || event.keyCode === 32 || event.key === 'Space') {\n this.nextSlide();\n event.preventDefault();\n\n return;\n }\n\n if (event.keyCode === 37 || event.key === 'LeftArrow') {\n this.previousSlide();\n\n return;\n }\n\n if (event.keyCode === 39 || event.key === 'RightArrow') {\n this.nextSlide();\n\n return;\n }\n }\n\n /**\n * Play on mouse leave\n * @internal\n */\n onMouseLeave(): void {\n if (!this.pauseOnFocus) {\n this.play();\n }\n }\n\n /**\n * Play on mouse up\n * @internal\n */\n onMouseUp(): void {\n if (!this.pauseOnFocus) {\n this.play();\n }\n }\n\n /**\n * When slides on focus autoplay is stopped(optional)\n * @internal\n */\n pauseFocusIn(): void {\n if (this.pauseOnFocus) {\n this.isPlaying = false;\n this.resetTimer();\n }\n }\n\n /**\n * When slides out of focus autoplay is started\n * @internal\n */\n pauseFocusOut(): void {\n this.play();\n }\n\n /**\n * Rolling to specified slide\n * @param index: {number} index of slide, which must be shown\n */\n selectSlide(index: number): void {\n if (this.isPlaying) {\n this.restartTimer();\n }\n\n if (!this.multilist) {\n this.activeSlide = this.indicatorsByChunk ? index * this.itemsPerSlide : index;\n } else {\n this.selectSlideRange(this.indicatorsByChunk ? index * this.itemsPerSlide : index);\n }\n }\n\n /**\n * Starts a auto changing of slides\n */\n play(): void {\n if (!this.isPlaying) {\n this.isPlaying = true;\n this.restartTimer();\n }\n }\n\n /**\n * Stops a auto changing of slides\n */\n pause(): void {\n if (!this.noPause) {\n this.isPlaying = false;\n this.resetTimer();\n }\n }\n\n /**\n * Finds and returns index of currently displayed slide\n */\n getCurrentSlideIndex(): number {\n return this._slides.findIndex(this.getActive);\n }\n\n /**\n * Defines, whether the specified index is last in collection\n * @param index\n */\n isLast(index: number): boolean {\n return index + 1 >= this._slides.length;\n }\n\n /**\n * Defines, whether the specified index is first in collection\n * @param index\n */\n isFirst(index: number): boolean {\n return index === 0;\n }\n\n indicatorsSlides(): SlideComponent[] {\n return this.slides.filter(\n (slide: SlideComponent, index: number) => !this.indicatorsByChunk || index % this.itemsPerSlide === 0\n );\n }\n\n private selectInitialSlides(): void {\n const startIndex = this.startFromIndex <= this._slides.length\n ? this.startFromIndex\n : 0;\n\n this.hideSlides();\n\n if (this.singleSlideOffset) {\n this._slidesWithIndexes = this.mapSlidesAndIndexes();\n\n if (this._slides.length - startIndex < this.itemsPerSlide) {\n const slidesToAppend = this._slidesWithIndexes.slice(0, startIndex);\n\n this._slidesWithIndexes = [\n ...this._slidesWithIndexes,\n ...slidesToAppend\n ]\n .slice(slidesToAppend.length)\n .slice(0, this.itemsPerSlide);\n } else {\n this._slidesWithIndexes = this._slidesWithIndexes.slice(\n startIndex,\n startIndex + this.itemsPerSlide\n );\n }\n\n this._slidesWithIndexes.forEach((slide: SlideWithIndex) => slide.item.active = true);\n this.makeSlidesConsistent(this._slidesWithIndexes);\n } else {\n this.selectRangeByNestedIndex(startIndex);\n }\n\n this.slideRangeChange.emit(this.getVisibleIndexes());\n }\n\n /**\n * Defines next slide index, depending of direction\n * @param direction: Direction(UNKNOWN|PREV|NEXT)\n * @param force: {boolean} if TRUE - will ignore noWrap flag, else will\n * return undefined if next slide require wrapping\n */\n private findNextSlideIndex(direction: Direction, force: boolean): number | void {\n let nextSlideIndex = 0;\n\n if (\n !force &&\n (this.isLast(this.activeSlide) &&\n direction !== Direction.PREV &&\n this.noWrap)\n ) {\n return;\n }\n\n switch (direction) {\n case Direction.NEXT:\n // if this is last slide, not force, looping is disabled\n // and need to going forward - select current slide, as a next\n if (typeof this._currentActiveSlide === 'undefined') {\n nextSlideIndex = 0;\n break;\n }\n if (!this.isLast(this._currentActiveSlide)) {\n nextSlideIndex = this._currentActiveSlide + 1;\n break;\n }\n nextSlideIndex = !force && this.noWrap ? this._currentActiveSlide : 0;\n break;\n case Direction.PREV:\n // if this is first slide, not force, looping is disabled\n // and need to going backward - select current slide, as a next\n if (typeof this._currentActiveSlide === 'undefined') {\n nextSlideIndex = 0;\n break;\n }\n if (this._currentActiveSlide > 0) {\n nextSlideIndex = this._currentActiveSlide - 1;\n break;\n }\n if (!force && this.noWrap) {\n nextSlideIndex = this._currentActiveSlide;\n break;\n }\n nextSlideIndex = this._slides.length - 1;\n break;\n default:\n throw new Error('Unknown direction');\n }\n\n return nextSlideIndex;\n }\n\n private mapSlidesAndIndexes(): SlideWithIndex[] {\n return this.slides\n .slice()\n .map((slide: SlideComponent, index: number) => {\n return {\n index,\n item: slide\n };\n });\n }\n\n\n private selectSlideRange(index: number): void {\n if (this.isIndexInRange(index)) {\n return;\n }\n\n this.hideSlides();\n\n if (!this.singleSlideOffset) {\n this.selectRangeByNestedIndex(index);\n } else {\n const startIndex = this.isIndexOnTheEdges(index)\n ? index\n : index - this.itemsPerSlide + 1;\n\n const endIndex = this.isIndexOnTheEdges(index)\n ? index + this.itemsPerSlide\n : index + 1;\n\n this._slidesWithIndexes = this.mapSlidesAndIndexes().slice(startIndex, endIndex);\n this.makeSlidesConsistent(this._slidesWithIndexes);\n\n this._slidesWithIndexes.forEach((slide: SlideWithIndex) => slide.item.active = true);\n }\n\n this.slideRangeChange.emit(this.getVisibleIndexes());\n }\n\n private selectRangeByNestedIndex(index: number): void {\n if (!this._chunkedSlides) {\n return;\n }\n\n const selectedRange = this._chunkedSlides\n .map((slidesList, i: number) => {\n return {\n index: i,\n list: slidesList\n };\n })\n .find(\n (slidesList: IndexedSlideList) => {\n return slidesList.list.find(slide => slide.index === index) !== undefined;\n }\n );\n\n if (!selectedRange) {\n return;\n }\n\n this._currentVisibleSlidesIndex = selectedRange.index;\n\n this._chunkedSlides[selectedRange.index].forEach((slide: SlideWithIndex) => {\n slide.item.active = true;\n });\n }\n\n private isIndexOnTheEdges(index: number): boolean {\n return (\n index + 1 - this.itemsPerSlide <= 0 ||\n index + this.itemsPerSlide <= this._slides.length\n );\n }\n\n private isIndexInRange(index: number): boolean {\n if (this.singleSlideOffset && this._slidesWithIndexes) {\n const visibleIndexes = this._slidesWithIndexes.map((slide: SlideWithIndex) => slide.index);\n\n return visibleIndexes.indexOf(index) >= 0;\n }\n\n return (\n index <= this.getLastVisibleIndex() &&\n index >= this.getFirstVisibleIndex()\n );\n }\n\n private hideSlides(): void {\n this.slides.forEach((slide: SlideComponent) => slide.active = false);\n }\n\n private isVisibleSlideListLast(): boolean {\n if (!this._chunkedSlides) {\n return false;\n }\n\n return this._currentVisibleSlidesIndex === this._chunkedSlides.length - 1;\n }\n\n private isVisibleSlideListFirst(): boolean {\n return this._currentVisibleSlidesIndex === 0;\n }\n\n private moveSliderByOneItem(direction: Direction): void {\n let firstVisibleIndex: number;\n let lastVisibleIndex: number;\n let indexToHide: number;\n let indexToShow: number;\n\n if (this.noWrap) {\n firstVisibleIndex = this.getFirstVisibleIndex();\n lastVisibleIndex = this.getLastVisibleIndex();\n\n indexToHide = direction === Direction.NEXT\n ? firstVisibleIndex\n : lastVisibleIndex;\n\n indexToShow = direction !== Direction.NEXT\n ? firstVisibleIndex - 1\n : !this.isLast(lastVisibleIndex)\n ? lastVisibleIndex + 1 : 0;\n\n const slideToHide = this._slides.get(indexToHide);\n if (slideToHide) {\n slideToHide.active = false;\n }\n\n const slideToShow = this._slides.get(indexToShow);\n if (slideToShow) {\n slideToShow.active = true;\n }\n\n const slidesToReorder = this.mapSlidesAndIndexes().filter(\n (slide: SlideWithIndex) => slide.item.active\n );\n\n this.makeSlidesConsistent(slidesToReorder);\n if (this.singleSlideOffset) {\n this._slidesWithIndexes = slidesToReorder;\n }\n\n this.slideRangeChange.emit(this.getVisibleIndexes());\n return;\n }\n\n if (!this._slidesWithIndexes || !this._slidesWithIndexes[0]) {\n return;\n }\n\n let index: number;\n\n firstVisibleIndex = this._slidesWithIndexes[0].index;\n lastVisibleIndex = this._slidesWithIndexes[this._slidesWithIndexes.length - 1].index;\n\n if (direction === Direction.NEXT) {\n this._slidesWithIndexes.shift();\n\n index = this.isLast(lastVisibleIndex)\n ? 0\n : lastVisibleIndex + 1;\n\n const item = this._slides.get(index);\n\n if (item) {\n this._slidesWithIndexes.push({ index, item });\n }\n } else {\n this._slidesWithIndexes.pop();\n index = this.isFirst(firstVisibleIndex)\n ? this._slides.length - 1\n : firstVisibleIndex - 1;\n\n const item = this._slides.get(index);\n if (item) {\n this._slidesWithIndexes = [{ index, item }, ...this._slidesWithIndexes];\n }\n }\n\n this.hideSlides();\n\n this._slidesWithIndexes.forEach(slide => slide.item.active = true);\n this.makeSlidesConsistent(this._slidesWithIndexes);\n\n this.slideRangeChange.emit(\n this._slidesWithIndexes.map((slide: SlideWithIndex) => slide.index)\n );\n }\n\n private makeSlidesConsistent = (slides: SlideWithIndex[]): void => {\n slides.forEach((slide: SlideWithIndex, index: number) => slide.item.order = index);\n };\n\n private moveMultilist(direction: Direction): void {\n if (this.singleSlideOffset) {\n this.moveSliderByOneItem(direction);\n } else {\n this.hideSlides();\n\n if (this.noWrap) {\n this._currentVisibleSlidesIndex = direction === Direction.NEXT\n ? this._currentVisibleSlidesIndex + 1\n : this._currentVisibleSlidesIndex - 1;\n } else if (direction === Direction.NEXT) {\n this._currentVisibleSlidesIndex = this.isVisibleSlideListLast()\n ? 0\n : this._currentVisibleSlidesIndex + 1;\n } else {\n if (this.isVisibleSlideListFirst()) {\n this._currentVisibleSlidesIndex = this._chunkedSlides\n ? this._chunkedSlides.length - 1\n : 0;\n } else {\n this._currentVisibleSlidesIndex = this._currentVisibleSlidesIndex - 1;\n }\n }\n\n if (this._chunkedSlides) {\n this._chunkedSlides[this._currentVisibleSlidesIndex].forEach(\n (slide: SlideWithIndex) => slide.item.active = true\n );\n }\n this.slideRangeChange.emit(this.getVisibleIndexes());\n }\n }\n\n private getVisibleIndexes(): number[] | void {\n if (!this.singleSlideOffset && this._chunkedSlides) {\n return this._chunkedSlides[this._currentVisibleSlidesIndex]\n .map((slide: SlideWithIndex) => slide.index);\n }\n\n if (this._slidesWithIndexes) {\n return this._slidesWithIndexes.map((slide: SlideWithIndex) => slide.index);\n }\n }\n\n /**\n * Sets a slide, which specified through index, as active\n * @param index\n */\n private _select(index: number): void {\n if (isNaN(index)) {\n this.pause();\n\n return;\n }\n\n if (!this.multilist && typeof this._currentActiveSlide !== 'undefined') {\n const currentSlide = this._slides.get(this._currentActiveSlide);\n if (typeof currentSlide !== 'undefined') {\n currentSlide.active = false;\n }\n }\n\n const nextSlide = this._slides.get(index);\n\n if (typeof nextSlide !== 'undefined') {\n this._currentActiveSlide = index;\n nextSlide.active = true;\n this.activeSlide = index;\n this.activeSlideChange.emit(index);\n }\n }\n\n /**\n * Starts loop of auto changing of slides\n */\n private restartTimer() {\n this.resetTimer();\n const interval = +this.interval;\n if (!isNaN(interval) && interval > 0 && isPlatformBrowser(this.platformId)) {\n this.currentInterval = this.ngZone.runOutsideAngular<number>(() => {\n return window.setInterval(() => {\n const nInterval = +this.interval;\n this.ngZone.run(() => {\n if (\n this.isPlaying &&\n !isNaN(this.interval) &&\n nInterval > 0 &&\n this.slides.length\n ) {\n this.nextSlideFromInterval();\n } else {\n this.pause();\n }\n });\n }, interval);\n });\n }\n }\n\n get multilist(): boolean {\n return this.itemsPerSlide > 1;\n }\n\n /**\n * Stops loop of auto changing of slides\n */\n private resetTimer(): void {\n if (this.currentInterval) {\n clearInterval(this.currentInterval);\n this.currentInterval = void 0;\n }\n }\n\n checkDisabledClass(buttonType: 'prev' | 'next'): boolean {\n if (buttonType === 'prev') {\n return (this.activeSlide === 0 && this.noWrap && !this.multilist) || (this.isFirstSlideVisible && this.noWrap && this.multilist);\n }\n\n return (this.isLast(this.activeSlide) && this.noWrap && !this.multilist) || (this.isLastSlideVisible && this.noWrap && this.multilist);\n }\n}\n","<div (mouseenter)=\"pause()\"\n (mouseleave)=\"onMouseLeave()\"\n (mouseup)=\"onMouseUp()\"\n (keydown)=\"keydownPress($event)\"\n (focusin)=\"pauseFocusIn()\"\n (focusout)=\"pauseFocusOut()\"\n [id]=\"'carousel' + currentId\"\n class=\"carousel slide\" tabindex=\"0\">\n <ng-container *ngIf=\"!_bsVer.isBs5 && showIndicators && slides.length > 1\">\n <ol class=\"carousel-indicators\">\n <li *ngFor=\"let slide of indicatorsSlides(); let i = index;\"\n [class.active]=\"slide.active === true\"\n (click)=\"selectSlide(i)\">\n </li>\n </ol>\n </ng-container>\n <ng-container *ngIf=\"_bsVer.isBs5 && showIndicators && slides.length > 1\">\n <div class=\"carousel-indicators\">\n <button\n *ngFor=\"let slide of indicatorsSlides(); let i = index;\"\n [class.active]=\"slide.active === true\"\n (click)=\"selectSlide(i)\"\n type=\"button\"\n [attr.data-bs-target]=\"'#carousel' + currentId\"\n [attr.data-bs-slide-to]=\"i\" aria-current=\"true\"\n >\n </button>\n </div>\n </ng-container>\n <div class=\"carousel-inner\" [ngStyle]=\"{'display': multilist ? 'flex' : 'block'}\">\n <ng-content></ng-content>\n </div>\n <a class=\"left carousel-control carousel-control-prev\"\n href=\"javascript:void(0);\"\n [class.disabled]=\"checkDisabledClass('prev')\"\n [attr.data-bs-target]=\"'#carousel' + currentId\"\n *ngIf=\"slides.length > 1\"\n (click)=\"previousSlide()\"\n tabindex=\"0\" role=\"button\">\n <span class=\"icon-prev carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"sr-only visually-hidden\">Previous</span>\n </a>\n\n <a class=\"right carousel-control carousel-control-next\"\n href=\"javascript:void(0);\"\n *ngIf=\"slides.length > 1\"\n (click)=\"nextSlide()\"\n [class.disabled]=\"checkDisabledClass('next')\"\n [attr.data-bs-target]=\"'#carousel' + currentId\"\n tabindex=\"0\" role=\"button\">\n <span class=\"icon-next carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"sr-only visually-hidden\">Next</span>\n </a>\n</div>\n","import {\n Component,\n HostBinding,\n OnDestroy,\n Input,\n OnInit\n} from '@angular/core';\n\nimport { CarouselComponent } from './carousel.component';\n\n@Component({\n selector: 'slide',\n template: `\n <div [class.active]=\"active\" class=\"item\">\n <ng-content></ng-content>\n </div>\n `,\n host: {\n '[attr.aria-hidden]': '!active',\n '[class.multilist-margin]': 'multilist'\n },\n styles: [`\n :host.carousel-animation {\n transition: opacity 0.6s ease, visibility 0.6s ease;\n float: left;\n }\n :host.carousel-animation.active {\n opacity: 1;\n visibility: visible;\n }\n :host.carousel-animation:not(.active) {\n display: block;\n position: absolute;\n opacity: 0;\n visibility: hidden;\n }\n :host.multilist-margin {\n margin-right: auto;\n }\n :host.carousel-item {\n perspective: 1000px;\n }\n `],\n standalone: true\n})\nexport class SlideComponent implements OnInit, OnDestroy {\n /** Is current slide active */\n @HostBinding('class.active')\n @Input()\n active = false;\n\n @HostBinding('style.width') itemWidth = '100%';\n @HostBinding('style.order') order = 0;\n @HostBinding('class.carousel-animation') isAnimated = false;\n\n /** Wraps element by appropriate CSS classes */\n @HostBinding('class.item')\n @HostBinding('class.carousel-item')\n addClass = true;\n\n /** Link to Parent(container-collection) component */\n protected carousel: CarouselComponent;\n multilist = false;\n constructor(carousel: CarouselComponent) {\n this.carousel = carousel;\n }\n\n /** Fires changes in container collection after adding a new slide instance */\n ngOnInit(): void {\n this.carousel.addSlide(this);\n this.itemWidth = `${100 / this.carousel.itemsPerSlide}%`;\n this.multilist = this.carousel?.itemsPerSlide > 1;\n }\n\n /** Fires changes in container collection after removing of this slide instance */\n ngOnDestroy(): void {\n this.carousel.removeSlide(this);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { CarouselComponent } from './carousel.component';\nimport { SlideComponent } from './slide.component';\n\n@NgModule({\n imports: [SlideComponent, CarouselComponent],\n exports: [SlideComponent, CarouselComponent]\n})\nexport class CarouselModule {\n // @deprecated method not required anymore, will be deleted in v19.0.0\n static forRoot(): ModuleWithProviders<CarouselModule> {\n return {\n ngModule: CarouselModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CarouselComponent"],"mappings":"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