@mintplayer/ng-bootstrap 21.0.0 → 21.1.1
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.
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +33 -46
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs +12 -30
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs +6 -18
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +31 -65
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +200 -132
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs +5 -7
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +14 -17
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +231 -347
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +43 -39
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +7 -35
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +46 -86
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +7 -6
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +32 -74
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs +6 -7
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs +18 -18
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +20 -22
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +16 -10
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +8 -28
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +208 -265
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs +8 -21
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +43 -38
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +59 -120
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +11 -25
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +8 -28
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +67 -103
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +34 -63
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +19 -47
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +35 -41
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +205 -779
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +34 -39
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +74 -100
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs +37 -79
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +78 -45
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs +16 -26
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +14 -40
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs +8 -32
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs +70 -76
- package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs +11 -11
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +53 -99
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs +7 -38
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +23 -49
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +33 -38
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +45 -98
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +12 -24
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +21 -43
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +29 -49
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
- package/package.json +5 -5
- package/types/mintplayer-ng-bootstrap-accordion.d.ts +11 -15
- package/types/mintplayer-ng-bootstrap-alert.d.ts +4 -9
- package/types/mintplayer-ng-bootstrap-badge.d.ts +5 -9
- package/types/mintplayer-ng-bootstrap-calendar.d.ts +14 -22
- package/types/mintplayer-ng-bootstrap-carousel.d.ts +41 -35
- package/types/mintplayer-ng-bootstrap-close.d.ts +1 -2
- package/types/mintplayer-ng-bootstrap-code-snippet.d.ts +4 -5
- package/types/mintplayer-ng-bootstrap-color-picker.d.ts +70 -97
- package/types/mintplayer-ng-bootstrap-datatable.d.ts +11 -11
- package/types/mintplayer-ng-bootstrap-datepicker.d.ts +6 -13
- package/types/mintplayer-ng-bootstrap-dropdown.d.ts +14 -20
- package/types/mintplayer-ng-bootstrap-enhanced-paste.d.ts +1 -3
- package/types/mintplayer-ng-bootstrap-file-upload.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-grid.d.ts +14 -26
- package/types/mintplayer-ng-bootstrap-let.d.ts +0 -2
- package/types/mintplayer-ng-bootstrap-markdown.d.ts +1 -5
- package/types/mintplayer-ng-bootstrap-modal.d.ts +3 -6
- package/types/mintplayer-ng-bootstrap-multiselect.d.ts +6 -6
- package/types/mintplayer-ng-bootstrap-navbar-toggler.d.ts +5 -11
- package/types/mintplayer-ng-bootstrap-navbar.d.ts +75 -80
- package/types/mintplayer-ng-bootstrap-navigation-lock.d.ts +2 -4
- package/types/mintplayer-ng-bootstrap-offcanvas.d.ts +12 -14
- package/types/mintplayer-ng-bootstrap-ordinal-number.d.ts +1 -2
- package/types/mintplayer-ng-bootstrap-pagination.d.ts +17 -31
- package/types/mintplayer-ng-bootstrap-placeholder.d.ts +3 -8
- package/types/mintplayer-ng-bootstrap-playlist-toggler.d.ts +5 -11
- package/types/mintplayer-ng-bootstrap-popover.d.ts +15 -23
- package/types/mintplayer-ng-bootstrap-progress-bar.d.ts +19 -22
- package/types/mintplayer-ng-bootstrap-range.d.ts +1 -2
- package/types/mintplayer-ng-bootstrap-rating.d.ts +8 -14
- package/types/mintplayer-ng-bootstrap-resizable.d.ts +7 -11
- package/types/mintplayer-ng-bootstrap-scheduler.d.ts +132 -220
- package/types/mintplayer-ng-bootstrap-scrollspy.d.ts +14 -15
- package/types/mintplayer-ng-bootstrap-searchbox.d.ts +20 -27
- package/types/mintplayer-ng-bootstrap-select.d.ts +13 -23
- package/types/mintplayer-ng-bootstrap-select2.d.ts +16 -14
- package/types/mintplayer-ng-bootstrap-shell.d.ts +6 -12
- package/types/mintplayer-ng-bootstrap-signature-pad.d.ts +7 -12
- package/types/mintplayer-ng-bootstrap-spinner.d.ts +8 -16
- package/types/mintplayer-ng-bootstrap-splitter.d.ts +21 -27
- package/types/mintplayer-ng-bootstrap-sticky-footer.d.ts +3 -3
- package/types/mintplayer-ng-bootstrap-tab-control.d.ts +29 -37
- package/types/mintplayer-ng-bootstrap-table.d.ts +6 -13
- package/types/mintplayer-ng-bootstrap-timepicker.d.ts +7 -14
- package/types/mintplayer-ng-bootstrap-toast.d.ts +5 -10
- package/types/mintplayer-ng-bootstrap-toggle-button.d.ts +22 -36
- package/types/mintplayer-ng-bootstrap-tooltip.d.ts +4 -7
- package/types/mintplayer-ng-bootstrap-treeview.d.ts +10 -15
- package/types/mintplayer-ng-bootstrap-trust-html.d.ts +0 -2
- package/types/mintplayer-ng-bootstrap-typeahead.d.ts +14 -17
|
@@ -1,122 +1,63 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { isPlatformServer, AsyncPipe, NgTemplateOutlet } from '@angular/common';
|
|
1
|
+
import { isPlatformServer, NgTemplateOutlet } from '@angular/common';
|
|
3
2
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Directive, PLATFORM_ID,
|
|
3
|
+
import { inject, TemplateRef, ElementRef, Directive, PLATFORM_ID, DestroyRef, signal, input, output, computed, effect, HostListener, HostBinding, forwardRef, ContentChildren, ViewChild, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
5
4
|
import { FadeInOutAnimation } from '@mintplayer/ng-animations';
|
|
6
5
|
import { Color } from '@mintplayer/ng-bootstrap';
|
|
7
|
-
import {
|
|
8
|
-
import * as i2 from '@mintplayer/ng-swiper/swiper';
|
|
9
|
-
import { BsSwiperModule } from '@mintplayer/ng-swiper/swiper';
|
|
10
|
-
import * as i3 from '@mintplayer/ng-bootstrap/no-noscript';
|
|
6
|
+
import { BsSwipeContainerDirective, BsSwipeDirective } from '@mintplayer/ng-swiper/swiper';
|
|
11
7
|
import { BsNoNoscriptDirective } from '@mintplayer/ng-bootstrap/no-noscript';
|
|
12
8
|
|
|
13
9
|
class BsCarouselImageDirective {
|
|
14
|
-
constructor(
|
|
15
|
-
this.templateRef =
|
|
16
|
-
this.
|
|
10
|
+
constructor() {
|
|
11
|
+
this.templateRef = inject((TemplateRef));
|
|
12
|
+
this.carousel = inject(BsCarouselComponent);
|
|
13
|
+
this.element = inject((ElementRef));
|
|
17
14
|
this.isFirst = false;
|
|
18
15
|
this.itemTemplate = this.templateRef;
|
|
19
|
-
this.id = carousel.imageCounter++;
|
|
16
|
+
this.id = this.carousel.imageCounter++;
|
|
20
17
|
}
|
|
21
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselImageDirective, deps: [
|
|
22
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: BsCarouselImageDirective, isStandalone:
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselImageDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
19
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: BsCarouselImageDirective, isStandalone: true, selector: "*[bsCarouselImage]", ngImport: i0 }); }
|
|
23
20
|
}
|
|
24
21
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselImageDirective, decorators: [{
|
|
25
22
|
type: Directive,
|
|
26
23
|
args: [{
|
|
27
24
|
selector: '*[bsCarouselImage]',
|
|
28
|
-
standalone:
|
|
25
|
+
standalone: true,
|
|
29
26
|
}]
|
|
30
|
-
}], ctorParameters: () => [
|
|
27
|
+
}], ctorParameters: () => [] });
|
|
31
28
|
|
|
32
29
|
class BsCarouselComponent {
|
|
33
|
-
|
|
34
|
-
this.
|
|
35
|
-
this.colors = Color;
|
|
36
|
-
this.currentImageIndex = 0;
|
|
37
|
-
this.images$ = new BehaviorSubject(null);
|
|
38
|
-
this.indicators = false;
|
|
39
|
-
this.keyboardEvents = true;
|
|
40
|
-
this._orientation = 'horizontal';
|
|
41
|
-
//#region Animation
|
|
42
|
-
this.animationsDisabled = false;
|
|
43
|
-
this._animation = 'slide';
|
|
44
|
-
this.imageCounter = 1;
|
|
45
|
-
this.isServerSide = isPlatformServer(platformId);
|
|
46
|
-
this.imageCount$ = this.images$.pipe(map((images) => images?.length ?? 0));
|
|
47
|
-
this.firstImageTemplate$ = this.images$.pipe(map((images) => {
|
|
48
|
-
if (!images)
|
|
49
|
-
return null;
|
|
50
|
-
if (images.length === 0)
|
|
51
|
-
return null;
|
|
52
|
-
const img = images.get(0);
|
|
53
|
-
if (!img)
|
|
54
|
-
return null;
|
|
55
|
-
return img.itemTemplate;
|
|
56
|
-
}));
|
|
57
|
-
this.lastImageTemplate$ = this.images$.pipe(map((images) => {
|
|
58
|
-
if (!images)
|
|
59
|
-
return null;
|
|
60
|
-
if (images.length === 0)
|
|
61
|
-
return null;
|
|
62
|
-
const img = images.get(images.length - 1);
|
|
63
|
-
if (!img)
|
|
64
|
-
return null;
|
|
65
|
-
return img.itemTemplate;
|
|
66
|
-
}));
|
|
67
|
-
if (!isPlatformServer(platformId)) {
|
|
68
|
-
this.resizeObserver = new ResizeObserver((entries) => {
|
|
69
|
-
this.cdRef.detectChanges();
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
set orientation(value) {
|
|
74
|
-
this._orientation = value ?? 'horizontal';
|
|
75
|
-
this.cdRef.detectChanges();
|
|
76
|
-
}
|
|
77
|
-
get orientation() {
|
|
78
|
-
return this._orientation;
|
|
79
|
-
}
|
|
80
|
-
set images(value) {
|
|
81
|
-
this.images$.next(value);
|
|
30
|
+
set imagesQuery(value) {
|
|
31
|
+
this.images.set(value);
|
|
82
32
|
value.forEach((item, index) => item.isFirst = (index === 0));
|
|
83
33
|
}
|
|
84
|
-
set animation(value) {
|
|
85
|
-
this.animationsDisabled = true;
|
|
86
|
-
this._animation = value;
|
|
87
|
-
setTimeout(() => this.animationsDisabled = false, 20);
|
|
88
|
-
setTimeout(() => this.cdRef.detectChanges(), 50);
|
|
89
|
-
}
|
|
90
|
-
get animation() {
|
|
91
|
-
return this._animation;
|
|
92
|
-
}
|
|
93
|
-
//#endregion
|
|
94
34
|
onKeyPress(event) {
|
|
95
35
|
const ev = event;
|
|
96
|
-
if (this.keyboardEvents) {
|
|
36
|
+
if (this.keyboardEvents()) {
|
|
97
37
|
let handled = false;
|
|
38
|
+
const orientation = this.orientation();
|
|
98
39
|
switch (ev.key) {
|
|
99
40
|
case 'ArrowLeft':
|
|
100
|
-
if (
|
|
101
|
-
this.
|
|
41
|
+
if (orientation === 'horizontal') {
|
|
42
|
+
this.previous();
|
|
102
43
|
handled = true;
|
|
103
44
|
}
|
|
104
45
|
break;
|
|
105
46
|
case 'ArrowRight':
|
|
106
|
-
if (
|
|
107
|
-
this.
|
|
47
|
+
if (orientation === 'horizontal') {
|
|
48
|
+
this.next();
|
|
108
49
|
handled = true;
|
|
109
50
|
}
|
|
110
51
|
break;
|
|
111
52
|
case 'ArrowUp':
|
|
112
|
-
if (
|
|
113
|
-
this.
|
|
53
|
+
if (orientation === 'vertical') {
|
|
54
|
+
this.previous();
|
|
114
55
|
handled = true;
|
|
115
56
|
}
|
|
116
57
|
break;
|
|
117
58
|
case 'ArrowDown':
|
|
118
|
-
if (
|
|
119
|
-
this.
|
|
59
|
+
if (orientation === 'vertical') {
|
|
60
|
+
this.next();
|
|
120
61
|
handled = true;
|
|
121
62
|
}
|
|
122
63
|
break;
|
|
@@ -126,72 +67,207 @@ class BsCarouselComponent {
|
|
|
126
67
|
}
|
|
127
68
|
}
|
|
128
69
|
}
|
|
129
|
-
|
|
130
|
-
|
|
70
|
+
constructor() {
|
|
71
|
+
this.platformId = inject(PLATFORM_ID);
|
|
72
|
+
this.destroyRef = inject(DestroyRef);
|
|
73
|
+
this.colors = Color;
|
|
74
|
+
this.isServerSide = isPlatformServer(this.platformId);
|
|
75
|
+
this.currentImageIndex = signal(0, ...(ngDevMode ? [{ debugName: "currentImageIndex" }] : []));
|
|
76
|
+
this.images = signal(null, ...(ngDevMode ? [{ debugName: "images" }] : []));
|
|
77
|
+
// Inputs
|
|
78
|
+
this.indicators = input(false, ...(ngDevMode ? [{ debugName: "indicators" }] : []));
|
|
79
|
+
this.keyboardEvents = input(true, ...(ngDevMode ? [{ debugName: "keyboardEvents" }] : []));
|
|
80
|
+
this.orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
|
|
81
|
+
this.animation = input('slide', ...(ngDevMode ? [{ debugName: "animation" }] : []));
|
|
82
|
+
this.interval = input(null, ...(ngDevMode ? [{ debugName: "interval" }] : []));
|
|
83
|
+
this.wrap = input(true, ...(ngDevMode ? [{ debugName: "wrap" }] : []));
|
|
84
|
+
// Outputs
|
|
85
|
+
this.slideChange = output();
|
|
86
|
+
this.animationStart = output();
|
|
87
|
+
this.animationEnd = output();
|
|
88
|
+
// Computed signals
|
|
89
|
+
this.imageCount = computed(() => this.images()?.length ?? 0, ...(ngDevMode ? [{ debugName: "imageCount" }] : []));
|
|
90
|
+
this.firstImageTemplate = computed(() => {
|
|
91
|
+
const images = this.images();
|
|
92
|
+
if (!images)
|
|
93
|
+
return null;
|
|
94
|
+
if (images.length === 0)
|
|
95
|
+
return null;
|
|
96
|
+
const img = images.get(0);
|
|
97
|
+
if (!img)
|
|
98
|
+
return null;
|
|
99
|
+
return img.itemTemplate;
|
|
100
|
+
}, ...(ngDevMode ? [{ debugName: "firstImageTemplate" }] : []));
|
|
101
|
+
this.lastImageTemplate = computed(() => {
|
|
102
|
+
const images = this.images();
|
|
103
|
+
if (!images)
|
|
104
|
+
return null;
|
|
105
|
+
if (images.length === 0)
|
|
106
|
+
return null;
|
|
107
|
+
const img = images.get(images.length - 1);
|
|
108
|
+
if (!img)
|
|
109
|
+
return null;
|
|
110
|
+
return img.itemTemplate;
|
|
111
|
+
}, ...(ngDevMode ? [{ debugName: "lastImageTemplate" }] : []));
|
|
112
|
+
this.animationsDisabled = false;
|
|
113
|
+
this.imageCounter = 1;
|
|
114
|
+
// Setup auto-advance interval effect
|
|
115
|
+
effect(() => {
|
|
116
|
+
const intervalTime = this.interval();
|
|
117
|
+
this.clearAutoAdvance();
|
|
118
|
+
if (intervalTime && intervalTime > 0) {
|
|
119
|
+
this.intervalId = setInterval(() => {
|
|
120
|
+
this.next();
|
|
121
|
+
}, intervalTime);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
// Emit slideChange when currentImageIndex changes
|
|
125
|
+
effect(() => {
|
|
126
|
+
const index = this.currentImageIndex();
|
|
127
|
+
this.slideChange.emit(index);
|
|
128
|
+
});
|
|
129
|
+
// Cleanup on destroy
|
|
130
|
+
this.destroyRef.onDestroy(() => {
|
|
131
|
+
this.clearAutoAdvance();
|
|
132
|
+
this.resizeObserver?.disconnect();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
clearAutoAdvance() {
|
|
136
|
+
if (this.intervalId) {
|
|
137
|
+
clearInterval(this.intervalId);
|
|
138
|
+
this.intervalId = undefined;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
previous() {
|
|
142
|
+
const animation = this.animation();
|
|
143
|
+
const imageCount = this.imageCount();
|
|
144
|
+
const wrap = this.wrap();
|
|
145
|
+
switch (animation) {
|
|
131
146
|
case 'fade':
|
|
132
|
-
|
|
133
|
-
|
|
147
|
+
case 'none': {
|
|
148
|
+
const currentIndex = this.currentImageIndex();
|
|
149
|
+
if (currentIndex > 0) {
|
|
150
|
+
if (animation === 'none') {
|
|
151
|
+
this.animationStart.emit();
|
|
152
|
+
}
|
|
153
|
+
this.currentImageIndex.set(currentIndex - 1);
|
|
154
|
+
if (animation === 'none') {
|
|
155
|
+
this.animationEnd.emit();
|
|
156
|
+
}
|
|
134
157
|
}
|
|
135
|
-
else {
|
|
136
|
-
|
|
158
|
+
else if (wrap) {
|
|
159
|
+
if (animation === 'none') {
|
|
160
|
+
this.animationStart.emit();
|
|
161
|
+
}
|
|
162
|
+
this.currentImageIndex.set(imageCount - 1);
|
|
163
|
+
if (animation === 'none') {
|
|
164
|
+
this.animationEnd.emit();
|
|
165
|
+
}
|
|
137
166
|
}
|
|
138
167
|
break;
|
|
168
|
+
}
|
|
139
169
|
case 'slide':
|
|
140
170
|
this.swipeContainer.previous();
|
|
141
171
|
break;
|
|
142
172
|
}
|
|
143
173
|
}
|
|
144
|
-
|
|
145
|
-
|
|
174
|
+
next() {
|
|
175
|
+
const animation = this.animation();
|
|
176
|
+
const imageCount = this.imageCount();
|
|
177
|
+
const wrap = this.wrap();
|
|
178
|
+
switch (animation) {
|
|
146
179
|
case 'fade':
|
|
147
|
-
|
|
148
|
-
|
|
180
|
+
case 'none': {
|
|
181
|
+
const currentIndex = this.currentImageIndex();
|
|
182
|
+
if (currentIndex < imageCount - 1) {
|
|
183
|
+
if (animation === 'none') {
|
|
184
|
+
this.animationStart.emit();
|
|
185
|
+
}
|
|
186
|
+
this.currentImageIndex.set(currentIndex + 1);
|
|
187
|
+
if (animation === 'none') {
|
|
188
|
+
this.animationEnd.emit();
|
|
189
|
+
}
|
|
149
190
|
}
|
|
150
|
-
else {
|
|
151
|
-
|
|
191
|
+
else if (wrap) {
|
|
192
|
+
if (animation === 'none') {
|
|
193
|
+
this.animationStart.emit();
|
|
194
|
+
}
|
|
195
|
+
this.currentImageIndex.set(0);
|
|
196
|
+
if (animation === 'none') {
|
|
197
|
+
this.animationEnd.emit();
|
|
198
|
+
}
|
|
152
199
|
}
|
|
153
200
|
break;
|
|
201
|
+
}
|
|
154
202
|
case 'slide':
|
|
155
203
|
this.swipeContainer.next();
|
|
156
204
|
break;
|
|
157
205
|
}
|
|
158
206
|
}
|
|
207
|
+
goto(index) {
|
|
208
|
+
const animation = this.animation();
|
|
209
|
+
switch (animation) {
|
|
210
|
+
case 'fade':
|
|
211
|
+
case 'none':
|
|
212
|
+
if (animation === 'none') {
|
|
213
|
+
this.animationStart.emit();
|
|
214
|
+
}
|
|
215
|
+
this.currentImageIndex.set(index);
|
|
216
|
+
if (animation === 'none') {
|
|
217
|
+
this.animationEnd.emit();
|
|
218
|
+
}
|
|
219
|
+
break;
|
|
220
|
+
case 'slide':
|
|
221
|
+
this.swipeContainer.goto(index);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
159
225
|
ngAfterViewInit() {
|
|
160
|
-
|
|
226
|
+
if (!this.isServerSide) {
|
|
227
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
228
|
+
// Signals automatically trigger change detection in zoneless mode
|
|
229
|
+
// The resize will be picked up by the observe-size directive
|
|
230
|
+
});
|
|
231
|
+
this.resizeObserver.observe(this.innerElement.nativeElement);
|
|
232
|
+
}
|
|
161
233
|
}
|
|
162
234
|
ngOnDestroy() {
|
|
163
|
-
this.resizeObserver?.unobserve(this.innerElement
|
|
235
|
+
this.resizeObserver?.unobserve(this.innerElement?.nativeElement);
|
|
164
236
|
this.resizeObserver?.disconnect();
|
|
237
|
+
this.clearAutoAdvance();
|
|
238
|
+
}
|
|
239
|
+
onContainerAnimationStart() {
|
|
240
|
+
this.animationStart.emit();
|
|
241
|
+
}
|
|
242
|
+
onContainerAnimationEnd() {
|
|
243
|
+
this.animationEnd.emit();
|
|
165
244
|
}
|
|
166
|
-
|
|
167
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: BsCarouselComponent, isStandalone: false, selector: "bs-carousel", inputs: { indicators: "indicators", keyboardEvents: "keyboardEvents", orientation: "orientation", animation: "animation" }, 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: "images", 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 images = images$ | async;\n @if (imageCount$ | async; as imageCount) {\n @for (image of images; 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 images; 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$ | async\">\n @if (indicators) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation === 'vertical'\"\n [style.height.px]=\"orientation === 'vertical' ? (swipeContainer?.maxSlideHeight$ | async) : null\">\n @for (image of (images$ | async); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer?.goto(i)\"\n [class.active]=\"(swipeContainer?.imageIndex$ | async) === i\" data-bs-target\n [attr.aria-current]=\"(swipeContainer?.imageIndex$ | async) === 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$ | async\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\" [(imageIndex)]=\"currentImageIndex\"\n [orientation]=\"orientation\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate$ | async\"></ng-container>\n </div>\n @for (image of (images$ | async); 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$ | async\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previousImage()\"\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 </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\"\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 </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 [style.height.px]=\"orientation === 'vertical' ? (swipeContainer?.currentSlideHeight$ | async) : null\">\n @for (image of (images$ | async); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"currentImageIndex = 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\" [class.carousel-inner-vertical]=\"orientation === 'vertical'\">\n @for (image of (images$ | async); 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)=\"previousImage()\"\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 </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\"\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 </button>\n </div>\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{display:flex;flex-direction:row;align-items:stretch;gap:1rem;flex-wrap:nowrap}:host ::ng-deep .carousel.carousel-vertical .carousel-inner{order:1;flex:1 1 auto}:host ::ng-deep .carousel.carousel-vertical .carousel-indicators{order:0}: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-inner-vertical{display:flex;flex-direction:column;height:100%}:host ::ng-deep .carousel-inner-vertical .carousel-item{flex:1 1 auto;display:block}:host ::ng-deep .carousel-indicators-vertical{position:static;flex-direction:column;justify-content:center;align-items:stretch;margin:0;gap:.5rem;height:100%}:host ::ng-deep .carousel-indicators-vertical [data-bs-target]{width:auto;height:.75rem}: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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.BsSwipeDirective, selector: "[bsSwipe]", inputs: ["offside"] }, { kind: "directive", type: i2.BsSwipeContainerDirective, selector: "[bsSwipeContainer]", inputs: ["minimumOffset", "orientation", "imageIndex"], outputs: ["imageIndexChange"], exportAs: ["bsSwipeContainer"] }, { kind: "directive", type: i3.BsNoNoscriptDirective, selector: "[bsNoNoscript]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], animations: [FadeInOutAnimation] }); }
|
|
245
|
+
onImageIndexChange(index) {
|
|
246
|
+
this.currentImageIndex.set(index);
|
|
247
|
+
}
|
|
248
|
+
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 }); }
|
|
168
250
|
}
|
|
169
251
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselComponent, decorators: [{
|
|
170
252
|
type: Component,
|
|
171
|
-
args: [{ selector: 'bs-carousel', standalone: false, animations: [FadeInOutAnimation], template: "@if (isServerSide) {\n <div class=\"carousel mx-auto noscript\" [class.carousel-vertical]=\"orientation === 'vertical'\">\n <div class=\"carousel-inner d-grid\">\n @let images = images$ | async;\n @if (imageCount$ | async; as imageCount) {\n @for (image of images; 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 images; 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$ | async\">\n @if (indicators) {\n <div class=\"carousel-indicators\" [class.carousel-indicators-vertical]=\"orientation === 'vertical'\"\n [style.height.px]=\"orientation === 'vertical' ? (swipeContainer?.maxSlideHeight$ | async) : null\">\n @for (image of (images$ | async); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"swipeContainer?.goto(i)\"\n [class.active]=\"(swipeContainer?.imageIndex$ | async) === i\" data-bs-target\n [attr.aria-current]=\"(swipeContainer?.imageIndex$ | async) === 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$ | async\">\n <div bsSwipeContainer #container=\"bsSwipeContainer\" [minimumOffset]=\"50\" [(imageIndex)]=\"currentImageIndex\"\n [orientation]=\"orientation\">\n <div class=\"carousel-item\" bsSwipe [offside]=\"true\">\n <ng-container *ngTemplateOutlet=\"lastImageTemplate$ | async\"></ng-container>\n </div>\n @for (image of (images$ | async); 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$ | async\"></ng-container>\n </div>\n </div>\n </div>\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previousImage()\"\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 </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\"\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 </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 [style.height.px]=\"orientation === 'vertical' ? (swipeContainer?.currentSlideHeight$ | async) : null\">\n @for (image of (images$ | async); track image.id; let i = $index) {\n <button type=\"button\" (click)=\"currentImageIndex = 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\" [class.carousel-inner-vertical]=\"orientation === 'vertical'\">\n @for (image of (images$ | async); 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)=\"previousImage()\"\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 </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\"\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 </button>\n </div>\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{display:flex;flex-direction:row;align-items:stretch;gap:1rem;flex-wrap:nowrap}:host ::ng-deep .carousel.carousel-vertical .carousel-inner{order:1;flex:1 1 auto}:host ::ng-deep .carousel.carousel-vertical .carousel-indicators{order:0}: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-inner-vertical{display:flex;flex-direction:column;height:100%}:host ::ng-deep .carousel-inner-vertical .carousel-item{flex:1 1 auto;display:block}:host ::ng-deep .carousel-indicators-vertical{position:static;flex-direction:column;justify-content:center;align-items:stretch;margin:0;gap:.5rem;height:100%}:host ::ng-deep .carousel-indicators-vertical [data-bs-target]{width:auto;height:.75rem}: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"] }]
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
type: Input
|
|
177
|
-
|
|
178
|
-
type: Input
|
|
179
|
-
}], orientation: [{
|
|
180
|
-
type: Input
|
|
181
|
-
}], innerElement: [{
|
|
253
|
+
args: [{ selector: 'bs-carousel', standalone: true, imports: [
|
|
254
|
+
NgTemplateOutlet,
|
|
255
|
+
BsSwipeContainerDirective,
|
|
256
|
+
BsSwipeDirective,
|
|
257
|
+
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"] }]
|
|
259
|
+
}], 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: [{
|
|
182
260
|
type: ViewChild,
|
|
183
261
|
args: ['innerElement']
|
|
184
262
|
}], swipeContainer: [{
|
|
185
263
|
type: ViewChild,
|
|
186
264
|
args: ['container']
|
|
187
|
-
}],
|
|
265
|
+
}], imagesQuery: [{
|
|
188
266
|
type: ContentChildren,
|
|
189
267
|
args: [forwardRef(() => BsCarouselImageDirective)]
|
|
190
268
|
}], animationsDisabled: [{
|
|
191
269
|
type: HostBinding,
|
|
192
270
|
args: ['@.disabled']
|
|
193
|
-
}], animation: [{
|
|
194
|
-
type: Input
|
|
195
271
|
}], onKeyPress: [{
|
|
196
272
|
type: HostListener,
|
|
197
273
|
args: ['document:keydown.ArrowLeft', ['$event']]
|
|
@@ -207,49 +283,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
207
283
|
}] } });
|
|
208
284
|
|
|
209
285
|
class BsCarouselImgDirective {
|
|
210
|
-
constructor(
|
|
211
|
-
this.
|
|
286
|
+
constructor() {
|
|
287
|
+
this.image = inject(BsCarouselImageDirective, { optional: true });
|
|
288
|
+
this.fetchPriority = (this.image && this.image.isFirst) ? 'high' : 'low';
|
|
212
289
|
}
|
|
213
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselImgDirective, deps: [
|
|
214
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: BsCarouselImgDirective, isStandalone:
|
|
290
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselImgDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
291
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: BsCarouselImgDirective, isStandalone: true, selector: "img", host: { properties: { "attr.fetch-priority": "this.fetchPriority" } }, ngImport: i0 }); }
|
|
215
292
|
}
|
|
216
293
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselImgDirective, decorators: [{
|
|
217
294
|
type: Directive,
|
|
218
295
|
args: [{
|
|
219
296
|
selector: 'img',
|
|
220
|
-
standalone:
|
|
297
|
+
standalone: true,
|
|
221
298
|
}]
|
|
222
|
-
}], ctorParameters: () => [
|
|
299
|
+
}], ctorParameters: () => [], propDecorators: { fetchPriority: [{
|
|
223
300
|
type: HostBinding,
|
|
224
301
|
args: ['attr.fetch-priority']
|
|
225
302
|
}] } });
|
|
226
303
|
|
|
227
304
|
class BsCarouselModule {
|
|
228
305
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
229
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselModule,
|
|
306
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselModule, imports: [BsCarouselComponent,
|
|
230
307
|
BsCarouselImageDirective,
|
|
231
|
-
BsCarouselImgDirective],
|
|
232
|
-
NgTemplateOutlet,
|
|
233
|
-
BsSwiperModule,
|
|
234
|
-
BsNoNoscriptDirective], exports: [BsCarouselComponent,
|
|
308
|
+
BsCarouselImgDirective], exports: [BsCarouselComponent,
|
|
235
309
|
BsCarouselImageDirective,
|
|
236
310
|
BsCarouselImgDirective] }); }
|
|
237
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselModule
|
|
311
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselModule }); }
|
|
238
312
|
}
|
|
239
313
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsCarouselModule, decorators: [{
|
|
240
314
|
type: NgModule,
|
|
241
315
|
args: [{
|
|
242
|
-
|
|
316
|
+
imports: [
|
|
243
317
|
BsCarouselComponent,
|
|
244
318
|
BsCarouselImageDirective,
|
|
245
319
|
BsCarouselImgDirective,
|
|
246
320
|
],
|
|
247
|
-
imports: [
|
|
248
|
-
AsyncPipe,
|
|
249
|
-
NgTemplateOutlet,
|
|
250
|
-
BsSwiperModule,
|
|
251
|
-
BsNoNoscriptDirective
|
|
252
|
-
],
|
|
253
321
|
exports: [
|
|
254
322
|
BsCarouselComponent,
|
|
255
323
|
BsCarouselImageDirective,
|