ngx-edge-slider 2.1.4 → 2.1.6
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/esm2022/lib/component/simple-slider.component.mjs +215 -0
- package/esm2022/lib/engine/slider-engine.service.mjs +288 -0
- package/esm2022/lib/models/slider-config.model.mjs +18 -0
- package/esm2022/lib/models/slider-state.model.mjs +17 -0
- package/esm2022/lib/ngx-edge-slider.module.mjs +16 -0
- package/esm2022/lib/plugins/autoplay/autoplay.plugin.mjs +47 -0
- package/esm2022/lib/plugins/draggable/draggable.plugin.mjs +67 -0
- package/esm2022/lib/plugins/navigation/navigation.plugin.mjs +80 -0
- package/esm2022/lib/plugins/pagination/pagination.plugin.mjs +50 -0
- package/esm2022/lib/plugins/slider-plugin.mjs +2 -0
- package/esm2022/lib/safe-url.pipe.mjs +19 -0
- package/esm2022/lib/store/slider-store.service.mjs +34 -0
- package/esm2022/ngx-edge-slider.mjs +5 -0
- package/esm2022/public-api.mjs +20 -0
- package/fesm2022/ngx-edge-slider.mjs +824 -0
- package/fesm2022/ngx-edge-slider.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/component/simple-slider.component.d.ts +60 -0
- package/lib/engine/slider-engine.service.d.ts +53 -0
- package/lib/models/slider-config.model.d.ts +34 -0
- package/lib/models/slider-state.model.d.ts +22 -0
- package/lib/ngx-edge-slider.module.d.ts +7 -0
- package/lib/plugins/autoplay/autoplay.plugin.d.ts +18 -0
- package/lib/plugins/draggable/draggable.plugin.d.ts +20 -0
- package/lib/plugins/navigation/navigation.plugin.d.ts +19 -0
- package/lib/plugins/pagination/pagination.plugin.d.ts +17 -0
- package/lib/plugins/slider-plugin.d.ts +16 -0
- package/lib/safe-url.pipe.d.ts +10 -0
- package/lib/store/slider-store.service.d.ts +11 -0
- package/package.json +28 -16
- package/{src/public-api.ts → public-api.d.ts} +12 -25
- package/ng-package.json +0 -7
- package/ngx-edge-slider-2.1.3.tgz +0 -0
- package/ngx-edge-slider-2.1.4.tgz +0 -0
- package/src/lib/assets/icons/arrow-black.svg +0 -3
- package/src/lib/assets/icons/arrow-gray.svg +0 -3
- package/src/lib/component/simple-slider.component.html +0 -46
- package/src/lib/component/simple-slider.component.scss +0 -589
- package/src/lib/component/simple-slider.component.ts +0 -237
- package/src/lib/engine/slider-engine.service.ts +0 -349
- package/src/lib/models/slider-config.model.ts +0 -54
- package/src/lib/models/slider-state.model.ts +0 -48
- package/src/lib/ngx-edge-slider.module.ts +0 -8
- package/src/lib/plugins/autoplay/autoplay.plugin.ts +0 -52
- package/src/lib/plugins/draggable/draggable.plugin.ts +0 -73
- package/src/lib/plugins/navigation/navigation.component.scss +0 -0
- package/src/lib/plugins/navigation/navigation.plugin.ts +0 -90
- package/src/lib/plugins/pagination/pagination.plugin.ts +0 -61
- package/src/lib/plugins/slider-plugin.ts +0 -20
- package/src/lib/plugins/thumbs/thumbs-scroll.plugin.ts +0 -40
- package/src/lib/safe-url.pipe.ts +0 -11
- package/src/lib/simple-slider.directive.ts +0 -15
- package/src/lib/store/slider-store.service.ts +0 -35
- package/tsconfig.lib.json +0 -13
- package/tsconfig.lib.prod.json +0 -11
- package/tsconfig.spec.json +0 -15
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { Component, ChangeDetectionStrategy, Input, EventEmitter, Output, ViewChild, ViewEncapsulation, } from "@angular/core";
|
|
2
|
+
import { Subject, takeUntil } from "rxjs";
|
|
3
|
+
import { SliderEngine } from "../engine/slider-engine.service";
|
|
4
|
+
import { SliderStore } from "../store/slider-store.service";
|
|
5
|
+
import { SliderAutoplayPlugin } from "../plugins/autoplay/autoplay.plugin";
|
|
6
|
+
import { SliderDraggablePlugin } from "../plugins/draggable/draggable.plugin";
|
|
7
|
+
import { SliderNavigationPlugin } from "../plugins/navigation/navigation.plugin";
|
|
8
|
+
import { SliderPaginationPlugin } from "../plugins/pagination/pagination.plugin";
|
|
9
|
+
import { CommonModule } from "@angular/common";
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../engine/slider-engine.service";
|
|
12
|
+
import * as i2 from "../store/slider-store.service";
|
|
13
|
+
import * as i3 from "../plugins/draggable/draggable.plugin";
|
|
14
|
+
import * as i4 from "../plugins/pagination/pagination.plugin";
|
|
15
|
+
import * as i5 from "../plugins/navigation/navigation.plugin";
|
|
16
|
+
import * as i6 from "../plugins/autoplay/autoplay.plugin";
|
|
17
|
+
import * as i7 from "@angular/common";
|
|
18
|
+
export class SimpleSliderComponent {
|
|
19
|
+
engine;
|
|
20
|
+
store;
|
|
21
|
+
draggable;
|
|
22
|
+
pagination;
|
|
23
|
+
navigation;
|
|
24
|
+
autoplay;
|
|
25
|
+
config;
|
|
26
|
+
slideTemplate;
|
|
27
|
+
navigationTemplate;
|
|
28
|
+
paginationTemplate;
|
|
29
|
+
slideChange = new EventEmitter();
|
|
30
|
+
isDraggingPointer = false;
|
|
31
|
+
dragStartX = 0;
|
|
32
|
+
dragStartY = 0;
|
|
33
|
+
lastIndex = -1;
|
|
34
|
+
lastSlidesRef = null;
|
|
35
|
+
destroy$ = new Subject();
|
|
36
|
+
state$;
|
|
37
|
+
sliderHost;
|
|
38
|
+
constructor(engine, store, draggable, pagination, navigation, autoplay) {
|
|
39
|
+
this.engine = engine;
|
|
40
|
+
this.store = store;
|
|
41
|
+
this.draggable = draggable;
|
|
42
|
+
this.pagination = pagination;
|
|
43
|
+
this.navigation = navigation;
|
|
44
|
+
this.autoplay = autoplay;
|
|
45
|
+
}
|
|
46
|
+
ngOnInit() {
|
|
47
|
+
this.state$ = this.store.view$;
|
|
48
|
+
this.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {
|
|
49
|
+
if (state.currentSlide !== this.lastIndex) {
|
|
50
|
+
this.lastIndex = state.currentSlide;
|
|
51
|
+
this.slideChange.emit(state.currentSlide);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
this.lastSlidesRef = this.config?.slides ?? null;
|
|
55
|
+
this.resolvePlugins(this.config);
|
|
56
|
+
}
|
|
57
|
+
ngAfterViewInit() {
|
|
58
|
+
if (this.sliderHost?.nativeElement) {
|
|
59
|
+
this.engine.attachContainer(this.sliderHost.nativeElement);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
ngOnChanges(changes) {
|
|
63
|
+
if (!changes["config"] || !this.config)
|
|
64
|
+
return;
|
|
65
|
+
const newSlidesRef = this.config.slides ?? null;
|
|
66
|
+
if (newSlidesRef !== this.lastSlidesRef) {
|
|
67
|
+
this.lastSlidesRef = newSlidesRef;
|
|
68
|
+
this.engine.destroy();
|
|
69
|
+
this.resolvePlugins(this.config);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
ngOnDestroy() {
|
|
73
|
+
this.destroySlider();
|
|
74
|
+
}
|
|
75
|
+
goTo(index) {
|
|
76
|
+
this.engine.selectSlide(index); // add this line
|
|
77
|
+
//this.slideChange.emit(index);
|
|
78
|
+
}
|
|
79
|
+
destroySlider() {
|
|
80
|
+
this.destroy$.next();
|
|
81
|
+
this.destroy$.complete();
|
|
82
|
+
this.engine.destroy();
|
|
83
|
+
} // destroys plugins and clears store
|
|
84
|
+
onNext() {
|
|
85
|
+
this.engine.next();
|
|
86
|
+
}
|
|
87
|
+
onPrevious() {
|
|
88
|
+
this.engine.previous();
|
|
89
|
+
}
|
|
90
|
+
selectSlide(index) {
|
|
91
|
+
this.engine.selectSlide(index);
|
|
92
|
+
}
|
|
93
|
+
onRecalculate() {
|
|
94
|
+
this.engine.recalculate();
|
|
95
|
+
}
|
|
96
|
+
// Navigation
|
|
97
|
+
/** Expose navigation observables safely */
|
|
98
|
+
get canPrev$() {
|
|
99
|
+
if (!this.navigation) {
|
|
100
|
+
console.warn("Navigation plugin is not enabled.");
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return this.navigation.canPrev$;
|
|
104
|
+
}
|
|
105
|
+
get canNext$() {
|
|
106
|
+
if (!this.navigation) {
|
|
107
|
+
console.warn("Navigation plugin is not enabled.");
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return this.navigation.canNext$;
|
|
111
|
+
}
|
|
112
|
+
/** Expose next/prev methods */
|
|
113
|
+
next() {
|
|
114
|
+
this.navigation?.next();
|
|
115
|
+
}
|
|
116
|
+
prev() {
|
|
117
|
+
this.navigation?.prev();
|
|
118
|
+
}
|
|
119
|
+
/** Expose pagination observable */
|
|
120
|
+
get pager$() {
|
|
121
|
+
if (!this.pagination) {
|
|
122
|
+
console.warn("Pagination plugin is not enabled for this slider.");
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
return this.pagination.pager$;
|
|
126
|
+
}
|
|
127
|
+
/** Expose a goToSlide method */
|
|
128
|
+
goToSlide(index) {
|
|
129
|
+
this.pagination.goToSlide(index);
|
|
130
|
+
}
|
|
131
|
+
// Handle Pointers
|
|
132
|
+
onPointerDown(event) {
|
|
133
|
+
// Only start drag if not clicking a nav button
|
|
134
|
+
if (event.target.closest(".nav-btn")) {
|
|
135
|
+
return; // ignore
|
|
136
|
+
}
|
|
137
|
+
this.dragStartX = event.clientX;
|
|
138
|
+
this.dragStartY = event.clientY;
|
|
139
|
+
this.isDraggingPointer = false;
|
|
140
|
+
// Do not capture yet; wait until movement exceeds threshold
|
|
141
|
+
this.engine.handleDragStart(event);
|
|
142
|
+
}
|
|
143
|
+
onPointerMove(event) {
|
|
144
|
+
const dx = Math.abs(event.clientX - this.dragStartX);
|
|
145
|
+
const dy = Math.abs(event.clientY - this.dragStartY);
|
|
146
|
+
if (!this.isDraggingPointer && (dx > 5 || dy > 5)) {
|
|
147
|
+
this.isDraggingPointer = true;
|
|
148
|
+
// Now start capturing pointer so dragging works outside the slider bounds
|
|
149
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
150
|
+
}
|
|
151
|
+
if (this.isDraggingPointer) {
|
|
152
|
+
this.engine.handleDragMove(event);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
onPointerUp(event) {
|
|
156
|
+
if (!event)
|
|
157
|
+
return;
|
|
158
|
+
if (!this.isDraggingPointer) {
|
|
159
|
+
const target = event.target;
|
|
160
|
+
// Only select the slide if click is not on an interactive child
|
|
161
|
+
const slideEl = target.closest(".slide");
|
|
162
|
+
if (slideEl && !target.closest("button, video, a")) {
|
|
163
|
+
const indexAttr = slideEl.getAttribute("data-index");
|
|
164
|
+
const index = indexAttr ? parseInt(indexAttr, 10) : null;
|
|
165
|
+
if (index !== null)
|
|
166
|
+
this.engine.selectSlide(index);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
this.engine.handleDragEnd();
|
|
170
|
+
this.isDraggingPointer = false;
|
|
171
|
+
// Release pointer capture if it was captured
|
|
172
|
+
try {
|
|
173
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
174
|
+
}
|
|
175
|
+
catch { }
|
|
176
|
+
}
|
|
177
|
+
resolvePlugins(config) {
|
|
178
|
+
const runtimePlugins = [];
|
|
179
|
+
const cfg = config.plugins ?? {}; // <-- safe fallback
|
|
180
|
+
if (cfg.draggable)
|
|
181
|
+
runtimePlugins.push(this.draggable);
|
|
182
|
+
if (cfg.pagination)
|
|
183
|
+
runtimePlugins.push(this.pagination);
|
|
184
|
+
if (cfg.navigation)
|
|
185
|
+
runtimePlugins.push(this.navigation);
|
|
186
|
+
if (cfg.autoplay) {
|
|
187
|
+
this.autoplay.setConfig(cfg.autoplay);
|
|
188
|
+
runtimePlugins.push(this.autoplay);
|
|
189
|
+
}
|
|
190
|
+
this.engine.init({ ...config, plugins: undefined }, runtimePlugins);
|
|
191
|
+
if (cfg.navigation) {
|
|
192
|
+
setTimeout(() => this.navigation?.updateArrows?.());
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, deps: [{ token: i1.SliderEngine }, { token: i2.SliderStore }, { token: i3.SliderDraggablePlugin }, { token: i4.SliderPaginationPlugin }, { token: i5.SliderNavigationPlugin }, { token: i6.SliderAutoplayPlugin }], target: i0.ɵɵFactoryTarget.Component });
|
|
196
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SimpleSliderComponent, isStandalone: true, selector: "app-simple-slider", inputs: { config: "config", slideTemplate: "slideTemplate", navigationTemplate: "navigationTemplate", paginationTemplate: "paginationTemplate" }, outputs: { slideChange: "slideChange" }, providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], viewQueries: [{ propertyName: "sliderHost", first: true, predicate: ["sliderHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
197
|
+
}
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, decorators: [{
|
|
199
|
+
type: Component,
|
|
200
|
+
args: [{ selector: "app-simple-slider", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n" }]
|
|
201
|
+
}], ctorParameters: () => [{ type: i1.SliderEngine }, { type: i2.SliderStore }, { type: i3.SliderDraggablePlugin }, { type: i4.SliderPaginationPlugin }, { type: i5.SliderNavigationPlugin }, { type: i6.SliderAutoplayPlugin }], propDecorators: { config: [{
|
|
202
|
+
type: Input
|
|
203
|
+
}], slideTemplate: [{
|
|
204
|
+
type: Input
|
|
205
|
+
}], navigationTemplate: [{
|
|
206
|
+
type: Input
|
|
207
|
+
}], paginationTemplate: [{
|
|
208
|
+
type: Input
|
|
209
|
+
}], slideChange: [{
|
|
210
|
+
type: Output
|
|
211
|
+
}], sliderHost: [{
|
|
212
|
+
type: ViewChild,
|
|
213
|
+
args: ["sliderHost", { static: false }]
|
|
214
|
+
}] } });
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUd2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFJTixTQUFTLEVBR1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7QUFZL0MsTUFBTSxPQUFPLHFCQUFxQjtJQWtCdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdEJELE1BQU0sQ0FBZ0I7SUFDdEIsYUFBYSxDQUFvQjtJQUNqQyxrQkFBa0IsQ0FBb0I7SUFDdEMsa0JBQWtCLENBQW9CO0lBQ3JDLFdBQVcsR0FBRyxJQUFJLFlB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Y0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLGFBQ1osQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDOzRQQUcxSCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBVXFDLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNsaWRlclZpZXdTdGF0ZSB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLXN0YXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNsaWRlckNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTbGlkZXJFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lL3NsaWRlci1lbmdpbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJTdG9yZSB9IGZyb20gXCIuLi9zdG9yZS9zbGlkZXItc3RvcmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJBdXRvcGxheVBsdWdpbiB9IGZyb20gXCIuLi9wbHVnaW5zL2F1dG9wbGF5L2F1dG9wbGF5LnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJEcmFnZ2FibGVQbHVnaW4gfSBmcm9tIFwiLi4vcGx1Z2lucy9kcmFnZ2FibGUvZHJhZ2dhYmxlLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJOYXZpZ2F0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJQYWdpbmF0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBQYWdlciwgU2xpZGVyUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvc2xpZGVyLXBsdWdpblwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtc2ltcGxlLXNsaWRlclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtTbGlkZXJFbmdpbmUsIFNsaWRlclN0b3JlLCBTbGlkZXJEcmFnZ2FibGVQbHVnaW4sIFNsaWRlclBhZ2luYXRpb25QbHVnaW4sIFNsaWRlck5hdmlnYXRpb25QbHVnaW4sIFNsaWRlckF1dG9wbGF5UGx1Z2luXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFNsaWRlckNvbmZpZztcclxuICBASW5wdXQoKSBzbGlkZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQE91dHB1dCgpIHNsaWRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIHByaXZhdGUgaXNEcmFnZ2luZ1BvaW50ZXIgPSBmYWxzZTtcclxuICBwcml2YXRlIGRyYWdTdGFydFggPSAwO1xyXG4gIHByaXZhdGUgZHJhZ1N0YXJ0WSA9IDA7XHJcbiAgcHJpdmF0ZSBsYXN0SW5kZXggPSAtMTtcclxuICBwcml2YXRlIGxhc3RTbGlkZXNSZWY6IGFueVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHN0YXRlJCE6IE9ic2VydmFibGU8U2xpZGVyVmlld1N0YXRlPjtcclxuICBAVmlld0NoaWxkKFwic2xpZGVySG9zdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2xpZGVySG9zdD86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW5naW5lOiBTbGlkZXJFbmdpbmUsXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTbGlkZXJTdG9yZSxcclxuICAgIHByaXZhdGUgZHJhZ2dhYmxlOiBTbGlkZXJEcmFnZ2FibGVQbHVnaW4sXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb246IFNsaWRlclBhZ2luYXRpb25QbHVnaW4sXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb246IFNsaWRlck5hdmlnYXRpb25QbHVnaW4sXHJcbiAgICBwcml2YXRlIGF1dG9wbGF5OiBTbGlkZXJBdXRvcGxheVBsdWdpbixcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnN0b3JlLnZpZXckO1xyXG5cclxuICAgIHRoaXMuc3RhdGUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XHJcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50U2xpZGUgIT09IHRoaXMubGFzdEluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5sYXN0SW5kZXggPSBzdGF0ZS5jdXJyZW50U2xpZGU7XHJcbiAgICAgICAgdGhpcy5zbGlkZUNoYW5nZS5lbWl0KHN0YXRlLmN1cnJlbnRTbGlkZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5sYXN0U2xpZGVzUmVmID0gdGhpcy5jb25maWc/LnNsaWRlcyA/PyBudWxsO1xyXG4gICAgdGhpcy5yZXNvbHZlUGx1Z2lucyh0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNsaWRlckhvc3Q/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lbmdpbmUuYXR0YWNoQ29udGFpbmVyKHRoaXMuc2xpZGVySG9zdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICghY2hhbmdlc1tcImNvbmZpZ1wiXSB8fCAhdGhpcy5jb25maWcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdTbGlkZXNSZWYgPSB0aGlzLmNvbmZpZy5zbGlkZXMgPz8gbnVsbDtcclxuXHJcbiAgICBpZiAobmV3U2xpZGVzUmVmICE9PSB0aGlzLmxhc3RTbGlkZXNSZWYpIHtcclxuICAgICAgdGhpcy5sYXN0U2xpZGVzUmVmID0gbmV3U2xpZGVzUmVmO1xyXG4gICAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMucmVzb2x2ZVBsdWdpbnModGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveVNsaWRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpOyAvLyBhZGQgdGhpcyBsaW5lXHJcbiAgICAvL3RoaXMuc2xpZGVDaGFuZ2UuZW1pdChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95U2xpZGVyKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgfSAvLyBkZXN0cm95cyBwbHVnaW5zIGFuZCBjbGVhcnMgc3RvcmVcclxuXHJcbiAgb25OZXh0KCkge1xyXG4gICAgdGhpcy5lbmdpbmUubmV4dCgpO1xyXG4gIH1cclxuICBvblByZXZpb3VzKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucHJldmlvdXMoKTtcclxuICB9XHJcbiAgc2VsZWN0U2xpZGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuICBvblJlY2FsY3VsYXRlKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcbiAgLy8gTmF2aWdhdGlvblxyXG4gIC8qKiBFeHBvc2UgbmF2aWdhdGlvbiBvYnNlcnZhYmxlcyBzYWZlbHkgKi9cclxuICBnZXQgY2FuUHJldiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuUHJldiQ7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuTmV4dCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuTmV4dCQ7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIG5leHQvcHJldiBtZXRob2RzICovXHJcbiAgcHVibGljIG5leHQoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb24/Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmV2KCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uPy5wcmV2KCk7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIHBhZ2luYXRpb24gb2JzZXJ2YWJsZSAqL1xyXG4gIGdldCBwYWdlciQoKTogT2JzZXJ2YWJsZTxQYWdlciB8IG51bGw+IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJQYWdpbmF0aW9uIHBsdWdpbiBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBzbGlkZXIuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24ucGFnZXIkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4cG9zZSBhIGdvVG9TbGlkZSBtZXRob2QgKi9cclxuICBwdWJsaWMgZ29Ub1NsaWRlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbi5nb1RvU2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIFBvaW50ZXJzXHJcblxyXG4gIG9uUG9pbnRlckRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgLy8gT25seSBzdGFydCBkcmFnIGlmIG5vdCBjbGlja2luZyBhIG5hdiBidXR0b25cclxuICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwiLm5hdi1idG5cIikpIHtcclxuICAgICAgcmV0dXJuOyAvLyBpZ25vcmVcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLmRyYWdTdGFydFkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nUG9pbnRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8vIERvIG5vdCBjYXB0dXJlIHlldDsgd2FpdCB1bnRpbCBtb3ZlbWVudCBleGNlZWRzIHRocmVzaG9sZFxyXG4gICAgdGhpcy5lbmdpbmUuaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uUG9pbnRlck1vdmUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgZHggPSBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gdGhpcy5kcmFnU3RhcnRYKTtcclxuICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMoZXZlbnQuY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdQb2ludGVyICYmIChkeCA+IDUgfHwgZHkgPiA1KSkge1xyXG4gICAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIE5vdyBzdGFydCBjYXB0dXJpbmcgcG9pbnRlciBzbyBkcmFnZ2luZyB3b3JrcyBvdXRzaWRlIHRoZSBzbGlkZXIgYm91bmRzXHJcbiAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmdQb2ludGVyKSB7XHJcbiAgICAgIHRoaXMuZW5naW5lLmhhbmRsZURyYWdNb3ZlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUG9pbnRlclVwKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGlmICghZXZlbnQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgLy8gT25seSBzZWxlY3QgdGhlIHNsaWRlIGlmIGNsaWNrIGlzIG5vdCBvbiBhbiBpbnRlcmFjdGl2ZSBjaGlsZFxyXG4gICAgICBjb25zdCBzbGlkZUVsID0gdGFyZ2V0LmNsb3Nlc3QoXCIuc2xpZGVcIik7XHJcbiAgICAgIGlmIChzbGlkZUVsICYmICF0YXJnZXQuY2xvc2VzdChcImJ1dHRvbiwgdmlkZW8sIGFcIikpIHtcclxuICAgICAgICBjb25zdCBpbmRleEF0dHIgPSBzbGlkZUVsLmdldEF0dHJpYnV0ZShcImRhdGEtaW5kZXhcIik7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleEF0dHIgPyBwYXJzZUludChpbmRleEF0dHIsIDEwKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKSB0aGlzLmVuZ2luZS5zZWxlY3RTbGlkZShpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVuZ2luZS5oYW5kbGVEcmFnRW5kKCk7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gZmFsc2U7XHJcblxyXG4gICAgLy8gUmVsZWFzZSBwb2ludGVyIGNhcHR1cmUgaWYgaXQgd2FzIGNhcHR1cmVkXHJcbiAgICB0cnkge1xyXG4gICAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcbiAgICB9IGNhdGNoIHt9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVQbHVnaW5zKGNvbmZpZzogU2xpZGVyQ29uZmlnKSB7XHJcbiAgICBjb25zdCBydW50aW1lUGx1Z2luczogU2xpZGVyUGx1Z2luW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjZmcgPSBjb25maWcucGx1Z2lucyA/PyB7fTsgLy8gPC0tIHNhZmUgZmFsbGJhY2tcclxuXHJcbiAgICBpZiAoY2ZnLmRyYWdnYWJsZSkgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmRyYWdnYWJsZSk7XHJcbiAgICBpZiAoY2ZnLnBhZ2luYXRpb24pIHJ1bnRpbWVQbHVnaW5zLnB1c2godGhpcy5wYWdpbmF0aW9uKTtcclxuICAgIGlmIChjZmcubmF2aWdhdGlvbikgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLm5hdmlnYXRpb24pO1xyXG5cclxuICAgIGlmIChjZmcuYXV0b3BsYXkpIHtcclxuICAgICAgdGhpcy5hdXRvcGxheS5zZXRDb25maWcoY2ZnLmF1dG9wbGF5KTtcclxuICAgICAgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmF1dG9wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVuZ2luZS5pbml0KHsgLi4uY29uZmlnLCBwbHVnaW5zOiB1bmRlZmluZWQgfSwgcnVudGltZVBsdWdpbnMpO1xyXG5cclxuICAgIGlmIChjZmcubmF2aWdhdGlvbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2aWdhdGlvbj8udXBkYXRlQXJyb3dzPy4oKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwic2xpZGVyXCJcclxuICAgICNzbGlkZXJIb3N0XHJcbiAgICBbY2xhc3Muc2xpZGVyLXZlcnRpY2FsXT1cInN0YXRlLnZlcnRpY2FsXCJcclxuICAgIFtjbGFzcy5zbGlkZXItZHJhZ2dhYmxlXT1cInN0YXRlLmlzRHJhZ2dpbmdcIlxyXG4gICAgW2NsYXNzLnNsaWRlci0tbWFpbl09XCIhY29uZmlnLmlzVGh1bWJzXCJcclxuICAgIFtjbGFzcy5zbGlkZXItLXRodW1ic109XCJjb25maWcuaXNUaHVtYnNcIlxyXG4gICAgKm5nSWY9XCJzdGF0ZS52aXNpYmxlU2xpZGVzPy5sZW5ndGggPiAwICYmIHN0YXRlLmlzVmlzaWJsZVwiXHJcbiAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkZXZlbnQpXCJcclxuICAgIChwb2ludGVybW92ZSk9XCJvblBvaW50ZXJNb3ZlKCRldmVudClcIlxyXG4gICAgKHBvaW50ZXJ1cCk9XCJvblBvaW50ZXJVcCgkZXZlbnQpXCJcclxuICAgIChwb2ludGVyY2FuY2VsKT1cIm9uUG9pbnRlclVwKCRldmVudClcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJzbGlkZXJfX3dyYXBwZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgdHJhbnNmb3JtOiBzdGF0ZS50cmFuc2xhdGUsXHJcbiAgICAgICAgdHJhbnNpdGlvbjogZHJhZ2dhYmxlLmlzRHJhZ2dpbmdQb2ludGVyID8gJ25vbmUnIDogJ3RyYW5zZm9ybSAwLjNzIGVhc2UnLFxyXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAnZmxleC1kaXJlY3Rpb24nOiBzdGF0ZS52ZXJ0aWNhbCA/ICdjb2x1bW4nIDogJ3JvdycsXHJcbiAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IHN0YXRlLnZpc2libGVTbGlkZXM/Lmxlbmd0aCA8IHN0YXRlLnNsaWRlc1BlclZpZXcgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0JyxcclxuICAgICAgICBnYXA6IChzdGF0ZS5zbGlkZXNQZXJWaWV3ID4gMSA/IHN0YXRlLmdhcCB8fCAwIDogMCkgKyAncHgnLFxyXG4gICAgICB9XCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgc2xpZGUgb2Ygc3RhdGUudmlzaWJsZVNsaWRlczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgY2xhc3M9XCJzbGlkZVwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS1pbmRleF09XCJpXCJcclxuICAgICAgICBbY2xhc3Muc2xpZGUtLWN1cnJlbnRdPVwic3RhdGUuc2VsZWN0ZWRTbGlkZSA9PT0gaVwiXHJcbiAgICAgICAgW3N0eWxlLmZsZXhdPVwiXHJcbiAgICAgICAgICAhY29uZmlnLmlzVGh1bWJzXHJcbiAgICAgICAgICAgID8gJzAgMCBjYWxjKCcgK1xyXG4gICAgICAgICAgICAgIDEwMCAvIHN0YXRlLnNsaWRlc1BlclZpZXcgK1xyXG4gICAgICAgICAgICAgICclIC0gJyArXHJcbiAgICAgICAgICAgICAgKChzdGF0ZS5nYXAgfHwgMCkgKiAoc3RhdGUuc2xpZGVzUGVyVmlldyAtIDEpKSAvIHN0YXRlLnNsaWRlc1BlclZpZXcgK1xyXG4gICAgICAgICAgICAgICdweCknXHJcbiAgICAgICAgICAgIDogJzAgMCAnICsgdGh1bWJTaXplICsgJ3B4J1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbmZpZy5pc1RodW1icyA/IHRodW1iU2l6ZSArICdweCcgOiBudWxsXCJcclxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImNvbmZpZy5pc1RodW1icyA/IHRodW1iU2l6ZSArICdweCcgOiBudWxsXCJcclxuICAgICAgICAoY2xpY2spPVwiZW5naW5lLnNlbGVjdFNsaWRlKGkpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzbGlkZVRlbXBsYXRlID8gc2xpZGVUZW1wbGF0ZSA6IGRlZmF1bHRTbGlkZVRlbXBsYXRlOyBjb250ZXh0OiB7IHNsaWRlOiBzbGlkZSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { fromEvent, merge, Subject, auditTime, takeUntil } from "rxjs";
|
|
3
|
+
import { DEFAULT_CONFIG } from "../models/slider-config.model";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../store/slider-store.service";
|
|
6
|
+
export class SliderEngine {
|
|
7
|
+
store;
|
|
8
|
+
config;
|
|
9
|
+
plugins = [];
|
|
10
|
+
syncThumbsEngine;
|
|
11
|
+
// RX lifecycle
|
|
12
|
+
destroy$ = new Subject();
|
|
13
|
+
// Container-based breakpoints
|
|
14
|
+
containerEl;
|
|
15
|
+
ro;
|
|
16
|
+
measuredSlideSizePx;
|
|
17
|
+
constructor(store) {
|
|
18
|
+
this.store = store;
|
|
19
|
+
}
|
|
20
|
+
/* ---------------- Public API ---------------- */
|
|
21
|
+
init(config, plugins = []) {
|
|
22
|
+
this.config = { ...DEFAULT_CONFIG, ...config, plugins: { ...(config.plugins ?? {}) } };
|
|
23
|
+
this.plugins = plugins;
|
|
24
|
+
this.plugins.forEach((p) => p.init?.(this));
|
|
25
|
+
this.setupViewportSignals();
|
|
26
|
+
this.applyBreakpoint();
|
|
27
|
+
this.clampIndicesAfterLayoutChange();
|
|
28
|
+
this.recalculate();
|
|
29
|
+
}
|
|
30
|
+
/** Call this from the component once you have the slider host element */
|
|
31
|
+
attachContainer(el) {
|
|
32
|
+
this.containerEl = el;
|
|
33
|
+
// Observe container size changes (robust in grids/sidebars/tabs)
|
|
34
|
+
this.ro?.disconnect();
|
|
35
|
+
this.ro = new ResizeObserver(() => {
|
|
36
|
+
// We reuse the same debounced layout handler
|
|
37
|
+
this.onLayoutSignal();
|
|
38
|
+
});
|
|
39
|
+
this.ro.observe(el);
|
|
40
|
+
this.measureSlideSize();
|
|
41
|
+
// Apply immediately based on real container width
|
|
42
|
+
this.onLayoutSignal();
|
|
43
|
+
}
|
|
44
|
+
measureSlideSize() {
|
|
45
|
+
if (!this.containerEl)
|
|
46
|
+
return;
|
|
47
|
+
const firstSlide = this.containerEl.querySelector(".slide");
|
|
48
|
+
if (!firstSlide)
|
|
49
|
+
return;
|
|
50
|
+
const rect = firstSlide.getBoundingClientRect();
|
|
51
|
+
if (rect.width > 0)
|
|
52
|
+
this.measuredSlideSizePx = rect.width;
|
|
53
|
+
}
|
|
54
|
+
destroy() {
|
|
55
|
+
// Stop Rx streams
|
|
56
|
+
this.destroy$.next();
|
|
57
|
+
this.destroy$.complete();
|
|
58
|
+
// Disconnect ResizeObserver
|
|
59
|
+
this.ro?.disconnect();
|
|
60
|
+
this.ro = undefined;
|
|
61
|
+
this.containerEl = undefined;
|
|
62
|
+
// Plugin cleanup
|
|
63
|
+
this.plugins.forEach((p) => p.destroy?.());
|
|
64
|
+
this.plugins = [];
|
|
65
|
+
// Reset store
|
|
66
|
+
this.store.reset();
|
|
67
|
+
}
|
|
68
|
+
next() {
|
|
69
|
+
this.goTo(this.store.snapshot.currentSlide + this.slideStep());
|
|
70
|
+
this.plugins.forEach((p) => p.onNext?.());
|
|
71
|
+
}
|
|
72
|
+
previous() {
|
|
73
|
+
this.goTo(this.store.snapshot.currentSlide - this.slideStep());
|
|
74
|
+
this.plugins.forEach((p) => p.onPrevious?.());
|
|
75
|
+
}
|
|
76
|
+
getContainerEl() {
|
|
77
|
+
return this.containerEl;
|
|
78
|
+
}
|
|
79
|
+
selectSlide(index) {
|
|
80
|
+
const slidesPerView = this.store.snapshot.slidesPerView;
|
|
81
|
+
// 1️⃣ Mark selected
|
|
82
|
+
this.store.update({ selectedSlide: index });
|
|
83
|
+
// 2️⃣ Calculate page start
|
|
84
|
+
let pageStart = Math.floor(index / slidesPerView) * slidesPerView;
|
|
85
|
+
// 3️⃣ Clamp to maxStartIndex
|
|
86
|
+
pageStart = Math.min(pageStart, this.maxStartIndex);
|
|
87
|
+
// 4️⃣ If synced with thumbs, also clamp to their max index
|
|
88
|
+
if (this.syncThumbsEngine) {
|
|
89
|
+
const thumbMaxIndex = this.syncThumbsEngine.getMaxStartIndex();
|
|
90
|
+
pageStart = Math.min(pageStart, thumbMaxIndex);
|
|
91
|
+
}
|
|
92
|
+
// 5️⃣ Move main slider
|
|
93
|
+
if (pageStart !== this.store.snapshot.currentSlide) {
|
|
94
|
+
this.goToSlide(pageStart);
|
|
95
|
+
}
|
|
96
|
+
// 6️⃣ Notify plugins
|
|
97
|
+
this.plugins.forEach((p) => p.onSlideClick?.(index));
|
|
98
|
+
}
|
|
99
|
+
/* ---------------- Drag ---------------- */
|
|
100
|
+
handleDragStart(event) {
|
|
101
|
+
this.store.update({ isDragging: true });
|
|
102
|
+
this.plugins.forEach((p) => p.onDragStart?.(event));
|
|
103
|
+
}
|
|
104
|
+
handleDragMove(event) {
|
|
105
|
+
this.plugins.forEach((p) => p.onDragMove?.(event));
|
|
106
|
+
}
|
|
107
|
+
handleDragEnd() {
|
|
108
|
+
this.store.update({ isDragging: false });
|
|
109
|
+
this.plugins.forEach((p) => p.onDragEnd?.());
|
|
110
|
+
}
|
|
111
|
+
goTo(index) {
|
|
112
|
+
this.goToSlide(index); // reuse your existing private method
|
|
113
|
+
}
|
|
114
|
+
/* ---------------- Internals ---------------- */
|
|
115
|
+
goToSlide(index) {
|
|
116
|
+
const clamped = Math.max(0, Math.min(index, this.maxStartIndex));
|
|
117
|
+
// console.log("[Engine] goToSlide index:", index, "clamped:", clamped);
|
|
118
|
+
this.store.update({ currentSlide: clamped });
|
|
119
|
+
this.recalculate();
|
|
120
|
+
// NOTE: calling onSlideClick here is a bit semantically odd (since it’s not always a click),
|
|
121
|
+
// but I preserved your behavior.
|
|
122
|
+
this.plugins.forEach((p) => p.onSlideClick?.(index));
|
|
123
|
+
}
|
|
124
|
+
recalculate() {
|
|
125
|
+
if (this.store.snapshot.isDragging)
|
|
126
|
+
return; // skip during drag
|
|
127
|
+
const slides = this.config.slides ?? [];
|
|
128
|
+
const maxStartIndex = this.getMaxStartIndex();
|
|
129
|
+
const current = this.store.snapshot.currentSlide;
|
|
130
|
+
this.store.update({
|
|
131
|
+
visibleSlides: slides,
|
|
132
|
+
translate: this.translate(current),
|
|
133
|
+
pager: this.buildPager(),
|
|
134
|
+
maxStartIndex,
|
|
135
|
+
canPrev: current > 0,
|
|
136
|
+
canNext: current < maxStartIndex,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
translate(index) {
|
|
140
|
+
const axis = this.config.vertical ? "Y" : "X";
|
|
141
|
+
const containerSize = this.containerEl
|
|
142
|
+
? this.config.vertical
|
|
143
|
+
? this.containerEl.clientHeight
|
|
144
|
+
: this.containerEl.clientWidth
|
|
145
|
+
: this.config.vertical
|
|
146
|
+
? window.innerHeight
|
|
147
|
+
: window.innerWidth;
|
|
148
|
+
const gap = this.store.snapshot.gap ?? 0;
|
|
149
|
+
const spv = this.store.snapshot.slidesPerView;
|
|
150
|
+
const slideSize = this.config.isThumbs && this.measuredSlideSizePx
|
|
151
|
+
? this.measuredSlideSizePx
|
|
152
|
+
: spv > 0
|
|
153
|
+
? (containerSize - gap * (spv - 1)) / spv
|
|
154
|
+
: containerSize;
|
|
155
|
+
// move by "pageStart * (slideSize + gap)"
|
|
156
|
+
const offset = index * (slideSize + gap);
|
|
157
|
+
return `translate${axis}(-${offset}px)`;
|
|
158
|
+
}
|
|
159
|
+
/** Debounced layout signals for resize/orientation/container changes */
|
|
160
|
+
setupViewportSignals() {
|
|
161
|
+
// If you want "only after resizing stops", replace auditTime with debounceTime(120)
|
|
162
|
+
const resize$ = fromEvent(window, "resize", { passive: true });
|
|
163
|
+
const orientation$ = fromEvent(window, "orientationchange", { passive: true });
|
|
164
|
+
merge(resize$, orientation$)
|
|
165
|
+
.pipe(auditTime(80), // good compromise: responsive without over-recalc
|
|
166
|
+
takeUntil(this.destroy$))
|
|
167
|
+
.subscribe(() => this.onLayoutSignal());
|
|
168
|
+
}
|
|
169
|
+
onLayoutSignal() {
|
|
170
|
+
const beforeSlidesPerView = this.store.snapshot.slidesPerView;
|
|
171
|
+
const beforeVisible = this.store.snapshot.isVisible;
|
|
172
|
+
this.applyBreakpoint();
|
|
173
|
+
const afterSlidesPerView = this.store.snapshot.slidesPerView;
|
|
174
|
+
const afterVisible = this.store.snapshot.isVisible;
|
|
175
|
+
if (beforeSlidesPerView !== afterSlidesPerView || beforeVisible !== afterVisible) {
|
|
176
|
+
this.clampIndicesAfterLayoutChange();
|
|
177
|
+
}
|
|
178
|
+
this.measureSlideSize();
|
|
179
|
+
this.recalculate();
|
|
180
|
+
}
|
|
181
|
+
getBreakpointWidth() {
|
|
182
|
+
if (this.containerEl) {
|
|
183
|
+
// Prefer clientWidth (layout), fallback to rect width
|
|
184
|
+
return this.containerEl.clientWidth || this.containerEl.getBoundingClientRect().width || window.innerWidth;
|
|
185
|
+
}
|
|
186
|
+
return window.innerWidth;
|
|
187
|
+
}
|
|
188
|
+
applyBreakpoint() {
|
|
189
|
+
const width = this.getBreakpointWidth();
|
|
190
|
+
const bp = this.config.breakpoints;
|
|
191
|
+
let override;
|
|
192
|
+
let device = "desktop";
|
|
193
|
+
if (width < 768) {
|
|
194
|
+
override = bp?.mobile;
|
|
195
|
+
device = "mobile";
|
|
196
|
+
}
|
|
197
|
+
else if (width < 1024) {
|
|
198
|
+
override = bp?.tablet;
|
|
199
|
+
device = "tablet";
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
override = bp?.desktop;
|
|
203
|
+
device = "desktop";
|
|
204
|
+
}
|
|
205
|
+
// Merge overrides
|
|
206
|
+
this.config = { ...this.config, ...override };
|
|
207
|
+
this.store.update({
|
|
208
|
+
slidesPerView: this.config.slidesPerView,
|
|
209
|
+
gap: this.config.gap ?? 0, // ✅ NEW
|
|
210
|
+
isVisible: this.config.showOn?.[device] ?? true,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
clampIndicesAfterLayoutChange() {
|
|
214
|
+
const max = this.getMaxStartIndex();
|
|
215
|
+
const current = this.store.snapshot.currentSlide;
|
|
216
|
+
const selected = this.store.snapshot.selectedSlide;
|
|
217
|
+
const clampedCurrent = Math.max(0, Math.min(current, max));
|
|
218
|
+
const clampedSelected = selected === -1 ? -1 : Math.max(0, Math.min(selected, (this.config.slides?.length ?? 0) - 1));
|
|
219
|
+
this.store.update({
|
|
220
|
+
currentSlide: clampedCurrent,
|
|
221
|
+
selectedSlide: clampedSelected,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
buildPager() {
|
|
225
|
+
const totalSlides = this.config.slides.length;
|
|
226
|
+
const currentSlide = this.store.snapshot.selectedSlide !== -1 ? this.store.snapshot.selectedSlide : this.store.snapshot.currentSlide;
|
|
227
|
+
const maxVisibleDots = 5;
|
|
228
|
+
let start = Math.max(0, currentSlide - Math.floor(maxVisibleDots / 2));
|
|
229
|
+
let end = start + maxVisibleDots;
|
|
230
|
+
if (end > totalSlides) {
|
|
231
|
+
end = totalSlides;
|
|
232
|
+
start = Math.max(0, end - maxVisibleDots);
|
|
233
|
+
}
|
|
234
|
+
const visibleDots = Array.from({ length: end - start }, (_, i) => start + i);
|
|
235
|
+
const activeDotIndex = visibleDots.indexOf(currentSlide);
|
|
236
|
+
return {
|
|
237
|
+
currentPage: currentSlide,
|
|
238
|
+
totalPages: totalSlides,
|
|
239
|
+
visibleDots,
|
|
240
|
+
activeDotIndex,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
slideStep() {
|
|
244
|
+
return this.store.snapshot.slidesPerView;
|
|
245
|
+
}
|
|
246
|
+
get maxStartIndex() {
|
|
247
|
+
const total = this.config.slides?.length ?? 0;
|
|
248
|
+
return Math.max(0, total - this.store.snapshot.slidesPerView);
|
|
249
|
+
}
|
|
250
|
+
getMaxStartIndex() {
|
|
251
|
+
const total = this.config.slides?.length ?? 0;
|
|
252
|
+
const spv = this.store.snapshot.slidesPerView || 1;
|
|
253
|
+
return Math.max(0, total - spv);
|
|
254
|
+
}
|
|
255
|
+
/* -------- Plugin-safe API -------- */
|
|
256
|
+
getState() {
|
|
257
|
+
return this.store.snapshot;
|
|
258
|
+
}
|
|
259
|
+
getStateObservable() {
|
|
260
|
+
return this.store.view$;
|
|
261
|
+
}
|
|
262
|
+
setState(patch) {
|
|
263
|
+
this.store.update(patch);
|
|
264
|
+
}
|
|
265
|
+
getConfig() {
|
|
266
|
+
return this.config;
|
|
267
|
+
}
|
|
268
|
+
/** Link this slider to thumbs */
|
|
269
|
+
syncWithThumbs(thumbsEngine) {
|
|
270
|
+
this.syncThumbsEngine = thumbsEngine;
|
|
271
|
+
}
|
|
272
|
+
/* -------- Read-only helpers -------- */
|
|
273
|
+
getSlidesPerView() {
|
|
274
|
+
return this.store.snapshot.slidesPerView;
|
|
275
|
+
}
|
|
276
|
+
getCurrentSlide() {
|
|
277
|
+
return this.store.snapshot.currentSlide;
|
|
278
|
+
}
|
|
279
|
+
getSelectedSlide() {
|
|
280
|
+
return this.store.snapshot.selectedSlide;
|
|
281
|
+
}
|
|
282
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderEngine, deps: [{ token: i1.SliderStore }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
283
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderEngine });
|
|
284
|
+
}
|
|
285
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderEngine, decorators: [{
|
|
286
|
+
type: Injectable
|
|
287
|
+
}], ctorParameters: () => [{ type: i1.SliderStore }] });
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWVuZ2luZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVkZ2Utc2xpZGVyL3NyYy9saWIvZW5naW5lL3NsaWRlci1lbmdpbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBZ0IsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQU03RSxNQUFNLE9BQU8sWUFBWTtJQWNIO0lBYlosTUFBTSxDQUFnQjtJQUN0QixPQUFPLEdBQW1CLEVBQUUsQ0FBQztJQUM3QixnQkFBZ0IsQ0FBZ0I7SUFFeEMsZUFBZTtJQUNQLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXZDLDhCQUE4QjtJQUN0QixXQUFXLENBQWU7SUFDMUIsRUFBRSxDQUFrQjtJQUVwQixtQkFBbUIsQ0FBVTtJQUVyQyxZQUFvQixLQUFrQjtRQUFsQixVQUFLLEdBQUwsS0FBSyxDQUFhO0lBQUcsQ0FBQztJQUUxQyxrREFBa0Q7SUFFbEQsSUFBSSxDQUFDLE1BQW9CLEVBQUUsVUFBMEIsRUFBRTtRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENB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UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxjQUFjLENBQUMsWUFBMEI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQztJQUN2QyxDQUFDO0lBRUQseUNBQXlDO0lBRXpDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQzNDLENBQUM7d0dBblZVLFlBQVk7NEdBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0LCBhdWRpdFRpbWUsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNsaWRlckNvbmZpZywgREVGQVVMVF9DT05GSUcgfSBmcm9tIFwiLi4vbW9kZWxzL3NsaWRlci1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgU2xpZGVyVmlld1N0YXRlIH0gZnJvbSBcIi4uL21vZGVscy9zbGlkZXItc3RhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgU2xpZGVyUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvc2xpZGVyLXBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJTdG9yZSB9IGZyb20gXCIuLi9zdG9yZS9zbGlkZXItc3RvcmUuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2xpZGVyRW5naW5lIHtcclxuICBwcml2YXRlIGNvbmZpZyE6IFNsaWRlckNvbmZpZztcclxuICBwcml2YXRlIHBsdWdpbnM6IFNsaWRlclBsdWdpbltdID0gW107XHJcbiAgcHJpdmF0ZSBzeW5jVGh1bWJzRW5naW5lPzogU2xpZGVyRW5naW5lO1xyXG5cclxuICAvLyBSWCBsaWZlY3ljbGVcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgLy8gQ29udGFpbmVyLWJhc2VkIGJyZWFrcG9pbnRzXHJcbiAgcHJpdmF0ZSBjb250YWluZXJFbD86IEhUTUxFbGVtZW50O1xyXG4gIHByaXZhdGUgcm8/OiBSZXNpemVPYnNlcnZlcjtcclxuXHJcbiAgcHJpdmF0ZSBtZWFzdXJlZFNsaWRlU2l6ZVB4PzogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTbGlkZXJTdG9yZSkge31cclxuXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLSBQdWJsaWMgQVBJIC0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgaW5pdChjb25maWc6IFNsaWRlckNvbmZpZywgcGx1Z2luczogU2xpZGVyUGx1Z2luW10gPSBbXSkge1xyXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcsIHBsdWdpbnM6IHsgLi4uKGNvbmZpZy5wbHVnaW5zID8/IHt9KSB9IH07XHJcbiAgICB0aGlzLnBsdWdpbnMgPSBwbHVnaW5zO1xyXG5cclxuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKChwKSA9PiBwLmluaXQ/Lih0aGlzKSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFZpZXdwb3J0U2lnbmFscygpO1xyXG4gICAgdGhpcy5hcHBseUJyZWFrcG9pbnQoKTtcclxuICAgIHRoaXMuY2xhbXBJbmRpY2VzQWZ0ZXJMYXlvdXRDaGFuZ2UoKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcblxyXG4gIC8qKiBDYWxsIHRoaXMgZnJvbSB0aGUgY29tcG9uZW50IG9uY2UgeW91IGhhdmUgdGhlIHNsaWRlciBob3N0IGVsZW1lbnQgKi9cclxuICBhdHRhY2hDb250YWluZXIoZWw6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lckVsID0gZWw7XHJcblxyXG4gICAgLy8gT2JzZXJ2ZSBjb250YWluZXIgc2l6ZSBjaGFuZ2VzIChyb2J1c3QgaW4gZ3JpZHMvc2lkZWJhcnMvdGFicylcclxuICAgIHRoaXMucm8/LmRpc2Nvbm5lY3QoKTtcclxuICAgIHRoaXMucm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAvLyBXZSByZXVzZSB0aGUgc2FtZSBkZWJvdW5jZWQgbGF5b3V0IGhhbmRsZXJcclxuICAgICAgdGhpcy5vbkxheW91dFNpZ25hbCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvLm9ic2VydmUoZWwpO1xyXG5cclxuICAgIHRoaXMubWVhc3VyZVNsaWRlU2l6ZSgpO1xyXG4gICAgLy8gQXBwbHkgaW1tZWRpYXRlbHkgYmFzZWQgb24gcmVhbCBjb250YWluZXIgd2lkdGhcclxuICAgIHRoaXMub25MYXlvdXRTaWduYWwoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBtZWFzdXJlU2xpZGVTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lckVsKSByZXR1cm47XHJcbiAgICBjb25zdCBmaXJzdFNsaWRlID0gdGhpcy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIi5zbGlkZVwiKTtcclxuICAgIGlmICghZmlyc3RTbGlkZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgcmVjdCA9IGZpcnN0U2xpZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBpZiAocmVjdC53aWR0aCA+IDApIHRoaXMubWVhc3VyZWRTbGlkZVNpemVQeCA9IHJlY3Qud2lkdGg7XHJcbiAgfVxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICAvLyBTdG9wIFJ4IHN0cmVhbXNcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG5cclxuICAgIC8vIERpc2Nvbm5lY3QgUmVzaXplT2JzZXJ2ZXJcclxuICAgIHRoaXMucm8/LmRpc2Nvbm5lY3QoKTtcclxuICAgIHRoaXMucm8gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNvbnRhaW5lckVsID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIC8vIFBsdWdpbiBjbGVhbnVwXHJcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaCgocCkgPT4gcC5kZXN0cm95Py4oKSk7XHJcbiAgICB0aGlzLnBsdWdpbnMgPSBbXTtcclxuXHJcbiAgICAvLyBSZXNldCBzdG9yZVxyXG4gICAgdGhpcy5zdG9yZS5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dCgpIHtcclxuICAgIHRoaXMuZ29Ubyh0aGlzLnN0b3JlLnNuYXBzaG90LmN1cnJlbnRTbGlkZSArIHRoaXMuc2xpZGVTdGVwKCkpO1xyXG4gICAgdGhpcy5wbHVnaW5zLmZvckVhY2goKHApID0+IHAub25OZXh0Py4oKSk7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91cygpIHtcclxuICAgIHRoaXMuZ29Ubyh0aGlzLnN0b3JlLnNuYXBzaG90LmN1cnJlbnRTbGlkZSAtIHRoaXMuc2xpZGVTdGVwKCkpO1xyXG4gICAgdGhpcy5wbHVnaW5zLmZvckVhY2goKHApID0+IHAub25QcmV2aW91cz8uKCkpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0Q29udGFpbmVyRWwoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyRWw7XHJcbiAgfVxyXG4gIHNlbGVjdFNsaWRlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNsaWRlc1BlclZpZXcgPSB0aGlzLnN0b3JlLnNuYXBzaG90LnNsaWRlc1BlclZpZXc7XHJcblxyXG4gICAgLy8gMe+4j+KDoyBNYXJrIHNlbGVjdGVkXHJcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7IHNlbGVjdGVkU2xpZGU6IGluZGV4IH0pO1xyXG5cclxuICAgIC8vIDLvuI/ig6MgQ2FsY3VsYXRlIHBhZ2Ugc3RhcnRcclxuICAgIGxldCBwYWdlU3RhcnQgPSBNYXRoLmZsb29yKGluZGV4IC8gc2xpZGVzUGVyVmlldykgKiBzbGlkZXNQZXJWaWV3O1xyXG5cclxuICAgIC8vIDPvuI/ig6MgQ2xhbXAgdG8gbWF4U3RhcnRJbmRleFxyXG4gICAgcGFnZVN0YXJ0ID0gTWF0aC5taW4ocGFnZVN0YXJ0LCB0aGlzLm1heFN0YXJ0SW5kZXgpO1xyXG5cclxuICAgIC8vIDTvuI/ig6MgSWYgc3luY2VkIHdpdGggdGh1bWJzLCBhbHNvIGNsYW1wIHRvIHRoZWlyIG1heCBpbmRleFxyXG4gICAgaWYgKHRoaXMuc3luY1RodW1ic0VuZ2luZSkge1xyXG4gICAgICBjb25zdCB0aHVtYk1heEluZGV4ID0gdGhpcy5zeW5jVGh1bWJzRW5naW5lLmdldE1heFN0YXJ0SW5kZXgoKTtcclxuICAgICAgcGFnZVN0YXJ0ID0gTWF0aC5taW4ocGFnZVN0YXJ0LCB0aHVtYk1heEluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA177iP4oOjIE1vdmUgbWFpbiBzbGlkZXJcclxuICAgIGlmIChwYWdlU3RhcnQgIT09IHRoaXMuc3RvcmUuc25hcHNob3QuY3VycmVudFNsaWRlKSB7XHJcbiAgICAgIHRoaXMuZ29Ub1NsaWRlKHBhZ2VTdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gNu+4j+KDoyBOb3RpZnkgcGx1Z2luc1xyXG4gICAgdGhpcy5wbHVnaW5zLmZvckVhY2goKHApID0+IHAub25TbGlkZUNsaWNrPy4oaW5kZXgpKTtcclxuICB9XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0gRHJhZyAtLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gIGhhbmRsZURyYWdTdGFydChldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7IGlzRHJhZ2dpbmc6IHRydWUgfSk7XHJcbiAgICB0aGlzLnBsdWdpbnMuZm9yRWFjaCgocCkgPT4gcC5vbkRyYWdTdGFydD8uKGV2ZW50KSk7XHJcbiAgfVxyXG4gIGhhbmRsZURyYWdNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKChwKSA9PiBwLm9uRHJhZ01vdmU/LihldmVudCkpO1xyXG4gIH1cclxuICBoYW5kbGVEcmFnRW5kKCkge1xyXG4gICAgdGhpcy5zdG9yZS51cGRhdGUoeyBpc0RyYWdnaW5nOiBmYWxzZSB9KTtcclxuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKChwKSA9PiBwLm9uRHJhZ0VuZD8uKCkpO1xyXG4gIH1cclxuICBwdWJsaWMgZ29UbyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmdvVG9TbGlkZShpbmRleCk7IC8vIHJldXNlIHlvdXIgZXhpc3RpbmcgcHJpdmF0ZSBtZXRob2RcclxuICB9XHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLSBJbnRlcm5hbHMgLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICBwcml2YXRlIGdvVG9TbGlkZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIHRoaXMubWF4U3RhcnRJbmRleCkpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJbRW5naW5lXSBnb1RvU2xpZGUgaW5kZXg6XCIsIGluZGV4LCBcImNsYW1wZWQ6XCIsIGNsYW1wZWQpO1xyXG5cclxuICAgIHRoaXMuc3RvcmUudXBkYXRlKHsgY3VycmVudFNsaWRlOiBjbGFtcGVkIH0pO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZSgpO1xyXG5cclxuICAgIC8vIE5PVEU6IGNhbGxpbmcgb25TbGlkZUNsaWNrIGhlcmUgaXMgYSBiaXQgc2VtYW50aWNhbGx5IG9kZCAoc2luY2UgaXTigJlzIG5vdCBhbHdheXMgYSBjbGljayksXHJcbiAgICAvLyBidXQgSSBwcmVzZXJ2ZWQgeW91ciBiZWhhdmlvci5cclxuICAgIHRoaXMucGx1Z2lucy5mb3JFYWNoKChwKSA9PiBwLm9uU2xpZGVDbGljaz8uKGluZGV4KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVjYWxjdWxhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5zdG9yZS5zbmFwc2hvdC5pc0RyYWdnaW5nKSByZXR1cm47IC8vIHNraXAgZHVyaW5nIGRyYWdcclxuICAgIGNvbnN0IHNsaWRlcyA9IHRoaXMuY29uZmlnLnNsaWRlcyA/PyBbXTtcclxuICAgIGNvbnN0IG1heFN0YXJ0SW5kZXggPSB0aGlzLmdldE1heFN0YXJ0SW5kZXgoKTtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0b3JlLnNuYXBzaG90LmN1cnJlbnRTbGlkZTtcclxuXHJcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XHJcbiAgICAgIHZpc2libGVTbGlkZXM6IHNsaWRlcyxcclxuICAgICAgdHJhbnNsYXRlOiB0aGlzLnRyYW5zbGF0ZShjdXJyZW50KSxcclxuICAgICAgcGFnZXI6IHRoaXMuYnVpbGRQYWdlcigpLFxyXG4gICAgICBtYXhTdGFydEluZGV4LFxyXG4gICAgICBjYW5QcmV2OiBjdXJyZW50ID4gMCxcclxuICAgICAgY2FuTmV4dDogY3VycmVudCA8IG1heFN0YXJ0SW5kZXgsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYXhpcyA9IHRoaXMuY29uZmlnLnZlcnRpY2FsID8gXCJZXCIgOiBcIlhcIjtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXJTaXplID0gdGhpcy5jb250YWluZXJFbFxyXG4gICAgICA/IHRoaXMuY29uZmlnLnZlcnRpY2FsXHJcbiAgICAgICAgPyB0aGlzLmNvbnRhaW5lckVsLmNsaWVudEhlaWdodFxyXG4gICAgICAgIDogdGhpcy5jb250YWluZXJFbC5jbGllbnRXaWR0aFxyXG4gICAgICA6IHRoaXMuY29uZmlnLnZlcnRpY2FsXHJcbiAgICAgICAgPyB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgICA6IHdpbmRvdy5pbm5lcldpZHRoO1xyXG5cclxuICAgIGNvbnN0IGdhcCA9IHRoaXMuc3RvcmUuc25hcHNob3QuZ2FwID8/IDA7XHJcblxyXG4gICAgY29uc3Qgc3B2ID0gdGhpcy5zdG9yZS5zbmFwc2hvdC5zbGlkZXNQZXJWaWV3O1xyXG4gICAgY29uc3Qgc2xpZGVTaXplID1cclxuICAgICAgdGhpcy5jb25maWcuaXNUaHVtYnMgJiYgdGhpcy5tZWFzdXJlZFNsaWRlU2l6ZVB4XHJcbiAgICAgICAgPyB0aGlzLm1lYXN1cmVkU2xpZGVTaXplUHhcclxuICAgICAgICA6IHNwdiA+IDBcclxuICAgICAgICAgID8gKGNvbnRhaW5lclNpemUgLSBnYXAgKiAoc3B2IC0gMSkpIC8gc3B2XHJcbiAgICAgICAgICA6IGNvbnRhaW5lclNpemU7XHJcblxyXG4gICAgLy8gbW92ZSBieSBcInBhZ2VTdGFydCAqIChzbGlkZVNpemUgKyBnYXApXCJcclxuICAgIGNvbnN0IG9mZnNldCA9IGluZGV4ICogKHNsaWRlU2l6ZSArIGdhcCk7XHJcblxyXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUke2F4aXN9KC0ke29mZnNldH1weClgO1xyXG4gIH1cclxuXHJcbiAgLyoqIERlYm91bmNlZCBsYXlvdXQgc2lnbmFscyBmb3IgcmVzaXplL29yaWVudGF0aW9uL2NvbnRhaW5lciBjaGFuZ2VzICovXHJcbiAgcHJpdmF0ZSBzZXR1cFZpZXdwb3J0U2lnbmFscygpIHtcclxuICAgIC8vIElmIHlvdSB3YW50IFwib25seSBhZnRlciByZXNpemluZyBzdG9wc1wiLCByZXBsYWNlIGF1ZGl0VGltZSB3aXRoIGRlYm91bmNlVGltZSgxMjApXHJcbiAgICBjb25zdCByZXNpemUkID0gZnJvbUV2ZW50KHdpbmRvdywgXCJyZXNpemVcIiwgeyBwYXNzaXZlOiB0cnVlIH0gYXMgYW55KTtcclxuICAgIGNvbnN0IG9yaWVudGF0aW9uJCA9IGZyb21FdmVudCh3aW5kb3csIFwib3JpZW50YXRpb25jaGFuZ2VcIiwgeyBwYXNzaXZlOiB0cnVlIH0gYXMgYW55KTtcclxuXHJcbiAgICBtZXJnZShyZXNpemUkLCBvcmllbnRhdGlvbiQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGF1ZGl0VGltZSg4MCksIC8vIGdvb2QgY29tcHJvbWlzZTogcmVzcG9uc2l2ZSB3aXRob3V0IG92ZXItcmVjYWxjXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkxheW91dFNpZ25hbCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25MYXlvdXRTaWduYWwoKSB7XHJcbiAgICBjb25zdCBiZWZvcmVTbGlkZXNQZXJWaWV3ID0gdGhpcy5zdG9yZS5zbmFwc2hvdC5zbGlkZXNQZXJWaWV3O1xyXG4gICAgY29uc3QgYmVmb3JlVmlzaWJsZSA9IHRoaXMuc3RvcmUuc25hcHNob3QuaXNWaXNpYmxlO1xyXG5cclxuICAgIHRoaXMuYXBwbHlCcmVha3BvaW50KCk7XHJcblxyXG4gICAgY29uc3QgYWZ0ZXJTbGlkZXNQZXJWaWV3ID0gdGhpcy5zdG9yZS5zbmFwc2hvdC5zbGlkZXNQZXJWaWV3O1xyXG4gICAgY29uc3QgYWZ0ZXJWaXNpYmxlID0gdGhpcy5zdG9yZS5zbmFwc2hvdC5pc1Zpc2libGU7XHJcblxyXG4gICAgaWYgKGJlZm9yZVNsaWRlc1BlclZpZXcgIT09IGFmdGVyU2xpZGVzUGVyVmlldyB8fCBiZWZvcmVWaXNpYmxlICE9PSBhZnRlclZpc2libGUpIHtcclxuICAgICAgdGhpcy5jbGFtcEluZGljZXNBZnRlckxheW91dENoYW5nZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWVhc3VyZVNsaWRlU2l6ZSgpO1xyXG5cclxuICAgIHRoaXMucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QnJlYWtwb2ludFdpZHRoKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5jb250YWluZXJFbCkge1xyXG4gICAgICAvLyBQcmVmZXIgY2xpZW50V2lkdGggKGxheW91dCksIGZhbGxiYWNrIHRvIHJlY3Qgd2lkdGhcclxuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyRWwuY2xpZW50V2lkdGggfHwgdGhpcy5jb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlCcmVha3BvaW50KCkge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldEJyZWFrcG9pbnRXaWR0aCgpO1xyXG4gICAgY29uc3QgYnAgPSB0aGlzLmNvbmZpZy5icmVha3BvaW50cztcclxuXHJcbiAgICBsZXQgb3ZlcnJpZGU6IFBhcnRpYWw8U2xpZGVyQ29uZmlnPiB8IHVuZGVmaW5lZDtcclxuICAgIGxldCBkZXZpY2U6IFwibW9iaWxlXCIgfCBcInRhYmxldFwiIHwgXCJkZXNrdG9wXCIgPSBcImRlc2t0b3BcIjtcclxuXHJcbiAgICBpZiAod2lkdGggPCA3NjgpIHtcclxuICAgICAgb3ZlcnJpZGUgPSBicD8ubW9iaWxlO1xyXG4gICAgICBkZXZpY2UgPSBcIm1vYmlsZVwiO1xyXG4gICAgfSBlbHNlIGlmICh3aWR0aCA8IDEwMjQpIHtcclxuICAgICAgb3ZlcnJpZGUgPSBicD8udGFibGV0O1xyXG4gICAgICBkZXZpY2UgPSBcInRhYmxldFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3ZlcnJpZGUgPSBicD8uZGVza3RvcDtcclxuICAgICAgZGV2aWNlID0gXCJkZXNrdG9wXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWVyZ2Ugb3ZlcnJpZGVzXHJcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcsIC4uLm92ZXJyaWRlIH07XHJcblxyXG4gICAgdGhpcy5zdG9yZS51cGRhdGUoe1xyXG4gICAgICBzbGlkZXNQZXJWaWV3OiB0aGlzLmNvbmZpZy5zbGlkZXNQZXJWaWV3LFxyXG4gICAgICBnYXA6IHRoaXMuY29uZmlnLmdhcCA/PyAwLCAvLyDinIUgTkVXXHJcbiAgICAgIGlzVmlzaWJsZTogdGhpcy5jb25maWcuc2hvd09uPy5bZGV2aWNlXSA/PyB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsYW1wSW5kaWNlc0FmdGVyTGF5b3V0Q2hhbmdlKCkge1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhTdGFydEluZGV4KCk7XHJcblxyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RvcmUuc25hcHNob3QuY3VycmVudFNsaWRlO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnN0b3JlLnNuYXBzaG90LnNlbGVjdGVkU2xpZGU7XHJcblxyXG4gICAgY29uc3QgY2xhbXBlZEN1cnJlbnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50LCBtYXgpKTtcclxuICAgIGNvbnN0IGNsYW1wZWRTZWxlY3RlZCA9IHNlbGVjdGVkID09PSAtMSA/IC0xIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oc2VsZWN0ZWQsICh0aGlzLmNvbmZpZy5zbGlkZXM/Lmxlbmd0aCA/PyAwKSAtIDEpKTtcclxuXHJcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XHJcbiAgICAgIGN1cnJlbnRTbGlkZTogY2xhbXBlZEN1cnJlbnQsXHJcbiAgICAgIHNlbGVjdGVkU2xpZGU6IGNsYW1wZWRTZWxlY3RlZCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFBhZ2VyKCkge1xyXG4gICAgY29uc3QgdG90YWxTbGlkZXMgPSB0aGlzLmNvbmZpZy5zbGlkZXMubGVuZ3RoO1xyXG4gICAgY29uc3QgY3VycmVudFNsaWRlID0gdGhpcy5zdG9yZS5zbmFwc2hvdC5zZWxlY3RlZFNsaWRlICE9PSAtMSA/IHRoaXMuc3RvcmUuc25hcHNob3Quc2VsZWN0ZWRTbGlkZSA6IHRoaXMuc3RvcmUuc25hcHNob3QuY3VycmVudFNsaWRlO1xyXG5cclxuICAgIGNvbnN0IG1heFZpc2libGVEb3RzID0gNTtcclxuXHJcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgwLCBjdXJyZW50U2xpZGUgLSBNYXRoLmZsb29yKG1heFZpc2libGVEb3RzIC8gMikpO1xyXG4gICAgbGV0IGVuZCA9IHN0YXJ0ICsgbWF4VmlzaWJsZURvdHM7XHJcblxyXG4gICAgaWYgKGVuZCA+IHRvdGFsU2xpZGVzKSB7XHJcbiAgICAgIGVuZCA9IHRvdGFsU2xpZGVzO1xyXG4gICAgICBzdGFydCA9IE1hdGgubWF4KDAsIGVuZCAtIG1heFZpc2libGVEb3RzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aXNpYmxlRG90cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCAtIHN0YXJ0IH0sIChfLCBpKSA9PiBzdGFydCArIGkpO1xyXG4gICAgY29uc3QgYWN0aXZlRG90SW5kZXggPSB2aXNpYmxlRG90cy5pbmRleE9mKGN1cnJlbnRTbGlkZSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3VycmVudFBhZ2U6IGN1cnJlbnRTbGlkZSxcclxuICAgICAgdG90YWxQYWdlczogdG90YWxTbGlkZXMsXHJcbiAgICAgIHZpc2libGVEb3RzLFxyXG4gICAgICBhY3RpdmVEb3RJbmRleCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNsaWRlU3RlcCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLnNuYXBzaG90LnNsaWRlc1BlclZpZXc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBtYXhTdGFydEluZGV4KCkge1xyXG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmNvbmZpZy5zbGlkZXM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRvdGFsIC0gdGhpcy5zdG9yZS5zbmFwc2hvdC5zbGlkZXNQZXJWaWV3KTtcclxuICB9XHJcbiAgZ2V0TWF4U3RhcnRJbmRleCgpIHtcclxuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5jb25maWcuc2xpZGVzPy5sZW5ndGggPz8gMDtcclxuICAgIGNvbnN0IHNwdiA9IHRoaXMuc3RvcmUuc25hcHNob3Quc2xpZGVzUGVyVmlldyB8fCAxO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRvdGFsIC0gc3B2KTtcclxuICB9XHJcbiAgLyogLS0tLS0tLS0gUGx1Z2luLXNhZmUgQVBJIC0tLS0tLS0tICovXHJcblxyXG4gIGdldFN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc25hcHNob3Q7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZU9ic2VydmFibGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS52aWV3JDtcclxuICB9XHJcblxyXG4gIHNldFN0YXRlKHBhdGNoOiBQYXJ0aWFsPFNsaWRlclZpZXdTdGF0ZT4pIHtcclxuICAgIHRoaXMuc3RvcmUudXBkYXRlKHBhdGNoKTtcclxuICB9XHJcblxyXG4gIGdldENvbmZpZygpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKiBMaW5rIHRoaXMgc2xpZGVyIHRvIHRodW1icyAqL1xyXG4gIHN5bmNXaXRoVGh1bWJzKHRodW1ic0VuZ2luZTogU2xpZGVyRW5naW5lKSB7XHJcbiAgICB0aGlzLnN5bmNUaHVtYnNFbmdpbmUgPSB0aHVtYnNFbmdpbmU7XHJcbiAgfVxyXG5cclxuICAvKiAtLS0tLS0tLSBSZWFkLW9ubHkgaGVscGVycyAtLS0tLS0tLSAqL1xyXG5cclxuICBnZXRTbGlkZXNQZXJWaWV3KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbmFwc2hvdC5zbGlkZXNQZXJWaWV3O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudFNsaWRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbmFwc2hvdC5jdXJyZW50U2xpZGU7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZFNsaWRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zbmFwc2hvdC5zZWxlY3RlZFNsaWRlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const DEFAULT_CONFIG = {
|
|
2
|
+
slides: [],
|
|
3
|
+
slidesPerView: 1,
|
|
4
|
+
slidesToSlide: 1,
|
|
5
|
+
loop: 0,
|
|
6
|
+
vertical: false,
|
|
7
|
+
changeToClickedSlide: false,
|
|
8
|
+
isThumbs: false,
|
|
9
|
+
plugins: {
|
|
10
|
+
draggable: false,
|
|
11
|
+
pagination: false,
|
|
12
|
+
navigation: false,
|
|
13
|
+
autoplay: undefined,
|
|
14
|
+
},
|
|
15
|
+
gap: 0,
|
|
16
|
+
showOn: { mobile: true, tablet: true, desktop: true },
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGdlLXNsaWRlci9zcmMvbGliL21vZGVscy9zbGlkZXItY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9DQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLE1BQU0sRUFBRSxFQUFFO0lBQ1YsYUFBYSxFQUFFLENBQUM7SUFDaEIsYUFBYSxFQUFFLENBQUM7SUFDaEIsSUFBSSxFQUFFLENBQUM7SUFDUCxRQUFRLEVBQUUsS0FBSztJQUNmLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsUUFBUSxFQUFFLEtBQUs7SUFDZixPQUFPLEVBQUU7UUFDUCxTQUFTLEVBQUUsS0FBSztRQUNoQixVQUFVLEVBQUUsS0FBSztRQUNqQixVQUFVLEVBQUUsS0FBSztRQUNqQixRQUFRLEVBQUUsU0FBUztLQUNwQjtJQUNELEdBQUcsRUFBRSxDQUFDO0lBRU4sTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7Q0FDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXV0b3BsYXlQbHVnaW5Db25maWcge1xyXG4gIGRlbGF5PzogbnVtYmVyO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgU2xpZGVyUGx1Z2luQ29uZmlnIHtcclxuICBkcmFnZ2FibGU/OiBib29sZWFuO1xyXG4gIGF1dG9wbGF5PzogeyBkZWxheT86IG51bWJlciB9O1xyXG4gIG5hdmlnYXRpb24/OiBib29sZWFuO1xyXG4gIHBhZ2luYXRpb24/OiBib29sZWFuO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgU2xpZGVyQ29uZmlnIHtcclxuICBzbGlkZXM6IGFueVtdO1xyXG4gIHNsaWRlc1BlclZpZXc6IG51bWJlcjtcclxuICBzbGlkZXNUb1NsaWRlPzogbnVtYmVyO1xyXG4gIGxvb3A/OiAwIHwgMSB8IDI7XHJcbiAgdmVydGljYWw/OiBib29sZWFuO1xyXG4gIGNoYW5nZVRvQ2xpY2tlZFNsaWRlPzogYm9vbGVhbjtcclxuICBpc1RodW1icz86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBORVc6IGdhcCBiZXR3ZWVuIHNsaWRlcyBpbiBweCAqL1xyXG4gIGdhcD86IG51bWJlcjtcclxuXHJcbiAgYnJlYWtwb2ludHM/OiB7XHJcbiAgICBtb2JpbGU/OiBQYXJ0aWFsPFNsaWRlckNvbmZpZz47XHJcbiAgICB0YWJsZXQ/OiBQYXJ0aWFsPFNsaWRlckNvbmZpZz47XHJcbiAgICBkZXNrdG9wPzogUGFydGlhbDxTbGlkZXJDb25maWc+O1xyXG4gIH07XHJcblxyXG4gIHBsdWdpbnM/OiBTbGlkZXJQbHVnaW5Db25maWc7XHJcblxyXG4gIHNob3dPbj86IHtcclxuICAgIG1vYmlsZT86IGJvb2xlYW47XHJcbiAgICB0YWJsZXQ/OiBib29sZWFuO1xyXG4gICAgZGVza3RvcD86IGJvb2xlYW47XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09ORklHOiBTbGlkZXJDb25maWcgPSB7XHJcbiAgc2xpZGVzOiBbXSxcclxuICBzbGlkZXNQZXJWaWV3OiAxLFxyXG4gIHNsaWRlc1RvU2xpZGU6IDEsXHJcbiAgbG9vcDogMCxcclxuICB2ZXJ0aWNhbDogZmFsc2UsXHJcbiAgY2hhbmdlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxyXG4gIGlzVGh1bWJzOiBmYWxzZSxcclxuICBwbHVnaW5zOiB7XHJcbiAgICBkcmFnZ2FibGU6IGZhbHNlLFxyXG4gICAgcGFnaW5hdGlvbjogZmFsc2UsXHJcbiAgICBuYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgIGF1dG9wbGF5OiB1bmRlZmluZWQsXHJcbiAgfSxcclxuICBnYXA6IDAsXHJcblxyXG4gIHNob3dPbjogeyBtb2JpbGU6IHRydWUsIHRhYmxldDogdHJ1ZSwgZGVza3RvcDogdHJ1ZSB9LFxyXG59O1xyXG4iXX0=
|