@mintplayer/ng-bootstrap 21.4.0 → 21.4.2

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.
@@ -74,6 +74,7 @@ class BsCarouselComponent {
74
74
  this.isServerSide = isPlatformServer(this.platformId);
75
75
  this.currentImageIndex = signal(0, ...(ngDevMode ? [{ debugName: "currentImageIndex" }] : []));
76
76
  this.images = signal(null, ...(ngDevMode ? [{ debugName: "images" }] : []));
77
+ this.isDestroyed = false;
77
78
  // Inputs
78
79
  this.indicators = input(false, ...(ngDevMode ? [{ debugName: "indicators" }] : []));
79
80
  this.keyboardEvents = input(true, ...(ngDevMode ? [{ debugName: "keyboardEvents" }] : []));
@@ -124,10 +125,13 @@ class BsCarouselComponent {
124
125
  // Emit slideChange when currentImageIndex changes
125
126
  effect(() => {
126
127
  const index = this.currentImageIndex();
127
- this.slideChange.emit(index);
128
+ if (!this.isDestroyed) {
129
+ this.slideChange.emit(index);
130
+ }
128
131
  });
129
132
  // Cleanup on destroy
130
133
  this.destroyRef.onDestroy(() => {
134
+ this.isDestroyed = true;
131
135
  this.clearAutoAdvance();
132
136
  this.resizeObserver?.disconnect();
133
137
  });
@@ -232,6 +236,7 @@ class BsCarouselComponent {
232
236
  }
233
237
  }
234
238
  ngOnDestroy() {
239
+ this.isDestroyed = true;
235
240
  this.resizeObserver?.unobserve(this.innerElement?.nativeElement);
236
241
  this.resizeObserver?.disconnect();
237
242
  this.clearAutoAdvance();
@@ -246,7 +251,7 @@ class BsCarouselComponent {
246
251
  this.currentImageIndex.set(index);
247
252
  }
248
253
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
249
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: BsCarouselComponent, isStandalone: true, selector: "bs-carousel", inputs: { indicators: { classPropertyName: "indicators", publicName: "indicators", isSignal: true, isRequired: false, transformFunction: null }, keyboardEvents: { classPropertyName: "keyboardEvents", publicName: "keyboardEvents", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, interval: { classPropertyName: "interval", publicName: "interval", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slideChange: "slideChange", animationStart: "animationStart", animationEnd: "animationEnd" }, host: { listeners: { "document:keydown.ArrowLeft": "onKeyPress($event)", "document:keydown.ArrowRight": "onKeyPress($event)", "document:keydown.ArrowUp": "onKeyPress($event)", "document:keydown.ArrowDown": "onKeyPress($event)" }, properties: { "@.disabled": "this.animationsDisabled" } }, queries: [{ propertyName: "imagesQuery", predicate: i0.forwardRef(() => BsCarouselImageDirective) }], viewQueries: [{ propertyName: "innerElement", first: true, predicate: ["innerElement"], descendants: true }, { propertyName: "swipeContainer", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "@if (isServerSide) {\n <div class=\"carousel mx-auto noscript\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n <div class=\"carousel-inner d-grid\">\n @let imagesValue = images();\n @if (imageCount(); as imageCount) {\n @for (image of imagesValue; track image.id; let i = $index) {\n <input type=\"radio\" [id]=\"'car-' + i\" [name]=\"'car'\" class=\"car-radio d-none\" bsNoNoscript [checked]=\"i === 0\">\n <div class=\"carousel-item fade d-flex flex-row h-100 align-items-center\"\n [class.flex-column]=\"orientation() === 'vertical'\">\n <div class=\"w-100 position-relative\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n @if (indicators()) {\n <div class=\"carousel-indicators\"\n [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of imagesValue; track image.id; let j = $index) {\n <label [attr.for]=\"'car-' + (j % imageCount)\" [class.active]=\"i === j\" data-bs-target></label>\n }\n </div>\n }\n </div>\n </div>\n\n <label class=\"carousel-control-prev cursor-pointer\" [for]=\"'car-' + ((i - 1 + imageCount) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </label>\n <label class=\"carousel-control-next cursor-pointer\" [for]=\"'car-' + ((i + 1) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </label>\n }\n }\n </div>\n </div>\n} @else {\n @switch (animation()) {\n @case ('slide') {\n <div class=\"carousel slide mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\"\n [style.height.px]=\"swipeContainer.currentSlideHeight()\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer.goto(i)\"\n [class.active]=\"swipeContainer.imageIndex() === i\" data-bs-target\n [attr.aria-current]=\"swipeContainer.imageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner overflow-hidden pe-none\" [class.text-nowrap]=\"orientation() === 'horizontal'\"\n [class.carousel-inner-vertical]=\"orientation() === 'vertical'\" #innerElement\n [style.height.px]=\"swipeContainer.currentSlideHeight()\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\"\n (imageIndexChange)=\"onImageIndexChange($event)\"\n (animationStart)=\"onContainerAnimationStart()\"\n (animationEnd)=\"onContainerAnimationEnd()\"\n [orientation]=\"orientation()\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate()\"></ng-container>\n </div>\n @for (image of images(); track image.id) {\n <div class=\"carousel-item\" [class.active]=\"true\" bsSwipe>\n <ng-container *ngTemplateOutlet=\"image.itemTemplate\"></ng-container>\n </div>\n }\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"firstImageTemplate()\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('fade') {\n <div class=\"carousel fade mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut>\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('none') {\n <div class=\"carousel mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n }\n}\n", styles: [":host ::ng-deep .carousel{position:relative}:host ::ng-deep .carousel.pointer-event{touch-action:pan-y}:host ::ng-deep .carousel-inner{position:relative;width:100%;overflow:hidden}:host ::ng-deep .carousel-inner:after{display:block;clear:both;content:\"\"}:host ::ng-deep .carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-item{transition:none}}:host ::ng-deep .carousel-item.active,:host ::ng-deep .carousel-item-next,:host ::ng-deep .carousel-item-prev{display:block}:host ::ng-deep .carousel-item-next:not(.carousel-item-start),:host ::ng-deep .active.carousel-item-end{transform:translate(100%)}:host ::ng-deep .carousel-item-prev:not(.carousel-item-end),:host ::ng-deep .active.carousel-item-start{transform:translate(-100%)}:host ::ng-deep .carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}:host ::ng-deep .carousel-fade .carousel-item.active,:host ::ng-deep .carousel-fade .carousel-item-next.carousel-item-start,:host ::ng-deep .carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{transition:none}}:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{transition:none}}:host ::ng-deep .carousel-control-prev:hover,:host ::ng-deep .carousel-control-prev:focus,:host ::ng-deep .carousel-control-next:hover,:host ::ng-deep .carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}:host ::ng-deep .carousel-control-prev{left:0}:host ::ng-deep .carousel-control-next{right:0}:host ::ng-deep .carousel-control-prev-icon,:host ::ng-deep .carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}:host ::ng-deep .carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}:host ::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-indicators [data-bs-target]{transition:none}}:host ::ng-deep .carousel-indicators .active{opacity:1}:host ::ng-deep .carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}:host ::ng-deep .carousel-dark{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep :root,:host ::ng-deep [data-bs-theme=light]{--bs-carousel-indicator-active-bg: #fff;--bs-carousel-caption-color: #fff;--bs-carousel-control-icon-filter: }:host ::ng-deep [data-bs-theme=dark]{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep .carousel{min-height:100px;max-width:500px}:host ::ng-deep .carousel.noscript .carousel-inner{grid-template-rows:100%;grid-template-columns:100%}:host ::ng-deep .carousel.noscript .carousel-control-prev,:host ::ng-deep .carousel.noscript .carousel-control-next{display:none;z-index:10}:host ::ng-deep .carousel.noscript .carousel-item{display:block;opacity:0;transition:opacity .4s ease-in-out;grid-row:1;grid-column:1}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item{opacity:1;z-index:5}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev,:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev+.carousel-control-next{display:flex}:host ::ng-deep .carousel.noscript .carousel-indicators{z-index:10}:host ::ng-deep .carousel .carousel-item>*{width:100%!important}:host ::ng-deep .carousel-indicators [data-bs-target]{background-color:var(--bs-carousel-indicator-active-bg, #fff)}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next{width:100%;left:0;right:0}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev.carousel-control-vertical,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next.carousel-control-vertical{justify-content:center}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev-icon,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next-icon{background-color:#00000080;border-radius:50%;padding:1.5rem;background-size:50%;box-shadow:0 2px 8px #0000004d}:host ::ng-deep .carousel-inner-vertical{display:flex;flex-direction:column}:host ::ng-deep .carousel-inner-vertical .carousel-item{flex:0 0 auto;display:flex!important;flex-direction:column;justify-content:center;align-items:center}:host ::ng-deep .carousel-indicators-vertical{position:absolute;inset:50% auto auto 0;transform:translateY(-50%);flex-direction:column;justify-content:center;align-items:center;margin:0;margin-left:.5rem;gap:.5rem}:host ::ng-deep .carousel-indicators-vertical [data-bs-target]{width:12px;height:12px;border-radius:50%;background-color:#ffffff80;border:none;box-shadow:0 1px 3px #0000004d;opacity:.7;transition:opacity .15s ease}:host ::ng-deep .carousel-indicators-vertical [data-bs-target].active{opacity:1;background-color:#fff}:host ::ng-deep .carousel-control-vertical{top:0;bottom:auto;height:2.5rem;align-items:center}:host ::ng-deep .carousel-control-vertical.carousel-control-next{top:auto;bottom:0}:host ::ng-deep .carousel-control-vertical.carousel-control-prev .carousel-control-prev-icon{transform:rotate(90deg)}:host ::ng-deep .carousel-control-vertical.carousel-control-next .carousel-control-next-icon{transform:rotate(90deg)}.wrapper{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: BsSwipeContainerDirective, selector: "[bsSwipeContainer]", inputs: ["minimumOffset", "animation", "orientation", "imageIndex"], outputs: ["imageIndexChange", "animationStart", "animationEnd"], exportAs: ["bsSwipeContainer"] }, { kind: "directive", type: BsSwipeDirective, selector: "[bsSwipe]", inputs: ["offside"] }, { kind: "directive", type: BsNoNoscriptDirective, selector: "[bsNoNoscript]" }], animations: [FadeInOutAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
254
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: BsCarouselComponent, isStandalone: true, selector: "bs-carousel", inputs: { indicators: { classPropertyName: "indicators", publicName: "indicators", isSignal: true, isRequired: false, transformFunction: null }, keyboardEvents: { classPropertyName: "keyboardEvents", publicName: "keyboardEvents", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, interval: { classPropertyName: "interval", publicName: "interval", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slideChange: "slideChange", animationStart: "animationStart", animationEnd: "animationEnd" }, host: { listeners: { "document:keydown.ArrowLeft": "onKeyPress($event)", "document:keydown.ArrowRight": "onKeyPress($event)", "document:keydown.ArrowUp": "onKeyPress($event)", "document:keydown.ArrowDown": "onKeyPress($event)" }, properties: { "@.disabled": "this.animationsDisabled" } }, queries: [{ propertyName: "imagesQuery", predicate: i0.forwardRef(() => BsCarouselImageDirective) }], viewQueries: [{ propertyName: "innerElement", first: true, predicate: ["innerElement"], descendants: true }, { propertyName: "swipeContainer", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "@if (isServerSide) {\n <div class=\"carousel mx-auto noscript\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n <div class=\"carousel-inner d-grid\">\n @let imagesValue = images();\n @if (imageCount(); as imageCount) {\n @for (image of imagesValue; track image.id; let i = $index) {\n <input type=\"radio\" [id]=\"'car-' + i\" [name]=\"'car'\" class=\"car-radio d-none\" bsNoNoscript [checked]=\"i === 0\">\n <div class=\"carousel-item fade d-flex flex-row h-100 align-items-center\"\n [class.flex-column]=\"orientation() === 'vertical'\">\n <div class=\"w-100 position-relative\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n @if (indicators()) {\n <div class=\"carousel-indicators\"\n [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of imagesValue; track image.id; let j = $index) {\n <label [attr.for]=\"'car-' + (j % imageCount)\" [class.active]=\"i === j\" data-bs-target></label>\n }\n </div>\n }\n </div>\n </div>\n\n <label class=\"carousel-control-prev cursor-pointer\" [for]=\"'car-' + ((i - 1 + imageCount) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </label>\n <label class=\"carousel-control-next cursor-pointer\" [for]=\"'car-' + ((i + 1) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </label>\n }\n }\n </div>\n </div>\n} @else {\n @switch (animation()) {\n @case ('slide') {\n <div class=\"carousel slide mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\"\n [style.height.px]=\"swipeContainer?.currentSlideHeight()\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer?.goto(i)\"\n [class.active]=\"swipeContainer?.imageIndex() === i\" data-bs-target\n [attr.aria-current]=\"swipeContainer?.imageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner overflow-hidden pe-none\" [class.text-nowrap]=\"orientation() === 'horizontal'\"\n [class.carousel-inner-vertical]=\"orientation() === 'vertical'\" #innerElement\n [style.height.px]=\"swipeContainer?.currentSlideHeight()\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\"\n (imageIndexChange)=\"onImageIndexChange($event)\"\n (animationStart)=\"onContainerAnimationStart()\"\n (animationEnd)=\"onContainerAnimationEnd()\"\n [orientation]=\"orientation()\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate()\"></ng-container>\n </div>\n @for (image of images(); track image.id) {\n <div class=\"carousel-item\" [class.active]=\"true\" bsSwipe>\n <ng-container *ngTemplateOutlet=\"image.itemTemplate\"></ng-container>\n </div>\n }\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"firstImageTemplate()\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('fade') {\n <div class=\"carousel fade mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut>\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('none') {\n <div class=\"carousel mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n }\n}\n", styles: [":host ::ng-deep .carousel{position:relative}:host ::ng-deep .carousel.pointer-event{touch-action:pan-y}:host ::ng-deep .carousel-inner{position:relative;width:100%;overflow:hidden}:host ::ng-deep .carousel-inner:after{display:block;clear:both;content:\"\"}:host ::ng-deep .carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-item{transition:none}}:host ::ng-deep .carousel-item.active,:host ::ng-deep .carousel-item-next,:host ::ng-deep .carousel-item-prev{display:block}:host ::ng-deep .carousel-item-next:not(.carousel-item-start),:host ::ng-deep .active.carousel-item-end{transform:translate(100%)}:host ::ng-deep .carousel-item-prev:not(.carousel-item-end),:host ::ng-deep .active.carousel-item-start{transform:translate(-100%)}:host ::ng-deep .carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}:host ::ng-deep .carousel-fade .carousel-item.active,:host ::ng-deep .carousel-fade .carousel-item-next.carousel-item-start,:host ::ng-deep .carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{transition:none}}:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{transition:none}}:host ::ng-deep .carousel-control-prev:hover,:host ::ng-deep .carousel-control-prev:focus,:host ::ng-deep .carousel-control-next:hover,:host ::ng-deep .carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}:host ::ng-deep .carousel-control-prev{left:0}:host ::ng-deep .carousel-control-next{right:0}:host ::ng-deep .carousel-control-prev-icon,:host ::ng-deep .carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}:host ::ng-deep .carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}:host ::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-indicators [data-bs-target]{transition:none}}:host ::ng-deep .carousel-indicators .active{opacity:1}:host ::ng-deep .carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}:host ::ng-deep .carousel-dark{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep :root,:host ::ng-deep [data-bs-theme=light]{--bs-carousel-indicator-active-bg: #fff;--bs-carousel-caption-color: #fff;--bs-carousel-control-icon-filter: }:host ::ng-deep [data-bs-theme=dark]{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep .carousel{min-height:100px;max-width:500px}:host ::ng-deep .carousel.noscript .carousel-inner{grid-template-rows:100%;grid-template-columns:100%}:host ::ng-deep .carousel.noscript .carousel-control-prev,:host ::ng-deep .carousel.noscript .carousel-control-next{display:none;z-index:10}:host ::ng-deep .carousel.noscript .carousel-item{display:block;opacity:0;transition:opacity .4s ease-in-out;grid-row:1;grid-column:1}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item{opacity:1;z-index:5}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev,:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev+.carousel-control-next{display:flex}:host ::ng-deep .carousel.noscript .carousel-indicators{z-index:10}:host ::ng-deep .carousel .carousel-item>*{width:100%!important}:host ::ng-deep .carousel-indicators [data-bs-target]{background-color:var(--bs-carousel-indicator-active-bg, #fff)}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next{width:100%;left:0;right:0}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev.carousel-control-vertical,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next.carousel-control-vertical{justify-content:center}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev-icon,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next-icon{background-color:#00000080;border-radius:50%;padding:1.5rem;background-size:50%;box-shadow:0 2px 8px #0000004d}:host ::ng-deep .carousel-inner-vertical{display:flex;flex-direction:column}:host ::ng-deep .carousel-inner-vertical .carousel-item{flex:0 0 auto;display:flex!important;flex-direction:column;justify-content:center;align-items:center}:host ::ng-deep .carousel-indicators-vertical{position:absolute;inset:50% auto auto 0;transform:translateY(-50%);flex-direction:column;justify-content:center;align-items:center;margin:0;margin-left:.5rem;gap:.5rem}:host ::ng-deep .carousel-indicators-vertical [data-bs-target]{width:12px;height:12px;border-radius:50%;background-color:#ffffff80;border:none;box-shadow:0 1px 3px #0000004d;opacity:.7;transition:opacity .15s ease}:host ::ng-deep .carousel-indicators-vertical [data-bs-target].active{opacity:1;background-color:#fff}:host ::ng-deep .carousel-control-vertical{top:0;bottom:auto;height:2.5rem;align-items:center}:host ::ng-deep .carousel-control-vertical.carousel-control-next{top:auto;bottom:0}:host ::ng-deep .carousel-control-vertical.carousel-control-prev .carousel-control-prev-icon{transform:rotate(90deg)}:host ::ng-deep .carousel-control-vertical.carousel-control-next .carousel-control-next-icon{transform:rotate(90deg)}.wrapper{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: BsSwipeContainerDirective, selector: "[bsSwipeContainer]", inputs: ["minimumOffset", "animation", "orientation", "imageIndex"], outputs: ["imageIndexChange", "animationStart", "animationEnd"], exportAs: ["bsSwipeContainer"] }, { kind: "directive", type: BsSwipeDirective, selector: "[bsSwipe]", inputs: ["offside"] }, { kind: "directive", type: BsNoNoscriptDirective, selector: "[bsNoNoscript]" }], animations: [FadeInOutAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
250
255
  }
251
256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselComponent, decorators: [{
252
257
  type: Component,
@@ -255,7 +260,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
255
260
  BsSwipeContainerDirective,
256
261
  BsSwipeDirective,
257
262
  BsNoNoscriptDirective,
258
- ], animations: [FadeInOutAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isServerSide) {\n <div class=\"carousel mx-auto noscript\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n <div class=\"carousel-inner d-grid\">\n @let imagesValue = images();\n @if (imageCount(); as imageCount) {\n @for (image of imagesValue; track image.id; let i = $index) {\n <input type=\"radio\" [id]=\"'car-' + i\" [name]=\"'car'\" class=\"car-radio d-none\" bsNoNoscript [checked]=\"i === 0\">\n <div class=\"carousel-item fade d-flex flex-row h-100 align-items-center\"\n [class.flex-column]=\"orientation() === 'vertical'\">\n <div class=\"w-100 position-relative\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n @if (indicators()) {\n <div class=\"carousel-indicators\"\n [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of imagesValue; track image.id; let j = $index) {\n <label [attr.for]=\"'car-' + (j % imageCount)\" [class.active]=\"i === j\" data-bs-target></label>\n }\n </div>\n }\n </div>\n </div>\n\n <label class=\"carousel-control-prev cursor-pointer\" [for]=\"'car-' + ((i - 1 + imageCount) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </label>\n <label class=\"carousel-control-next cursor-pointer\" [for]=\"'car-' + ((i + 1) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </label>\n }\n }\n </div>\n </div>\n} @else {\n @switch (animation()) {\n @case ('slide') {\n <div class=\"carousel slide mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\"\n [style.height.px]=\"swipeContainer.currentSlideHeight()\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer.goto(i)\"\n [class.active]=\"swipeContainer.imageIndex() === i\" data-bs-target\n [attr.aria-current]=\"swipeContainer.imageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner overflow-hidden pe-none\" [class.text-nowrap]=\"orientation() === 'horizontal'\"\n [class.carousel-inner-vertical]=\"orientation() === 'vertical'\" #innerElement\n [style.height.px]=\"swipeContainer.currentSlideHeight()\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\"\n (imageIndexChange)=\"onImageIndexChange($event)\"\n (animationStart)=\"onContainerAnimationStart()\"\n (animationEnd)=\"onContainerAnimationEnd()\"\n [orientation]=\"orientation()\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate()\"></ng-container>\n </div>\n @for (image of images(); track image.id) {\n <div class=\"carousel-item\" [class.active]=\"true\" bsSwipe>\n <ng-container *ngTemplateOutlet=\"image.itemTemplate\"></ng-container>\n </div>\n }\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"firstImageTemplate()\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('fade') {\n <div class=\"carousel fade mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut>\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('none') {\n <div class=\"carousel mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n }\n}\n", styles: [":host ::ng-deep .carousel{position:relative}:host ::ng-deep .carousel.pointer-event{touch-action:pan-y}:host ::ng-deep .carousel-inner{position:relative;width:100%;overflow:hidden}:host ::ng-deep .carousel-inner:after{display:block;clear:both;content:\"\"}:host ::ng-deep .carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-item{transition:none}}:host ::ng-deep .carousel-item.active,:host ::ng-deep .carousel-item-next,:host ::ng-deep .carousel-item-prev{display:block}:host ::ng-deep .carousel-item-next:not(.carousel-item-start),:host ::ng-deep .active.carousel-item-end{transform:translate(100%)}:host ::ng-deep .carousel-item-prev:not(.carousel-item-end),:host ::ng-deep .active.carousel-item-start{transform:translate(-100%)}:host ::ng-deep .carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}:host ::ng-deep .carousel-fade .carousel-item.active,:host ::ng-deep .carousel-fade .carousel-item-next.carousel-item-start,:host ::ng-deep .carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{transition:none}}:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{transition:none}}:host ::ng-deep .carousel-control-prev:hover,:host ::ng-deep .carousel-control-prev:focus,:host ::ng-deep .carousel-control-next:hover,:host ::ng-deep .carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}:host ::ng-deep .carousel-control-prev{left:0}:host ::ng-deep .carousel-control-next{right:0}:host ::ng-deep .carousel-control-prev-icon,:host ::ng-deep .carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}:host ::ng-deep .carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}:host ::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-indicators [data-bs-target]{transition:none}}:host ::ng-deep .carousel-indicators .active{opacity:1}:host ::ng-deep .carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}:host ::ng-deep .carousel-dark{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep :root,:host ::ng-deep [data-bs-theme=light]{--bs-carousel-indicator-active-bg: #fff;--bs-carousel-caption-color: #fff;--bs-carousel-control-icon-filter: }:host ::ng-deep [data-bs-theme=dark]{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep .carousel{min-height:100px;max-width:500px}:host ::ng-deep .carousel.noscript .carousel-inner{grid-template-rows:100%;grid-template-columns:100%}:host ::ng-deep .carousel.noscript .carousel-control-prev,:host ::ng-deep .carousel.noscript .carousel-control-next{display:none;z-index:10}:host ::ng-deep .carousel.noscript .carousel-item{display:block;opacity:0;transition:opacity .4s ease-in-out;grid-row:1;grid-column:1}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item{opacity:1;z-index:5}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev,:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev+.carousel-control-next{display:flex}:host ::ng-deep .carousel.noscript .carousel-indicators{z-index:10}:host ::ng-deep .carousel .carousel-item>*{width:100%!important}:host ::ng-deep .carousel-indicators [data-bs-target]{background-color:var(--bs-carousel-indicator-active-bg, #fff)}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next{width:100%;left:0;right:0}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev.carousel-control-vertical,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next.carousel-control-vertical{justify-content:center}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev-icon,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next-icon{background-color:#00000080;border-radius:50%;padding:1.5rem;background-size:50%;box-shadow:0 2px 8px #0000004d}:host ::ng-deep .carousel-inner-vertical{display:flex;flex-direction:column}:host ::ng-deep .carousel-inner-vertical .carousel-item{flex:0 0 auto;display:flex!important;flex-direction:column;justify-content:center;align-items:center}:host ::ng-deep .carousel-indicators-vertical{position:absolute;inset:50% auto auto 0;transform:translateY(-50%);flex-direction:column;justify-content:center;align-items:center;margin:0;margin-left:.5rem;gap:.5rem}:host ::ng-deep .carousel-indicators-vertical [data-bs-target]{width:12px;height:12px;border-radius:50%;background-color:#ffffff80;border:none;box-shadow:0 1px 3px #0000004d;opacity:.7;transition:opacity .15s ease}:host ::ng-deep .carousel-indicators-vertical [data-bs-target].active{opacity:1;background-color:#fff}:host ::ng-deep .carousel-control-vertical{top:0;bottom:auto;height:2.5rem;align-items:center}:host ::ng-deep .carousel-control-vertical.carousel-control-next{top:auto;bottom:0}:host ::ng-deep .carousel-control-vertical.carousel-control-prev .carousel-control-prev-icon{transform:rotate(90deg)}:host ::ng-deep .carousel-control-vertical.carousel-control-next .carousel-control-next-icon{transform:rotate(90deg)}.wrapper{overflow:hidden}\n"] }]
263
+ ], animations: [FadeInOutAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isServerSide) {\n <div class=\"carousel mx-auto noscript\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n <div class=\"carousel-inner d-grid\">\n @let imagesValue = images();\n @if (imageCount(); as imageCount) {\n @for (image of imagesValue; track image.id; let i = $index) {\n <input type=\"radio\" [id]=\"'car-' + i\" [name]=\"'car'\" class=\"car-radio d-none\" bsNoNoscript [checked]=\"i === 0\">\n <div class=\"carousel-item fade d-flex flex-row h-100 align-items-center\"\n [class.flex-column]=\"orientation() === 'vertical'\">\n <div class=\"w-100 position-relative\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n @if (indicators()) {\n <div class=\"carousel-indicators\"\n [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of imagesValue; track image.id; let j = $index) {\n <label [attr.for]=\"'car-' + (j % imageCount)\" [class.active]=\"i === j\" data-bs-target></label>\n }\n </div>\n }\n </div>\n </div>\n\n <label class=\"carousel-control-prev cursor-pointer\" [for]=\"'car-' + ((i - 1 + imageCount) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </label>\n <label class=\"carousel-control-next cursor-pointer\" [for]=\"'car-' + ((i + 1) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </label>\n }\n }\n </div>\n </div>\n} @else {\n @switch (animation()) {\n @case ('slide') {\n <div class=\"carousel slide mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\"\n [style.height.px]=\"swipeContainer?.currentSlideHeight()\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer?.goto(i)\"\n [class.active]=\"swipeContainer?.imageIndex() === i\" data-bs-target\n [attr.aria-current]=\"swipeContainer?.imageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner overflow-hidden pe-none\" [class.text-nowrap]=\"orientation() === 'horizontal'\"\n [class.carousel-inner-vertical]=\"orientation() === 'vertical'\" #innerElement\n [style.height.px]=\"swipeContainer?.currentSlideHeight()\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\"\n (imageIndexChange)=\"onImageIndexChange($event)\"\n (animationStart)=\"onContainerAnimationStart()\"\n (animationEnd)=\"onContainerAnimationEnd()\"\n [orientation]=\"orientation()\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate()\"></ng-container>\n </div>\n @for (image of images(); track image.id) {\n <div class=\"carousel-item\" [class.active]=\"true\" bsSwipe>\n <ng-container *ngTemplateOutlet=\"image.itemTemplate\"></ng-container>\n </div>\n }\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"firstImageTemplate()\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('fade') {\n <div class=\"carousel fade mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut>\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('none') {\n <div class=\"carousel mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n }\n}\n", styles: [":host ::ng-deep .carousel{position:relative}:host ::ng-deep .carousel.pointer-event{touch-action:pan-y}:host ::ng-deep .carousel-inner{position:relative;width:100%;overflow:hidden}:host ::ng-deep .carousel-inner:after{display:block;clear:both;content:\"\"}:host ::ng-deep .carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-item{transition:none}}:host ::ng-deep .carousel-item.active,:host ::ng-deep .carousel-item-next,:host ::ng-deep .carousel-item-prev{display:block}:host ::ng-deep .carousel-item-next:not(.carousel-item-start),:host ::ng-deep .active.carousel-item-end{transform:translate(100%)}:host ::ng-deep .carousel-item-prev:not(.carousel-item-end),:host ::ng-deep .active.carousel-item-start{transform:translate(-100%)}:host ::ng-deep .carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}:host ::ng-deep .carousel-fade .carousel-item.active,:host ::ng-deep .carousel-fade .carousel-item-next.carousel-item-start,:host ::ng-deep .carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-fade .active.carousel-item-start,:host ::ng-deep .carousel-fade .active.carousel-item-end{transition:none}}:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-control-prev,:host ::ng-deep .carousel-control-next{transition:none}}:host ::ng-deep .carousel-control-prev:hover,:host ::ng-deep .carousel-control-prev:focus,:host ::ng-deep .carousel-control-next:hover,:host ::ng-deep .carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}:host ::ng-deep .carousel-control-prev{left:0}:host ::ng-deep .carousel-control-next{right:0}:host ::ng-deep .carousel-control-prev-icon,:host ::ng-deep .carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}:host ::ng-deep .carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")}:host ::ng-deep .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}:host ::ng-deep .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion:reduce){:host ::ng-deep .carousel-indicators [data-bs-target]{transition:none}}:host ::ng-deep .carousel-indicators .active{opacity:1}:host ::ng-deep .carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}:host ::ng-deep .carousel-dark{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep :root,:host ::ng-deep [data-bs-theme=light]{--bs-carousel-indicator-active-bg: #fff;--bs-carousel-caption-color: #fff;--bs-carousel-control-icon-filter: }:host ::ng-deep [data-bs-theme=dark]{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:host ::ng-deep .carousel{min-height:100px;max-width:500px}:host ::ng-deep .carousel.noscript .carousel-inner{grid-template-rows:100%;grid-template-columns:100%}:host ::ng-deep .carousel.noscript .carousel-control-prev,:host ::ng-deep .carousel.noscript .carousel-control-next{display:none;z-index:10}:host ::ng-deep .carousel.noscript .carousel-item{display:block;opacity:0;transition:opacity .4s ease-in-out;grid-row:1;grid-column:1}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item{opacity:1;z-index:5}:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev,:host ::ng-deep .carousel.noscript .car-radio.noscript:checked+.carousel-item+label.carousel-control-prev+.carousel-control-next{display:flex}:host ::ng-deep .carousel.noscript .carousel-indicators{z-index:10}:host ::ng-deep .carousel .carousel-item>*{width:100%!important}:host ::ng-deep .carousel-indicators [data-bs-target]{background-color:var(--bs-carousel-indicator-active-bg, #fff)}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next{width:100%;left:0;right:0}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev.carousel-control-vertical,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next.carousel-control-vertical{justify-content:center}:host ::ng-deep .carousel.carousel-vertical .carousel-control-prev-icon,:host ::ng-deep .carousel.carousel-vertical .carousel-control-next-icon{background-color:#00000080;border-radius:50%;padding:1.5rem;background-size:50%;box-shadow:0 2px 8px #0000004d}:host ::ng-deep .carousel-inner-vertical{display:flex;flex-direction:column}:host ::ng-deep .carousel-inner-vertical .carousel-item{flex:0 0 auto;display:flex!important;flex-direction:column;justify-content:center;align-items:center}:host ::ng-deep .carousel-indicators-vertical{position:absolute;inset:50% auto auto 0;transform:translateY(-50%);flex-direction:column;justify-content:center;align-items:center;margin:0;margin-left:.5rem;gap:.5rem}:host ::ng-deep .carousel-indicators-vertical [data-bs-target]{width:12px;height:12px;border-radius:50%;background-color:#ffffff80;border:none;box-shadow:0 1px 3px #0000004d;opacity:.7;transition:opacity .15s ease}:host ::ng-deep .carousel-indicators-vertical [data-bs-target].active{opacity:1;background-color:#fff}:host ::ng-deep .carousel-control-vertical{top:0;bottom:auto;height:2.5rem;align-items:center}:host ::ng-deep .carousel-control-vertical.carousel-control-next{top:auto;bottom:0}:host ::ng-deep .carousel-control-vertical.carousel-control-prev .carousel-control-prev-icon{transform:rotate(90deg)}:host ::ng-deep .carousel-control-vertical.carousel-control-next .carousel-control-next-icon{transform:rotate(90deg)}.wrapper{overflow:hidden}\n"] }]
259
264
  }], ctorParameters: () => [], propDecorators: { indicators: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicators", required: false }] }], keyboardEvents: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyboardEvents", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], animation: [{ type: i0.Input, args: [{ isSignal: true, alias: "animation", required: false }] }], interval: [{ type: i0.Input, args: [{ isSignal: true, alias: "interval", required: false }] }], wrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrap", required: false }] }], slideChange: [{ type: i0.Output, args: ["slideChange"] }], animationStart: [{ type: i0.Output, args: ["animationStart"] }], animationEnd: [{ type: i0.Output, args: ["animationEnd"] }], innerElement: [{
260
265
  type: ViewChild,
261
266
  args: ['innerElement']
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-bootstrap-carousel.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel-image/carousel-image.directive.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel/carousel.component.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel/carousel.component.html","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel-img/carousel-img.directive.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel.module.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/mintplayer-ng-bootstrap-carousel.ts"],"sourcesContent":["import { Directive, inject, TemplateRef, ElementRef } from '@angular/core';\nimport { BsCarouselComponent } from '../carousel/carousel.component';\n\n@Directive({\n selector: '*[bsCarouselImage]',\n standalone: true,\n})\nexport class BsCarouselImageDirective {\n private templateRef = inject(TemplateRef<any>);\n private carousel = inject(BsCarouselComponent);\n private element = inject(ElementRef<HTMLElement>);\n\n public itemTemplate: TemplateRef<any>;\n id: number;\n isFirst = false;\n\n constructor() {\n this.itemTemplate = this.templateRef;\n this.id = this.carousel.imageCounter++;\n }\n}\n","import { isPlatformServer, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, ContentChildren, DestroyRef, effect, ElementRef, forwardRef, HostBinding, HostListener, inject, input, OnDestroy, output, PLATFORM_ID, QueryList, signal, TemplateRef, ViewChild } from '@angular/core';\nimport { FadeInOutAnimation } from '@mintplayer/ng-animations';\nimport { Color } from '@mintplayer/ng-bootstrap';\nimport { BsSwipeContainerDirective, BsSwipeDirective } from '@mintplayer/ng-swiper/swiper';\nimport { BsNoNoscriptDirective } from '@mintplayer/ng-bootstrap/no-noscript';\nimport { BsCarouselImageDirective } from '../carousel-image/carousel-image.directive';\n\n@Component({\n selector: 'bs-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss'],\n standalone: true,\n imports: [\n NgTemplateOutlet,\n BsSwipeContainerDirective,\n BsSwipeDirective,\n BsNoNoscriptDirective,\n ],\n animations: [FadeInOutAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsCarouselComponent implements AfterViewInit, OnDestroy {\n private platformId = inject(PLATFORM_ID);\n private destroyRef = inject(DestroyRef);\n\n colors = Color;\n isServerSide = isPlatformServer(this.platformId);\n currentImageIndex = signal(0);\n images = signal<QueryList<BsCarouselImageDirective> | null>(null);\n resizeObserver?: ResizeObserver;\n private intervalId?: ReturnType<typeof setInterval>;\n\n // Inputs\n indicators = input(false);\n keyboardEvents = input(true);\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n animation = input<'fade' | 'slide' | 'none'>('slide');\n interval = input<number | null>(null);\n wrap = input(true);\n\n // Outputs\n slideChange = output<number>();\n animationStart = output<void>();\n animationEnd = output<void>();\n\n // Computed signals\n imageCount = computed(() => this.images()?.length ?? 0);\n\n firstImageTemplate = computed<TemplateRef<any> | null>(() => {\n const images = this.images();\n if (!images) return null;\n if (images.length === 0) return null;\n\n const img = images.get(0);\n if (!img) return null;\n\n return img.itemTemplate;\n });\n\n lastImageTemplate = computed<TemplateRef<any> | null>(() => {\n const images = this.images();\n if (!images) return null;\n if (images.length === 0) return null;\n\n const img = images.get(images.length - 1);\n if (!img) return null;\n\n return img.itemTemplate;\n });\n\n @ViewChild('innerElement') innerElement!: ElementRef<HTMLDivElement>;\n @ViewChild('container') swipeContainer!: BsSwipeContainerDirective;\n @ContentChildren(forwardRef(() => BsCarouselImageDirective)) set imagesQuery(value: QueryList<BsCarouselImageDirective>) {\n this.images.set(value);\n value.forEach((item, index) => item.isFirst = (index === 0));\n }\n\n @HostBinding('@.disabled') public animationsDisabled = false;\n\n @HostListener('document:keydown.ArrowLeft', ['$event'])\n @HostListener('document:keydown.ArrowRight', ['$event'])\n @HostListener('document:keydown.ArrowUp', ['$event'])\n @HostListener('document:keydown.ArrowDown', ['$event'])\n onKeyPress(event: Event) {\n const ev = event as KeyboardEvent;\n if (this.keyboardEvents()) {\n let handled = false;\n const orientation = this.orientation();\n switch (ev.key) {\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n this.previous();\n handled = true;\n }\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n this.next();\n handled = true;\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') {\n this.previous();\n handled = true;\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') {\n this.next();\n handled = true;\n }\n break;\n }\n if (handled) {\n ev.preventDefault();\n }\n }\n }\n\n constructor() {\n // Setup auto-advance interval effect\n effect(() => {\n const intervalTime = this.interval();\n this.clearAutoAdvance();\n\n if (intervalTime && intervalTime > 0) {\n this.intervalId = setInterval(() => {\n this.next();\n }, intervalTime);\n }\n });\n\n // Emit slideChange when currentImageIndex changes\n effect(() => {\n const index = this.currentImageIndex();\n this.slideChange.emit(index);\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.clearAutoAdvance();\n this.resizeObserver?.disconnect();\n });\n }\n\n private clearAutoAdvance() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = undefined;\n }\n }\n\n previous() {\n const animation = this.animation();\n const imageCount = this.imageCount();\n const wrap = this.wrap();\n\n switch (animation) {\n case 'fade':\n case 'none': {\n const currentIndex = this.currentImageIndex();\n if (currentIndex > 0) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(currentIndex - 1);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n } else if (wrap) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(imageCount - 1);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n }\n break;\n }\n case 'slide':\n this.swipeContainer.previous();\n break;\n }\n }\n\n next() {\n const animation = this.animation();\n const imageCount = this.imageCount();\n const wrap = this.wrap();\n\n switch (animation) {\n case 'fade':\n case 'none': {\n const currentIndex = this.currentImageIndex();\n if (currentIndex < imageCount - 1) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(currentIndex + 1);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n } else if (wrap) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(0);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n }\n break;\n }\n case 'slide':\n this.swipeContainer.next();\n break;\n }\n }\n\n goto(index: number) {\n const animation = this.animation();\n switch (animation) {\n case 'fade':\n case 'none':\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(index);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n break;\n case 'slide':\n this.swipeContainer.goto(index);\n break;\n }\n }\n\n imageCounter = 1;\n\n ngAfterViewInit() {\n if (!this.isServerSide) {\n this.resizeObserver = new ResizeObserver(() => {\n // Signals automatically trigger change detection in zoneless mode\n // The resize will be picked up by the observe-size directive\n });\n this.resizeObserver.observe(this.innerElement.nativeElement);\n }\n }\n\n ngOnDestroy() {\n this.resizeObserver?.unobserve(this.innerElement?.nativeElement);\n this.resizeObserver?.disconnect();\n this.clearAutoAdvance();\n }\n\n onContainerAnimationStart() {\n this.animationStart.emit();\n }\n\n onContainerAnimationEnd() {\n this.animationEnd.emit();\n }\n\n onImageIndexChange(index: number) {\n this.currentImageIndex.set(index);\n }\n}\n","@if (isServerSide) {\n <div class=\"carousel mx-auto noscript\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n <div class=\"carousel-inner d-grid\">\n @let imagesValue = images();\n @if (imageCount(); as imageCount) {\n @for (image of imagesValue; track image.id; let i = $index) {\n <input type=\"radio\" [id]=\"'car-' + i\" [name]=\"'car'\" class=\"car-radio d-none\" bsNoNoscript [checked]=\"i === 0\">\n <div class=\"carousel-item fade d-flex flex-row h-100 align-items-center\"\n [class.flex-column]=\"orientation() === 'vertical'\">\n <div class=\"w-100 position-relative\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n @if (indicators()) {\n <div class=\"carousel-indicators\"\n [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of imagesValue; track image.id; let j = $index) {\n <label [attr.for]=\"'car-' + (j % imageCount)\" [class.active]=\"i === j\" data-bs-target></label>\n }\n </div>\n }\n </div>\n </div>\n\n <label class=\"carousel-control-prev cursor-pointer\" [for]=\"'car-' + ((i - 1 + imageCount) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </label>\n <label class=\"carousel-control-next cursor-pointer\" [for]=\"'car-' + ((i + 1) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </label>\n }\n }\n </div>\n </div>\n} @else {\n @switch (animation()) {\n @case ('slide') {\n <div class=\"carousel slide mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\"\n [style.height.px]=\"swipeContainer.currentSlideHeight()\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer.goto(i)\"\n [class.active]=\"swipeContainer.imageIndex() === i\" data-bs-target\n [attr.aria-current]=\"swipeContainer.imageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner overflow-hidden pe-none\" [class.text-nowrap]=\"orientation() === 'horizontal'\"\n [class.carousel-inner-vertical]=\"orientation() === 'vertical'\" #innerElement\n [style.height.px]=\"swipeContainer.currentSlideHeight()\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\"\n (imageIndexChange)=\"onImageIndexChange($event)\"\n (animationStart)=\"onContainerAnimationStart()\"\n (animationEnd)=\"onContainerAnimationEnd()\"\n [orientation]=\"orientation()\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate()\"></ng-container>\n </div>\n @for (image of images(); track image.id) {\n <div class=\"carousel-item\" [class.active]=\"true\" bsSwipe>\n <ng-container *ngTemplateOutlet=\"image.itemTemplate\"></ng-container>\n </div>\n }\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"firstImageTemplate()\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('fade') {\n <div class=\"carousel fade mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut>\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('none') {\n <div class=\"carousel mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n }\n}\n","import { Directive, HostBinding, inject } from '@angular/core';\nimport { BsCarouselImageDirective } from '../carousel-image/carousel-image.directive';\n\n@Directive({\n selector: 'img',\n standalone: true,\n})\nexport class BsCarouselImgDirective {\n private image = inject(BsCarouselImageDirective, { optional: true });\n\n @HostBinding('attr.fetch-priority') fetchPriority: 'high' | 'low' | 'auto';\n\n constructor() {\n this.fetchPriority = (this.image && this.image.isFirst) ? 'high' : 'low';\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BsCarouselComponent } from './carousel/carousel.component';\nimport { BsCarouselImageDirective } from './carousel-image/carousel-image.directive';\nimport { BsCarouselImgDirective } from './carousel-img/carousel-img.directive';\n\n@NgModule({\n imports: [\n BsCarouselComponent,\n BsCarouselImageDirective,\n BsCarouselImgDirective,\n ],\n exports: [\n BsCarouselComponent,\n BsCarouselImageDirective,\n BsCarouselImgDirective,\n ]\n})\nexport class BsCarouselModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mintplayer-ng-bootstrap-carousel.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel-image/carousel-image.directive.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel/carousel.component.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel/carousel.component.html","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel-img/carousel-img.directive.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/src/carousel.module.ts","../../../../libs/mintplayer-ng-bootstrap/carousel/mintplayer-ng-bootstrap-carousel.ts"],"sourcesContent":["import { Directive, inject, TemplateRef, ElementRef } from '@angular/core';\nimport { BsCarouselComponent } from '../carousel/carousel.component';\n\n@Directive({\n selector: '*[bsCarouselImage]',\n standalone: true,\n})\nexport class BsCarouselImageDirective {\n private templateRef = inject(TemplateRef<any>);\n private carousel = inject(BsCarouselComponent);\n private element = inject(ElementRef<HTMLElement>);\n\n public itemTemplate: TemplateRef<any>;\n id: number;\n isFirst = false;\n\n constructor() {\n this.itemTemplate = this.templateRef;\n this.id = this.carousel.imageCounter++;\n }\n}\n","import { isPlatformServer, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, ContentChildren, DestroyRef, effect, ElementRef, forwardRef, HostBinding, HostListener, inject, input, OnDestroy, output, PLATFORM_ID, QueryList, signal, TemplateRef, ViewChild } from '@angular/core';\nimport { FadeInOutAnimation } from '@mintplayer/ng-animations';\nimport { Color } from '@mintplayer/ng-bootstrap';\nimport { BsSwipeContainerDirective, BsSwipeDirective } from '@mintplayer/ng-swiper/swiper';\nimport { BsNoNoscriptDirective } from '@mintplayer/ng-bootstrap/no-noscript';\nimport { BsCarouselImageDirective } from '../carousel-image/carousel-image.directive';\n\n@Component({\n selector: 'bs-carousel',\n templateUrl: './carousel.component.html',\n styleUrls: ['./carousel.component.scss'],\n standalone: true,\n imports: [\n NgTemplateOutlet,\n BsSwipeContainerDirective,\n BsSwipeDirective,\n BsNoNoscriptDirective,\n ],\n animations: [FadeInOutAnimation],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsCarouselComponent implements AfterViewInit, OnDestroy {\n private platformId = inject(PLATFORM_ID);\n private destroyRef = inject(DestroyRef);\n\n colors = Color;\n isServerSide = isPlatformServer(this.platformId);\n currentImageIndex = signal(0);\n images = signal<QueryList<BsCarouselImageDirective> | null>(null);\n resizeObserver?: ResizeObserver;\n private intervalId?: ReturnType<typeof setInterval>;\n private isDestroyed = false;\n\n // Inputs\n indicators = input(false);\n keyboardEvents = input(true);\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n animation = input<'fade' | 'slide' | 'none'>('slide');\n interval = input<number | null>(null);\n wrap = input(true);\n\n // Outputs\n slideChange = output<number>();\n animationStart = output<void>();\n animationEnd = output<void>();\n\n // Computed signals\n imageCount = computed(() => this.images()?.length ?? 0);\n\n firstImageTemplate = computed<TemplateRef<any> | null>(() => {\n const images = this.images();\n if (!images) return null;\n if (images.length === 0) return null;\n\n const img = images.get(0);\n if (!img) return null;\n\n return img.itemTemplate;\n });\n\n lastImageTemplate = computed<TemplateRef<any> | null>(() => {\n const images = this.images();\n if (!images) return null;\n if (images.length === 0) return null;\n\n const img = images.get(images.length - 1);\n if (!img) return null;\n\n return img.itemTemplate;\n });\n\n @ViewChild('innerElement') innerElement!: ElementRef<HTMLDivElement>;\n @ViewChild('container') swipeContainer!: BsSwipeContainerDirective;\n @ContentChildren(forwardRef(() => BsCarouselImageDirective)) set imagesQuery(value: QueryList<BsCarouselImageDirective>) {\n this.images.set(value);\n value.forEach((item, index) => item.isFirst = (index === 0));\n }\n\n @HostBinding('@.disabled') public animationsDisabled = false;\n\n @HostListener('document:keydown.ArrowLeft', ['$event'])\n @HostListener('document:keydown.ArrowRight', ['$event'])\n @HostListener('document:keydown.ArrowUp', ['$event'])\n @HostListener('document:keydown.ArrowDown', ['$event'])\n onKeyPress(event: Event) {\n const ev = event as KeyboardEvent;\n if (this.keyboardEvents()) {\n let handled = false;\n const orientation = this.orientation();\n switch (ev.key) {\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n this.previous();\n handled = true;\n }\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n this.next();\n handled = true;\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') {\n this.previous();\n handled = true;\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') {\n this.next();\n handled = true;\n }\n break;\n }\n if (handled) {\n ev.preventDefault();\n }\n }\n }\n\n constructor() {\n // Setup auto-advance interval effect\n effect(() => {\n const intervalTime = this.interval();\n this.clearAutoAdvance();\n\n if (intervalTime && intervalTime > 0) {\n this.intervalId = setInterval(() => {\n this.next();\n }, intervalTime);\n }\n });\n\n // Emit slideChange when currentImageIndex changes\n effect(() => {\n const index = this.currentImageIndex();\n if (!this.isDestroyed) {\n this.slideChange.emit(index);\n }\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.isDestroyed = true;\n this.clearAutoAdvance();\n this.resizeObserver?.disconnect();\n });\n }\n\n private clearAutoAdvance() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = undefined;\n }\n }\n\n previous() {\n const animation = this.animation();\n const imageCount = this.imageCount();\n const wrap = this.wrap();\n\n switch (animation) {\n case 'fade':\n case 'none': {\n const currentIndex = this.currentImageIndex();\n if (currentIndex > 0) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(currentIndex - 1);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n } else if (wrap) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(imageCount - 1);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n }\n break;\n }\n case 'slide':\n this.swipeContainer.previous();\n break;\n }\n }\n\n next() {\n const animation = this.animation();\n const imageCount = this.imageCount();\n const wrap = this.wrap();\n\n switch (animation) {\n case 'fade':\n case 'none': {\n const currentIndex = this.currentImageIndex();\n if (currentIndex < imageCount - 1) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(currentIndex + 1);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n } else if (wrap) {\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(0);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n }\n break;\n }\n case 'slide':\n this.swipeContainer.next();\n break;\n }\n }\n\n goto(index: number) {\n const animation = this.animation();\n switch (animation) {\n case 'fade':\n case 'none':\n if (animation === 'none') {\n this.animationStart.emit();\n }\n this.currentImageIndex.set(index);\n if (animation === 'none') {\n this.animationEnd.emit();\n }\n break;\n case 'slide':\n this.swipeContainer.goto(index);\n break;\n }\n }\n\n imageCounter = 1;\n\n ngAfterViewInit() {\n if (!this.isServerSide) {\n this.resizeObserver = new ResizeObserver(() => {\n // Signals automatically trigger change detection in zoneless mode\n // The resize will be picked up by the observe-size directive\n });\n this.resizeObserver.observe(this.innerElement.nativeElement);\n }\n }\n\n ngOnDestroy() {\n this.isDestroyed = true;\n this.resizeObserver?.unobserve(this.innerElement?.nativeElement);\n this.resizeObserver?.disconnect();\n this.clearAutoAdvance();\n }\n\n onContainerAnimationStart() {\n this.animationStart.emit();\n }\n\n onContainerAnimationEnd() {\n this.animationEnd.emit();\n }\n\n onImageIndexChange(index: number) {\n this.currentImageIndex.set(index);\n }\n}\n","@if (isServerSide) {\n <div class=\"carousel mx-auto noscript\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n <div class=\"carousel-inner d-grid\">\n @let imagesValue = images();\n @if (imageCount(); as imageCount) {\n @for (image of imagesValue; track image.id; let i = $index) {\n <input type=\"radio\" [id]=\"'car-' + i\" [name]=\"'car'\" class=\"car-radio d-none\" bsNoNoscript [checked]=\"i === 0\">\n <div class=\"carousel-item fade d-flex flex-row h-100 align-items-center\"\n [class.flex-column]=\"orientation() === 'vertical'\">\n <div class=\"w-100 position-relative\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n @if (indicators()) {\n <div class=\"carousel-indicators\"\n [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of imagesValue; track image.id; let j = $index) {\n <label [attr.for]=\"'car-' + (j % imageCount)\" [class.active]=\"i === j\" data-bs-target></label>\n }\n </div>\n }\n </div>\n </div>\n\n <label class=\"carousel-control-prev cursor-pointer\" [for]=\"'car-' + ((i - 1 + imageCount) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </label>\n <label class=\"carousel-control-next cursor-pointer\" [for]=\"'car-' + ((i + 1) % imageCount)\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </label>\n }\n }\n </div>\n </div>\n} @else {\n @switch (animation()) {\n @case ('slide') {\n <div class=\"carousel slide mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\"\n [style.height.px]=\"swipeContainer?.currentSlideHeight()\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer?.goto(i)\"\n [class.active]=\"swipeContainer?.imageIndex() === i\" data-bs-target\n [attr.aria-current]=\"swipeContainer?.imageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner overflow-hidden pe-none\" [class.text-nowrap]=\"orientation() === 'horizontal'\"\n [class.carousel-inner-vertical]=\"orientation() === 'vertical'\" #innerElement\n [style.height.px]=\"swipeContainer?.currentSlideHeight()\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\"\n (imageIndexChange)=\"onImageIndexChange($event)\"\n (animationStart)=\"onContainerAnimationStart()\"\n (animationEnd)=\"onContainerAnimationEnd()\"\n [orientation]=\"orientation()\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate()\"></ng-container>\n </div>\n @for (image of images(); track image.id) {\n <div class=\"carousel-item\" [class.active]=\"true\" bsSwipe>\n <ng-container *ngTemplateOutlet=\"image.itemTemplate\"></ng-container>\n </div>\n }\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"firstImageTemplate()\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('fade') {\n <div class=\"carousel fade mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut>\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n @case ('none') {\n <div class=\"carousel mx-auto\" [class.carousel-vertical]=\"orientation() === 'vertical'\">\n @if (indicators()) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation() === 'vertical'\">\n @for (image of images(); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"goto(i)\"\n [class.active]=\"currentImageIndex() === i\" data-bs-target\n [attr.aria-current]=\"currentImageIndex() === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n }\n </div>\n }\n <div class=\"carousel-inner\" #innerElement>\n @for (image of images(); track image.id; let i = $index) {\n @if (currentImageIndex() === i) {\n <div class=\"carousel-item\" [class.active]=\"true\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container>\n </div>\n }\n }\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previous()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Previous slide\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"next()\"\n [class.carousel-control-vertical]=\"orientation() === 'vertical'\"\n aria-label=\"Next slide\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n }\n }\n}\n","import { Directive, HostBinding, inject } from '@angular/core';\nimport { BsCarouselImageDirective } from '../carousel-image/carousel-image.directive';\n\n@Directive({\n selector: 'img',\n standalone: true,\n})\nexport class BsCarouselImgDirective {\n private image = inject(BsCarouselImageDirective, { optional: true });\n\n @HostBinding('attr.fetch-priority') fetchPriority: 'high' | 'low' | 'auto';\n\n constructor() {\n this.fetchPriority = (this.image && this.image.isFirst) ? 'high' : 'low';\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BsCarouselComponent } from './carousel/carousel.component';\nimport { BsCarouselImageDirective } from './carousel-image/carousel-image.directive';\nimport { BsCarouselImgDirective } from './carousel-img/carousel-img.directive';\n\n@NgModule({\n imports: [\n BsCarouselComponent,\n BsCarouselImageDirective,\n BsCarouselImgDirective,\n ],\n exports: [\n BsCarouselComponent,\n BsCarouselImageDirective,\n BsCarouselImgDirective,\n ]\n})\nexport class BsCarouselModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}