@fundamental-ngx/core 0.62.0-rc.25 → 0.62.0-rc.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -8,7 +8,7 @@ import { RtlService, KeyUtil, resizeObservable } from '@fundamental-ngx/cdk/util
|
|
|
8
8
|
import { ButtonComponent } from '@fundamental-ngx/core/button';
|
|
9
9
|
import { FdTranslatePipe } from '@fundamental-ngx/i18n';
|
|
10
10
|
import { merge, fromEvent } from 'rxjs';
|
|
11
|
-
import {
|
|
11
|
+
import { debounceTime } from 'rxjs/operators';
|
|
12
12
|
|
|
13
13
|
let carouselItemCounter$1 = 0;
|
|
14
14
|
class CarouselItemDirective {
|
|
@@ -523,12 +523,11 @@ class CarouselComponent {
|
|
|
523
523
|
return this._slidesWrapperSize ? `${this._slidesWrapperSize}px` : this.width;
|
|
524
524
|
}
|
|
525
525
|
/** @hidden */
|
|
526
|
-
constructor(_elementRef, _renderer, _changeDetectorRef, _carouselService
|
|
526
|
+
constructor(_elementRef, _renderer, _changeDetectorRef, _carouselService) {
|
|
527
527
|
this._elementRef = _elementRef;
|
|
528
528
|
this._renderer = _renderer;
|
|
529
529
|
this._changeDetectorRef = _changeDetectorRef;
|
|
530
530
|
this._carouselService = _carouselService;
|
|
531
|
-
this._zone = _zone;
|
|
532
531
|
/** ID for the Carousel. */
|
|
533
532
|
this.id = `fd-carousel-${carouselCounter++}`;
|
|
534
533
|
/** Sets aria-label attribute for carousel */
|
|
@@ -828,7 +827,7 @@ class CarouselComponent {
|
|
|
828
827
|
}
|
|
829
828
|
/** @hidden Initialize carousel with visible items */
|
|
830
829
|
_initializeCarousel() {
|
|
831
|
-
|
|
830
|
+
queueMicrotask(() => {
|
|
832
831
|
// Handles navigator button enabled/disabled state
|
|
833
832
|
this._buttonVisibility();
|
|
834
833
|
let arrayLength;
|
|
@@ -1076,15 +1075,15 @@ class CarouselComponent {
|
|
|
1076
1075
|
const { slides } = this._getFittingSlidesAndWidth();
|
|
1077
1076
|
return slides;
|
|
1078
1077
|
}
|
|
1079
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: CarouselService }
|
|
1080
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: CarouselComponent, isStandalone: true, selector: "fd-carousel", inputs: { id: "id", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", pageIndicatorsOrientation: "pageIndicatorsOrientation", height: "height", width: "width", loop: "loop", navigation: "navigation", navigatorInPageIndicator: "navigatorInPageIndicator", numericIndicator: "numericIndicator", pageIndicatorContainer: "pageIndicatorContainer", pageIndicator: "pageIndicator", resourceStrings: "resourceStrings", slideTransitionDuration: "slideTransitionDuration", swipeEnabled: "swipeEnabled", vertical: "vertical", noPaginationContainerBorder: "noPaginationContainerBorder", contentBackground: "contentBackground", pageIndicatorBackground: "pageIndicatorBackground", visibleSlidesCount: "visibleSlidesCount" }, outputs: { slideChange: "slideChange" }, host: { listeners: { "keydown": "handleKeyboardEvent($event)" }, properties: { "style.width": "width", "attr.id": "this.id" } }, providers: [CarouselService], queries: [{ propertyName: "slides", predicate: CarouselItemComponent, descendants: true }], viewQueries: [{ propertyName: "slideContainer", first: true, predicate: ["slideContainer"], descendants: true }, { propertyName: "carouselContainer", first: true, predicate: ["carouselContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<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 item; 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", styles: [".fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;max-width:100%;min-width:15.5rem;width:100%}.fd-carousel:after,.fd-carousel:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel .fd-carousel__button+.fd-carousel__button{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-carousel__content{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);flex-basis:100%;overflow:hidden;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;-webkit-box-shadow:var(--sapContent_Shadow0);box-shadow:var(--sapContent_Shadow0);margin-block:0;margin-inline:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{-webkit-transform:rotate(0deg);transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;-ms-touch-action:pan-y;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:normal;margin-block:0;margin-inline:0;min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;padding-block:0;padding-inline:0;-ms-touch-action:pan-x;touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);--fdMessage_Page_Container_Corner_Radius:0}.fd-carousel__slides:after,.fd-carousel__slides:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;height:100%;line-height:0}.fd-carousel__item:after,.fd-carousel__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border-top:var(--fdCarousel_Pagination_Border);max-height:3.5rem;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:9rem;padding-block:.5rem;padding-inline:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:normal;list-style-type:none;margin-block:0;margin-inline:0;margin-inline:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding-block:0;padding-inline:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:.25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;display:var(--fdCarousel_Button_Display);height:2.125rem;margin-block:.25rem;margin-inline:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding-block:0;padding-inline:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n/*! Bundled license information:\n\nfundamental-styles/dist/carousel.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1078
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: CarouselService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1079
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: CarouselComponent, isStandalone: true, selector: "fd-carousel", inputs: { id: "id", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", pageIndicatorsOrientation: "pageIndicatorsOrientation", height: "height", width: "width", loop: "loop", navigation: "navigation", navigatorInPageIndicator: "navigatorInPageIndicator", numericIndicator: "numericIndicator", pageIndicatorContainer: "pageIndicatorContainer", pageIndicator: "pageIndicator", resourceStrings: "resourceStrings", slideTransitionDuration: "slideTransitionDuration", swipeEnabled: "swipeEnabled", vertical: "vertical", noPaginationContainerBorder: "noPaginationContainerBorder", contentBackground: "contentBackground", pageIndicatorBackground: "pageIndicatorBackground", visibleSlidesCount: "visibleSlidesCount" }, outputs: { slideChange: "slideChange" }, host: { listeners: { "keydown": "handleKeyboardEvent($event)" }, properties: { "style.width": "width", "attr.id": "this.id" } }, providers: [CarouselService], queries: [{ propertyName: "slides", predicate: CarouselItemComponent, descendants: true }], viewQueries: [{ propertyName: "slideContainer", first: true, predicate: ["slideContainer"], descendants: true }, { propertyName: "carouselContainer", first: true, predicate: ["carouselContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<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", styles: [".fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;max-width:100%;min-width:15.5rem;width:100%}.fd-carousel:after,.fd-carousel:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel .fd-carousel__button+.fd-carousel__button{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-carousel__content{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);flex-basis:100%;overflow:hidden;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;-webkit-box-shadow:var(--sapContent_Shadow0);box-shadow:var(--sapContent_Shadow0);margin-block:0;margin-inline:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{-webkit-transform:rotate(0deg);transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;-ms-touch-action:pan-y;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:normal;margin-block:0;margin-inline:0;min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;padding-block:0;padding-inline:0;-ms-touch-action:pan-x;touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);--fdMessage_Page_Container_Corner_Radius:0}.fd-carousel__slides:after,.fd-carousel__slides:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;height:100%;line-height:0}.fd-carousel__item:after,.fd-carousel__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border-top:var(--fdCarousel_Pagination_Border);max-height:3.5rem;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:9rem;padding-block:.5rem;padding-inline:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:normal;list-style-type:none;margin-block:0;margin-inline:0;margin-inline:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding-block:0;padding-inline:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:.25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;display:var(--fdCarousel_Button_Display);height:2.125rem;margin-block:.25rem;margin-inline:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding-block:0;padding-inline:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n/*! Bundled license information:\n\nfundamental-styles/dist/carousel.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1081
1080
|
}
|
|
1082
1081
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
1083
1082
|
type: Component,
|
|
1084
1083
|
args: [{ selector: 'fd-carousel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CarouselService], host: {
|
|
1085
1084
|
'[style.width]': 'width'
|
|
1086
|
-
}, imports: [NgTemplateOutlet, NgClass, ButtonComponent, FdTranslatePipe], template: "<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 item; 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", styles: [".fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;max-width:100%;min-width:15.5rem;width:100%}.fd-carousel:after,.fd-carousel:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel .fd-carousel__button+.fd-carousel__button{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-carousel__content{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);flex-basis:100%;overflow:hidden;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;-webkit-box-shadow:var(--sapContent_Shadow0);box-shadow:var(--sapContent_Shadow0);margin-block:0;margin-inline:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{-webkit-transform:rotate(0deg);transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;-ms-touch-action:pan-y;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:normal;margin-block:0;margin-inline:0;min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;padding-block:0;padding-inline:0;-ms-touch-action:pan-x;touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);--fdMessage_Page_Container_Corner_Radius:0}.fd-carousel__slides:after,.fd-carousel__slides:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;height:100%;line-height:0}.fd-carousel__item:after,.fd-carousel__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border-top:var(--fdCarousel_Pagination_Border);max-height:3.5rem;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:9rem;padding-block:.5rem;padding-inline:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:normal;list-style-type:none;margin-block:0;margin-inline:0;margin-inline:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding-block:0;padding-inline:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:.25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;display:var(--fdCarousel_Button_Display);height:2.125rem;margin-block:.25rem;margin-inline:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding-block:0;padding-inline:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n/*! Bundled license information:\n\nfundamental-styles/dist/carousel.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
|
|
1087
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: CarouselService }
|
|
1085
|
+
}, imports: [NgTemplateOutlet, NgClass, ButtonComponent, FdTranslatePipe], template: "<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", styles: [".fd-carousel{--fdCarousel_Button_Display:block;--fdCarousel_Content_Background:var(--sapBackgroundColor);--fdCarousel_Page_Indicator_Margin:var(--fdCarousel_Dot_Margin);--fdCarousel_Page_Indicator_Size:var(--fdCarousel_Dot_Size);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Background);--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Border);--fdCarousel_Page_Indicator_Container_Background:var(--sapPageFooter_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;max-width:100%;min-width:15.5rem;width:100%}.fd-carousel:after,.fd-carousel:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:block}.fd-carousel .fd-carousel__button+.fd-carousel__button{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-carousel__content{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);flex-basis:100%;overflow:hidden;position:relative}.fd-carousel__content:after,.fd-carousel__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none;-webkit-box-shadow:var(--sapContent_Shadow0);box-shadow:var(--sapContent_Shadow0);margin-block:0;margin-inline:0;position:absolute}.fd-carousel__content .fd-carousel__button--left,.fd-carousel__content .fd-carousel__button--right{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.fd-carousel__content .fd-carousel__button--down,.fd-carousel__content .fd-carousel__button--up{left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.fd-carousel__content .fd-carousel__button--down[dir=rtl]>[class*=sap-icon],.fd-carousel__content .fd-carousel__button--up[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--down>[class*=sap-icon],[dir=rtl] .fd-carousel__content .fd-carousel__button--up>[class*=sap-icon]{-webkit-transform:rotate(0deg);transform:rotate(0)}.fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel__content .fd-carousel__button--up{top:.5rem}.fd-carousel__content .fd-carousel__button--down{bottom:.5rem}.fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel__content--horizontal .fd-carousel__slides{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;-ms-touch-action:pan-y;touch-action:pan-y;width:100%}.fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__content--solid{--fdCarousel_Content_Background:var(--sapGroup_ContentBackground)}.fd-carousel__content--transparent{--fdCarousel_Content_Background:transparent}.fd-carousel__slides{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:normal;margin-block:0;margin-inline:0;min-height:-webkit-fit-content;min-height:-moz-fit-content;min-height:fit-content;padding-block:0;padding-inline:0;-ms-touch-action:pan-x;touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);--fdMessage_Page_Container_Corner_Radius:0}.fd-carousel__slides:after,.fd-carousel__slides:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;height:100%;line-height:0}.fd-carousel__item:after,.fd-carousel__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--fdCarousel_Page_Indicator_Container_Background);border-top:var(--fdCarousel_Pagination_Border);max-height:3.5rem;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicator-container--translucent{--fdCarousel_Page_Indicator_Container_Background:var(--sapBackgroundColor)}.fd-carousel__page-indicator-container--transparent{--fdCarousel_Page_Indicator_Container_Background:transparent}.fd-carousel__page-indicator-container--no-border{border-top-color:transparent}.fd-carousel__page-indicator-container--no-border:first-child{border-bottom-color:transparent;border-top:none}.fd-carousel__page-indicators{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:9rem;padding-block:.5rem;padding-inline:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{background-color:var(--fdCarousel_Page_Indicator_Background_Color);border:0;border:var(--fdCarousel_Page_Indicator_Border);border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:var(--fdCarousel_Page_Indicator_Size);line-height:normal;list-style-type:none;margin-block:0;margin-inline:0;margin-inline:var(--fdCarousel_Page_Indicator_Margin);max-height:var(--fdCarousel_Page_Indicator_Size);max-width:var(--fdCarousel_Page_Indicator_Size);min-height:var(--fdCarousel_Page_Indicator_Size);min-width:var(--fdCarousel_Page_Indicator_Size);padding-block:0;padding-inline:0;width:var(--fdCarousel_Page_Indicator_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{--fdCarousel_Page_Indicator_Size:.5rem;--fdCarousel_Page_Indicator_Margin:.25rem;--fdCarousel_Page_Indicator_Border:var(--fdCarousel_Dot_Selected_Border);--fdCarousel_Page_Indicator_Background_Color:var(--fdCarousel_Dot_Selected_Background)}.fd-carousel__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;display:var(--fdCarousel_Button_Display);height:2.125rem;margin-block:.25rem;margin-inline:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding-block:0;padding-inline:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-focus,.fd-carousel .fd-carousel__button:focus{z-index:5}.fd-carousel .fd-carousel__button.is-focus:after,.fd-carousel .fd-carousel__button:focus:after{--fdButton_Focus_Border_Radius:50%}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{--fdCarousel_Button_Display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%;width:100%}\n/*! Bundled license information:\n\nfundamental-styles/dist/carousel.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
|
|
1086
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: CarouselService }], propDecorators: { id: [{
|
|
1088
1087
|
type: Input
|
|
1089
1088
|
}, {
|
|
1090
1089
|
type: HostBinding,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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 NgZone,\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, take } 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 private readonly _zone: NgZone\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 this._zone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\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 item; 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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"}
|
|
1
|
+
{"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":";;;;;;;;;;;;AAEA,IAAIA,qBAAmB,GAAG,CAAC;MAOd,qBAAqB,CAAA;;AAmB9B,IAAA,WAAA,CAA6B,WAAoC,EAAA;QAApC,IAAA,CAAA,WAAW,GAAX,WAAW;;AAHxC,QAAA,IAAA,CAAA,EAAE,GAAW,mBAAmB,GAAGA,qBAAmB,EAAE;IAGY;;AAGpE,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa;IACzC;;IAGA,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY;IAC1E;;IAGA,SAAS,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa;IAC5E;8GAlCS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGI;;sBAIA;;sBAIA;;sBAIA;;sBACA,WAAW;uBAAC,SAAS;;;ACT1B,IAAI,mBAAmB,GAAG,CAAC;MA4Bd,qBAAqB,CAAA;;IA6D9B,IAAI,UAAU,CAAC,UAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;IACjC;AAEA,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;IAC3B;;AAGA,IAAA,WAAA,CAA6B,WAAoC,EAAA;QAApC,IAAA,CAAA,WAAW,GAAX,WAAW;;AAlExC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,iBAAA,EAAoB,mBAAmB,EAAE,EAAE;AAiBhD;;AAEG;QAEH,IAAA,CAAA,OAAO,GAAG,KAAK;;QAKf,IAAA,CAAA,KAAK,GAAG,IAAI;;QAgBZ,IAAA,CAAA,WAAW,GAAe,SAAS;;AAGnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,CAAC,uDAAC;;AAG/B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAS,CAAC,wDAAC;;AAGhC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAU,KAAK,wDAAC;;AAGrC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAU,KAAK,sDAAC;IAYiC;;AAGpE,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa;IACzC;;IAGA,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY;IAC1E;;IAGA,SAAS,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa;IAC5E;8GArFS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,EAAA,cAAA,EAAA,6CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3ClC,8HAGA,EAAA,MAAA,EAAA,CAAA,4GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDsCc,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEvB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA1BjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,IAAA,EAatB;AACF,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,6CAA6C;AACpD,wBAAA,qBAAqB,EAAE,eAAe;AACtC,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,oBAAoB,EAAE;qBACzB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,8HAAA,EAAA,MAAA,EAAA,CAAA,4GAAA,CAAA,EAAA;;sBAIhC;;sBACA,WAAW;uBAAC,SAAS;;sBAIrB;;sBACA,WAAW;uBAAC,iBAAiB;;sBAI7B;;sBACA,WAAW;uBAAC,sBAAsB;;sBAIlC;;sBACA,WAAW;uBAAC,uBAAuB;;sBAMnC;;sBAIA;;sBACA,WAAW;uBAAC,YAAY;;sBAIxB;;sBAIA;;sBAIA;;sBAIA,WAAW;uBAAC,kBAAkB;;;AEzE5B,MAAM,2BAA2B,GAAG;AA0B3C;MAIa,eAAe,CAAA;;IAoBxB,IAAI,mBAAmB,CAAC,mBAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,oBAAoB,GAAG,mBAAmB;IACnD;AACA,IAAA,IAAI,mBAAmB,GAAA;QACnB,OAAO,IAAI,CAAC,oBAAoB;IACpC;;AAGA,IAAA,IAAY,cAAc,GAAA;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC;QAE5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;IAC3B;;AA4BA,IAAA,WAAA,CAA+C,SAA0B,EAAA;QAA1B,IAAA,CAAA,SAAS,GAAT,SAAS;;AA1D/C,QAAA,IAAA,CAAA,gBAAgB,GAA0B,IAAI,YAAY,EAAW;;AAGrE,QAAA,IAAA,CAAA,aAAa,GAA+B,IAAI,YAAY,EAAgB;;QASrF,IAAA,CAAA,KAAK,GAAG,KAAK;;QAqBL,IAAA,CAAA,aAAa,GAAG,CAAC;;QAGjB,IAAA,CAAA,oBAAoB,GAAG,CAAC;;QAMxB,IAAA,CAAA,oBAAoB,GAAG,CAAC;;QAGxB,IAAA,CAAA,iBAAiB,GAAG,CAAC;;QAGrB,IAAA,CAAA,kBAAkB,GAAG,KAAK;;QAE1B,IAAA,CAAA,YAAY,GAAG,KAAK;AAE5B;;AAEG;AACc,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAG2B;;IAG5E,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;IACpC;;AAGA,IAAA,UAAU,CACN,MAAsB,EACtB,KAAuC,EACvC,oBAAgC,EAAA;AAEhC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAC5B,IAAI,CAAC,cAAc,EAAE;QACzB;IACJ;;AAGA,IAAA,YAAY,CAAC,MAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACxB;;AAGA,IAAA,UAAU,CAAC,UAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa;IAC5C;;AAGA,IAAA,QAAQ,CAAC,KAAuC,EAAA;AAC5C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QAClC;IACJ;;IAGA,QAAQ,CAAC,IAA2B,EAAE,MAAgB,EAAA;QAClD,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAEzB,YAAA,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACtC;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;IAC1C;;IAGA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QAClC;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AACzD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AAE9E,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,cAAc;IAChC;;IAGA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AACzD,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC;;;QAIxD,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;QACpC;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,cAAc;IAChC;;AAGQ,IAAA,aAAa,CAAC,KAAa,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YACb;QACJ;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AACjD,QAAA,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAElC,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;AAClB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;AACnC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;AAC1B,gBAAA,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B;QACJ;aAAO;AACH,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE;AACxB,gBAAA,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/B;QACJ;;AAGA,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEhF;;;AAGG;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI;QAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;IACxG;;IAGQ,kBAAkB,CAAC,KAAa,EAAE,MAAgB,EAAA;AACtD,QAAA,IAAI,YAAY,GAAW,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK;AAElE,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI;AAE9E,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;YACrD,YAAY,GAAG,CAAC,YAAY;QAChC;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;IAC1C;;IAGQ,WAAW,GAAA;;AAEf,QAAA,IACI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;AACrB,aAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;iBAClB,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;AACjG,iBAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,EAC9D;AACE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;QAC3B;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;AAG5C,QAAA,MAAM,cAAc,GAAY,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;AACrF;;;;AAIG;AACH,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;;AAGjE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,cAAc,GAAG,CAAC,EAAE;;YAE7C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;AACpC,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;YAC3B;YAEA,IAAI,KAAK,GAAG,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;YACjF;QACJ;AAEA,QAAA,KAAK,GAAG,KAAK,IAAI,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGlC,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;IAClC;;AAGQ,IAAA,eAAe,CAAC,IAA4B,EAAA;QAChD,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,CAAC,CAAC;QACb;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC;IACpE;;AAGQ,IAAA,QAAQ,CAAC,IAA2B,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;QAC3B;AAEA,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IAC1B;;AAGQ,IAAA,UAAU,CAAC,KAAa,EAAA;AAC5B,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa;AAE3C,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAE1B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IAClE;;AAGQ,IAAA,aAAa,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAEtB,QAAA,MAAM,WAAW,GAA0B,IAAI,CAAC,WAAW,EAAE;AAE7D,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;AAEhC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACpB,gBAAA,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,KAAK,GAAG;AAClB,aAAA,CAAC;QACN;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACpB,gBAAA,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,KAAK,GAAG;AAClB,aAAA,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;IAC1B;AAEA;;AAEG;AACK,IAAA,mBAAmB,CAAC,YAAoB,EAAA;AAC5C,QAAA,IAAI,CAAC,oBAAoB,GAAG,YAAY;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,GAAG,GAAG;AAE7C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,SAAA,EAAY,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,oBAAoB,KAAK;IACtF;;IAGQ,eAAe,GAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI;AAC7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpC;;IAGQ,cAAc,GAAA;QAClB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,aAAa,EAAE;IACxB;;AAGQ,IAAA,kBAAkB,CACtB,MAAgB,EAChB,OAA+B,EAC/B,QAAkD,EAAA;AAElD,QAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAA0B,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAC/F,CAAC,GAAwC,KAAI;AACzC,YAAA,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;gBAC/D,QAAQ,CAAC,KAAK,CAAC;AACnB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CACJ;IACL;;IAGQ,eAAe,GAAA;AACnB,QAAA,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;AAE1C,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AACrD,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACnF,IAAI,CAAC,eAAe,EAAE;AAC1B,QAAA,CAAC,CAAC;IACN;;IAGQ,UAAU,GAAA;AACd,QAAA,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC;AAEzC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,MAAM,IAAI,KAAK,CACX,CAAA,2EAAA,EAA8E,IAAI,CAAC,SAAS,CAAA,QAAA,CAAU,CACzG;QACL;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAEjD,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,UAAU,KAAK,IAAI,CAAC,iBAAiB,EAAE;gBACnE;YACJ;AAEA,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACtD,QAAA,CAAC,CAAC;IACN;;IAGQ,aAAa,GAAA;AACjB,QAAA,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,MAAM,IAAI,KAAK,CACX,CAAA,2EAAA,EAA8E,IAAI,CAAC,SAAS,CAAA,QAAA,CAAU,CACzG;QACL;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACtD,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC1B;YACJ;AAEA,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7E;iBAAO;AACH,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;YACrC;AAEA,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAC7B,QAAA,CAAC,CAAC;IACN;;IAGQ,cAAc,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,2BAA2B;IACjE;;AAGQ,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;AAE/B,QAAA,OAAO,MAAM,GAAG,IAAI,CAAC,oBAAoB;IAC7C;;AAGQ,IAAA,kBAAkB,CAAC,KAA8B,EAAA;AACrD,QAAA,IAAI,WAA+B;AAEnC,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7D;aAAO;YACH,WAAW,GAAG,KAAK;QACvB;AAEA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;IACvE;;AAGQ,IAAA,aAAa,CAAC,KAA8B,EAAA;AAChD,QAAA,OAAO,MAAM,CAAC,UAAU,IAAI,KAAK,YAAY,UAAU;IAC3D;AA9ZS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBA4DJ,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA5DnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BA6DgB,MAAM;2BAAC,QAAQ;;;ACpGzB,MAAM,yBAAyB,GAA8B;AAChE,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,kBAAkB,EAAE;CACvB;;AC8BD;AACA,MAAM,yBAAyB,GAAG,CAAC;IAKvB;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,cAAA,CAAA,cAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACZ,CAAC,EAJW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;AAS1B,IAAI,eAAe,GAAG,CAAC;AAEvB,MAAM,oBAAoB,CAAA;IACtB,WAAA,CACoB,WAAoC,EACpC,cAAsB,EAAA;QADtB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,cAAc,GAAd,cAAc;IAC/B;AACN;MAcY,iBAAiB,CAAA;AAsD1B;;;AAGG;IACH,IACI,eAAe,CAAC,KAAgC,EAAA;AAChD,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAC3E;AAEA;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB;IAChC;;IA2BA,IACI,kBAAkB,CAAC,KAAsB,EAAA;AACzC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,sBAAsB,EAAE;IACnE;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,IAAI,CAAC,mBAAmB;IACnC;;AAgDA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,kBAAkB,GAAG,CAAA,EAAG,IAAI,CAAC,kBAAkB,IAAI,GAAG,IAAI,CAAC,KAAK;IAChF;;AAsCA,IAAA,WAAA,CACqB,WAAoC,EACpC,SAAoB,EACpB,kBAAqC,EACrC,gBAAiC,EAAA;QAHjC,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;;AA/LrC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,YAAA,EAAe,eAAe,EAAE,EAAE;;QAIvC,IAAA,CAAA,SAAS,GAAG,IAAI;;QAYhB,IAAA,CAAA,yBAAyB,GAA8B,QAAQ;;QAQ/D,IAAA,CAAA,KAAK,GAAG,MAAM;;QAId,IAAA,CAAA,IAAI,GAAG,KAAK;;QAIZ,IAAA,CAAA,UAAU,GAAG,IAAI;;QAIjB,IAAA,CAAA,wBAAwB,GAAG,IAAI;;QAI/B,IAAA,CAAA,gBAAgB,GAAG,KAAK;;QAIxB,IAAA,CAAA,sBAAsB,GAAG,IAAI;;QAI7B,IAAA,CAAA,aAAa,GAAG,IAAI;;QAoBpB,IAAA,CAAA,uBAAuB,GAAG,GAAG;;QAI7B,IAAA,CAAA,YAAY,GAAG,IAAI;;QAInB,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAIhB,IAAA,CAAA,2BAA2B,GAAG,KAAK;;QAInC,IAAA,CAAA,iBAAiB,GAA8B,aAAa;;QAI5D,IAAA,CAAA,uBAAuB,GAA8B,OAAO;;AAenD,QAAA,IAAA,CAAA,WAAW,GAAuC,IAAI,YAAY,EAAwB;;QAiBnG,IAAA,CAAA,6BAA6B,GAAG,CAAC;;QAGjC,IAAA,CAAA,2BAA2B,GAAG,CAAC;;QAG/B,IAAA,CAAA,sBAAsB,GAAa,EAAE;;QAGrC,IAAA,CAAA,WAAW,GAAG,CAAC;;QAGf,IAAA,CAAA,kBAAkB,GAAG,KAAK;;QAG1B,IAAA,CAAA,mBAAmB,GAAG,KAAK;;QAG3B,IAAA,CAAA,wBAAwB,GAAa,EAAE;;QAGvC,IAAA,CAAA,kBAAkB,GAAG,CAAC;;QAWH,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAY,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;QAG3E,IAAA,CAAA,mBAAmB,GAAoB,CAAC;;QAGxC,IAAA,CAAA,0BAA0B,GAAG,CAAC;;QAG9B,IAAA,CAAA,gBAAgB,GAAG,yBAAyB;;QAG5C,IAAA,CAAA,OAAO,GAAmB,EAAE;;QAG5B,IAAA,CAAA,WAAW,GAA4B,EAAE;;QAMzC,IAAA,CAAA,YAAY,GAAG,KAAK;;AAGX,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;QAStE,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK;AACnC,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;AAC7D,gBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;YACvE;AACJ,QAAA,CAAC,CAAC;IACN;;AAIA,IAAA,mBAAmB,CAAC,KAAoB,EAAA;QACpC,IACI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACnD,aAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EACrE;YACE,KAAK,CAAC,cAAc,EAAE;YAEtB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;YACjD;YACA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;YACjD;YACA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;gBACpC,IAAI,CAAC,QAAQ,EAAE;YACnB;YACA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;gBACtC,IAAI,CAAC,IAAI,EAAE;YACf;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE;QAChD;IACJ;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC;QAChD;IACJ;;IAGA,kBAAkB,GAAA;;AAEd,QAAA,IAAI,CAAC,6BAA6B,GAAG,CAAC;QACtC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,0BAA0B,GAAG,CAAC;AACtE,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QAErC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACjC,YAAA,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC,6BAA6B,IAAI,KAAK,IAAI,IAAI,CAAC,2BAA2B;YAEzG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACvC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;YACjC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/B,YAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEhC,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;;QAGjE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,yBAAyB,EAAE;AAChD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAChC;QACA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,mBAAmB,EAAE;QAC9B;aAAO;AACH,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;;AAG/B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QAC3B;;;QAIA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACxC,IAAI,CAAC,uBAAuB,EAAE;;QAG9B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AACtG,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IAC1C;;IAGA,eAAe,GAAA;QACX,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;AAChF,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,0BAA0B;QAClE,IAAI,CAAC,uBAAuB,EAAE;IAClC;;IAGA,kBAAkB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,KAAK,IAAI,CAAC,0BAA0B,EAAE;YAC1G,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAChD,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,0BAA0B;AAClE,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;QAC3C;IACJ;;AAGA,IAAA,IAAI,6CAA6C,GAAA;QAC7C,OAAO,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC;IACpF;;AAGA,IAAA,IAAI,8BAA8B,GAAA;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC;IACrF;;AAGA,IAAA,IAAI,2BAA2B,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC;IAC7G;;AAGA,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,GAAG,IAAI,CAAC,6BAA6B,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,IACnF,IAAI,CAAC,wBAAwB,CAAC,MAClC,EAAE;IACN;;AAGA,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,CAAA,EAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAA,CAAA,EAAI,IAAI,CAAC,6BAA6B,GAAG,CAAC,IACvF,IAAI,CAAC,eAAe,CAAC,cACzB,CAAA,CAAA,EAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAA,CAAE;IAC9C;;IAGA,MAAM,GAAA;AACF,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AACzC,QAAA,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,EAAE;YAC/B,EAAE,CAAC,KAAK,CAAC;AACL,gBAAA,aAAa,EAAE;AAClB,aAAA,CAAC;QACN;IACJ;;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,6BAA6B,IAAI,CAAC,EAAE;YACvD;QACJ;AACA,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,QAAQ,CAAC;QACvD,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACpC,QAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAChD,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;IAC3C;;IAGA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9F;QACJ;;AAGA,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,IAAI,CAAC;QACnD,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;IAC3C;;IAGQ,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACzF;AAEA;;;AAGG;IACK,uBAAuB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACX;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,6BAA6B,KAAK,CAAC;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,KAAK,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC;AAC9F,QAAA,IAAI,OAAO,IAAI,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;AACjC,gBAAA,aAAa,EAAE;AAClB,aAAA,CAAC;QACN;IACJ;;AAGQ,IAAA,yBAAyB,CAAC,cAA8B,EAAE,IAAA,GAAe,CAAC,EAAA;;AAE9E,QAAA,MAAM,kBAAkB,GAAG,cAAc,KAAK,cAAc,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI;QAChF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,GAAG,kBAAkB;;AAG5F,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,IAAI,CAAC,6BAA6B,GAAG,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,6BAA6B;YAChG;iBAAO,IAAI,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACjE,gBAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;YAChG;QACJ;aAAO;YACH,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;AAEZ,YAAA,IAAI,IAAI,CAAC,6BAA6B,KAAK,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;YACpC;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,6BAA6B,EAAE;AACtE,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACnC;AAAO,iBAAA,IACH,IAAI,CAAC,0BAA0B,GAAG,CAAC;AACnC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAC5F;AACE,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;YACnC;iBAAO;AACH,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;YACpC;YACA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;YACnC;QACJ;IACJ;;IAGQ,eAAe,GAAA;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACxC,QAAA,IAAI,CAAC,6BAA6B,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;AAChF,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI;AACnC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,CAAC;QAC/F;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,CAAC;QAC/F;QACA,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;IAC3C;;IAGQ,mBAAmB,GAAA;QACvB,cAAc,CAAC,MAAK;;YAEhB,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,WAAmB;;YAEvB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,0BAA0B,GAAG,CAAC,EAAE;;AAElD,gBAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;YACpC;iBAAO;AACH,gBAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,0BAA0B,GAAG,CAAC;YAC1E;AACA,YAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAClE,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,yBAAyB,CAAC;YACpG,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAClC,gBAAA,IACI,KAAK,IAAI,IAAI,CAAC,6BAA6B;oBAC3C,KAAK,GAAG,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,0BAA0B,EAC9E;AACE,oBAAA,MAAM,CAAC,UAAU,GAAG,SAAS;gBACjC;qBAAO;AACH,oBAAA,MAAM,CAAC,UAAU,GAAG,QAAQ;gBAChC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC3C,QAAA,CAAC,CAAC;IACN;;IAGQ,cAAc,GAAA;AAClB,QAAA,IACI,IAAI,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,KAAK,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACxB;AACE,YAAA,IAAI,CAAC,6BAA6B,GAAG,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACrD;IACJ;;IAGQ,wBAAwB,GAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACrC,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,0BAA0B;QAC7D,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY;QAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,IAAI;;IAEzE;AAEA;;AAEG;IACK,aAAa,CAAC,KAAmB,EAAE,sBAA8B,EAAA;AACrE,QAAA,IAAI,eAAuB;QAC3B,IACI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK;AAC9B,aAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aAChD,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAChC;YACE,IAAI,sBAAsB,KAAK,CAAC,IAAI,IAAI,CAAC,6BAA6B,KAAK,CAAC,EAAE;gBAC1E,eAAe,GAAG,CAAC;YACvB;AAAO,iBAAA,IAAI,sBAAsB,GAAG,IAAI,CAAC,6BAA6B,EAAE;AACpE,gBAAA,eAAe,GAAG,sBAAsB,GAAG,IAAI,CAAC,6BAA6B;YACjF;iBAAO;AACH,gBAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,6BAA6B,GAAG,sBAAsB;YACtG;QACJ;aAAO;;YAEH,IAAI,sBAAsB,KAAK,CAAC,IAAI,IAAI,CAAC,6BAA6B,KAAK,CAAC,EAAE;gBAC1E,eAAe,GAAG,CAAC;YACvB;AAAO,iBAAA,IAAI,sBAAsB,GAAG,IAAI,CAAC,6BAA6B,EAAE;AACpE,gBAAA,eAAe,GAAG,IAAI,CAAC,6BAA6B,GAAG,sBAAsB;YACjF;iBAAO;AACH,gBAAA,eAAe,GAAG,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,sBAAsB;YACtG;QACJ;AACA,QAAA,OAAO,eAAe;IAC1B;;IAGQ,kBAAkB,CAAC,cAA8B,EAAE,gBAA+C,EAAA;QACtG,MAAM,YAAY,GAA4B,EAAE;AAChD,QAAA,IAAI,qBAA6B;AACjC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM;QACnD;QACA,IAAI,gBAAgB,EAAE;AAClB,YAAA,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,gBAAgB,CAAC;QAClG;aAAO;AACH,YAAA,qBAAqB,GAAG,IAAI,CAAC,6BAA6B;QAC9D;AACA,QAAA,KAAK,IAAI,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,EAAE;AACnG,YAAA,MAAM,KAAK,GAAG,qBAAqB,GAAG,gBAAgB;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC,IAAI,KAAK,EAAE;AACP,gBAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,gBAAA,KAAK,CAAC,UAAU,GAAG,SAAS;YAChC;QACJ;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC;AAClD,QAAA,MAAM,SAAS,GAAG,cAAc,KAAK,cAAc,CAAC,IAAI,GAAG,MAAM,GAAG,UAAU;AAC9E,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5E;;AAGQ,IAAA,sBAAsB,CAAC,qBAA6B,EAAA;QACxD,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,IAAI,CAAC,0BAA0B;AAEpF,YAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;YAEhC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;gBACjC,MAAM,SAAS,GAAG,KAAK,IAAI,qBAAqB,IAAI,KAAK,GAAG,oBAAoB;;AAGhF,gBAAA,IAAI,KAAK,CAAC,UAAU,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,EAAE;AACzD,oBAAA,KAAK,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ;gBACvD;gBAEA,IAAI,SAAS,EAAE;oBACX,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C;gBAEA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAChC,gBAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AACrC,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;AAEjE,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAC1C,QAAA,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC;IACpC;;AAGQ,IAAA,aAAa,CAAC,KAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI;AACnC,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,gBAAgB,CAAC;QAClG,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,sBAAsB,CAAC;AACnE,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACf,YAAA,IAAI,cAA8B;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAChB,gBAAA,cAAc,GAAG,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,QAAQ;YAChF;iBAAO;;AAEH,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,oBAAA,cAAc,GAAG,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,QAAQ;gBAChF;qBAAO;AACH,oBAAA,cAAc,GAAG,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,IAAI;gBAChF;YACJ;AACA,YAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,SAAS,CAAC;AACzD,YAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,gBAAgB,CAAC;AACzD,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;QAC3C;IACJ;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,UAAmB,EAAA;QACpC,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC3B,gBAAA,MAAM,CAAC,UAAU,GAAG,SAAS;AACjC,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QAC1C;aAAO;;YAEH,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAClC,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,6BAA6B,CAAC;YACnE;QACJ;IACJ;AAEA;;;AAGG;IACK,uBAAuB,GAAA;AAC3B,QAAA,KAAK,CACD,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EACnD,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAErD,aAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAC5D,SAAS,CAAC,MAAK;YACZ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,yBAAyB,EAAE;AAE1D,YAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,MAAM,EAAE;AACpC,gBAAA,IAAI,CAAC,0BAA0B,GAAG,MAAM;AACxC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAEtC,gBAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,6BAA6B;;gBAGzD,IAAI,IAAI,CAAC,6BAA6B,GAAG,MAAM,GAAG,WAAW,EAAE;oBAC3D,gBAAgB;AACZ,wBAAA,IAAI,CAAC,6BAA6B;6BACjC,IAAI,CAAC,6BAA6B,GAAG,MAAM,GAAG,WAAW,CAAC;gBACnE;gBAEA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAErD,gBAAA,IAAI,CAAC,6BAA6B,GAAG,gBAAgB;AAErD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,WAAW;;gBAG1C,IAAI,CAAC,mBAAmB,EAAE;gBAE1B,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC;YAChD;AAEA,YAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;AACnC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACnC;AAEA,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC3C,QAAA,CAAC,CAAC;IACV;AAEA;;;;AAIG;IACK,yBAAyB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,OAAO;AACH,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE;aACX;QACL;AACA,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC9E,IAAI,OAAO,GAAG,CAAC;QACf,IAAI,WAAW,GAAG,CAAC;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAC5C,QAAA,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,6BAA6B,CAAC;AACnF,QAAA,MAAM,SAAS,GAAG,CAAC,MAA+B,KAAU;AACxD,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE;gBACnC,IAAI,CAAC,UAAU,EAAE;oBACb;gBACJ;AACA,gBAAA,MAAM,OAAO,GAAG,OAAO,GAAG,UAAU;AACpC,gBAAA,IAAI,OAAO,GAAG,KAAK,EAAE;oBACjB;gBACJ;gBACA,OAAO,GAAG,OAAO;AACjB,gBAAA,WAAW,EAAE;YACjB;AACJ,QAAA,CAAC;QACD,SAAS,CAAC,cAAc,CAAC;;AAGzB,QAAA,IAAI,OAAO,GAAG,KAAK,EAAE;YACjB,SAAS,CAAC,cAAc,CAAC;QAC7B;QACA,OAAO;AACH,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE;SACX;IACL;;IAGQ,sBAAsB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,MAAM,EAAE;YACrC,OAAO,IAAI,CAAC,mBAAmB;QACnC;QACA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,yBAAyB,EAAE;AACnD,QAAA,OAAO,MAAM;IACjB;8GAztBS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,6BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,EAAA,EAAA,SAAA,EANf,CAAC,eAAe,CAAC,iDAoHX,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxL1C,woJAkHA,EAAA,MAAA,EAAA,CAAA,orVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1Cc,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,iIAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE5D,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B,CAAC,eAAe,CAAC,EAAA,IAAA,EACtB;AACF,wBAAA,eAAe,EAAE;qBACpB,EAAA,OAAA,EACQ,CAAC,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,woJAAA,EAAA,MAAA,EAAA,CAAA,orVAAA,CAAA,EAAA;;sBAIrE;;sBACA,WAAW;uBAAC,SAAS;;sBAIrB;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAOA;;sBAaA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAWA;;sBAIA,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE;AACpC,wBAAA,WAAW,EAAE;AAChB,qBAAA;;sBAIA,SAAS;uBAAC,gBAAgB;;sBAI1B,SAAS;uBAAC,mBAAmB;;sBAuF7B,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MEnQ1B,iBAAiB,CAAA;;AAU1B,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,gBAAgB;IAChC;;IAeA,WAAA,CACqB,WAAuB,EACvB,gBAAiC,EAAA;QADjC,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;;AAb5B,QAAA,IAAA,CAAA,YAAY,GAA+B,IAAI,YAAY,EAAgB;;AAI3E,QAAA,IAAA,CAAA,eAAe,GAA0B,IAAI,YAAY,EAAW;IAU1E;;IAGH,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;QAE3E,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvF,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjG;;IAGA,QAAQ,CAAC,IAA2B,EAAE,MAAgB,EAAA;QAClD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChD;;IAGA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IACxC;;IAGA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;IACpC;8GArDS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAHf,CAAC,eAAe,CAAC,gDA0BX,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAvB7B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA;oBACD,SAAS,EAAE,CAAC,eAAe,CAAC;AAC5B,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGI;;sBAIA;;sBASA;;sBAIA;;sBAIA,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;ACtCjE;;;AAGG;MAMU,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,OAAA,EAAA,CAJb,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAClF,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAGnF,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,aAFZ,CAAC,eAAe,CAAC,EAAA,OAAA,EAAA,CAFwB,iBAAiB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;;2FAInF,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;oBAC7F,OAAO,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;oBAC7F,SAAS,EAAE,CAAC,eAAe;AAC9B,iBAAA;;;ACfD;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundamental-ngx/core",
|
|
3
|
-
"version": "0.62.0-rc.
|
|
3
|
+
"version": "0.62.0-rc.26",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"migrations": "./schematics/migrations.json"
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"@angular/forms": "^21.0.0",
|
|
24
24
|
"@angular/platform-browser": "^21.0.0",
|
|
25
25
|
"@angular/router": "^21.0.0",
|
|
26
|
-
"@fundamental-ngx/cdk": "0.62.0-rc.
|
|
27
|
-
"@fundamental-ngx/i18n": "0.62.0-rc.
|
|
26
|
+
"@fundamental-ngx/cdk": "0.62.0-rc.26",
|
|
27
|
+
"@fundamental-ngx/i18n": "0.62.0-rc.26",
|
|
28
28
|
"@sap-theming/theming-base-content": "^11.32.0",
|
|
29
29
|
"fundamental-styles": "0.40.1",
|
|
30
30
|
"rxjs": "^7.8.0"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { ElementRef, OnDestroy, EventEmitter, QueryList, AfterContentInit, AfterViewInit, AfterViewChecked, OnChanges, Renderer2, ChangeDetectorRef,
|
|
2
|
+
import { ElementRef, OnDestroy, EventEmitter, QueryList, AfterContentInit, AfterViewInit, AfterViewChecked, OnChanges, Renderer2, ChangeDetectorRef, SimpleChanges } from '@angular/core';
|
|
3
3
|
import { Nullable } from '@fundamental-ngx/cdk/utils';
|
|
4
4
|
import { Direction } from '@angular/cdk/bidi';
|
|
5
5
|
|
|
@@ -219,7 +219,6 @@ declare class CarouselComponent implements AfterContentInit, AfterViewInit, Afte
|
|
|
219
219
|
private readonly _renderer;
|
|
220
220
|
private readonly _changeDetectorRef;
|
|
221
221
|
private readonly _carouselService;
|
|
222
|
-
private readonly _zone;
|
|
223
222
|
/** ID for the Carousel. */
|
|
224
223
|
id: string;
|
|
225
224
|
/** Sets aria-label attribute for carousel */
|
|
@@ -321,7 +320,7 @@ declare class CarouselComponent implements AfterContentInit, AfterViewInit, Afte
|
|
|
321
320
|
/** @hidden */
|
|
322
321
|
private readonly _isRtl;
|
|
323
322
|
/** @hidden */
|
|
324
|
-
constructor(_elementRef: ElementRef<HTMLElement>, _renderer: Renderer2, _changeDetectorRef: ChangeDetectorRef, _carouselService: CarouselService
|
|
323
|
+
constructor(_elementRef: ElementRef<HTMLElement>, _renderer: Renderer2, _changeDetectorRef: ChangeDetectorRef, _carouselService: CarouselService);
|
|
325
324
|
/** @hidden */
|
|
326
325
|
handleKeyboardEvent(event: KeyboardEvent): void;
|
|
327
326
|
/** @hidden */
|