@severfam/simple-slider-angular 0.1.0 → 0.1.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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@severfam/simple-slider-angular",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A lightweight, configurable photo slider/gallery component for Angular with touch support, arrow navigation, and full customization via signal-based inputs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, PLATFORM_ID, input, output, ChangeDetectionStrategy, Component, inject, ChangeDetectorRef, DestroyRef, afterNextRender, effect, ElementRef, ViewChild } from '@angular/core';
|
|
3
|
-
import { isPlatformBrowser, NgOptimizedImage } from '@angular/common';
|
|
4
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
-
import { fromEvent, startWith, switchMap, of, distinctUntilChanged, debounceTime, delay, takeUntil, interval } from 'rxjs';
|
|
6
|
-
|
|
7
|
-
const WINDOW = new InjectionToken('window');
|
|
8
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
|
-
const windowProvider = {
|
|
10
|
-
provide: WINDOW,
|
|
11
|
-
useFactory: (platformId) => {
|
|
12
|
-
if (isPlatformBrowser(platformId)) {
|
|
13
|
-
return window;
|
|
14
|
-
}
|
|
15
|
-
return {};
|
|
16
|
-
},
|
|
17
|
-
deps: [PLATFORM_ID],
|
|
18
|
-
};
|
|
19
|
-
const WINDOW_PROVIDERS = [windowProvider];
|
|
20
|
-
|
|
21
|
-
var ESliderAction;
|
|
22
|
-
(function (ESliderAction) {
|
|
23
|
-
ESliderAction["COMPUTE_POSITION"] = "computePosition";
|
|
24
|
-
ESliderAction["STEP_NEXT"] = "stepNext";
|
|
25
|
-
ESliderAction["STEP_PREV"] = "stepPrev";
|
|
26
|
-
ESliderAction["TOUCH_MOVE"] = "touchMove";
|
|
27
|
-
})(ESliderAction || (ESliderAction = {}));
|
|
28
|
-
var EArrowAction;
|
|
29
|
-
(function (EArrowAction) {
|
|
30
|
-
EArrowAction["STEP_NEXT"] = "stepNext";
|
|
31
|
-
EArrowAction["STEP_PREV"] = "stepPrev";
|
|
32
|
-
})(EArrowAction || (EArrowAction = {}));
|
|
33
|
-
|
|
34
|
-
class SimpleSliderPhotoComponent {
|
|
35
|
-
photoLink = input(...(ngDevMode ? [undefined, { debugName: "photoLink" }] : /* istanbul ignore next */ []));
|
|
36
|
-
photoAlt = input('', ...(ngDevMode ? [{ debugName: "photoAlt" }] : /* istanbul ignore next */ []));
|
|
37
|
-
isActive = input(false, ...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
|
|
38
|
-
isDisabled = input(false, ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
39
|
-
cardWidth = input(0, ...(ngDevMode ? [{ debugName: "cardWidth" }] : /* istanbul ignore next */ []));
|
|
40
|
-
cardHeight = input(0, ...(ngDevMode ? [{ debugName: "cardHeight" }] : /* istanbul ignore next */ []));
|
|
41
|
-
borderWidth = input(0, ...(ngDevMode ? [{ debugName: "borderWidth" }] : /* istanbul ignore next */ []));
|
|
42
|
-
cardPadding = input(0, ...(ngDevMode ? [{ debugName: "cardPadding" }] : /* istanbul ignore next */ []));
|
|
43
|
-
activeBorderColor = input('#1976d2', ...(ngDevMode ? [{ debugName: "activeBorderColor" }] : /* istanbul ignore next */ []));
|
|
44
|
-
defaultBorderColor = input('#fff', ...(ngDevMode ? [{ debugName: "defaultBorderColor" }] : /* istanbul ignore next */ []));
|
|
45
|
-
changeModel = output();
|
|
46
|
-
get borderColor() {
|
|
47
|
-
return this.isActive() ? this.activeBorderColor() : this.defaultBorderColor();
|
|
48
|
-
}
|
|
49
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: SimpleSliderPhotoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: SimpleSliderPhotoComponent, isStandalone: true, selector: "simple-slider-photo", inputs: { photoLink: { classPropertyName: "photoLink", publicName: "photoLink", isSignal: true, isRequired: false, transformFunction: null }, photoAlt: { classPropertyName: "photoAlt", publicName: "photoAlt", isSignal: true, isRequired: false, transformFunction: null }, isActive: { classPropertyName: "isActive", publicName: "isActive", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, cardWidth: { classPropertyName: "cardWidth", publicName: "cardWidth", isSignal: true, isRequired: false, transformFunction: null }, cardHeight: { classPropertyName: "cardHeight", publicName: "cardHeight", isSignal: true, isRequired: false, transformFunction: null }, borderWidth: { classPropertyName: "borderWidth", publicName: "borderWidth", isSignal: true, isRequired: false, transformFunction: null }, cardPadding: { classPropertyName: "cardPadding", publicName: "cardPadding", isSignal: true, isRequired: false, transformFunction: null }, activeBorderColor: { classPropertyName: "activeBorderColor", publicName: "activeBorderColor", isSignal: true, isRequired: false, transformFunction: null }, defaultBorderColor: { classPropertyName: "defaultBorderColor", publicName: "defaultBorderColor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeModel: "changeModel" }, ngImport: i0, template: "<div\r\n class=\"simple-slider-photo\"\r\n [class.simple-slider-photo--disabled]=\"isDisabled()\"\r\n [style.border-width.px]=\"borderWidth()\"\r\n [style.padding.px]=\"cardPadding()\"\r\n [style.border-color]=\"borderColor\"\r\n (click)=\"changeModel.emit()\"\r\n>\r\n @if (photoLink()) {\r\n <img\r\n class=\"simple-slider-photo__image\"\r\n [alt]=\"photoAlt()\"\r\n [ngSrc]=\"photoLink()!\"\r\n [width]=\"cardWidth() - 2*cardPadding() - 2*borderWidth()\"\r\n [height]=\"cardHeight() - 2*cardPadding() - 2*borderWidth()\"\r\n />\r\n }\r\n</div>\r\n", styles: [".simple-slider-photo{border-radius:4px;cursor:pointer;border-style:solid}.simple-slider-photo--disabled{opacity:15%}.simple-slider-photo__image{border-radius:4px;object-fit:cover}\n"], dependencies: [{ kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "decoding", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
51
|
-
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: SimpleSliderPhotoComponent, decorators: [{
|
|
53
|
-
type: Component,
|
|
54
|
-
args: [{ selector: 'simple-slider-photo', imports: [NgOptimizedImage], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"simple-slider-photo\"\r\n [class.simple-slider-photo--disabled]=\"isDisabled()\"\r\n [style.border-width.px]=\"borderWidth()\"\r\n [style.padding.px]=\"cardPadding()\"\r\n [style.border-color]=\"borderColor\"\r\n (click)=\"changeModel.emit()\"\r\n>\r\n @if (photoLink()) {\r\n <img\r\n class=\"simple-slider-photo__image\"\r\n [alt]=\"photoAlt()\"\r\n [ngSrc]=\"photoLink()!\"\r\n [width]=\"cardWidth() - 2*cardPadding() - 2*borderWidth()\"\r\n [height]=\"cardHeight() - 2*cardPadding() - 2*borderWidth()\"\r\n />\r\n }\r\n</div>\r\n", styles: [".simple-slider-photo{border-radius:4px;cursor:pointer;border-style:solid}.simple-slider-photo--disabled{opacity:15%}.simple-slider-photo__image{border-radius:4px;object-fit:cover}\n"] }]
|
|
55
|
-
}], propDecorators: { photoLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "photoLink", required: false }] }], photoAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "photoAlt", required: false }] }], isActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "isActive", required: false }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }], cardWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardWidth", required: false }] }], cardHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardHeight", required: false }] }], borderWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderWidth", required: false }] }], cardPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardPadding", required: false }] }], activeBorderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeBorderColor", required: false }] }], defaultBorderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultBorderColor", required: false }] }], changeModel: [{ type: i0.Output, args: ["changeModel"] }] } });
|
|
56
|
-
|
|
57
|
-
class SimpleSliderComponent {
|
|
58
|
-
window = inject(WINDOW);
|
|
59
|
-
cdr = inject(ChangeDetectorRef);
|
|
60
|
-
destroyRef = inject(DestroyRef);
|
|
61
|
-
propertyPhotos = input([], ...(ngDevMode ? [{ debugName: "propertyPhotos" }] : /* istanbul ignore next */ []));
|
|
62
|
-
selectedElementIndex = input(0, ...(ngDevMode ? [{ debugName: "selectedElementIndex" }] : /* istanbul ignore next */ []));
|
|
63
|
-
cardWidth = input(60, ...(ngDevMode ? [{ debugName: "cardWidth" }] : /* istanbul ignore next */ []));
|
|
64
|
-
cardHeight = input(90, ...(ngDevMode ? [{ debugName: "cardHeight" }] : /* istanbul ignore next */ []));
|
|
65
|
-
cardMargin = input(10, ...(ngDevMode ? [{ debugName: "cardMargin" }] : /* istanbul ignore next */ []));
|
|
66
|
-
borderWidth = input(1, ...(ngDevMode ? [{ debugName: "borderWidth" }] : /* istanbul ignore next */ []));
|
|
67
|
-
cardPadding = input(2, ...(ngDevMode ? [{ debugName: "cardPadding" }] : /* istanbul ignore next */ []));
|
|
68
|
-
activeBorderColor = input('#1976d2', ...(ngDevMode ? [{ debugName: "activeBorderColor" }] : /* istanbul ignore next */ []));
|
|
69
|
-
defaultBorderColor = input('#fff', ...(ngDevMode ? [{ debugName: "defaultBorderColor" }] : /* istanbul ignore next */ []));
|
|
70
|
-
inactiveIconColor = input('#9e9e9e', ...(ngDevMode ? [{ debugName: "inactiveIconColor" }] : /* istanbul ignore next */ []));
|
|
71
|
-
longClickDelay = input(200, ...(ngDevMode ? [{ debugName: "longClickDelay" }] : /* istanbul ignore next */ []));
|
|
72
|
-
arrowBackgroundColor = input('transparent', ...(ngDevMode ? [{ debugName: "arrowBackgroundColor" }] : /* istanbul ignore next */ []));
|
|
73
|
-
arrowBorderColor = input('transparent', ...(ngDevMode ? [{ debugName: "arrowBorderColor" }] : /* istanbul ignore next */ []));
|
|
74
|
-
arrowBorderWidth = input(0, ...(ngDevMode ? [{ debugName: "arrowBorderWidth" }] : /* istanbul ignore next */ []));
|
|
75
|
-
arrowColor = input('#333', ...(ngDevMode ? [{ debugName: "arrowColor" }] : /* istanbul ignore next */ []));
|
|
76
|
-
touchDelta = input(20, ...(ngDevMode ? [{ debugName: "touchDelta" }] : /* istanbul ignore next */ []));
|
|
77
|
-
arrowWidth = input(36, ...(ngDevMode ? [{ debugName: "arrowWidth" }] : /* istanbul ignore next */ []));
|
|
78
|
-
changeModel = output();
|
|
79
|
-
sliderContainer;
|
|
80
|
-
galleryTrack;
|
|
81
|
-
arrowPrevButton;
|
|
82
|
-
arrowNextButton;
|
|
83
|
-
prevArrowLongPress = false;
|
|
84
|
-
nextArrowLongPress = false;
|
|
85
|
-
_sliderContainer;
|
|
86
|
-
_galleryTrack;
|
|
87
|
-
isNextArrowDisabled = false;
|
|
88
|
-
isPrevArrowDisabled = false;
|
|
89
|
-
photoCount = 0;
|
|
90
|
-
galleryWidth = 0;
|
|
91
|
-
arrowsHidden = false;
|
|
92
|
-
touchStartX = 0;
|
|
93
|
-
touchCurrentX = 0;
|
|
94
|
-
constructor() {
|
|
95
|
-
afterNextRender(() => {
|
|
96
|
-
if (this.sliderContainer) {
|
|
97
|
-
this.initSliderContainer();
|
|
98
|
-
}
|
|
99
|
-
if (this.arrowPrevButton) {
|
|
100
|
-
this.initArrowPrevButtonActions();
|
|
101
|
-
}
|
|
102
|
-
if (this.arrowNextButton) {
|
|
103
|
-
this.initArrowNextButtonActions();
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
syncCardSliderCount = effect(() => {
|
|
108
|
-
const photos = this.propertyPhotos();
|
|
109
|
-
if (photos?.length) {
|
|
110
|
-
this.photoCount = photos.length;
|
|
111
|
-
}
|
|
112
|
-
}, { ...(ngDevMode ? { debugName: "syncCardSliderCount" } : /* istanbul ignore next */ {}), allowSignalWrites: true });
|
|
113
|
-
ngAfterViewInit() {
|
|
114
|
-
if (this.galleryTrack) {
|
|
115
|
-
this.initGalleryTrack();
|
|
116
|
-
this.initWheelAction(this.galleryTrack);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
stepPrevSlider() {
|
|
120
|
-
this.actionSlider(ESliderAction.STEP_PREV);
|
|
121
|
-
}
|
|
122
|
-
stepNextSlider() {
|
|
123
|
-
this.actionSlider(ESliderAction.STEP_NEXT);
|
|
124
|
-
}
|
|
125
|
-
computedPositionSlider() {
|
|
126
|
-
this.actionSlider(ESliderAction.COMPUTE_POSITION);
|
|
127
|
-
}
|
|
128
|
-
actionSlider(action, touchDelta = 0) {
|
|
129
|
-
const countVisibleSlider = Math.floor(this.galleryWidth / (this.cardWidth() + this.cardMargin()));
|
|
130
|
-
let currentMarginLeft = parseInt((this._galleryTrack?.style.marginLeft).replace('px', ''), 10);
|
|
131
|
-
currentMarginLeft = isNaN(currentMarginLeft) ? 0 : currentMarginLeft;
|
|
132
|
-
let computedPositionSlider = 0;
|
|
133
|
-
const maxDelta = -(this.cardWidth() + this.cardMargin()) * this.photoCount + this.galleryWidth;
|
|
134
|
-
let positionSlider = 0;
|
|
135
|
-
switch (action) {
|
|
136
|
-
case ESliderAction.STEP_NEXT: {
|
|
137
|
-
computedPositionSlider = currentMarginLeft - (this.cardWidth() + this.cardMargin());
|
|
138
|
-
positionSlider = Math.max(computedPositionSlider, maxDelta);
|
|
139
|
-
if (positionSlider < maxDelta) {
|
|
140
|
-
positionSlider = maxDelta;
|
|
141
|
-
}
|
|
142
|
-
if (countVisibleSlider >= this.photoCount) {
|
|
143
|
-
positionSlider = 0;
|
|
144
|
-
}
|
|
145
|
-
break;
|
|
146
|
-
}
|
|
147
|
-
case ESliderAction.STEP_PREV: {
|
|
148
|
-
computedPositionSlider = currentMarginLeft + (this.cardWidth() + this.cardMargin());
|
|
149
|
-
positionSlider = Math.min(computedPositionSlider, 0);
|
|
150
|
-
if (positionSlider > 0) {
|
|
151
|
-
positionSlider = 0;
|
|
152
|
-
}
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
case ESliderAction.COMPUTE_POSITION: {
|
|
156
|
-
computedPositionSlider = -(this.cardWidth() + this.cardMargin()) * this.selectedElementIndex();
|
|
157
|
-
positionSlider = Math.max(computedPositionSlider, maxDelta);
|
|
158
|
-
if (positionSlider > 0) {
|
|
159
|
-
positionSlider = 0;
|
|
160
|
-
}
|
|
161
|
-
break;
|
|
162
|
-
}
|
|
163
|
-
case ESliderAction.TOUCH_MOVE: {
|
|
164
|
-
positionSlider = currentMarginLeft + touchDelta;
|
|
165
|
-
if (positionSlider > 0) {
|
|
166
|
-
positionSlider = 0;
|
|
167
|
-
}
|
|
168
|
-
if (positionSlider < maxDelta) {
|
|
169
|
-
positionSlider = maxDelta;
|
|
170
|
-
}
|
|
171
|
-
if (countVisibleSlider >= this.photoCount) {
|
|
172
|
-
positionSlider = 0;
|
|
173
|
-
}
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
if (this._galleryTrack) {
|
|
178
|
-
this._galleryTrack.style.marginLeft = positionSlider + 'px';
|
|
179
|
-
}
|
|
180
|
-
this.isPrevArrowDisabled = positionSlider === 0;
|
|
181
|
-
this.isNextArrowDisabled = maxDelta === positionSlider;
|
|
182
|
-
this.cdr.detectChanges();
|
|
183
|
-
}
|
|
184
|
-
touchStartGallery(evt) {
|
|
185
|
-
const countTouch = evt.touches.length;
|
|
186
|
-
if (countTouch > 1) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
this.touchStartX = evt.touches[0].clientX;
|
|
190
|
-
this.touchCurrentX = this.touchStartX;
|
|
191
|
-
}
|
|
192
|
-
touchMoveGallery(evt) {
|
|
193
|
-
if (!this.arrowsHidden) {
|
|
194
|
-
evt.preventDefault();
|
|
195
|
-
}
|
|
196
|
-
const countTouch = evt.touches.length;
|
|
197
|
-
if (countTouch > 1) {
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
const curr = evt.touches[0].clientX;
|
|
201
|
-
const touchDelta = curr - this.touchCurrentX;
|
|
202
|
-
if (Math.abs(touchDelta) > this.touchDelta()) {
|
|
203
|
-
this.actionSlider(ESliderAction.TOUCH_MOVE, touchDelta);
|
|
204
|
-
this.touchCurrentX = curr;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
initGalleryTrack() {
|
|
208
|
-
this._galleryTrack = this.galleryTrack?.nativeElement;
|
|
209
|
-
this.galleryWidth = +(this._galleryTrack?.parentElement?.offsetWidth || 0);
|
|
210
|
-
this.photoCount = this._galleryTrack?.children.length || 0;
|
|
211
|
-
}
|
|
212
|
-
initWheelAction(elementRef) {
|
|
213
|
-
fromEvent(elementRef.nativeElement, 'wheel')
|
|
214
|
-
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
215
|
-
.subscribe((e) => {
|
|
216
|
-
if (!this.arrowsHidden) {
|
|
217
|
-
e.preventDefault();
|
|
218
|
-
}
|
|
219
|
-
const delta = e.deltaY;
|
|
220
|
-
if (delta > 0) {
|
|
221
|
-
this.stepNextSlider();
|
|
222
|
-
}
|
|
223
|
-
else if (delta < 0) {
|
|
224
|
-
this.stepPrevSlider();
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
initSliderContainer() {
|
|
229
|
-
if (!this.window) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
this._sliderContainer = this.sliderContainer?.nativeElement;
|
|
233
|
-
const resize$ = fromEvent(this.window, 'resize').pipe(startWith([
|
|
234
|
-
this._sliderContainer?.offsetWidth,
|
|
235
|
-
+(this._galleryTrack?.parentElement?.offsetWidth || 0),
|
|
236
|
-
]), switchMap(() => of([
|
|
237
|
-
+(this._sliderContainer?.offsetWidth || 0),
|
|
238
|
-
+(this._galleryTrack?.parentElement?.offsetWidth || 0),
|
|
239
|
-
])));
|
|
240
|
-
resize$
|
|
241
|
-
.pipe(distinctUntilChanged(), debounceTime(100), takeUntilDestroyed(this.destroyRef))
|
|
242
|
-
.subscribe(([currentWidthPropertyPhotoSlider, galleryUloffsetWidth]) => {
|
|
243
|
-
this.galleryWidth = galleryUloffsetWidth;
|
|
244
|
-
const count = (currentWidthPropertyPhotoSlider - 2 * this.arrowWidth()) /
|
|
245
|
-
(this.cardWidth() + this.cardMargin());
|
|
246
|
-
const countCeil = Math.ceil(count);
|
|
247
|
-
this.arrowsHidden = countCeil > this.photoCount;
|
|
248
|
-
this.computedPositionSlider();
|
|
249
|
-
this.cdr.detectChanges();
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
initArrowPrevButtonActions() {
|
|
253
|
-
if (this.arrowPrevButton) {
|
|
254
|
-
this.initLongTouch(this.arrowPrevButton, EArrowAction.STEP_PREV);
|
|
255
|
-
this.initLongClick(this.arrowPrevButton, EArrowAction.STEP_PREV);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
initArrowNextButtonActions() {
|
|
259
|
-
if (this.arrowNextButton) {
|
|
260
|
-
this.initLongTouch(this.arrowNextButton, EArrowAction.STEP_NEXT);
|
|
261
|
-
this.initLongClick(this.arrowNextButton, EArrowAction.STEP_NEXT);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
initLongTouch(elementRef, typeArrowAction) {
|
|
265
|
-
const touchstart$ = fromEvent(elementRef.nativeElement, 'touchstart');
|
|
266
|
-
const touchend$ = fromEvent(elementRef.nativeElement, 'touchend');
|
|
267
|
-
const longTouch$ = touchstart$.pipe(switchMap((v) => {
|
|
268
|
-
return of(v).pipe(delay(this.longClickDelay()), takeUntil(touchend$));
|
|
269
|
-
}));
|
|
270
|
-
longTouch$
|
|
271
|
-
.pipe(switchMap(() => {
|
|
272
|
-
return interval(1000).pipe(takeUntil(touchend$));
|
|
273
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
274
|
-
.subscribe(() => {
|
|
275
|
-
switch (typeArrowAction) {
|
|
276
|
-
case EArrowAction.STEP_PREV: {
|
|
277
|
-
this.prevArrowLongPress = true;
|
|
278
|
-
this.stepPrevSlider();
|
|
279
|
-
break;
|
|
280
|
-
}
|
|
281
|
-
case EArrowAction.STEP_NEXT: {
|
|
282
|
-
this.nextArrowLongPress = true;
|
|
283
|
-
this.stepNextSlider();
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
initLongClick(elementRef, typeArrowAction) {
|
|
290
|
-
const mouseUp$ = fromEvent(elementRef.nativeElement, 'mouseup');
|
|
291
|
-
const mouseDown$ = fromEvent(elementRef.nativeElement, 'mousedown');
|
|
292
|
-
const click$ = fromEvent(elementRef.nativeElement, 'click');
|
|
293
|
-
const longClick$ = mouseDown$.pipe(switchMap((v) => {
|
|
294
|
-
return of(v).pipe(delay(this.longClickDelay()), takeUntil(mouseUp$));
|
|
295
|
-
}));
|
|
296
|
-
click$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
297
|
-
switch (typeArrowAction) {
|
|
298
|
-
case EArrowAction.STEP_PREV: {
|
|
299
|
-
if (this.prevArrowLongPress) {
|
|
300
|
-
this.prevArrowLongPress = false;
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
this.stepPrevSlider();
|
|
304
|
-
break;
|
|
305
|
-
}
|
|
306
|
-
case EArrowAction.STEP_NEXT: {
|
|
307
|
-
if (this.nextArrowLongPress) {
|
|
308
|
-
this.nextArrowLongPress = false;
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
this.stepNextSlider();
|
|
312
|
-
break;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
longClick$
|
|
317
|
-
.pipe(switchMap(() => {
|
|
318
|
-
return interval(1000).pipe(takeUntil(mouseUp$));
|
|
319
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
320
|
-
.subscribe(() => {
|
|
321
|
-
switch (typeArrowAction) {
|
|
322
|
-
case EArrowAction.STEP_PREV: {
|
|
323
|
-
this.prevArrowLongPress = true;
|
|
324
|
-
this.stepPrevSlider();
|
|
325
|
-
break;
|
|
326
|
-
}
|
|
327
|
-
case EArrowAction.STEP_NEXT: {
|
|
328
|
-
this.nextArrowLongPress = true;
|
|
329
|
-
this.stepNextSlider();
|
|
330
|
-
break;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: SimpleSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
336
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: SimpleSliderComponent, isStandalone: true, selector: "lib-simple-slider", inputs: { propertyPhotos: { classPropertyName: "propertyPhotos", publicName: "propertyPhotos", isSignal: true, isRequired: false, transformFunction: null }, selectedElementIndex: { classPropertyName: "selectedElementIndex", publicName: "selectedElementIndex", isSignal: true, isRequired: false, transformFunction: null }, cardWidth: { classPropertyName: "cardWidth", publicName: "cardWidth", isSignal: true, isRequired: false, transformFunction: null }, cardHeight: { classPropertyName: "cardHeight", publicName: "cardHeight", isSignal: true, isRequired: false, transformFunction: null }, cardMargin: { classPropertyName: "cardMargin", publicName: "cardMargin", isSignal: true, isRequired: false, transformFunction: null }, borderWidth: { classPropertyName: "borderWidth", publicName: "borderWidth", isSignal: true, isRequired: false, transformFunction: null }, cardPadding: { classPropertyName: "cardPadding", publicName: "cardPadding", isSignal: true, isRequired: false, transformFunction: null }, activeBorderColor: { classPropertyName: "activeBorderColor", publicName: "activeBorderColor", isSignal: true, isRequired: false, transformFunction: null }, defaultBorderColor: { classPropertyName: "defaultBorderColor", publicName: "defaultBorderColor", isSignal: true, isRequired: false, transformFunction: null }, inactiveIconColor: { classPropertyName: "inactiveIconColor", publicName: "inactiveIconColor", isSignal: true, isRequired: false, transformFunction: null }, longClickDelay: { classPropertyName: "longClickDelay", publicName: "longClickDelay", isSignal: true, isRequired: false, transformFunction: null }, arrowBackgroundColor: { classPropertyName: "arrowBackgroundColor", publicName: "arrowBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, arrowBorderColor: { classPropertyName: "arrowBorderColor", publicName: "arrowBorderColor", isSignal: true, isRequired: false, transformFunction: null }, arrowBorderWidth: { classPropertyName: "arrowBorderWidth", publicName: "arrowBorderWidth", isSignal: true, isRequired: false, transformFunction: null }, arrowColor: { classPropertyName: "arrowColor", publicName: "arrowColor", isSignal: true, isRequired: false, transformFunction: null }, touchDelta: { classPropertyName: "touchDelta", publicName: "touchDelta", isSignal: true, isRequired: false, transformFunction: null }, arrowWidth: { classPropertyName: "arrowWidth", publicName: "arrowWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeModel: "changeModel" }, providers: [WINDOW_PROVIDERS], viewQueries: [{ propertyName: "sliderContainer", first: true, predicate: ["sliderContainer"], descendants: true, read: ElementRef }, { propertyName: "galleryTrack", first: true, predicate: ["galleryTrack"], descendants: true, read: ElementRef }, { propertyName: "arrowPrevButton", first: true, predicate: ["arrowPrevButton"], descendants: true, read: ElementRef }, { propertyName: "arrowNextButton", first: true, predicate: ["arrowNextButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"simple-slider\" #sliderContainer>\r\n <div class=\"simple-slider__arrow simple-slider__arrow--prev\" [class.simple-slider__arrow--hidden]=\"arrowsHidden\">\r\n <button\r\n class=\"simple-slider__button\"\r\n type=\"button\"\r\n #arrowPrevButton\r\n [style.background-color]=\"arrowBackgroundColor()\"\r\n [style.border-color]=\"arrowBorderColor()\"\r\n [style.border-width.px]=\"arrowBorderWidth()\"\r\n style=\"border-style: solid\"\r\n >\r\n <svg class=\"simple-slider__icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" [style.color]=\"isPrevArrowDisabled ? inactiveIconColor() : arrowColor()\">\r\n <path fill=\"currentColor\" d=\"M20.547 21.453l-6.107-6.12 6.107-6.12-1.88-1.88-8 8 8 8z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"simple-slider__gallery\">\r\n <ul class=\"simple-slider__track\" #galleryTrack (touchstart)=\"touchStartGallery($event)\" (touchmove)=\"touchMoveGallery($event)\">\r\n @for (photo of propertyPhotos(); let i = $index; track photo.url) {\r\n <li class=\"simple-slider__item\" [style.margin-right.px]=\"cardMargin()\">\r\n <simple-slider-photo\r\n [photoLink]=\"photo.url\"\r\n [photoAlt]=\"photo.alt\"\r\n [isDisabled]=\"photo.disabled || false\"\r\n [isActive]=\"i === selectedElementIndex()\"\r\n [cardWidth]=\"cardWidth()\"\r\n [cardHeight]=\"cardHeight()\"\r\n [borderWidth]=\"borderWidth()\"\r\n [cardPadding]=\"cardPadding()\"\r\n [activeBorderColor]=\"activeBorderColor()\"\r\n [defaultBorderColor]=\"defaultBorderColor()\"\r\n (changeModel)=\"changeModel.emit(i)\"\r\n ></simple-slider-photo>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n\r\n <div class=\"simple-slider__arrow simple-slider__arrow--next\" [class.simple-slider__arrow--hidden]=\"arrowsHidden\">\r\n <button\r\n class=\"simple-slider__button\"\r\n type=\"button\"\r\n #arrowNextButton\r\n [style.background-color]=\"arrowBackgroundColor()\"\r\n [style.border-color]=\"arrowBorderColor()\"\r\n [style.border-width.px]=\"arrowBorderWidth()\"\r\n style=\"border-style: solid\"\r\n >\r\n <svg class=\"simple-slider__icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" [style.color]=\"isNextArrowDisabled ? inactiveIconColor() : arrowColor()\">\r\n <path fill=\"currentColor\" d=\"M11.453 21.787l6.107-6.12-6.107-6.12 1.88-1.88 8 8-8 8z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".simple-slider{display:flex;line-height:normal;-webkit-user-select:none;user-select:none}.simple-slider__arrow{touch-action:manipulation;min-width:36px}.simple-slider__arrow--hidden{display:none}.simple-slider__button{height:100%;width:100%;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.simple-slider__icon{width:24px;height:24px}.simple-slider__gallery{overflow:hidden;flex-grow:1}.simple-slider__track{display:flex;margin:0;padding:0;list-style:none;transition:margin-left .25s;font-size:0}.simple-slider__item{display:inline-block}\n"], dependencies: [{ kind: "component", type: SimpleSliderPhotoComponent, selector: "simple-slider-photo", inputs: ["photoLink", "photoAlt", "isActive", "isDisabled", "cardWidth", "cardHeight", "borderWidth", "cardPadding", "activeBorderColor", "defaultBorderColor"], outputs: ["changeModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
337
|
-
}
|
|
338
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: SimpleSliderComponent, decorators: [{
|
|
339
|
-
type: Component,
|
|
340
|
-
args: [{ selector: 'lib-simple-slider', imports: [SimpleSliderPhotoComponent], providers: [WINDOW_PROVIDERS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"simple-slider\" #sliderContainer>\r\n <div class=\"simple-slider__arrow simple-slider__arrow--prev\" [class.simple-slider__arrow--hidden]=\"arrowsHidden\">\r\n <button\r\n class=\"simple-slider__button\"\r\n type=\"button\"\r\n #arrowPrevButton\r\n [style.background-color]=\"arrowBackgroundColor()\"\r\n [style.border-color]=\"arrowBorderColor()\"\r\n [style.border-width.px]=\"arrowBorderWidth()\"\r\n style=\"border-style: solid\"\r\n >\r\n <svg class=\"simple-slider__icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" [style.color]=\"isPrevArrowDisabled ? inactiveIconColor() : arrowColor()\">\r\n <path fill=\"currentColor\" d=\"M20.547 21.453l-6.107-6.12 6.107-6.12-1.88-1.88-8 8 8 8z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"simple-slider__gallery\">\r\n <ul class=\"simple-slider__track\" #galleryTrack (touchstart)=\"touchStartGallery($event)\" (touchmove)=\"touchMoveGallery($event)\">\r\n @for (photo of propertyPhotos(); let i = $index; track photo.url) {\r\n <li class=\"simple-slider__item\" [style.margin-right.px]=\"cardMargin()\">\r\n <simple-slider-photo\r\n [photoLink]=\"photo.url\"\r\n [photoAlt]=\"photo.alt\"\r\n [isDisabled]=\"photo.disabled || false\"\r\n [isActive]=\"i === selectedElementIndex()\"\r\n [cardWidth]=\"cardWidth()\"\r\n [cardHeight]=\"cardHeight()\"\r\n [borderWidth]=\"borderWidth()\"\r\n [cardPadding]=\"cardPadding()\"\r\n [activeBorderColor]=\"activeBorderColor()\"\r\n [defaultBorderColor]=\"defaultBorderColor()\"\r\n (changeModel)=\"changeModel.emit(i)\"\r\n ></simple-slider-photo>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n\r\n <div class=\"simple-slider__arrow simple-slider__arrow--next\" [class.simple-slider__arrow--hidden]=\"arrowsHidden\">\r\n <button\r\n class=\"simple-slider__button\"\r\n type=\"button\"\r\n #arrowNextButton\r\n [style.background-color]=\"arrowBackgroundColor()\"\r\n [style.border-color]=\"arrowBorderColor()\"\r\n [style.border-width.px]=\"arrowBorderWidth()\"\r\n style=\"border-style: solid\"\r\n >\r\n <svg class=\"simple-slider__icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" [style.color]=\"isNextArrowDisabled ? inactiveIconColor() : arrowColor()\">\r\n <path fill=\"currentColor\" d=\"M11.453 21.787l6.107-6.12-6.107-6.12 1.88-1.88 8 8-8 8z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".simple-slider{display:flex;line-height:normal;-webkit-user-select:none;user-select:none}.simple-slider__arrow{touch-action:manipulation;min-width:36px}.simple-slider__arrow--hidden{display:none}.simple-slider__button{height:100%;width:100%;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.simple-slider__icon{width:24px;height:24px}.simple-slider__gallery{overflow:hidden;flex-grow:1}.simple-slider__track{display:flex;margin:0;padding:0;list-style:none;transition:margin-left .25s;font-size:0}.simple-slider__item{display:inline-block}\n"] }]
|
|
341
|
-
}], ctorParameters: () => [], propDecorators: { propertyPhotos: [{ type: i0.Input, args: [{ isSignal: true, alias: "propertyPhotos", required: false }] }], selectedElementIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedElementIndex", required: false }] }], cardWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardWidth", required: false }] }], cardHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardHeight", required: false }] }], cardMargin: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardMargin", required: false }] }], borderWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderWidth", required: false }] }], cardPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "cardPadding", required: false }] }], activeBorderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeBorderColor", required: false }] }], defaultBorderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultBorderColor", required: false }] }], inactiveIconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "inactiveIconColor", required: false }] }], longClickDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "longClickDelay", required: false }] }], arrowBackgroundColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowBackgroundColor", required: false }] }], arrowBorderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowBorderColor", required: false }] }], arrowBorderWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowBorderWidth", required: false }] }], arrowColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowColor", required: false }] }], touchDelta: [{ type: i0.Input, args: [{ isSignal: true, alias: "touchDelta", required: false }] }], arrowWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowWidth", required: false }] }], changeModel: [{ type: i0.Output, args: ["changeModel"] }], sliderContainer: [{
|
|
342
|
-
type: ViewChild,
|
|
343
|
-
args: ['sliderContainer', { static: false, read: ElementRef }]
|
|
344
|
-
}], galleryTrack: [{
|
|
345
|
-
type: ViewChild,
|
|
346
|
-
args: ['galleryTrack', { static: false, read: ElementRef }]
|
|
347
|
-
}], arrowPrevButton: [{
|
|
348
|
-
type: ViewChild,
|
|
349
|
-
args: ['arrowPrevButton', { static: false, read: ElementRef }]
|
|
350
|
-
}], arrowNextButton: [{
|
|
351
|
-
type: ViewChild,
|
|
352
|
-
args: ['arrowNextButton', { static: false, read: ElementRef }]
|
|
353
|
-
}] } });
|
|
354
|
-
|
|
355
|
-
/*
|
|
356
|
-
* Public API Surface of simple-slider
|
|
357
|
-
*/
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Generated bundle index. Do not edit.
|
|
361
|
-
*/
|
|
362
|
-
|
|
363
|
-
export { SimpleSliderComponent };
|
|
364
|
-
//# sourceMappingURL=simple-slider-angular.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simple-slider-angular.mjs","sources":["../../../projects/simple-slider/src/lib/providers/window.providers.ts","../../../projects/simple-slider/src/lib/enums/slider.enums.ts","../../../projects/simple-slider/src/lib/components/simple-slider-photo/simple-slider-photo.component.ts","../../../projects/simple-slider/src/lib/components/simple-slider-photo/simple-slider-photo.component.html","../../../projects/simple-slider/src/lib/simple-slider.component.ts","../../../projects/simple-slider/src/lib/simple-slider.component.html","../../../projects/simple-slider/src/public-api.ts","../../../projects/simple-slider/src/simple-slider-angular.ts"],"sourcesContent":["import { FactoryProvider, InjectionToken, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n\r\nexport const WINDOW = new InjectionToken<Window>('window');\r\n\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nconst windowProvider: FactoryProvider = {\r\n provide: WINDOW,\r\n useFactory: (platformId: any) => {\r\n if (isPlatformBrowser(platformId)) {\r\n return window;\r\n }\r\n return {};\r\n },\r\n deps: [PLATFORM_ID],\r\n};\r\n\r\nexport const WINDOW_PROVIDERS = [windowProvider];\r\n","export enum ESliderAction {\n COMPUTE_POSITION = 'computePosition',\n STEP_NEXT = 'stepNext',\n STEP_PREV = 'stepPrev',\n TOUCH_MOVE = 'touchMove',\n}\n\nexport enum EArrowAction {\n STEP_NEXT = 'stepNext',\n STEP_PREV = 'stepPrev',\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { NgOptimizedImage } from '@angular/common';\r\nimport { SafeResourceUrl } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'simple-slider-photo',\r\n templateUrl: './simple-slider-photo.component.html',\r\n styleUrls: ['./simple-slider-photo.component.scss'],\r\n imports: [NgOptimizedImage],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SimpleSliderPhotoComponent {\r\n photoLink = input<string | SafeResourceUrl>();\r\n photoAlt = input('');\r\n isActive = input(false);\r\n isDisabled = input(false);\r\n cardWidth = input(0);\r\n cardHeight = input(0);\r\n borderWidth = input(0);\r\n cardPadding = input(0);\r\n activeBorderColor = input('#1976d2');\r\n defaultBorderColor = input('#fff');\r\n\r\n changeModel = output<void>();\r\n\r\n get borderColor(): string {\r\n return this.isActive() ? this.activeBorderColor() : this.defaultBorderColor();\r\n }\r\n}\r\n","<div\r\n class=\"simple-slider-photo\"\r\n [class.simple-slider-photo--disabled]=\"isDisabled()\"\r\n [style.border-width.px]=\"borderWidth()\"\r\n [style.padding.px]=\"cardPadding()\"\r\n [style.border-color]=\"borderColor\"\r\n (click)=\"changeModel.emit()\"\r\n>\r\n @if (photoLink()) {\r\n <img\r\n class=\"simple-slider-photo__image\"\r\n [alt]=\"photoAlt()\"\r\n [ngSrc]=\"photoLink()!\"\r\n [width]=\"cardWidth() - 2*cardPadding() - 2*borderWidth()\"\r\n [height]=\"cardHeight() - 2*cardPadding() - 2*borderWidth()\"\r\n />\r\n }\r\n</div>\r\n","import {\r\n afterNextRender,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { WINDOW, WINDOW_PROVIDERS } from './providers/window.providers';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n debounceTime,\r\n fromEvent,\r\n startWith,\r\n switchMap,\r\n distinctUntilChanged,\r\n of,\r\n delay,\r\n takeUntil,\r\n interval,\r\n} from 'rxjs';\r\nimport { EArrowAction, ESliderAction } from './enums/slider.enums';\r\nimport { ISliderPhoto } from './interfaces/slider.interface';\r\nimport { SimpleSliderPhotoComponent } from './components/simple-slider-photo/simple-slider-photo.component';\r\n\r\n@Component({\r\n selector: 'lib-simple-slider',\r\n templateUrl: './simple-slider.component.html',\r\n styleUrls: ['./simple-slider.component.scss'],\r\n imports: [SimpleSliderPhotoComponent],\r\n providers: [WINDOW_PROVIDERS],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SimpleSliderComponent implements AfterViewInit {\r\n private readonly window = inject(WINDOW);\r\n\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n propertyPhotos = input<ISliderPhoto[]>([]);\r\n selectedElementIndex = input(0);\r\n cardWidth = input(60);\r\n cardHeight = input(90);\r\n cardMargin = input(10);\r\n borderWidth = input(1);\r\n cardPadding = input(2);\r\n activeBorderColor = input('#1976d2');\r\n defaultBorderColor = input('#fff');\r\n inactiveIconColor = input('#9e9e9e');\r\n longClickDelay = input(200);\r\n arrowBackgroundColor = input('transparent');\r\n arrowBorderColor = input('transparent');\r\n arrowBorderWidth = input(0);\r\n arrowColor = input('#333');\r\n touchDelta = input(20);\r\n arrowWidth = input(36);\r\n\r\n changeModel = output<number>();\r\n\r\n @ViewChild('sliderContainer', { static: false, read: ElementRef })\r\n sliderContainer?: ElementRef;\r\n @ViewChild('galleryTrack', { static: false, read: ElementRef })\r\n galleryTrack?: ElementRef;\r\n @ViewChild('arrowPrevButton', { static: false, read: ElementRef })\r\n arrowPrevButton?: ElementRef;\r\n @ViewChild('arrowNextButton', { static: false, read: ElementRef })\r\n arrowNextButton?: ElementRef;\r\n\r\n prevArrowLongPress = false;\r\n nextArrowLongPress = false;\r\n\r\n private _sliderContainer?: HTMLDivElement;\r\n private _galleryTrack?: HTMLDivElement;\r\n\r\n isNextArrowDisabled = false;\r\n isPrevArrowDisabled = false;\r\n\r\n photoCount = 0;\r\n galleryWidth = 0;\r\n arrowsHidden = false;\r\n\r\n touchStartX = 0;\r\n touchCurrentX = 0;\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n if (this.sliderContainer) {\r\n this.initSliderContainer();\r\n }\r\n\r\n if (this.arrowPrevButton) {\r\n this.initArrowPrevButtonActions();\r\n }\r\n\r\n if (this.arrowNextButton) {\r\n this.initArrowNextButtonActions();\r\n }\r\n });\r\n }\r\n\r\n private syncCardSliderCount = effect(() => {\r\n const photos = this.propertyPhotos();\r\n if (photos?.length) {\r\n this.photoCount = photos.length;\r\n }\r\n }, { allowSignalWrites: true });\r\n\r\n ngAfterViewInit() {\r\n if (this.galleryTrack) {\r\n this.initGalleryTrack();\r\n this.initWheelAction(this.galleryTrack);\r\n }\r\n }\r\n\r\n public stepPrevSlider(): void {\r\n this.actionSlider(ESliderAction.STEP_PREV);\r\n }\r\n\r\n public stepNextSlider(): void {\r\n this.actionSlider(ESliderAction.STEP_NEXT);\r\n }\r\n\r\n public computedPositionSlider(): void {\r\n this.actionSlider(ESliderAction.COMPUTE_POSITION);\r\n }\r\n\r\n private actionSlider(action: ESliderAction, touchDelta = 0): void {\r\n const countVisibleSlider = Math.floor(this.galleryWidth / (this.cardWidth() + this.cardMargin()));\r\n\r\n let currentMarginLeft = parseInt(\r\n (this._galleryTrack?.style.marginLeft as string).replace('px', ''),\r\n 10,\r\n );\r\n currentMarginLeft = isNaN(currentMarginLeft) ? 0 : currentMarginLeft;\r\n\r\n let computedPositionSlider = 0;\r\n const maxDelta = -(this.cardWidth() + this.cardMargin()) * this.photoCount + this.galleryWidth;\r\n let positionSlider = 0;\r\n\r\n switch (action) {\r\n case ESliderAction.STEP_NEXT: {\r\n computedPositionSlider = currentMarginLeft - (this.cardWidth() + this.cardMargin());\r\n positionSlider = Math.max(computedPositionSlider, maxDelta);\r\n\r\n if (positionSlider < maxDelta) {\r\n positionSlider = maxDelta;\r\n }\r\n\r\n if (countVisibleSlider >= this.photoCount) {\r\n positionSlider = 0;\r\n }\r\n\r\n break;\r\n }\r\n\r\n case ESliderAction.STEP_PREV: {\r\n computedPositionSlider = currentMarginLeft + (this.cardWidth() + this.cardMargin());\r\n positionSlider = Math.min(computedPositionSlider, 0);\r\n\r\n if (positionSlider > 0) {\r\n positionSlider = 0;\r\n }\r\n\r\n break;\r\n }\r\n\r\n case ESliderAction.COMPUTE_POSITION: {\r\n computedPositionSlider = -(this.cardWidth() + this.cardMargin()) * this.selectedElementIndex();\r\n positionSlider = Math.max(computedPositionSlider, maxDelta);\r\n\r\n if (positionSlider > 0) {\r\n positionSlider = 0;\r\n }\r\n\r\n break;\r\n }\r\n\r\n case ESliderAction.TOUCH_MOVE: {\r\n positionSlider = currentMarginLeft + touchDelta;\r\n\r\n if (positionSlider > 0) {\r\n positionSlider = 0;\r\n }\r\n\r\n if (positionSlider < maxDelta) {\r\n positionSlider = maxDelta;\r\n }\r\n\r\n if (countVisibleSlider >= this.photoCount) {\r\n positionSlider = 0;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (this._galleryTrack) {\r\n this._galleryTrack.style.marginLeft = positionSlider + 'px';\r\n }\r\n\r\n this.isPrevArrowDisabled = positionSlider === 0;\r\n this.isNextArrowDisabled = maxDelta === positionSlider;\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n public touchStartGallery(evt: TouchEvent) {\r\n const countTouch = evt.touches.length;\r\n\r\n if (countTouch > 1) {\r\n return;\r\n }\r\n\r\n this.touchStartX = evt.touches[0].clientX;\r\n this.touchCurrentX = this.touchStartX;\r\n }\r\n\r\n public touchMoveGallery(evt: TouchEvent) {\r\n if (!this.arrowsHidden) {\r\n evt.preventDefault();\r\n }\r\n\r\n const countTouch = evt.touches.length;\r\n\r\n if (countTouch > 1) {\r\n return;\r\n }\r\n const curr = evt.touches[0].clientX;\r\n const touchDelta = curr - this.touchCurrentX;\r\n\r\n if (Math.abs(touchDelta) > this.touchDelta()) {\r\n this.actionSlider(ESliderAction.TOUCH_MOVE, touchDelta);\r\n this.touchCurrentX = curr;\r\n }\r\n }\r\n\r\n private initGalleryTrack() {\r\n this._galleryTrack = this.galleryTrack?.nativeElement;\r\n this.galleryWidth = +(this._galleryTrack?.parentElement?.offsetWidth || 0);\r\n this.photoCount = this._galleryTrack?.children.length || 0;\r\n }\r\n\r\n private initWheelAction(elementRef: ElementRef) {\r\n fromEvent<WheelEvent>(elementRef.nativeElement, 'wheel')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(\r\n (e: WheelEvent) => {\r\n if (!this.arrowsHidden) {\r\n e.preventDefault();\r\n }\r\n const delta = e.deltaY;\r\n if (delta > 0) {\r\n this.stepNextSlider();\r\n } else if (delta < 0) {\r\n this.stepPrevSlider();\r\n }\r\n },\r\n );\r\n }\r\n\r\n private initSliderContainer() {\r\n if (!this.window) {\r\n return;\r\n }\r\n\r\n this._sliderContainer = this.sliderContainer?.nativeElement;\r\n\r\n const resize$ = fromEvent(this.window, 'resize').pipe(\r\n startWith([\r\n this._sliderContainer?.offsetWidth,\r\n +(this._galleryTrack?.parentElement?.offsetWidth || 0),\r\n ]),\r\n switchMap(() =>\r\n of([\r\n +(this._sliderContainer?.offsetWidth || 0),\r\n +(this._galleryTrack?.parentElement?.offsetWidth || 0),\r\n ]),\r\n ),\r\n );\r\n\r\n resize$\r\n .pipe(distinctUntilChanged(), debounceTime(100), takeUntilDestroyed(this.destroyRef))\r\n .subscribe(([currentWidthPropertyPhotoSlider, galleryUloffsetWidth]) => {\r\n this.galleryWidth = galleryUloffsetWidth;\r\n const count =\r\n (currentWidthPropertyPhotoSlider - 2 * this.arrowWidth()) /\r\n (this.cardWidth() + this.cardMargin());\r\n const countCeil = Math.ceil(count);\r\n\r\n this.arrowsHidden = countCeil > this.photoCount;\r\n this.computedPositionSlider();\r\n\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n private initArrowPrevButtonActions() {\r\n if (this.arrowPrevButton) {\r\n this.initLongTouch(this.arrowPrevButton, EArrowAction.STEP_PREV);\r\n this.initLongClick(this.arrowPrevButton, EArrowAction.STEP_PREV);\r\n }\r\n }\r\n\r\n private initArrowNextButtonActions() {\r\n if (this.arrowNextButton) {\r\n this.initLongTouch(this.arrowNextButton, EArrowAction.STEP_NEXT);\r\n this.initLongClick(this.arrowNextButton, EArrowAction.STEP_NEXT);\r\n }\r\n }\r\n\r\n private initLongTouch(elementRef: ElementRef, typeArrowAction: EArrowAction) {\r\n const touchstart$ = fromEvent(elementRef.nativeElement, 'touchstart');\r\n const touchend$ = fromEvent(elementRef.nativeElement, 'touchend');\r\n\r\n const longTouch$ = touchstart$.pipe(\r\n switchMap((v) => {\r\n return of(v).pipe(delay(this.longClickDelay()), takeUntil(touchend$));\r\n }),\r\n );\r\n\r\n longTouch$\r\n .pipe(\r\n switchMap(() => {\r\n return interval(1000).pipe(takeUntil(touchend$));\r\n }),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe(() => {\r\n switch (typeArrowAction) {\r\n case EArrowAction.STEP_PREV: {\r\n this.prevArrowLongPress = true;\r\n this.stepPrevSlider();\r\n break;\r\n }\r\n case EArrowAction.STEP_NEXT: {\r\n this.nextArrowLongPress = true;\r\n this.stepNextSlider();\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private initLongClick(elementRef: ElementRef, typeArrowAction: EArrowAction) {\r\n const mouseUp$ = fromEvent(elementRef.nativeElement, 'mouseup');\r\n const mouseDown$ = fromEvent(elementRef.nativeElement, 'mousedown');\r\n const click$ = fromEvent(elementRef.nativeElement, 'click');\r\n\r\n const longClick$ = mouseDown$.pipe(\r\n switchMap((v) => {\r\n return of(v).pipe(delay(this.longClickDelay()), takeUntil(mouseUp$));\r\n }),\r\n );\r\n\r\n click$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n switch (typeArrowAction) {\r\n case EArrowAction.STEP_PREV: {\r\n if (this.prevArrowLongPress) {\r\n this.prevArrowLongPress = false;\r\n return;\r\n }\r\n this.stepPrevSlider();\r\n break;\r\n }\r\n case EArrowAction.STEP_NEXT: {\r\n if (this.nextArrowLongPress) {\r\n this.nextArrowLongPress = false;\r\n return;\r\n }\r\n this.stepNextSlider();\r\n break;\r\n }\r\n }\r\n });\r\n\r\n longClick$\r\n .pipe(\r\n switchMap(() => {\r\n return interval(1000).pipe(takeUntil(mouseUp$));\r\n }),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe(() => {\r\n switch (typeArrowAction) {\r\n case EArrowAction.STEP_PREV: {\r\n this.prevArrowLongPress = true;\r\n this.stepPrevSlider();\r\n break;\r\n }\r\n case EArrowAction.STEP_NEXT: {\r\n this.nextArrowLongPress = true;\r\n this.stepNextSlider();\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"simple-slider\" #sliderContainer>\r\n <div class=\"simple-slider__arrow simple-slider__arrow--prev\" [class.simple-slider__arrow--hidden]=\"arrowsHidden\">\r\n <button\r\n class=\"simple-slider__button\"\r\n type=\"button\"\r\n #arrowPrevButton\r\n [style.background-color]=\"arrowBackgroundColor()\"\r\n [style.border-color]=\"arrowBorderColor()\"\r\n [style.border-width.px]=\"arrowBorderWidth()\"\r\n style=\"border-style: solid\"\r\n >\r\n <svg class=\"simple-slider__icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" [style.color]=\"isPrevArrowDisabled ? inactiveIconColor() : arrowColor()\">\r\n <path fill=\"currentColor\" d=\"M20.547 21.453l-6.107-6.12 6.107-6.12-1.88-1.88-8 8 8 8z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"simple-slider__gallery\">\r\n <ul class=\"simple-slider__track\" #galleryTrack (touchstart)=\"touchStartGallery($event)\" (touchmove)=\"touchMoveGallery($event)\">\r\n @for (photo of propertyPhotos(); let i = $index; track photo.url) {\r\n <li class=\"simple-slider__item\" [style.margin-right.px]=\"cardMargin()\">\r\n <simple-slider-photo\r\n [photoLink]=\"photo.url\"\r\n [photoAlt]=\"photo.alt\"\r\n [isDisabled]=\"photo.disabled || false\"\r\n [isActive]=\"i === selectedElementIndex()\"\r\n [cardWidth]=\"cardWidth()\"\r\n [cardHeight]=\"cardHeight()\"\r\n [borderWidth]=\"borderWidth()\"\r\n [cardPadding]=\"cardPadding()\"\r\n [activeBorderColor]=\"activeBorderColor()\"\r\n [defaultBorderColor]=\"defaultBorderColor()\"\r\n (changeModel)=\"changeModel.emit(i)\"\r\n ></simple-slider-photo>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n\r\n <div class=\"simple-slider__arrow simple-slider__arrow--next\" [class.simple-slider__arrow--hidden]=\"arrowsHidden\">\r\n <button\r\n class=\"simple-slider__button\"\r\n type=\"button\"\r\n #arrowNextButton\r\n [style.background-color]=\"arrowBackgroundColor()\"\r\n [style.border-color]=\"arrowBorderColor()\"\r\n [style.border-width.px]=\"arrowBorderWidth()\"\r\n style=\"border-style: solid\"\r\n >\r\n <svg class=\"simple-slider__icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" [style.color]=\"isNextArrowDisabled ? inactiveIconColor() : arrowColor()\">\r\n <path fill=\"currentColor\" d=\"M11.453 21.787l6.107-6.12-6.107-6.12 1.88-1.88 8 8-8 8z\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n</div>\r\n","/*\n * Public API Surface of simple-slider\n */\n\nexport * from './lib/simple-slider.component';\nexport * from './lib/interfaces/slider.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAIO,MAAM,MAAM,GAAG,IAAI,cAAc,CAAS,QAAQ,CAAC;AAG1D;AACA,MAAM,cAAc,GAAoB;AACtC,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,UAAU,EAAE,CAAC,UAAe,KAAI;AAC9B,QAAA,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE;AACjC,YAAA,OAAO,MAAM;QACf;AACA,QAAA,OAAO,EAAE;IACX,CAAC;IACD,IAAI,EAAE,CAAC,WAAW,CAAC;CACpB;AAEM,MAAM,gBAAgB,GAAG,CAAC,cAAc,CAAC;;ACnBhD,IAAY,aAKX;AALD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC;AACpC,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACtB,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACtB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,WAAwB;AAC1B,CAAC,EALW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAOzB,IAAY,YAGX;AAHD,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACtB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACxB,CAAC,EAHW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;;MCIX,0BAA0B,CAAA;IACrC,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA4B;AAC7C,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,+EAAC;AACpB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,+EAAC;AACvB,IAAA,UAAU,GAAG,KAAK,CAAC,KAAK,iFAAC;AACzB,IAAA,SAAS,GAAG,KAAK,CAAC,CAAC,gFAAC;AACpB,IAAA,UAAU,GAAG,KAAK,CAAC,CAAC,iFAAC;AACrB,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,kFAAC;AACtB,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,kFAAC;AACtB,IAAA,iBAAiB,GAAG,KAAK,CAAC,SAAS,wFAAC;AACpC,IAAA,kBAAkB,GAAG,KAAK,CAAC,MAAM,yFAAC;IAElC,WAAW,GAAG,MAAM,EAAQ;AAE5B,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;IAC/E;wGAhBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXvC,+kBAkBA,EAAA,MAAA,EAAA,CAAA,uLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDVY,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGf,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,WAGtB,CAAC,gBAAgB,CAAC,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+kBAAA,EAAA,MAAA,EAAA,CAAA,uLAAA,CAAA,EAAA;;;ME8BpC,qBAAqB,CAAA;AACf,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAEvB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,IAAA,cAAc,GAAG,KAAK,CAAiB,EAAE,qFAAC;AAC1C,IAAA,oBAAoB,GAAG,KAAK,CAAC,CAAC,2FAAC;AAC/B,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,gFAAC;AACrB,IAAA,UAAU,GAAG,KAAK,CAAC,EAAE,iFAAC;AACtB,IAAA,UAAU,GAAG,KAAK,CAAC,EAAE,iFAAC;AACtB,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,kFAAC;AACtB,IAAA,WAAW,GAAG,KAAK,CAAC,CAAC,kFAAC;AACtB,IAAA,iBAAiB,GAAG,KAAK,CAAC,SAAS,wFAAC;AACpC,IAAA,kBAAkB,GAAG,KAAK,CAAC,MAAM,yFAAC;AAClC,IAAA,iBAAiB,GAAG,KAAK,CAAC,SAAS,wFAAC;AACpC,IAAA,cAAc,GAAG,KAAK,CAAC,GAAG,qFAAC;AAC3B,IAAA,oBAAoB,GAAG,KAAK,CAAC,aAAa,2FAAC;AAC3C,IAAA,gBAAgB,GAAG,KAAK,CAAC,aAAa,uFAAC;AACvC,IAAA,gBAAgB,GAAG,KAAK,CAAC,CAAC,uFAAC;AAC3B,IAAA,UAAU,GAAG,KAAK,CAAC,MAAM,iFAAC;AAC1B,IAAA,UAAU,GAAG,KAAK,CAAC,EAAE,iFAAC;AACtB,IAAA,UAAU,GAAG,KAAK,CAAC,EAAE,iFAAC;IAEtB,WAAW,GAAG,MAAM,EAAU;AAG9B,IAAA,eAAe;AAEf,IAAA,YAAY;AAEZ,IAAA,eAAe;AAEf,IAAA,eAAe;IAEf,kBAAkB,GAAG,KAAK;IAC1B,kBAAkB,GAAG,KAAK;AAElB,IAAA,gBAAgB;AAChB,IAAA,aAAa;IAErB,mBAAmB,GAAG,KAAK;IAC3B,mBAAmB,GAAG,KAAK;IAE3B,UAAU,GAAG,CAAC;IACd,YAAY,GAAG,CAAC;IAChB,YAAY,GAAG,KAAK;IAEpB,WAAW,GAAG,CAAC;IACf,aAAa,GAAG,CAAC;AAEjB,IAAA,WAAA,GAAA;QACE,eAAe,CAAC,MAAK;AACnB,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,mBAAmB,EAAE;YAC5B;AAEA,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,0BAA0B,EAAE;YACnC;AAEA,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,0BAA0B,EAAE;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,mBAAmB,GAAG,MAAM,CAAC,MAAK;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;AACpC,QAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM;QACjC;AACF,IAAA,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,iBAAiB,EAAE,IAAI,GAAG;IAE/B,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;QACzC;IACF;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC;IAC5C;IAEO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC;IAC5C;IAEO,sBAAsB,GAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAC;IACnD;AAEQ,IAAA,YAAY,CAAC,MAAqB,EAAE,UAAU,GAAG,CAAC,EAAA;QACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAEjG,IAAI,iBAAiB,GAAG,QAAQ,CAC9B,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,UAAqB,EAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAClE,EAAE,CACH;AACD,QAAA,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,iBAAiB;QAEpE,IAAI,sBAAsB,GAAG,CAAC;QAC9B,MAAM,QAAQ,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;QAC9F,IAAI,cAAc,GAAG,CAAC;QAEtB,QAAQ,MAAM;AACZ,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE;AAC5B,gBAAA,sBAAsB,GAAG,iBAAiB,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnF,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC;AAE3D,gBAAA,IAAI,cAAc,GAAG,QAAQ,EAAE;oBAC7B,cAAc,GAAG,QAAQ;gBAC3B;AAEA,gBAAA,IAAI,kBAAkB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACzC,cAAc,GAAG,CAAC;gBACpB;gBAEA;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE;AAC5B,gBAAA,sBAAsB,GAAG,iBAAiB,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnF,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAEpD,gBAAA,IAAI,cAAc,GAAG,CAAC,EAAE;oBACtB,cAAc,GAAG,CAAC;gBACpB;gBAEA;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,gBAAgB,EAAE;AACnC,gBAAA,sBAAsB,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE;gBAC9F,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC;AAE3D,gBAAA,IAAI,cAAc,GAAG,CAAC,EAAE;oBACtB,cAAc,GAAG,CAAC;gBACpB;gBAEA;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,UAAU,EAAE;AAC7B,gBAAA,cAAc,GAAG,iBAAiB,GAAG,UAAU;AAE/C,gBAAA,IAAI,cAAc,GAAG,CAAC,EAAE;oBACtB,cAAc,GAAG,CAAC;gBACpB;AAEA,gBAAA,IAAI,cAAc,GAAG,QAAQ,EAAE;oBAC7B,cAAc,GAAG,QAAQ;gBAC3B;AAEA,gBAAA,IAAI,kBAAkB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACzC,cAAc,GAAG,CAAC;gBACpB;gBAEA;YACF;;AAGF,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI;QAC7D;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,cAAc,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,mBAAmB,GAAG,QAAQ,KAAK,cAAc;AAEtD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEO,IAAA,iBAAiB,CAAC,GAAe,EAAA;AACtC,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM;AAErC,QAAA,IAAI,UAAU,GAAG,CAAC,EAAE;YAClB;QACF;QAEA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW;IACvC;AAEO,IAAA,gBAAgB,CAAC,GAAe,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,GAAG,CAAC,cAAc,EAAE;QACtB;AAEA,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM;AAErC,QAAA,IAAI,UAAU,GAAG,CAAC,EAAE;YAClB;QACF;QACA,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AACnC,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa;AAE5C,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE;YAC5C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;AACvD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;IACF;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa;AACrD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,IAAI,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;IAC5D;AAEQ,IAAA,eAAe,CAAC,UAAsB,EAAA;AAC5C,QAAA,SAAS,CAAa,UAAU,CAAC,aAAa,EAAE,OAAO;AACpD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CACV,CAAC,CAAa,KAAI;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,CAAC,CAAC,cAAc,EAAE;YACpB;AACA,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM;AACtB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb,IAAI,CAAC,cAAc,EAAE;YACvB;AAAO,iBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACpB,IAAI,CAAC,cAAc,EAAE;YACvB;AACF,QAAA,CAAC,CACF;IACH;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;QACF;QAEA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa;AAE3D,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CACnD,SAAS,CAAC;YACR,IAAI,CAAC,gBAAgB,EAAE,WAAW;YAClC,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,IAAI,CAAC,CAAC;AACvD,SAAA,CAAC,EACF,SAAS,CAAC,MACR,EAAE,CAAC;YACD,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,IAAI,CAAC,CAAC;YAC1C,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,IAAI,CAAC,CAAC;SACvD,CAAC,CACH,CACF;QAED;AACG,aAAA,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACnF,SAAS,CAAC,CAAC,CAAC,+BAA+B,EAAE,oBAAoB,CAAC,KAAI;AACrE,YAAA,IAAI,CAAC,YAAY,GAAG,oBAAoB;YACxC,MAAM,KAAK,GACT,CAAC,+BAA+B,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE;iBACvD,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAElC,IAAI,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,UAAU;YAC/C,IAAI,CAAC,sBAAsB,EAAE;AAE7B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,QAAA,CAAC,CAAC;IACN;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC;QAClE;IACF;IAEQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC;QAClE;IACF;IAEQ,aAAa,CAAC,UAAsB,EAAE,eAA6B,EAAA;QACzE,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC;QACrE,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC;QAEjE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CACjC,SAAS,CAAC,CAAC,CAAC,KAAI;YACd,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC,CAAC,CACH;QAED;AACG,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;AACb,YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAK;YACd,QAAQ,eAAe;AACrB,gBAAA,KAAK,YAAY,CAAC,SAAS,EAAE;AAC3B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;oBAC9B,IAAI,CAAC,cAAc,EAAE;oBACrB;gBACF;AACA,gBAAA,KAAK,YAAY,CAAC,SAAS,EAAE;AAC3B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;oBAC9B,IAAI,CAAC,cAAc,EAAE;oBACrB;gBACF;;AAEJ,QAAA,CAAC,CAAC;IACN;IAEQ,aAAa,CAAC,UAAsB,EAAE,eAA6B,EAAA;QACzE,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC;QAC/D,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC;QACnE,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC;QAE3D,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAChC,SAAS,CAAC,CAAC,CAAC,KAAI;YACd,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtE,CAAC,CAAC,CACH;AAED,QAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC9D,QAAQ,eAAe;AACrB,gBAAA,KAAK,YAAY,CAAC,SAAS,EAAE;AAC3B,oBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,wBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;wBAC/B;oBACF;oBACA,IAAI,CAAC,cAAc,EAAE;oBACrB;gBACF;AACA,gBAAA,KAAK,YAAY,CAAC,SAAS,EAAE;AAC3B,oBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,wBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;wBAC/B;oBACF;oBACA,IAAI,CAAC,cAAc,EAAE;oBACrB;gBACF;;AAEJ,QAAA,CAAC,CAAC;QAEF;AACG,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;AACb,YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAK;YACd,QAAQ,eAAe;AACrB,gBAAA,KAAK,YAAY,CAAC,SAAS,EAAE;AAC3B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;oBAC9B,IAAI,CAAC,cAAc,EAAE;oBACrB;gBACF;AACA,gBAAA,KAAK,YAAY,CAAC,SAAS,EAAE;AAC3B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;oBAC9B,IAAI,CAAC,cAAc,EAAE;oBACrB;gBACF;;AAEJ,QAAA,CAAC,CAAC;IACN;wGA5WW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAHrB,CAAC,gBAAgB,CAAC,yHA8BwB,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAEb,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAEP,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAEV,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxEjE,upFAuDA,qnBDpBY,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAIzB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;+BACE,mBAAmB,EAAA,OAAA,EAGpB,CAAC,0BAA0B,CAAC,EAAA,SAAA,EAC1B,CAAC,gBAAgB,CAAC,EAAA,eAAA,EACZ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,upFAAA,EAAA,MAAA,EAAA,CAAA,6jBAAA,CAAA,EAAA;;sBA6B9C,SAAS;uBAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAEhE,SAAS;uBAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAE7D,SAAS;uBAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAEhE,SAAS;uBAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;;;AExEnE;;AAEG;;ACFH;;AAEG;;"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { AfterViewInit, ElementRef } from '@angular/core';
|
|
3
|
-
import { SafeResourceUrl } from '@angular/platform-browser';
|
|
4
|
-
|
|
5
|
-
interface ISliderPhoto {
|
|
6
|
-
url: string | SafeResourceUrl;
|
|
7
|
-
name: string;
|
|
8
|
-
alt: string;
|
|
9
|
-
disabled?: boolean;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
declare class SimpleSliderComponent implements AfterViewInit {
|
|
13
|
-
private readonly window;
|
|
14
|
-
private readonly cdr;
|
|
15
|
-
private readonly destroyRef;
|
|
16
|
-
propertyPhotos: _angular_core.InputSignal<ISliderPhoto[]>;
|
|
17
|
-
selectedElementIndex: _angular_core.InputSignal<number>;
|
|
18
|
-
cardWidth: _angular_core.InputSignal<number>;
|
|
19
|
-
cardHeight: _angular_core.InputSignal<number>;
|
|
20
|
-
cardMargin: _angular_core.InputSignal<number>;
|
|
21
|
-
borderWidth: _angular_core.InputSignal<number>;
|
|
22
|
-
cardPadding: _angular_core.InputSignal<number>;
|
|
23
|
-
activeBorderColor: _angular_core.InputSignal<string>;
|
|
24
|
-
defaultBorderColor: _angular_core.InputSignal<string>;
|
|
25
|
-
inactiveIconColor: _angular_core.InputSignal<string>;
|
|
26
|
-
longClickDelay: _angular_core.InputSignal<number>;
|
|
27
|
-
arrowBackgroundColor: _angular_core.InputSignal<string>;
|
|
28
|
-
arrowBorderColor: _angular_core.InputSignal<string>;
|
|
29
|
-
arrowBorderWidth: _angular_core.InputSignal<number>;
|
|
30
|
-
arrowColor: _angular_core.InputSignal<string>;
|
|
31
|
-
touchDelta: _angular_core.InputSignal<number>;
|
|
32
|
-
arrowWidth: _angular_core.InputSignal<number>;
|
|
33
|
-
changeModel: _angular_core.OutputEmitterRef<number>;
|
|
34
|
-
sliderContainer?: ElementRef;
|
|
35
|
-
galleryTrack?: ElementRef;
|
|
36
|
-
arrowPrevButton?: ElementRef;
|
|
37
|
-
arrowNextButton?: ElementRef;
|
|
38
|
-
prevArrowLongPress: boolean;
|
|
39
|
-
nextArrowLongPress: boolean;
|
|
40
|
-
private _sliderContainer?;
|
|
41
|
-
private _galleryTrack?;
|
|
42
|
-
isNextArrowDisabled: boolean;
|
|
43
|
-
isPrevArrowDisabled: boolean;
|
|
44
|
-
photoCount: number;
|
|
45
|
-
galleryWidth: number;
|
|
46
|
-
arrowsHidden: boolean;
|
|
47
|
-
touchStartX: number;
|
|
48
|
-
touchCurrentX: number;
|
|
49
|
-
constructor();
|
|
50
|
-
private syncCardSliderCount;
|
|
51
|
-
ngAfterViewInit(): void;
|
|
52
|
-
stepPrevSlider(): void;
|
|
53
|
-
stepNextSlider(): void;
|
|
54
|
-
computedPositionSlider(): void;
|
|
55
|
-
private actionSlider;
|
|
56
|
-
touchStartGallery(evt: TouchEvent): void;
|
|
57
|
-
touchMoveGallery(evt: TouchEvent): void;
|
|
58
|
-
private initGalleryTrack;
|
|
59
|
-
private initWheelAction;
|
|
60
|
-
private initSliderContainer;
|
|
61
|
-
private initArrowPrevButtonActions;
|
|
62
|
-
private initArrowNextButtonActions;
|
|
63
|
-
private initLongTouch;
|
|
64
|
-
private initLongClick;
|
|
65
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SimpleSliderComponent, never>;
|
|
66
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SimpleSliderComponent, "lib-simple-slider", never, { "propertyPhotos": { "alias": "propertyPhotos"; "required": false; "isSignal": true; }; "selectedElementIndex": { "alias": "selectedElementIndex"; "required": false; "isSignal": true; }; "cardWidth": { "alias": "cardWidth"; "required": false; "isSignal": true; }; "cardHeight": { "alias": "cardHeight"; "required": false; "isSignal": true; }; "cardMargin": { "alias": "cardMargin"; "required": false; "isSignal": true; }; "borderWidth": { "alias": "borderWidth"; "required": false; "isSignal": true; }; "cardPadding": { "alias": "cardPadding"; "required": false; "isSignal": true; }; "activeBorderColor": { "alias": "activeBorderColor"; "required": false; "isSignal": true; }; "defaultBorderColor": { "alias": "defaultBorderColor"; "required": false; "isSignal": true; }; "inactiveIconColor": { "alias": "inactiveIconColor"; "required": false; "isSignal": true; }; "longClickDelay": { "alias": "longClickDelay"; "required": false; "isSignal": true; }; "arrowBackgroundColor": { "alias": "arrowBackgroundColor"; "required": false; "isSignal": true; }; "arrowBorderColor": { "alias": "arrowBorderColor"; "required": false; "isSignal": true; }; "arrowBorderWidth": { "alias": "arrowBorderWidth"; "required": false; "isSignal": true; }; "arrowColor": { "alias": "arrowColor"; "required": false; "isSignal": true; }; "touchDelta": { "alias": "touchDelta"; "required": false; "isSignal": true; }; "arrowWidth": { "alias": "arrowWidth"; "required": false; "isSignal": true; }; }, { "changeModel": "changeModel"; }, never, never, true, never>;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export { SimpleSliderComponent };
|
|
70
|
-
export type { ISliderPhoto };
|