{"version":3,"file":"fundamental-ngx-core-carousel.mjs","sources":["../../../../libs/core/carousel/carousel-item.directive.ts","../../../../libs/core/carousel/carousel-item/carousel-item.component.ts","../../../../libs/core/carousel/carousel-item/carousel-item.component.html","../../../../libs/core/carousel/carousel.service.ts","../../../../libs/core/carousel/i18n/carousel-resources.ts","../../../../libs/core/carousel/carousel.component.ts","../../../../libs/core/carousel/carousel.component.html","../../../../libs/core/carousel/carousel.directive.ts","../../../../libs/core/carousel/carousel.module.ts","../../../../libs/core/carousel/fundamental-ngx-core-carousel.ts"],"sourcesContent":["import { Directive, ElementRef, HostBinding, Input } from '@angular/core';\n\nlet carouselItemCounter = 0;\n\n@Directive({\n    selector: '[fd-carousel-item], [fdCarouselItem]',\n    exportAs: 'fdCarouselItem',\n    standalone: true\n})\nexport class CarouselItemDirective<T = unknown> {\n    /** Value of the item , to keep some information inside */\n    @Input()\n    value: T;\n\n    /** Initial height value, needed when carousel is inside popover */\n    @Input()\n    initialHeight: number;\n\n    /** Initial height value, needed when carousel is inside popover */\n    @Input()\n    initialWidth: number;\n\n    /** Carousel Id, it has some default value if not set,  */\n    @Input()\n    @HostBinding('attr.id')\n    id: string = 'carousel-item-id-' + carouselItemCounter++;\n\n    /** @hidden */\n    constructor(private readonly _elementRef: ElementRef<HTMLElement>) {}\n\n    /** Native element  */\n    get element(): HTMLElement {\n        return this._elementRef.nativeElement;\n    }\n\n    /** Width of element */\n    getWidth(): number {\n        return this.element.getBoundingClientRect().width || this.initialWidth;\n    }\n\n    /** Height of element */\n    getHeight(): number {\n        return this.element.getBoundingClientRect().height || this.initialHeight;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    HostBinding,\n    Input,\n    signal,\n    ViewEncapsulation\n} from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport { CarouselItemInterface } from '../carousel.service';\n\nexport type Visibility = 'visible' | 'hidden';\n\nlet carouselItemCounter = 0;\n\n@Component({\n    selector: 'fd-carousel-item',\n    templateUrl: './carousel-item.component.html',\n    styles: [\n        `\n            .fd-carousel__slides {\n                min-width: initial !important;\n            }\n            .fd-carousel__item--active {\n                display: flex;\n                max-width: 100%;\n            }\n        `\n    ],\n    host: {\n        role: 'option',\n        class: 'fd-carousel__item fd-carousel__item--active',\n        '[attr.aria-setsize]': 'ariaSetsize()',\n        '[attr.aria-posinset]': 'ariaPosinset()',\n        '[attr.aria-selected]': 'ariaSelected()',\n        '[attr.aria-hidden]': 'ariaHidden()'\n    },\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [BusyIndicatorComponent]\n})\nexport class CarouselItemComponent<T = any> implements CarouselItemInterface {\n    /** Id of the Carousel items. */\n    @Input()\n    @HostBinding('attr.id')\n    id = `fd-carousel-item-${carouselItemCounter++}`;\n\n    /** Sets aria-label attribute for carousel item */\n    @Input()\n    @HostBinding('attr.aria-label')\n    ariaLabel: Nullable<string>;\n\n    /** Sets aria-labelledby attribute for carousel item */\n    @Input()\n    @HostBinding('attr.aria-labelledby')\n    ariaLabelledBy: Nullable<string>;\n\n    /** Sets aria-describedby attribute for carousel item */\n    @Input()\n    @HostBinding('attr.aria-describedby')\n    ariaDescribedBy: Nullable<string>;\n\n    /**\n     * Loading indicator when item is not yet loaded\n     */\n    @Input()\n    loading = false;\n\n    /** Sets tooltip for carousel item */\n    @Input()\n    @HostBinding('attr.title')\n    title = null;\n\n    /** Initial height value, needed when carousel is inside popover */\n    @Input()\n    initialHeight: number;\n\n    /** Initial height value, needed when carousel is inside popover */\n    @Input()\n    initialWidth: number;\n\n    /** Value of carousel item */\n    @Input()\n    value: T;\n\n    /** @hidden Hide/show slide, useful for managing tab order */\n    @HostBinding('style.visibility')\n    _visibility: Visibility = 'visible';\n\n    /** @hidden value for aria-setsize attribute */\n    ariaSetsize = signal<number>(0);\n\n    /** @hidden value for aria-posinset attribute */\n    ariaPosinset = signal<number>(0);\n\n    /** @hidden value for aria-selected attribute */\n    ariaSelected = signal<boolean>(false);\n\n    /** @hidden value for aria-hidden attribute */\n    ariaHidden = signal<boolean>(false);\n\n    /** @hidden */\n    set visibility(visibility: Visibility) {\n        this._visibility = visibility;\n    }\n\n    get visibility(): Visibility {\n        return this._visibility;\n    }\n\n    /** @hidden */\n    constructor(private readonly _elementRef: ElementRef<HTMLElement>) {}\n\n    /** Native element  */\n    get element(): HTMLElement {\n        return this._elementRef.nativeElement;\n    }\n\n    /** Width of element */\n    getWidth(): number {\n        return this.element.getBoundingClientRect().width || this.initialWidth;\n    }\n\n    /** Height of element */\n    getHeight(): number {\n        return this.element.getBoundingClientRect().height || this.initialHeight;\n    }\n}\n","<fd-busy-indicator [loading]=\"loading\" [style.max-width.%]=\"100\">\n    <ng-content></ng-content>\n</fd-busy-indicator>\n","import {\n    DOCUMENT,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Injectable,\n    OnDestroy,\n    QueryList,\n    inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Observable, fromEvent, merge } from 'rxjs';\n\nexport const DEFAULT_TRANSITION_DURATION = '150ms';\n\nexport interface CarouselItemInterface {\n    element: HTMLElement;\n    getHeight(): number;\n    getWidth(): number;\n}\n\nexport interface CarouselConfig {\n    /** Defines if carousel items are placed vertically */\n    vertical?: boolean;\n    /** Amount of visible elements in carousel */\n    elementsAtOnce?: number;\n    /** Defines if support for gestures, like touch swipe or mouse drag should be enabled */\n    gestureSupport?: boolean;\n    /** Defines if carousel should move elements to sides. It allows to slide infinitely in one direction */\n    infinite?: boolean;\n    /** Transition time of CSS translate, `150ms` by default */\n    transition?: string;\n}\n\nexport interface PanEndOutput {\n    item: CarouselItemInterface;\n    after: boolean;\n}\n\n/** @dynamic */\n@Injectable({\n    providedIn: 'root'\n})\nexport class CarouselService implements OnDestroy {\n    /** Event thrown when element is dragged. Emits \"true\" when drag starts and \"false\" when drag ends. */\n    readonly dragStateChange$: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Event thrown, when active element is changed */\n    readonly activeChange$: EventEmitter<PanEndOutput> = new EventEmitter<PanEndOutput>();\n\n    /** Configuration for carousel */\n    config: CarouselConfig;\n\n    /** Initial active item of carousel, position first + offset */\n    active: Nullable<CarouselItemInterface>;\n\n    /** Set to true for rtl mode */\n    isRtl = false;\n\n    /** carousel items query list */\n    items: QueryList<CarouselItemInterface>;\n\n    /** Current transition value in px */\n    set currentTransitionPx(currentTransitionPx: number) {\n        this._currentTransitionPx = currentTransitionPx;\n    }\n    get currentTransitionPx(): number {\n        return this._currentTransitionPx;\n    }\n\n    /** @hidden */\n    private get elementsAtOnce(): number {\n        const num = this.config?.elementsAtOnce ?? 1;\n\n        return Math.max(1, num);\n    }\n\n    /** @hidden */\n    private _lastDistance = 0;\n\n    /** @hidden */\n    private _currentTransitionPx = 0;\n\n    /** @hidden */\n    private _element: HTMLElement;\n\n    /** @hidden */\n    private _initialDragPosition = 0;\n\n    /** @hidden */\n    private _lastDragPosition = 0;\n\n    /** @hidden */\n    private _listenToMouseMove = false;\n    /** @hidden */\n    private _dragStarted = false;\n\n    /**\n     * @hidden\n     */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    constructor(@Inject(DOCUMENT) private readonly _document: Document | null) {}\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this.activeChange$.complete();\n        this.dragStateChange$.complete();\n    }\n\n    /** set initial values for the service */\n    initialise(\n        config: CarouselConfig,\n        items: QueryList<CarouselItemInterface>,\n        listElementReference: ElementRef\n    ): void {\n        this.config = config;\n        this.setElement(listElementReference);\n        this.setItems(items);\n\n        if (this.config.gestureSupport) {\n            this._setupGestures();\n        }\n    }\n\n    /** update config value for the service */\n    updateConfig(config: CarouselConfig): void {\n        this.config = config;\n    }\n\n    /** set element ref */\n    setElement(elementRef: ElementRef): void {\n        this._element = elementRef.nativeElement;\n    }\n\n    /** set items and assign active item, if not already there */\n    setItems(items: QueryList<CarouselItemInterface>): void {\n        this.items = items;\n\n        if (!this.active) {\n            this.active = this.items.first;\n        }\n    }\n\n    /** Change active element */\n    goToItem(item: CarouselItemInterface, smooth?: boolean): void {\n        let index = this._getIndexOfItem(item);\n        if (this.config.infinite) {\n            this._centerActive(index);\n\n            index = this._getIndexOfItem(item);\n        }\n\n        this._transitionToIndex(index, smooth);\n    }\n\n    /** pick next element and set it active */\n    pickNext(): void {\n        if (!this.active) {\n            this.active = this.items.first;\n        }\n\n        const activeItemIndex = this._getIndexOfItem(this.active);\n        const itemToActivate = this.items.get(activeItemIndex + 1) ?? this.items.first;\n\n        this.goToItem(itemToActivate, true);\n        this.active = itemToActivate;\n    }\n\n    /** pick previous element and set it active */\n    pickPrevious(): void {\n        if (!this.active) {\n            this.active = this.items.get(2);\n        }\n\n        const activeItemIndex = this._getIndexOfItem(this.active);\n        let itemToActivate = this.items.get(activeItemIndex - 1);\n\n        // case where slides can move infinitely in one direction\n        // handle case where on-load activeItemIndex = 0 and activeItemIndex - 1 returns undefined item from item array.\n        if (!itemToActivate) {\n            itemToActivate = this.items.last;\n        }\n\n        this.goToItem(itemToActivate, true);\n        this.active = itemToActivate;\n    }\n\n    /** @hidden */\n    private _centerActive(index: number): void {\n        const size = this._getSize(this.items.first);\n        if (isNaN(size)) {\n            return;\n        }\n        const middleIndex = Math.ceil(this.items.length / 2);\n        const offset = Math.ceil(this.elementsAtOnce / 2);\n        const missingItems = index + offset - middleIndex;\n        const array = this.items.toArray();\n\n        if (missingItems > 0) {\n            for (let i = 0; i < missingItems; i++) {\n                const item = array.shift();\n                item && array.push(item);\n            }\n        } else {\n            for (let i = 0; i < Math.abs(missingItems); i++) {\n                const item = array.pop();\n                item && array.unshift(item);\n            }\n        }\n\n        /** Changing order of elements in QueryList and Native HTML */\n        this.items.reset(array);\n        this.items.forEach((item) => item.element.parentNode?.appendChild(item.element));\n\n        /**\n         * For proper animation it's needed to transform elements,\n         * by changing transition by amount of elements placed at top/bottom\n         */\n        this._element.style.transitionDuration = '0s';\n        this._transitionCarousel(this._currentTransitionPx + this._getSize(this.items.first) * missingItems);\n    }\n\n    /** @hidden */\n    private _transitionToIndex(index: number, smooth?: boolean): void {\n        let transitionPx: number = this._getSize(this.items.first) * index;\n\n        this._element.style.transitionDuration = smooth ? this._getTransition() : '0s';\n\n        if (!this.isRtl || (this.config.vertical && this.isRtl)) {\n            transitionPx = -transitionPx;\n        }\n\n        this._transitionCarousel(transitionPx);\n    }\n\n    /** @hidden Get closes element, based on current transition */\n    private _getClosest(): CarouselItemInterface {\n        /** If transition is positive, it should go to first element */\n        if (\n            !this.config.infinite &&\n            ((!this.config.vertical &&\n                ((!this.isRtl && this._currentTransitionPx > 0) || (this.isRtl && this._currentTransitionPx < 0))) ||\n                (this.config.vertical && this._currentTransitionPx > 0))\n        ) {\n            return this.items.first;\n        }\n\n        const size = this._getSize(this.items.first);\n\n        /** When scroll is after half of element, then ext one should be active */\n        const halfApproached: boolean = Math.abs(this._currentTransitionPx % size) > size / 2;\n        /**\n         * Index based on transition px divided by size of elements,\n         * every element should have same width, otherwise it should be looped through all elements,\n         * which is not good for performance\n         */\n        let index = Math.ceil(Math.abs(this._currentTransitionPx / size));\n\n        // When elementsAtOnce > 1, swiping should stop at last index - elementsAtOnce\n        const elementsAtOnce = this.elementsAtOnce;\n        if (!this.config.infinite && elementsAtOnce > 1) {\n            // When there're less items in the carousel than the area might display, it should stop to first\n            if (this.items.length < elementsAtOnce) {\n                return this.items.first;\n            }\n\n            if (index + elementsAtOnce >= this.items.length) {\n                return this.items.get(this.items.length - elementsAtOnce) ?? this.items.first;\n            }\n        }\n\n        index = index + (halfApproached ? 0 : -1);\n        const item = this.items.get(index);\n\n        /** Checking if transition went out of scope of array */\n        return item || this.items.last;\n    }\n\n    /** @hidden */\n    private _getIndexOfItem(item?: CarouselItemInterface): number {\n        if (!item) {\n            return -1;\n        }\n        return this.items.toArray().findIndex((_item) => _item === item);\n    }\n\n    /** @hidden Getting size of carousel, width for horizontal, height for vertical */\n    private _getSize(item: CarouselItemInterface): number {\n        if (this.config.vertical) {\n            return item.getHeight();\n        }\n\n        return item.getWidth();\n    }\n\n    /** @hidden */\n    private _handlePan(delta: number): void {\n        const distance = delta - this._lastDistance;\n\n        this._lastDistance = delta;\n\n        this._transitionCarousel(this._currentTransitionPx + distance);\n    }\n\n    /** @hidden */\n    private _handlePanEnd(delta: number): void {\n        this._handlePan(delta);\n\n        const closestItem: CarouselItemInterface = this._getClosest();\n\n        this.goToItem(closestItem, true);\n\n        if (!this.active) {\n            this.active = closestItem;\n            this.activeChange$.emit({\n                item: closestItem,\n                after: delta < 0\n            });\n        } else if (this.active !== closestItem) {\n            this.active = closestItem;\n            this.activeChange$.emit({\n                item: closestItem,\n                after: delta < 0\n            });\n        }\n\n        this.dragStateChange$.emit(false);\n        this._lastDistance = 0;\n    }\n\n    /**\n     * @hidden Animates the carousel to the currently selected slide.\n     */\n    private _transitionCarousel(transitionPx: number): void {\n        this._currentTransitionPx = transitionPx;\n        const axis = this.config.vertical ? 'Y' : 'X';\n\n        this._element.style.transform = `translate${axis}(${this._currentTransitionPx}px)`;\n    }\n\n    /** @hidden Pam Start handler, removes transition duration, */\n    private _handlePanStart(): void {\n        this._element.style.transitionDuration = '0s';\n        this.dragStateChange$.emit(true);\n    }\n\n    /** @hidden */\n    private _setupGestures(): void {\n        this._setupDragStart();\n        this._setupDrag();\n        this._setupDragEnd();\n    }\n\n    /** @hidden */\n    private _subscribeToEvents(\n        events: string[],\n        element: HTMLElement | Document,\n        callback: (event: MouseEvent | TouchEvent) => void\n    ): void {\n        merge(events.map((e) => fromEvent<MouseEvent | TouchEvent>(element, e, { passive: true }))).forEach(\n            (evt: Observable<MouseEvent | TouchEvent>) => {\n                evt.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((event) => {\n                    callback(event);\n                });\n            }\n        );\n    }\n\n    /** @hidden */\n    private _setupDragStart(): void {\n        const events = ['mousedown', 'touchstart'];\n\n        this._subscribeToEvents(events, this._element, (event) => {\n            this._listenToMouseMove = true;\n            this._lastDragPosition = this._initialDragPosition = this._getDragCoordinate(event);\n            this._handlePanStart();\n        });\n    }\n\n    /** @hidden */\n    private _setupDrag(): void {\n        const events = ['mousemove', 'touchmove'];\n\n        if (!this._document) {\n            throw new Error(\n                `Could not setup drag event subscription. Expected to get document ref, got ${this._document} instead`\n            );\n        }\n\n        this._subscribeToEvents(events, this._document, (event) => {\n            const coordinate = this._getDragCoordinate(event);\n\n            if (!this._listenToMouseMove || coordinate === this._lastDragPosition) {\n                return;\n            }\n\n            this._dragStarted = true;\n            this._handlePan(this._getDraggedDelta(coordinate));\n        });\n    }\n\n    /** @hidden */\n    private _setupDragEnd(): void {\n        const events = ['mouseup', 'touchend'];\n\n        if (!this._document) {\n            throw new Error(\n                `Could not setup drag event subscription. Expected to get document ref, got ${this._document} instead`\n            );\n        }\n\n        this._subscribeToEvents(events, this._document, (event) => {\n            if (!this._listenToMouseMove) {\n                return;\n            }\n\n            if (this._dragStarted) {\n                this._handlePanEnd(this._getDraggedDelta(this._getDragCoordinate(event)));\n            } else {\n                this.dragStateChange$.emit(false);\n            }\n\n            this._listenToMouseMove = false;\n            this._dragStarted = false;\n        });\n    }\n\n    /** @hidden */\n    private _getTransition(): string {\n        return this.config?.transition ?? DEFAULT_TRANSITION_DURATION;\n    }\n\n    /** @hidden */\n    private _getDraggedDelta(offset: number): number {\n        this._lastDragPosition = offset;\n\n        return offset - this._initialDragPosition;\n    }\n\n    /** @hidden */\n    private _getDragCoordinate(event: MouseEvent | TouchEvent): number {\n        let coordinates: Touch | MouseEvent;\n\n        if (this._isTouchEvent(event)) {\n            coordinates = event.touches[0] || event.changedTouches[0];\n        } else {\n            coordinates = event;\n        }\n\n        return this.config.vertical ? coordinates.pageY : coordinates.pageX;\n    }\n\n    /** @hidden */\n    private _isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n        return window.TouchEvent && event instanceof TouchEvent;\n    }\n}\n","export interface FdCarouselResourceStrings {\n    fd_carousel_of?: string;\n    fd_carousel_reader?: string;\n}\n\nexport const CarouselResourceStringsEN: FdCarouselResourceStrings = {\n    fd_carousel_of: 'of',\n    fd_carousel_reader: 'Displaying item'\n};\n","import { Direction } from '@angular/cdk/bidi';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterContentInit,\n    AfterViewChecked,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    OnChanges,\n    Output,\n    QueryList,\n    Renderer2,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation,\n    computed,\n    effect,\n    inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyUtil, RtlService, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { merge } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { CarouselItemComponent } from './carousel-item/carousel-item.component';\nimport { CarouselConfig, CarouselItemInterface, CarouselService, PanEndOutput } from './carousel.service';\nimport { CarouselResourceStringsEN, FdCarouselResourceStrings } from './i18n/carousel-resources';\n\n/** Page limit to switch to numerical indicator */\nconst ICON_PAGE_INDICATOR_LIMIT = 8;\nexport type PageIndicatorsOrientation = 'bottom' | 'top';\n\nexport type CarouselBackgroundOptions = 'translucent' | 'transparent' | 'solid';\n\nexport enum SlideDirection {\n    None,\n    NEXT,\n    PREVIOUS\n}\nexport interface FittingSlidesAndWidth {\n    width: number;\n    slides: number;\n}\nlet carouselCounter = 0;\n\nclass CarouselActiveSlides {\n    constructor(\n        public readonly activeItems: CarouselItemComponent[],\n        public readonly slideDirection: string\n    ) {}\n}\n\n@Component({\n    selector: 'fd-carousel',\n    templateUrl: './carousel.component.html',\n    styleUrl: './carousel.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [CarouselService],\n    host: {\n        '[style.width]': 'width'\n    },\n    imports: [NgTemplateOutlet, NgClass, ButtonComponent, FdTranslatePipe]\n})\nexport class CarouselComponent implements AfterContentInit, AfterViewInit, AfterViewChecked, OnChanges {\n    /** ID for the Carousel. */\n    @Input()\n    @HostBinding('attr.id')\n    id = `fd-carousel-${carouselCounter++}`;\n\n    /** Sets aria-label attribute for carousel */\n    @Input()\n    ariaLabel = null;\n\n    /** Sets aria-labelledby attribute for carousel */\n    @Input()\n    ariaLabelledBy: string;\n\n    /** Sets aria-describedby attribute for carousel */\n    @Input()\n    ariaDescribedBy: string;\n\n    /** Sets position of page indicator container. Default position is bottom. */\n    @Input()\n    pageIndicatorsOrientation: PageIndicatorsOrientation = 'bottom';\n\n    /** Height for carousel container */\n    @Input()\n    height: string;\n\n    /** Width for carousel container */\n    @Input()\n    width = '100%';\n\n    /** If carousel is in circular loop */\n    @Input()\n    loop = false;\n\n    /** Shows/hides optional navigation button */\n    @Input()\n    navigation = true;\n\n    /** Show navigation button in page indicator container or inside content. Default is page indicator container on true value */\n    @Input()\n    navigatorInPageIndicator = true;\n\n    /** Convert to Numeric page indicator */\n    @Input()\n    numericIndicator = false;\n\n    /** Shows/hides optional page indicator container  */\n    @Input()\n    pageIndicatorContainer = true;\n\n    /** Shows/hides optional page indicator */\n    @Input()\n    pageIndicator = true;\n\n    /**\n     * An accessor that sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    set resourceStrings(value: FdCarouselResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    get resourceStrings(): FdCarouselResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /** Sets sliding duration in millie seconds. Default is 150 */\n    @Input()\n    slideTransitionDuration = 150;\n\n    /** Is swipe enabled */\n    @Input()\n    swipeEnabled = true;\n\n    /** Is carousel is vertical. Default value is false. */\n    @Input()\n    vertical = false;\n\n    /** Whether to hide top border of the Pagination Container. */\n    @Input()\n    noPaginationContainerBorder = false;\n\n    /** Background configuration for the Content container. */\n    @Input()\n    contentBackground: CarouselBackgroundOptions = 'translucent';\n\n    /** Background configuration for the Pagination container */\n    @Input()\n    pageIndicatorBackground: CarouselBackgroundOptions = 'solid';\n\n    /** Number of items to be visible at a time */\n    @Input()\n    set visibleSlidesCount(value: number | 'auto') {\n        this._visibleSlidesCount = value;\n        this._visibleSlidesNumericCount = this._getVisibleSlidesCount();\n    }\n\n    get visibleSlidesCount(): number | 'auto' {\n        return this._visibleSlidesCount;\n    }\n\n    /** An event that is emitted after a slide transition has happened */\n    @Output()\n    readonly slideChange: EventEmitter<CarouselActiveSlides> = new EventEmitter<CarouselActiveSlides>();\n\n    /** @hidden */\n    @ContentChildren(CarouselItemComponent, {\n        descendants: true\n    })\n    slides: QueryList<CarouselItemComponent>;\n\n    /** @hidden */\n    @ViewChild('slideContainer')\n    slideContainer: ElementRef;\n\n    /** Carousel container element. */\n    @ViewChild('carouselContainer')\n    carouselContainer: ElementRef;\n\n    /** @hidden Start index of currently active items */\n    currentActiveSlidesStartIndex = 0;\n\n    /** @hidden End index of currently active items */\n    currentActiveSlidesEndIndex = 0;\n\n    /** @hidden an array of id(s) of currently active item(s) */\n    currentActiveSlidesIds: string[] = [];\n\n    /** @hidden the total number of slides in the carousel */\n    totalSlides = 0;\n\n    /** @hidden Make left navigation button disabled */\n    leftButtonDisabled = false;\n\n    /** @hidden Make right navigation button disabled */\n    rightButtonDisabled = false;\n\n    /** @hidden Fake array for counting number of page indicator */\n    pageIndicatorsCountArray: number[] = [];\n\n    /** @hidden */\n    _slidesWrapperSize = 0;\n\n    /** @hidden A string containing the id(s) of the active item(s) */\n    ariaActivedescendant: string;\n\n    /** @hidden */\n    get _contentSizePx(): string {\n        return this._slidesWrapperSize ? `${this._slidesWrapperSize}px` : this.width;\n    }\n\n    /** @hidden handles rtl service */\n    protected readonly dir = computed<Direction>(() => (this._isRtl() ? 'rtl' : 'ltr'));\n\n    /** @hidden */\n    private _visibleSlidesCount: number | 'auto' = 1;\n\n    /** @hidden */\n    private _visibleSlidesNumericCount = 1;\n\n    /** @hidden */\n    private _resourceStrings = CarouselResourceStringsEN;\n\n    /** @hidden */\n    private _config: CarouselConfig = {};\n\n    /** @hidden */\n    private _slidesCopy: CarouselItemComponent[] = [];\n\n    /** @hidden */\n    private _previousVisibleSlidesCount: number;\n\n    /** @hidden */\n    private _slideSwiped = false;\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, {\n        optional: true\n    });\n\n    /** @hidden */\n    private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n    /** @hidden */\n    constructor(\n        private readonly _elementRef: ElementRef<HTMLElement>,\n        private readonly _renderer: Renderer2,\n        private readonly _changeDetectorRef: ChangeDetectorRef,\n        private readonly _carouselService: CarouselService\n    ) {\n        effect(() => {\n            const isRtl = this._isRtl();\n            this._carouselService.isRtl = isRtl;\n            if (this._carouselService.items && this._carouselService.active) {\n                this._carouselService.goToItem(this._carouselService.active, false);\n            }\n        });\n    }\n\n    /** @hidden */\n    @HostListener('keydown', ['$event'])\n    handleKeyboardEvent(event: KeyboardEvent): void {\n        if (\n            KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW]) ||\n            (this.vertical && KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW]))\n        ) {\n            event.preventDefault();\n\n            if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n                this._isRtl() ? this.next() : this.previous();\n            }\n            if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n                this._isRtl() ? this.previous() : this.next();\n            }\n            if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n                this.previous();\n            }\n            if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n                this.next();\n            }\n            this.carouselContainer.nativeElement.focus();\n        }\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.visibleSlidesCount && this.slides?.length > 0) {\n            this._notifySlideChange(SlideDirection.None);\n        }\n    }\n\n    /** @hidden */\n    ngAfterContentInit(): void {\n        // On carousel load, display first slide + number of slide visible\n        this.currentActiveSlidesStartIndex = 0;\n        this.currentActiveSlidesEndIndex = this._visibleSlidesNumericCount - 1;\n        this.currentActiveSlidesIds = [];\n        this.totalSlides = this.slides.length;\n\n        this.slides.forEach((slide, index) => {\n            const isActive = index >= this.currentActiveSlidesStartIndex && index <= this.currentActiveSlidesEndIndex;\n\n            slide.ariaSetsize.set(this.totalSlides);\n            slide.ariaPosinset.set(index + 1);\n            slide.ariaHidden.set(!isActive);\n            slide.ariaSelected.set(isActive);\n\n            if (isActive) {\n                this.currentActiveSlidesIds.push(slide.id);\n            }\n        });\n\n        this.ariaActivedescendant = this.currentActiveSlidesIds.join(' ');\n\n        // Change pagination display to numeric, if item count is more than 8\n        if (this.slides.length > ICON_PAGE_INDICATOR_LIMIT) {\n            this.numericIndicator = true;\n        }\n        if (this.slides.length > 0) {\n            this._initializeCarousel();\n        } else {\n            this.leftButtonDisabled = true;\n            this.rightButtonDisabled = true;\n\n            // Disable swipe when there is no carousel item\n            this.swipeEnabled = false;\n            this.navigation = false;\n        }\n\n        // Keep copy of original slide array, for indicator purpose.\n        // In case of looped carousel, original slides array changes.\n        this._slidesCopy = this.slides.toArray();\n        this._subscribeServiceEvents();\n\n        // Subscribe to dynamic update of slides\n        this.slides.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => this._onSlideUpdates());\n        this._changeDetectorRef.markForCheck();\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._initializeServiceConfig();\n        this._carouselService.initialise(this._config, this.slides, this.slideContainer);\n        this._previousVisibleSlidesCount = this._visibleSlidesNumericCount;\n        this._resizeContentContainer();\n    }\n\n    /** @hidden */\n    ngAfterViewChecked(): void {\n        if (this._previousVisibleSlidesCount && this._previousVisibleSlidesCount !== this._visibleSlidesNumericCount) {\n            this._initializeCarousel();\n            this._initializeServiceConfig();\n            this._carouselService.updateConfig(this._config);\n            this._previousVisibleSlidesCount = this._visibleSlidesNumericCount;\n            this._changeDetectorRef.detectChanges();\n        }\n    }\n\n    /** @hidden */\n    get _showNavigationButtonInPageIndicatorContainer(): boolean {\n        return this.navigatorInPageIndicator && this.pageIndicatorsCountArray.length > 1;\n    }\n\n    /** @hidden */\n    get _showNavigationButtonInContent(): boolean {\n        return !this.navigatorInPageIndicator && this.pageIndicatorsCountArray.length > 1;\n    }\n\n    /** @hidden */\n    get _showPageIndicatorContainer(): boolean {\n        return this.pageIndicatorContainer && (this.pageIndicatorsCountArray.length > 0 || this.numericIndicator);\n    }\n\n    /** @hidden */\n    get getPageIndicatorLabel(): string {\n        return `${this.currentActiveSlidesStartIndex + 1} ${this.resourceStrings.fd_carousel_of} ${\n            this.pageIndicatorsCountArray.length\n        }`;\n    }\n\n    /** @hidden */\n    get screenReaderLabel(): string {\n        return `${this.resourceStrings.fd_carousel_reader} ${this.currentActiveSlidesStartIndex + 1} ${\n            this.resourceStrings.fd_carousel_of\n        } ${this.pageIndicatorsCountArray.length}`;\n    }\n\n    /** @hidden */\n    _focus(): void {\n        const el = this._elementRef.nativeElement;\n        if (el !== document.activeElement) {\n            el.focus({\n                preventScroll: true\n            });\n        }\n    }\n\n    /** Transitions to the previous slide in the carousel. */\n    previous(): void {\n        if (!this.loop && this.currentActiveSlidesStartIndex <= 0) {\n            return;\n        }\n        this.rightButtonDisabled = false;\n        this._adjustActiveItemPosition(SlideDirection.PREVIOUS);\n        this._preventDefaultBtnFocus();\n        this._carouselService.pickPrevious();\n        this._notifySlideChange(SlideDirection.PREVIOUS);\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** Transitions to the next slide in the carousel. */\n    next(): void {\n        if (!this.loop && this.currentActiveSlidesStartIndex >= this.pageIndicatorsCountArray.length - 1) {\n            return;\n        }\n\n        // Moving to next slide\n        this.leftButtonDisabled = false;\n        this._adjustActiveItemPosition(SlideDirection.NEXT);\n        this._preventDefaultBtnFocus();\n        this._carouselService.pickNext();\n        this._notifySlideChange(SlideDirection.NEXT);\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** @hidden Subscribe to carousel service events */\n    private _subscribeServiceEvents(): void {\n        this._carouselService.activeChange$.subscribe((event) => this._onSlideSwipe(event));\n        this._carouselService.dragStateChange$.subscribe((event) => this._onSlideDrag(event));\n    }\n\n    /**\n     * @hidden Prevent native focus flow related to button, if button will be disable on focus state.\n     * It works only if carousel is not in circular loop.\n     */\n    private _preventDefaultBtnFocus(): void {\n        if (this.loop) {\n            return;\n        }\n        const isFirst = this.currentActiveSlidesStartIndex === 0;\n        const isLast = this.currentActiveSlidesStartIndex === this.pageIndicatorsCountArray.length - 1;\n        if (isFirst || isLast) {\n            this._elementRef.nativeElement.focus({\n                preventScroll: true\n            });\n        }\n    }\n\n    /** @hidden Adjust position of active item, based on slide direction */\n    private _adjustActiveItemPosition(slideDirection: SlideDirection, step: number = 1): void {\n        // Move one step in the direction\n        const positionAdjustment = slideDirection === SlideDirection.NEXT ? step : -step;\n        this.currentActiveSlidesStartIndex = this.currentActiveSlidesStartIndex + positionAdjustment;\n\n        // If carousel set to loop\n        if (this.loop) {\n            if (this.currentActiveSlidesStartIndex < 0) {\n                this.currentActiveSlidesStartIndex = this.slides.length + this.currentActiveSlidesStartIndex;\n            } else if (this.currentActiveSlidesStartIndex >= this.slides.length) {\n                this.currentActiveSlidesStartIndex = this.currentActiveSlidesStartIndex % this.slides.length;\n            }\n        } else {\n            this._buttonVisibility();\n        }\n    }\n\n    /** @hidden Handles navigation button visibility */\n    private _buttonVisibility(): void {\n        if (!this.loop) {\n            // Need to disable navigation button if either direction limit has reached.\n            if (this.currentActiveSlidesStartIndex === 0) {\n                this.leftButtonDisabled = true;\n                this.rightButtonDisabled = false;\n            } else if (this.slides.length - 1 === this.currentActiveSlidesStartIndex) {\n                this.rightButtonDisabled = true;\n                this.leftButtonDisabled = false;\n            } else if (\n                this._visibleSlidesNumericCount > 1 &&\n                this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount >= this.slides.length\n            ) {\n                this.rightButtonDisabled = true;\n            } else {\n                this.leftButtonDisabled = false;\n                this.rightButtonDisabled = false;\n            }\n            if (this.slides.length === 1) {\n                this.leftButtonDisabled = true;\n                this.rightButtonDisabled = true;\n            }\n        }\n    }\n\n    /** @hidden Handle when slide is added or removed */\n    private _onSlideUpdates(): void {\n        this._slidesCopy = this.slides.toArray();\n        this.currentActiveSlidesStartIndex = 0;\n        this._carouselService.initialise(this._config, this.slides, this.slideContainer);\n        this._carouselService.active = null;\n        if (this.vertical) {\n            this._renderer.setStyle(this.slideContainer?.nativeElement, 'transform', 'translateY(0px)');\n        } else {\n            this._renderer.setStyle(this.slideContainer?.nativeElement, 'transform', 'translateX(0px)');\n        }\n        this._initializeCarousel();\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** @hidden Initialize carousel with visible items */\n    private _initializeCarousel(): void {\n        queueMicrotask(() => {\n            // Handles navigator button enabled/disabled state\n            this._buttonVisibility();\n            let arrayLength: number;\n            // set page indicator count with fake array, to use in template\n            if (this.loop && this._visibleSlidesNumericCount > 1) {\n                // If loop with multi item visible.\n                arrayLength = this.slides.length;\n            } else {\n                arrayLength = this.slides.length - this._visibleSlidesNumericCount + 1;\n            }\n            const pageIndicatorsIfZeroCount = this.slides.length === 0 ? 0 : 1;\n            this.pageIndicatorsCountArray = new Array(arrayLength > 0 ? arrayLength : pageIndicatorsIfZeroCount);\n            this._goToFirstItem();\n            this.slides.forEach((_slide, index) => {\n                if (\n                    index >= this.currentActiveSlidesStartIndex &&\n                    index < this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount\n                ) {\n                    _slide.visibility = 'visible';\n                } else {\n                    _slide.visibility = 'hidden';\n                }\n            });\n            this._changeDetectorRef.detectChanges();\n        });\n    }\n\n    /** @hidden */\n    private _goToFirstItem(): void {\n        if (\n            this.pageIndicatorsCountArray.length === 0 &&\n            this._carouselService.currentTransitionPx !== 0 &&\n            this.slides.length > 1\n        ) {\n            this.currentActiveSlidesStartIndex = 0;\n            this._carouselService.goToItem(this.slides.first);\n        }\n    }\n\n    /** @hidden Initialize config for Carousel service */\n    private _initializeServiceConfig(): void {\n        this._config.vertical = this.vertical;\n        this._config.elementsAtOnce = this._visibleSlidesNumericCount;\n        this._config.gestureSupport = this.swipeEnabled;\n        this._config.infinite = this.loop;\n        this._config.transition = String(this.slideTransitionDuration) + 'ms';\n        // Carousel service expects transition in string format with unit.\n    }\n\n    /**\n     * @hidden Returns the slide swapping steps\n     */\n    private _getStepTaken(event: PanEndOutput, actualActiveSlideIndex: number): number {\n        let stepsCalculated: number;\n        if (\n            (!this._isRtl() && event.after) ||\n            (this._isRtl() && !event.after && !this.vertical) ||\n            (this.vertical && event.after)\n        ) {\n            if (actualActiveSlideIndex === 0 && this.currentActiveSlidesStartIndex === 0) {\n                stepsCalculated = 0;\n            } else if (actualActiveSlideIndex > this.currentActiveSlidesStartIndex) {\n                stepsCalculated = actualActiveSlideIndex - this.currentActiveSlidesStartIndex;\n            } else {\n                stepsCalculated = this.slides.length - this.currentActiveSlidesStartIndex + actualActiveSlideIndex;\n            }\n        } else {\n            // Special case, when first left swipe before slides are rotated in carousel service\n            if (actualActiveSlideIndex === 0 && this.currentActiveSlidesStartIndex === 0) {\n                stepsCalculated = 0;\n            } else if (actualActiveSlideIndex < this.currentActiveSlidesStartIndex) {\n                stepsCalculated = this.currentActiveSlidesStartIndex - actualActiveSlideIndex;\n            } else {\n                stepsCalculated = this.currentActiveSlidesStartIndex + this.slides.length - actualActiveSlideIndex;\n            }\n        }\n        return stepsCalculated;\n    }\n\n    /** @hidden Handles notification on visible slide change */\n    private _notifySlideChange(slideDirection: SlideDirection, firstActiveSlide?: CarouselItemInterface | null): void {\n        const activeSlides: CarouselItemComponent[] = [];\n        let firstActiveSlideIndex: number;\n        if (this.loop) {\n            firstActiveSlide = this._carouselService.active;\n        }\n        if (firstActiveSlide) {\n            firstActiveSlideIndex = this.slides.toArray().findIndex((_item) => _item === firstActiveSlide);\n        } else {\n            firstActiveSlideIndex = this.currentActiveSlidesStartIndex;\n        }\n        for (let activeSlideIndex = 0; activeSlideIndex < this._visibleSlidesNumericCount; activeSlideIndex++) {\n            const index = firstActiveSlideIndex + activeSlideIndex;\n            const slide = this.slides.get(index);\n            if (slide) {\n                activeSlides.push(slide);\n                slide.visibility = 'visible';\n            }\n        }\n        this._manageSlideVisibility(firstActiveSlideIndex);\n        const direction = slideDirection === SlideDirection.NEXT ? 'Next' : 'Previous';\n        this.slideChange.emit(new CarouselActiveSlides(activeSlides, direction));\n    }\n\n    /** @hidden Manages visibility for slides. Useful in managing tab order */\n    private _manageSlideVisibility(firstActiveSlideIndex: number): void {\n        setTimeout(() => {\n            const lastActiveSlideIndex = firstActiveSlideIndex + this._visibleSlidesNumericCount;\n\n            this.currentActiveSlidesIds = [];\n\n            this.slides.forEach((slide, index) => {\n                const isVisible = index >= firstActiveSlideIndex && index < lastActiveSlideIndex;\n\n                // Only update visibility if it has changed\n                if (slide.visibility !== (isVisible ? 'visible' : 'hidden')) {\n                    slide.visibility = isVisible ? 'visible' : 'hidden';\n                }\n\n                if (isVisible) {\n                    this.currentActiveSlidesIds.push(slide.id);\n                }\n\n                slide.ariaHidden.set(!isVisible);\n                slide.ariaSelected.set(isVisible);\n            });\n\n            this.ariaActivedescendant = this.currentActiveSlidesIds.join(' ');\n\n            this._changeDetectorRef.markForCheck();\n        }, this.slideTransitionDuration);\n    }\n\n    /** @hidden On Swiping of slide, manage page indicator */\n    private _onSlideSwipe(event: PanEndOutput): void {\n        this._slideSwiped = true;\n        const firstActiveSlide = event.item;\n        const actualActiveSlideIndex = this._slidesCopy.findIndex((_slide) => _slide === firstActiveSlide);\n        const stepTaken = this._getStepTaken(event, actualActiveSlideIndex);\n        if (stepTaken > 0) {\n            let slideDirection: SlideDirection;\n            if (!this._isRtl()) {\n                slideDirection = event.after ? SlideDirection.NEXT : SlideDirection.PREVIOUS;\n            } else {\n                // vertical carousel slide direction is same in ltr and rtl\n                if (this.vertical) {\n                    slideDirection = event.after ? SlideDirection.NEXT : SlideDirection.PREVIOUS;\n                } else {\n                    slideDirection = event.after ? SlideDirection.PREVIOUS : SlideDirection.NEXT;\n                }\n            }\n            this._adjustActiveItemPosition(slideDirection, stepTaken);\n            this._notifySlideChange(slideDirection, firstActiveSlide);\n            this._changeDetectorRef.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden Making slides visible when slides are dragged. Otherwise, it looses the effect.\n     */\n    private _onSlideDrag(isDragging: boolean): void {\n        if (isDragging) {\n            this.slides.forEach((_slide) => {\n                _slide.visibility = 'visible';\n            });\n            this._slideSwiped = false;\n            this._changeDetectorRef.markForCheck();\n        } else {\n            // After slide limit reached, if dragging starts then revert visibility\n            if (!this._slideSwiped && !this.loop) {\n                this._manageSlideVisibility(this.currentActiveSlidesStartIndex);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Resizes inner carousel container to fit all items in the viewport and hide those which are not fully in it.\n     */\n    private _resizeContentContainer(): void {\n        merge(\n            resizeObservable(this.slideContainer.nativeElement),\n            resizeObservable(this.carouselContainer.nativeElement)\n        )\n            .pipe(debounceTime(100), takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => {\n                const { width, slides } = this._getFittingSlidesAndWidth();\n\n                if (this.visibleSlidesCount === 'auto') {\n                    this._visibleSlidesNumericCount = slides;\n                    const totalSlides = this.slides.length;\n\n                    let needleSlideIndex = this.currentActiveSlidesStartIndex;\n\n                    // If amount of slides insufficient to fill whole carousel, slide back a bit.\n                    if (this.currentActiveSlidesStartIndex + slides > totalSlides) {\n                        needleSlideIndex =\n                            this.currentActiveSlidesStartIndex -\n                            (this.currentActiveSlidesStartIndex + slides - totalSlides);\n                    }\n\n                    const needleSlide = this.slides.get(needleSlideIndex);\n\n                    this.currentActiveSlidesStartIndex = needleSlideIndex;\n\n                    this._carouselService.active = needleSlide;\n\n                    // Refresh carousel config and transition to the current slide.\n                    this._initializeCarousel();\n\n                    needleSlide && this._carouselService.goToItem(needleSlide);\n                    this._notifySlideChange(SlideDirection.None);\n                }\n\n                if (this._slidesWrapperSize !== width) {\n                    this._slidesWrapperSize = width;\n                }\n\n                this._changeDetectorRef.detectChanges();\n            });\n    }\n\n    /**\n     * @hidden\n     * Calculates how many slides can be shown within current carousel viewport.\n     * @returns Object containing fitting slides count and total width of those slides.\n     */\n    private _getFittingSlidesAndWidth(): FittingSlidesAndWidth {\n        if (!this.carouselContainer) {\n            return {\n                width: 0,\n                slides: 1\n            };\n        }\n        const { width } = this.carouselContainer.nativeElement.getBoundingClientRect();\n        let maxSize = 0;\n        let slidesCount = 0;\n        const carouselSlides = this.slides.toArray();\n        const previousSlides = carouselSlides.splice(0, this.currentActiveSlidesStartIndex);\n        const getSlides = (slides: CarouselItemComponent[]): void => {\n            for (const slide of slides) {\n                const slideWidth = slide.getWidth();\n                if (!slideWidth) {\n                    break;\n                }\n                const newSize = maxSize + slideWidth;\n                if (newSize > width) {\n                    break;\n                }\n                maxSize = newSize;\n                slidesCount++;\n            }\n        };\n        getSlides(carouselSlides);\n\n        // If with of the rest of the slides is lesser than carouse's viewport, add previous slides to it.\n        if (maxSize < width) {\n            getSlides(previousSlides);\n        }\n        return {\n            width: maxSize,\n            slides: slidesCount\n        };\n    }\n\n    /** @hidden */\n    private _getVisibleSlidesCount(): number {\n        if (this._visibleSlidesCount !== 'auto') {\n            return this._visibleSlidesCount;\n        }\n        const { slides } = this._getFittingSlidesAndWidth();\n        return slides;\n    }\n}\n","<section\n    class=\"fd-carousel\"\n    [class.fd-carousel--no-navigation]=\"!navigation\"\n    tabindex=\"0\"\n    [style.height]=\"height\"\n    [style.width]=\"width\"\n    [attr.dir]=\"dir()\"\n    role=\"listbox\"\n    aria-roledescription=\"Carousel\"\n    [attr.aria-activedescendant]=\"ariaActivedescendant\"\n    #carouselContainer\n    (click)=\"_focus()\"\n>\n    @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'top') {\n        <ng-template [ngTemplateOutlet]=\"pageIndicatorContainer\"></ng-template>\n    }\n    <div\n        class=\"fd-carousel__content\"\n        [class.fd-carousel__content--horizontal]=\"!vertical\"\n        [ngClass]=\"'fd-carousel__content--' + contentBackground\"\n        [style.width]=\"_contentSizePx\"\n    >\n        @if (_showNavigationButtonInContent) {\n            <ng-template [ngTemplateOutlet]=\"buttonLeft\"></ng-template>\n        }\n        <div #slideContainer class=\"fd-carousel__slides\">\n            <ng-content></ng-content>\n        </div>\n        @if (_showNavigationButtonInContent) {\n            <ng-template [ngTemplateOutlet]=\"buttonRight\"></ng-template>\n        }\n    </div>\n    @if (_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom') {\n        <ng-template [ngTemplateOutlet]=\"pageIndicatorContainer\"></ng-template>\n    }\n    <div [style.display]=\"'none'\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n        {{ screenReaderLabel }}\n    </div>\n</section>\n<ng-template #pageIndicatorContainer>\n    <div\n        class=\"fd-carousel__page-indicator-container\"\n        [class.fd-carousel__page-indicator-container--no-border]=\"noPaginationContainerBorder\"\n        [ngClass]=\"'fd-carousel__page-indicator-container--' + pageIndicatorBackground\"\n    >\n        @if (_showNavigationButtonInPageIndicatorContainer) {\n            <ng-template [ngTemplateOutlet]=\"buttonLeft\"></ng-template>\n        }\n        <ng-template [ngTemplateOutlet]=\"pageIndicators\"> </ng-template>\n        @if (_showNavigationButtonInPageIndicatorContainer) {\n            <ng-template [ngTemplateOutlet]=\"buttonRight\"></ng-template>\n        }\n    </div>\n</ng-template>\n<ng-template #pageIndicators>\n    @if (numericIndicator) {\n        <div class=\"fd-carousel__page-indicators\">\n            @if (pageIndicator) {\n                <div class=\"fd-carousel__text\" dir=\"ltr\">\n                    {{ getPageIndicatorLabel }}\n                </div>\n            }\n        </div>\n    }\n    @if (!numericIndicator && _showNavigationButtonInPageIndicatorContainer) {\n        <div class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir()\">\n            @if (pageIndicator) {\n                @for (item of pageIndicatorsCountArray; track $index; let i = $index) {\n                    <span\n                        role=\"img\"\n                        [attr.aria-label]=\"\n                            (\n                                'coreCarousel.pageIndicatorLabel'\n                                | fdTranslate: { itemNum: i + 1, totalNum: totalSlides }\n                            )()\n                        \"\n                        class=\"fd-carousel__page-indicator\"\n                        [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n                    ></span>\n                }\n            }\n        </div>\n    }\n</ng-template>\n<ng-template #buttonLeft>\n    <button\n        fd-button\n        role=\"button\"\n        class=\"fd-carousel__button\"\n        [class.fd-carousel__button--left]=\"!vertical\"\n        [class.fd-carousel__button--up]=\"vertical\"\n        [style.z-index]=\"1\"\n        [attr.aria-label]=\"('coreCarousel.leftNavigationBtnLabel' | fdTranslate)()\"\n        (click)=\"previous(); $event.stopPropagation()\"\n        [disabled]=\"leftButtonDisabled\"\n        [attr.title]=\"('coreCarousel.leftNavigationBtnLabel' | fdTranslate)()\"\n        [glyph]=\"vertical ? 'slim-arrow-up' : 'slim-arrow-left'\"\n    ></button>\n</ng-template>\n<ng-template #buttonRight>\n    <button\n        fd-button\n        role=\"button\"\n        class=\"fd-carousel__button\"\n        [class.fd-carousel__button--right]=\"!vertical\"\n        [class.fd-carousel__button--down]=\"vertical\"\n        [style.z-index]=\"1\"\n        [attr.aria-label]=\"('coreCarousel.rightNavigationBtnLabel' | fdTranslate)()\"\n        (click)=\"next(); $event.stopPropagation()\"\n        [disabled]=\"rightButtonDisabled\"\n        [attr.title]=\"('coreCarousel.rightNavigationBtnLabel' | fdTranslate)()\"\n        [glyph]=\"vertical ? 'slim-arrow-down' : 'slim-arrow-right'\"\n    ></button>\n</ng-template>\n","import {\n    AfterContentInit,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    Input,\n    Output,\n    QueryList\n} from '@angular/core';\n\nimport { CarouselItemDirective } from './carousel-item.directive';\nimport { CarouselConfig, CarouselService, PanEndOutput } from './carousel.service';\n\n@Directive({\n    selector: '[fdCarousel]',\n    host: {\n        class: 'fd-carousel_'\n    },\n    providers: [CarouselService],\n    standalone: true\n})\nexport class CarouselDirective implements AfterContentInit {\n    /** Configuration for carousel */\n    @Input()\n    config: CarouselConfig;\n\n    /** Initial active item of carousel, position first + offset */\n    @Input()\n    active: CarouselItemDirective;\n\n    /** @hidden */\n    get carouselService(): CarouselService {\n        return this._carouselService;\n    }\n\n    /** Event thrown, when active element is changed */\n    @Output()\n    readonly activeChange: EventEmitter<PanEndOutput> = new EventEmitter<PanEndOutput>();\n\n    /** Event thrown when element is dragged. Emits \"true\" when drag starts and \"false\" when drag ends. */\n    @Output()\n    readonly dragStateChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @ContentChildren(CarouselItemDirective, { descendants: true })\n    items: QueryList<CarouselItemDirective>;\n\n    /** @hidden */\n    constructor(\n        private readonly _elementRef: ElementRef,\n        private readonly _carouselService: CarouselService\n    ) {}\n\n    /** @hidden */\n    ngAfterContentInit(): void {\n        this._carouselService.initialise(this.config, this.items, this._elementRef);\n\n        this._carouselService.activeChange$.subscribe((event) => this.activeChange.emit(event));\n        this._carouselService.dragStateChange$.subscribe((event) => this.dragStateChange.emit(event));\n    }\n\n    /** Change active element */\n    goToItem(item: CarouselItemDirective, smooth?: boolean): void {\n        this._carouselService.goToItem(item, smooth);\n    }\n\n    /** Pick previous carousel item */\n    pickPrevious(): void {\n        this._carouselService.pickPrevious();\n    }\n\n    /** Pick next carousel item */\n    pickNext(): void {\n        this._carouselService.pickNext();\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CarouselItemDirective } from './carousel-item.directive';\nimport { CarouselItemComponent } from './carousel-item/carousel-item.component';\nimport { CarouselComponent } from './carousel.component';\nimport { CarouselDirective } from './carousel.directive';\nimport { CarouselService } from './carousel.service';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent],\n    exports: [CarouselItemDirective, CarouselDirective, CarouselComponent, CarouselItemComponent],\n    providers: [CarouselService]\n})\nexport class CarouselModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["carouselItemCounter","i1.CarouselService"],"mappings":"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"}