@datarailsshared/datarailsshared 1.6.75 → 1.6.77

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.
@@ -17,9 +17,8 @@ function DrGalleryComponent_dr_button_0_Template(rf, ctx) { if (rf & 1) {
17
17
  function DrGalleryComponent_div_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {
18
18
  i0.ɵɵelementContainer(0);
19
19
  } }
20
- const _c2 = function (a0) { return { "dr-gallery-item_active": a0 }; };
21
- const _c3 = function () { return {}; };
22
- const _c4 = function (a0) { return { $implicit: a0 }; };
20
+ const _c2 = function () { return {}; };
21
+ const _c3 = function (a0) { return { $implicit: a0 }; };
23
22
  function DrGalleryComponent_div_4_Template(rf, ctx) { if (rf & 1) {
24
23
  i0.ɵɵelementStart(0, "div", 6, 7);
25
24
  i0.ɵɵtemplate(2, DrGalleryComponent_div_4_ng_container_2_Template, 1, 0, "ng-container", 8);
@@ -29,9 +28,10 @@ function DrGalleryComponent_div_4_Template(rf, ctx) { if (rf & 1) {
29
28
  const i_r7 = ctx.index;
30
29
  const ctx_r2 = i0.ɵɵnextContext();
31
30
  i0.ɵɵstyleProp("transition", ctx_r2.transition);
32
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c2, ctx_r2.centerIndex === i_r7))("ngStyle", ctx_r2.modeType === "loop" ? ctx_r2.getStyle() : i0.ɵɵpureFunction0(8, _c3));
31
+ i0.ɵɵclassProp("dr-gallery-item_active", ctx_r2.centerIndex === i_r7)("dr-gallery-item_fadein", ctx_r2.fadeIn && ctx_r2.centerIndex === i_r7 + 1);
32
+ i0.ɵɵproperty("ngStyle", ctx_r2.modeType === "loop" ? ctx_r2.getStyle() : i0.ɵɵpureFunction0(9, _c2));
33
33
  i0.ɵɵadvance(2);
34
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r2.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(9, _c4, item_r6));
34
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r2.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(10, _c3, item_r6));
35
35
  } }
36
36
  function DrGalleryComponent_dr_button_5_Template(rf, ctx) { if (rf & 1) {
37
37
  const _r11 = i0.ɵɵgetCurrentView();
@@ -72,6 +72,9 @@ export class DrGalleryComponent {
72
72
  this.noTransition = '0ms';
73
73
  this.modeType = 'loop';
74
74
  this.isOutsideBtns = false;
75
+ this.fadeIn = false;
76
+ this.autoPlay = false;
77
+ this.autoplayInterval = 5000; //5 seconds
75
78
  this.activeIndex = 0;
76
79
  this.carouselItems = [];
77
80
  this.transform = 'translateX(0%)';
@@ -84,8 +87,14 @@ export class DrGalleryComponent {
84
87
  setTimeout(() => {
85
88
  this.calculateItemOffsets();
86
89
  this.updateTransform();
90
+ if (this.autoPlay) {
91
+ this.startAutoplay();
92
+ }
87
93
  });
88
94
  }
95
+ ngOnDestroy() {
96
+ this.clearAutoplay();
97
+ }
89
98
  initializeCarousel() {
90
99
  if (this.modeType === 'loop') {
91
100
  this.carouselItems = [
@@ -154,11 +163,18 @@ export class DrGalleryComponent {
154
163
  this.activeIndex++;
155
164
  this.updateTransform();
156
165
  }
166
+ else {
167
+ this.activeIndex = 0;
168
+ this.updateTransform();
169
+ }
157
170
  }
158
171
  }
159
172
  navigate(index) {
160
173
  this.activeIndex = index;
161
174
  this.updateTransform();
175
+ if (this.autoPlay) {
176
+ this.startAutoplay();
177
+ }
162
178
  }
163
179
  get canGoPrev() {
164
180
  if (this.modeType === 'loop')
@@ -195,6 +211,18 @@ export class DrGalleryComponent {
195
211
  this.transition = this.defaultTransition;
196
212
  this.cdr.markForCheck();
197
213
  }
214
+ startAutoplay() {
215
+ this.clearAutoplay();
216
+ this.autoplayTimer = setInterval(() => {
217
+ this.next();
218
+ }, this.autoplayInterval);
219
+ }
220
+ clearAutoplay() {
221
+ if (this.autoplayTimer) {
222
+ clearInterval(this.autoplayTimer);
223
+ this.autoplayTimer = null;
224
+ }
225
+ }
198
226
  /** @nocollapse */ static { this.ɵfac = function DrGalleryComponent_Factory(t) { return new (t || DrGalleryComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
199
227
  /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrGalleryComponent, selectors: [["dr-gallery"]], contentQueries: function DrGalleryComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
200
228
  i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
@@ -208,27 +236,28 @@ export class DrGalleryComponent {
208
236
  let _t;
209
237
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.containerRef = _t.first);
210
238
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemElements = _t);
211
- } }, inputs: { modeType: "modeType", isOutsideBtns: "isOutsideBtns", items: "items", itemsCount: "itemsCount" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 6, vars: 10, consts: [["class", "dr-gallery-btn dr-gallery-btn_left", "theme", "icon", 3, "icon", "click", 4, "ngIf"], ["carouselContainer", ""], [1, "dr-gallery-items"], ["class", "dr-gallery-item", 3, "transition", "ngClass", "ngStyle", 4, "ngFor", "ngForOf"], ["class", "dr-gallery-btn dr-gallery-btn_right", "theme", "icon", 3, "iconSize", "icon", "click", 4, "ngIf"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_left", 3, "icon", "click"], [1, "dr-gallery-item", 3, "ngClass", "ngStyle"], ["carouselItem", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_right", 3, "iconSize", "icon", "click"]], template: function DrGalleryComponent_Template(rf, ctx) { if (rf & 1) {
239
+ } }, inputs: { modeType: "modeType", isOutsideBtns: "isOutsideBtns", fadeIn: "fadeIn", autoPlay: "autoPlay", autoplayInterval: "autoplayInterval", items: "items", itemsCount: "itemsCount" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 6, vars: 12, consts: [["class", "dr-gallery-btn dr-gallery-btn_left", "theme", "icon", 3, "icon", "click", 4, "ngIf"], ["carouselContainer", ""], [1, "dr-gallery-items"], ["class", "dr-gallery-item", 3, "transition", "dr-gallery-item_active", "dr-gallery-item_fadein", "ngStyle", 4, "ngFor", "ngForOf"], ["class", "dr-gallery-btn dr-gallery-btn_right", "theme", "icon", 3, "iconSize", "icon", "click", 4, "ngIf"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_left", 3, "icon", "click"], [1, "dr-gallery-item", 3, "ngStyle"], ["carouselItem", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_right", 3, "iconSize", "icon", "click"]], template: function DrGalleryComponent_Template(rf, ctx) { if (rf & 1) {
212
240
  i0.ɵɵtemplate(0, DrGalleryComponent_dr_button_0_Template, 1, 1, "dr-button", 0);
213
241
  i0.ɵɵelementStart(1, "div", null, 1)(3, "div", 2);
214
- i0.ɵɵtemplate(4, DrGalleryComponent_div_4_Template, 3, 11, "div", 3);
242
+ i0.ɵɵtemplate(4, DrGalleryComponent_div_4_Template, 3, 12, "div", 3);
215
243
  i0.ɵɵelementEnd()();
216
244
  i0.ɵɵtemplate(5, DrGalleryComponent_dr_button_5_Template, 1, 2, "dr-button", 4);
217
245
  } if (rf & 2) {
218
246
  i0.ɵɵproperty("ngIf", !ctx.isOutsideBtns);
219
247
  i0.ɵɵadvance(1);
220
248
  i0.ɵɵclassMapInterpolate1("dr-gallery-caroousel dr-gallery-caroousel_", ctx.modeType, "");
249
+ i0.ɵɵclassProp("dr-gallery-caroousel_fadein", ctx.fadeIn);
221
250
  i0.ɵɵadvance(2);
222
251
  i0.ɵɵstyleProp("transition", ctx.transition)("transform", ctx.transform);
223
252
  i0.ɵɵadvance(1);
224
253
  i0.ɵɵproperty("ngForOf", ctx.carouselItems);
225
254
  i0.ɵɵadvance(1);
226
255
  i0.ɵɵproperty("ngIf", !ctx.isOutsideBtns);
227
- } }, dependencies: [CommonModule, i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, DrInputsModule, i2.DrButtonComponent], styles: [".dr-gallery-caroousel[_ngcontent-%COMP%]{display:block;position:relative;overflow:hidden}.dr-gallery-items[_ngcontent-%COMP%]{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item[_ngcontent-%COMP%]{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1}.dr-gallery-btn[_ngcontent-%COMP%]{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:40px!important;height:40px!important}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-radius:50%}.dr-gallery-btn_left[_ngcontent-%COMP%]{left:0}.dr-gallery-btn_right[_ngcontent-%COMP%]{right:0}.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item[_ngcontent-%COMP%]{width:100%;min-height:240px}.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item_active[_ngcontent-%COMP%]{transform:scale(1.2)}"], changeDetection: 0 }); }
256
+ } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, DrInputsModule, i2.DrButtonComponent], styles: [".dr-gallery-caroousel[_ngcontent-%COMP%]{display:block;position:relative;overflow:hidden}.dr-gallery-caroousel.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item[_ngcontent-%COMP%]{width:100%;min-height:240px}.dr-gallery-caroousel.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item_active[_ngcontent-%COMP%]{transform:scale(1.2)}.dr-gallery-caroousel.dr-gallery-caroousel_fadein[_ngcontent-%COMP%] .dr-gallery-item[_ngcontent-%COMP%]{opacity:0}.dr-gallery-items[_ngcontent-%COMP%]{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item[_ngcontent-%COMP%]{box-sizing:border-box;position:relative;flex-grow:1;padding:42px 24px;margin-top:-8px}.dr-gallery-item_fadein[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_fadeIn .3s ease-in .25s forwards}.dr-gallery-btn[_ngcontent-%COMP%]{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:40px!important;height:40px!important}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-radius:50%}.dr-gallery-btn_left[_ngcontent-%COMP%]{left:0}.dr-gallery-btn_right[_ngcontent-%COMP%]{right:0}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}"], changeDetection: 0 }); }
228
257
  }
229
258
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrGalleryComponent, [{
230
259
  type: Component,
231
- args: [{ selector: 'dr-gallery', imports: [CommonModule, DrInputsModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_left\"\n (click)=\"prev()\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-left'\">\n</dr-button>\n\n<div #carouselContainer class=\"dr-gallery-caroousel dr-gallery-caroousel_{{ modeType }}\">\n <div class=\"dr-gallery-items\" [style.transition]=\"transition\" [style.transform]=\"transform\">\n <div\n #carouselItem\n *ngFor=\"let item of carouselItems; let i = index\"\n class=\"dr-gallery-item\"\n [style.transition]=\"transition\"\n [ngClass]=\"{ 'dr-gallery-item_active': centerIndex === i }\"\n [ngStyle]=\"modeType === 'loop' ? getStyle() : {}\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item }\"></ng-container>\n </div>\n </div>\n</div>\n\n<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_right\"\n (click)=\"next()\"\n [iconSize]=\"'24px'\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-right'\">\n</dr-button>\n", styles: [".dr-gallery-caroousel{display:block;position:relative;overflow:hidden}.dr-gallery-items{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1}.dr-gallery-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn button{width:40px!important;height:40px!important}.dr-gallery-btn button:hover{border-radius:50%}.dr-gallery-btn_left{left:0}.dr-gallery-btn_right{right:0}.dr-gallery-caroousel_loop .dr-gallery-item{width:100%;min-height:240px}.dr-gallery-caroousel_loop .dr-gallery-item_active{transform:scale(1.2)}\n"] }]
260
+ args: [{ selector: 'dr-gallery', imports: [CommonModule, DrInputsModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_left\"\n (click)=\"prev()\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-left'\">\n</dr-button>\n\n<div\n #carouselContainer\n class=\"dr-gallery-caroousel dr-gallery-caroousel_{{ modeType }}\"\n [class.dr-gallery-caroousel_fadein]=\"fadeIn\">\n <div class=\"dr-gallery-items\" [style.transition]=\"transition\" [style.transform]=\"transform\">\n <div\n #carouselItem\n *ngFor=\"let item of carouselItems; let i = index\"\n class=\"dr-gallery-item\"\n [style.transition]=\"transition\"\n [class.dr-gallery-item_active]=\"centerIndex === i\"\n [class.dr-gallery-item_fadein]=\"fadeIn && centerIndex === i + 1\"\n [ngStyle]=\"modeType === 'loop' ? getStyle() : {}\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item }\"></ng-container>\n </div>\n </div>\n</div>\n\n<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_right\"\n (click)=\"next()\"\n [iconSize]=\"'24px'\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-right'\">\n</dr-button>\n", styles: [".dr-gallery-caroousel{display:block;position:relative;overflow:hidden}.dr-gallery-caroousel.dr-gallery-caroousel_loop .dr-gallery-item{width:100%;min-height:240px}.dr-gallery-caroousel.dr-gallery-caroousel_loop .dr-gallery-item_active{transform:scale(1.2)}.dr-gallery-caroousel.dr-gallery-caroousel_fadein .dr-gallery-item{opacity:0}.dr-gallery-items{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item{box-sizing:border-box;position:relative;flex-grow:1;padding:42px 24px;margin-top:-8px}.dr-gallery-item_fadein{animation:fadeIn .3s ease-in .25s forwards}.dr-gallery-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn button{width:40px!important;height:40px!important}.dr-gallery-btn button:hover{border-radius:50%}.dr-gallery-btn_left{left:0}.dr-gallery-btn_right{right:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"] }]
232
261
  }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { template: [{
233
262
  type: ContentChild,
234
263
  args: [TemplateRef]
@@ -236,6 +265,12 @@ export class DrGalleryComponent {
236
265
  type: Input
237
266
  }], isOutsideBtns: [{
238
267
  type: Input
268
+ }], fadeIn: [{
269
+ type: Input
270
+ }], autoPlay: [{
271
+ type: Input
272
+ }], autoplayInterval: [{
273
+ type: Input
239
274
  }], items: [{
240
275
  type: Input
241
276
  }], itemsCount: [{
@@ -247,4 +282,4 @@ export class DrGalleryComponent {
247
282
  type: ViewChildren,
248
283
  args: ['carouselItem']
249
284
  }] }); })();
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1nYWxsZXJ5L2RyLWdhbGxlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItZ2FsbGVyeS9kci1nYWxsZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7SUNkL0Qsb0NBS2tDO0lBRjlCLHdLQUFTLGVBQUEsYUFBTSxDQUFBLElBQUM7SUFHcEIsaUJBQVk7O0lBRFIsMkNBQTZCOzs7SUFZckIsd0JBQXdGOzs7Ozs7SUFQNUYsaUNBTXNEO0lBQ2xELDJGQUF3RjtJQUM1RixpQkFBTTs7Ozs7SUFKRiwrQ0FBK0I7SUFDL0IsaUZBQTJELHdGQUFBO0lBRTVDLGVBQTRCO0lBQTVCLGtEQUE0QixnRUFBQTs7OztJQUt2RCxvQ0FNbUM7SUFIL0IsMEtBQVMsZUFBQSxjQUFNLENBQUEsSUFBQztJQUlwQixpQkFBWTs7SUFIUixpQ0FBbUIsK0JBQUE7O0FESHZCLE1BQU0sT0FBTyxrQkFBa0I7SUFXM0IsSUFDSSxLQUFLLENBQUMsS0FBVTtRQUNoQixJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENB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QUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7c0dBaExRLGtCQUFrQjttR0FBbEIsa0JBQWtCO3dDQUNiLFdBQVc7Ozs7Ozs7Ozs7OztZQ3hCN0IsK0VBTVk7WUFFWixvQ0FBeUYsYUFBQTtZQUVqRixvRUFRTTtZQUNWLGlCQUFNLEVBQUE7WUFHViwrRUFPWTs7WUE1QlAseUNBQW9CO1lBT0QsZUFBZ0U7WUFBaEUseUZBQWdFO1lBQ3RELGVBQStCO1lBQS9CLDRDQUErQiw0QkFBQTtZQUdwQyxlQUFrQjtZQUFsQiwyQ0FBa0I7WUFXMUMsZUFBb0I7WUFBcEIseUNBQW9COzRCREpYLFlBQVksb0VBQUUsY0FBYzs7dUZBSTdCLGtCQUFrQjtjQVI5QixTQUFTOzJCQUNJLFlBQVksV0FHYixDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsY0FDM0IsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNO29FQUdwQixRQUFRO2tCQUFsQyxZQUFZO21CQUFDLFdBQVc7WUFPaEIsUUFBUTtrQkFBaEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFHRixLQUFLO2tCQURSLEtBQUs7WUFTRixVQUFVO2tCQURiLEtBQUs7WUEyQjBCLFlBQVk7a0JBQTNDLFNBQVM7bUJBQUMsbUJBQW1CO1lBQ0EsWUFBWTtrQkFBekMsWUFBWTttQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2UgYXMgX3Rha2UsIHRha2VSaWdodCBhcyBfdGFrZVJpZ2h0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERySW5wdXRzTW9kdWxlIH0gZnJvbSAnLi4vZHItaW5wdXRzL2RyLWlucHV0cy5tb2R1bGUnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1nYWxsZXJ5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHItZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHItZ2FsbGVyeS5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERySW5wdXRzTW9kdWxlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEckdhbGxlcnlDb21wb25lbnQ8VCA9IGFueT4ge1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlITogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFQgfT47XG5cbiAgICBwcml2YXRlIF9pdGVtczogVFtdID0gW107XG4gICAgcHJpdmF0ZSBfaXRlbXNDb3VudCA9IDM7XG4gICAgcmVhZG9ubHkgZGVmYXVsdFRyYW5zaXRpb24gPSAnMjUwbXMgZWFzZS1pbi1vdXQnO1xuICAgIHJlYWRvbmx5IG5vVHJhbnNpdGlvbiA9ICcwbXMnO1xuXG4gICAgQElucHV0KCkgbW9kZVR5cGU6ICdsb29wJyB8ICdkeW5hbWljJyA9ICdsb29wJztcbiAgICBASW5wdXQoKSBpc091dHNpZGVCdG5zID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtcyh2YWx1ZTogVFtdKSB7XG4gICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5faXRlbXNDb3VudCA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXRlbXNDb3VudCA9IHZhbHVlID4gdGhpcy5pdGVtcy5sZW5ndGggLSAxID8gdGhpcy5pdGVtcy5sZW5ndGggOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaXRlbXMoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cblxuICAgIGdldCBpdGVtc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0NvdW50O1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJJbmRleCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNDb3VudCA+IDEgJiYgdGhpcy5pdGVtc0NvdW50ICUgMiAhPT0gMCA/IHRoaXMuYWN0aXZlSW5kZXggKyBNYXRoLmZsb29yKHRoaXMuaXRlbXNDb3VudCAvIDIpIDogbnVsbDtcbiAgICB9XG5cbiAgICBhY3RpdmVJbmRleCA9IDA7XG4gICAgY2Fyb3VzZWxJdGVtczogVFtdID0gW107XG4gICAgdHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCUpJztcbiAgICB0cmFuc2l0aW9uID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbjtcblxuICAgIEBWaWV3Q2hpbGQoJ2Nhcm91c2VsQ29udGFpbmVyJykgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZHJlbignY2Fyb3VzZWxJdGVtJykgaXRlbUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcbiAgICBwcml2YXRlIGl0ZW1PZmZzZXRzOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgaXRlbVdpZHRoczogbnVtYmVyW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gV2FpdCBmb3IgaW5pdGlhbCByZW5kZXJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUl0ZW1PZmZzZXRzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDYXJvdXNlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykge1xuICAgICAgICAgICAgdGhpcy5jYXJvdXNlbEl0ZW1zID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2l0ZW1zLnNsaWNlKC10aGlzLml0ZW1zQ291bnQpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2l0ZW1zLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2l0ZW1zLnNsaWNlKDAsIHRoaXMuaXRlbXNDb3VudCksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuaXRlbXNDb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxJdGVtcyA9IFsuLi50aGlzLl9pdGVtc107XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtT2Zmc2V0cygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtT2Zmc2V0cygpIHtcbiAgICAgICAgdGhpcy5pdGVtT2Zmc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLml0ZW1XaWR0aHMgPSBbXTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLml0ZW1FbGVtZW50cy50b0FycmF5KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBlbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5pdGVtT2Zmc2V0cy5wdXNoKG9mZnNldCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1XaWR0aHMucHVzaCh3aWR0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gd2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTdHlsZSgpOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+IHtcbiAgICAgICAgY29uc3QgcGVyY2VudCA9IGBjYWxjKCR7MTAwIC8gdGhpcy5pdGVtc0NvdW50fSUpYDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbldpZHRoOiBwZXJjZW50LFxuICAgICAgICAgICAgbWF4V2lkdGg6IHBlcmNlbnQsXG4gICAgICAgICAgICBmbGV4QmFzaXM6IHBlcmNlbnQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJldigpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleC0tO1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbjtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0SW5kZXhBZnRlckRlbGF5KHRoaXMuY2Fyb3VzZWxJdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4LS07XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5leHQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVUeXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgrKztcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZGVmYXVsdFRyYW5zaXRpb247XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCArIHRoaXMuaXRlbXNDb3VudCA+IHRoaXMuY2Fyb3VzZWxJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEluZGV4QWZ0ZXJEZWxheSh0aGlzLml0ZW1zQ291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggKyAxIDwgdGhpcy5jYXJvdXNlbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgrKztcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmF2aWdhdGUoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvUHJldigpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiAhISh0aGlzLmFjdGl2ZUluZGV4ID4gMCk7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvTmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZVR5cGUgPT09ICdsb29wJykgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoIHx8IDA7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSB0aGlzLml0ZW1PZmZzZXRzW3RoaXMuYWN0aXZlSW5kZXhdIHx8IDA7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuaXRlbU9mZnNldHMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgdG90YWxDb250ZW50V2lkdGggPSB0aGlzLml0ZW1PZmZzZXRzW2xhc3RJbmRleF0gKyB0aGlzLml0ZW1XaWR0aHNbbGFzdEluZGV4XTtcblxuICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldCArIGNvbnRhaW5lcldpZHRoIDwgdG90YWxDb250ZW50V2lkdGggLSAxO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRJbmRleEFmdGVyRGVsYXkobmV3SW5kZXg6IG51bWJlcikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHRoaXMubm9UcmFuc2l0aW9uO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IG5ld0luZGV4O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0odHJ1ZSk7XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUcmFuc2Zvcm0oc2tpcFRyYW5zaXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5tb2RlVHlwZSA9PT0gJ2xvb3AnKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7LTEwMCAqICh0aGlzLmFjdGl2ZUluZGV4IC8gdGhpcy5pdGVtc0NvdW50KX0lKWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLml0ZW1PZmZzZXRzW3RoaXMuYWN0aXZlSW5kZXhdIHx8IDA7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKC0ke29mZnNldH1weClgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChza2lwVHJhbnNpdGlvbikgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5ub1RyYW5zaXRpb247XG4gICAgICAgIGVsc2UgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5kZWZhdWx0VHJhbnNpdGlvbjtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuIiwiPGRyLWJ1dHRvblxuICAgICpuZ0lmPVwiIWlzT3V0c2lkZUJ0bnNcIlxuICAgIGNsYXNzPVwiZHItZ2FsbGVyeS1idG4gZHItZ2FsbGVyeS1idG5fbGVmdFwiXG4gICAgKGNsaWNrKT1cInByZXYoKVwiXG4gICAgdGhlbWU9XCJpY29uXCJcbiAgICBbaWNvbl09XCInZHItaWNvbi1hcnJvdy1sZWZ0J1wiPlxuPC9kci1idXR0b24+XG5cbjxkaXYgI2Nhcm91c2VsQ29udGFpbmVyIGNsYXNzPVwiZHItZ2FsbGVyeS1jYXJvb3VzZWwgZHItZ2FsbGVyeS1jYXJvb3VzZWxfe3sgbW9kZVR5cGUgfX1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHItZ2FsbGVyeS1pdGVtc1wiIFtzdHlsZS50cmFuc2l0aW9uXT1cInRyYW5zaXRpb25cIiBbc3R5bGUudHJhbnNmb3JtXT1cInRyYW5zZm9ybVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjY2Fyb3VzZWxJdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJvdXNlbEl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHItZ2FsbGVyeS1pdGVtXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2l0aW9uXT1cInRyYW5zaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZHItZ2FsbGVyeS1pdGVtX2FjdGl2ZSc6IGNlbnRlckluZGV4ID09PSBpIH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwibW9kZVR5cGUgPT09ICdsb29wJyA/IGdldFN0eWxlKCkgOiB7fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkci1idXR0b25cbiAgICAqbmdJZj1cIiFpc091dHNpZGVCdG5zXCJcbiAgICBjbGFzcz1cImRyLWdhbGxlcnktYnRuIGRyLWdhbGxlcnktYnRuX3JpZ2h0XCJcbiAgICAoY2xpY2spPVwibmV4dCgpXCJcbiAgICBbaWNvblNpemVdPVwiJzI0cHgnXCJcbiAgICB0aGVtZT1cImljb25cIlxuICAgIFtpY29uXT1cIidkci1pY29uLWFycm93LXJpZ2h0J1wiPlxuPC9kci1idXR0b24+XG4iXX0=
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1nYWxsZXJ5L2RyLWdhbGxlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItZ2FsbGVyeS9kci1nYWxsZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7SUNoQi9ELG9DQUtrQztJQUY5Qix3S0FBUyxlQUFBLGFBQU0sQ0FBQSxJQUFDO0lBR3BCLGlCQUFZOztJQURSLDJDQUE2Qjs7O0lBZ0JyQix3QkFBd0Y7Ozs7O0lBUjVGLGlDQU9zRDtJQUNsRCwyRkFBd0Y7SUFDNUYsaUJBQU07Ozs7O0lBTEYsK0NBQStCO0lBQy9CLHFFQUFrRCw0RUFBQTtJQUVsRCxxR0FBaUQ7SUFDbEMsZUFBNEI7SUFBNUIsa0RBQTRCLGlFQUFBOzs7O0lBS3ZELG9DQU1tQztJQUgvQiwwS0FBUyxlQUFBLGNBQU0sQ0FBQSxJQUFDO0lBSXBCLGlCQUFZOztJQUhSLGlDQUFtQiwrQkFBQTs7QURMdkIsTUFBTSxPQUFPLGtCQUFrQjtJQWUzQixJQUNJLEtBQUssQ0FBQyxLQUFVO1FBQ2hCLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFD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QUFBO1lBR3BDLGVBQWtCO1lBQWxCLDJDQUFrQjtZQVkxQyxlQUFvQjtZQUFwQix5Q0FBb0I7NEJETlgsWUFBWSx3REFBRSxjQUFjOzt1RkFJN0Isa0JBQWtCO2NBUjlCLFNBQVM7MkJBQ0ksWUFBWSxXQUdiLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxjQUMzQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU07b0VBR3BCLFFBQVE7a0JBQWxDLFlBQVk7bUJBQUMsV0FBVztZQVFoQixRQUFRO2tCQUFoQixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFHRixLQUFLO2tCQURSLEtBQUs7WUFTRixVQUFVO2tCQURiLEtBQUs7WUEyQjBCLFlBQVk7a0JBQTNDLFNBQVM7bUJBQUMsbUJBQW1CO1lBQ0EsWUFBWTtrQkFBekMsWUFBWTttQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2UgYXMgX3Rha2UsIHRha2VSaWdodCBhcyBfdGFrZVJpZ2h0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERySW5wdXRzTW9kdWxlIH0gZnJvbSAnLi4vZHItaW5wdXRzL2RyLWlucHV0cy5tb2R1bGUnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1nYWxsZXJ5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHItZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHItZ2FsbGVyeS5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERySW5wdXRzTW9kdWxlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEckdhbGxlcnlDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlITogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFQgfT47XG5cbiAgICBwcml2YXRlIF9pdGVtczogVFtdID0gW107XG4gICAgcHJpdmF0ZSBfaXRlbXNDb3VudCA9IDM7XG4gICAgcHJpdmF0ZSBhdXRvcGxheVRpbWVyOiBhbnk7XG4gICAgcmVhZG9ubHkgZGVmYXVsdFRyYW5zaXRpb24gPSAnMjUwbXMgZWFzZS1pbi1vdXQnO1xuICAgIHJlYWRvbmx5IG5vVHJhbnNpdGlvbiA9ICcwbXMnO1xuXG4gICAgQElucHV0KCkgbW9kZVR5cGU6ICdsb29wJyB8ICdkeW5hbWljJyA9ICdsb29wJztcbiAgICBASW5wdXQoKSBpc091dHNpZGVCdG5zID0gZmFsc2U7XG4gICAgQElucHV0KCkgZmFkZUluID0gZmFsc2U7XG4gICAgQElucHV0KCkgYXV0b1BsYXkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBhdXRvcGxheUludGVydmFsID0gNTAwMDsgLy81IHNlY29uZHNcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBUW10pIHtcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgaXRlbXNDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtc0NvdW50ID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pdGVtc0NvdW50ID0gdmFsdWUgPiB0aGlzLml0ZW1zLmxlbmd0aCAtIDEgPyB0aGlzLml0ZW1zLmxlbmd0aCA6IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBpdGVtcygpOiBUW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuXG4gICAgZ2V0IGl0ZW1zQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zQ291bnQ7XG4gICAgfVxuXG4gICAgZ2V0IGNlbnRlckluZGV4KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc0NvdW50ID4gMSAmJiB0aGlzLml0ZW1zQ291bnQgJSAyICE9PSAwID8gdGhpcy5hY3RpdmVJbmRleCArIE1hdGguZmxvb3IodGhpcy5pdGVtc0NvdW50IC8gMikgOiBudWxsO1xuICAgIH1cblxuICAgIGFjdGl2ZUluZGV4ID0gMDtcbiAgICBjYXJvdXNlbEl0ZW1zOiBUW10gPSBbXTtcbiAgICB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwJSknO1xuICAgIHRyYW5zaXRpb24gPSB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uO1xuXG4gICAgQFZpZXdDaGlsZCgnY2Fyb3VzZWxDb250YWluZXInKSBjb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkcmVuKCdjYXJvdXNlbEl0ZW0nKSBpdGVtRWxlbWVudHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICAgIHByaXZhdGUgaXRlbU9mZnNldHM6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSBpdGVtV2lkdGhzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBXYWl0IGZvciBpbml0aWFsIHJlbmRlclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSXRlbU9mZnNldHMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvUGxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvcGxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckF1dG9wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQ2Fyb3VzZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVUeXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxJdGVtcyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9pdGVtcy5zbGljZSgtdGhpcy5pdGVtc0NvdW50KSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9pdGVtcyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9pdGVtcy5zbGljZSgwLCB0aGlzLml0ZW1zQ291bnQpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLml0ZW1zQ291bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsSXRlbXMgPSBbLi4udGhpcy5faXRlbXNdO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSXRlbU9mZnNldHMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlSXRlbU9mZnNldHMoKSB7XG4gICAgICAgIHRoaXMuaXRlbU9mZnNldHMgPSBbXTtcbiAgICAgICAgdGhpcy5pdGVtV2lkdGhzID0gW107XG5cbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5pdGVtRWxlbWVudHMudG9BcnJheSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIHRoaXMuaXRlbU9mZnNldHMucHVzaChvZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtV2lkdGhzLnB1c2god2lkdGgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U3R5bGUoKTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSBgY2FsYygkezEwMCAvIHRoaXMuaXRlbXNDb3VudH0lKWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW5XaWR0aDogcGVyY2VudCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBwZXJjZW50LFxuICAgICAgICAgICAgZmxleEJhc2lzOiBwZXJjZW50LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByZXYoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVUeXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgtLTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHRoaXMuZGVmYXVsdFRyYW5zaXRpb247XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEluZGV4QWZ0ZXJEZWxheSh0aGlzLmNhcm91c2VsSXRlbXMubGVuZ3RoIC0gdGhpcy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleC0tO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlVHlwZSA9PT0gJ2xvb3AnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4Kys7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggKyB0aGlzLml0ZW1zQ291bnQgPiB0aGlzLmNhcm91c2VsSXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRJbmRleEFmdGVyRGVsYXkodGhpcy5pdGVtc0NvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ICsgMSA8IHRoaXMuY2Fyb3VzZWxJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hdmlnYXRlKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgICBpZiAodGhpcy5hdXRvUGxheSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9wbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgY2FuR29QcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlVHlwZSA9PT0gJ2xvb3AnKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuYWN0aXZlSW5kZXggPiAwKTtcbiAgICB9XG5cbiAgICBnZXQgY2FuR29OZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlVHlwZSA9PT0gJ2xvb3AnKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggfHwgMDtcbiAgICAgICAgY29uc3QgY3VycmVudE9mZnNldCA9IHRoaXMuaXRlbU9mZnNldHNbdGhpcy5hY3RpdmVJbmRleF0gfHwgMDtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5pdGVtT2Zmc2V0cy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCB0b3RhbENvbnRlbnRXaWR0aCA9IHRoaXMuaXRlbU9mZnNldHNbbGFzdEluZGV4XSArIHRoaXMuaXRlbVdpZHRoc1tsYXN0SW5kZXhdO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0ICsgY29udGFpbmVyV2lkdGggPCB0b3RhbENvbnRlbnRXaWR0aCAtIDE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEluZGV4QWZ0ZXJEZWxheShuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uID0gdGhpcy5ub1RyYW5zaXRpb247XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSh0cnVlKTtcbiAgICAgICAgfSwgMjUwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRyYW5zZm9ybShza2lwVHJhbnNpdGlvbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVUeXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHstMTAwICogKHRoaXMuYWN0aXZlSW5kZXggLyB0aGlzLml0ZW1zQ291bnQpfSUpYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaXRlbU9mZnNldHNbdGhpcy5hY3RpdmVJbmRleF0gfHwgMDtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoLSR7b2Zmc2V0fXB4KWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXBUcmFuc2l0aW9uKSB0aGlzLnRyYW5zaXRpb24gPSB0aGlzLm5vVHJhbnNpdGlvbjtcbiAgICAgICAgZWxzZSB0aGlzLnRyYW5zaXRpb24gPSB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0QXV0b3BsYXkoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBdXRvcGxheSgpO1xuICAgICAgICB0aGlzLmF1dG9wbGF5VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgfSwgdGhpcy5hdXRvcGxheUludGVydmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQXV0b3BsYXkoKSB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9wbGF5VGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvcGxheVRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXlUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZHItYnV0dG9uXG4gICAgKm5nSWY9XCIhaXNPdXRzaWRlQnRuc1wiXG4gICAgY2xhc3M9XCJkci1nYWxsZXJ5LWJ0biBkci1nYWxsZXJ5LWJ0bl9sZWZ0XCJcbiAgICAoY2xpY2spPVwicHJldigpXCJcbiAgICB0aGVtZT1cImljb25cIlxuICAgIFtpY29uXT1cIidkci1pY29uLWFycm93LWxlZnQnXCI+XG48L2RyLWJ1dHRvbj5cblxuPGRpdlxuICAgICNjYXJvdXNlbENvbnRhaW5lclxuICAgIGNsYXNzPVwiZHItZ2FsbGVyeS1jYXJvb3VzZWwgZHItZ2FsbGVyeS1jYXJvb3VzZWxfe3sgbW9kZVR5cGUgfX1cIlxuICAgIFtjbGFzcy5kci1nYWxsZXJ5LWNhcm9vdXNlbF9mYWRlaW5dPVwiZmFkZUluXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyLWdhbGxlcnktaXRlbXNcIiBbc3R5bGUudHJhbnNpdGlvbl09XCJ0cmFuc2l0aW9uXCIgW3N0eWxlLnRyYW5zZm9ybV09XCJ0cmFuc2Zvcm1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Nhcm91c2VsSXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2Fyb3VzZWxJdGVtczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICBjbGFzcz1cImRyLWdhbGxlcnktaXRlbVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNpdGlvbl09XCJ0cmFuc2l0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5kci1nYWxsZXJ5LWl0ZW1fYWN0aXZlXT1cImNlbnRlckluZGV4ID09PSBpXCJcbiAgICAgICAgICAgIFtjbGFzcy5kci1nYWxsZXJ5LWl0ZW1fZmFkZWluXT1cImZhZGVJbiAmJiBjZW50ZXJJbmRleCA9PT0gaSArIDFcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwibW9kZVR5cGUgPT09ICdsb29wJyA/IGdldFN0eWxlKCkgOiB7fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkci1idXR0b25cbiAgICAqbmdJZj1cIiFpc091dHNpZGVCdG5zXCJcbiAgICBjbGFzcz1cImRyLWdhbGxlcnktYnRuIGRyLWdhbGxlcnktYnRuX3JpZ2h0XCJcbiAgICAoY2xpY2spPVwibmV4dCgpXCJcbiAgICBbaWNvblNpemVdPVwiJzI0cHgnXCJcbiAgICB0aGVtZT1cImljb25cIlxuICAgIFtpY29uXT1cIidkci1pY29uLWFycm93LXJpZ2h0J1wiPlxuPC9kci1idXR0b24+XG4iXX0=
@@ -1103,7 +1103,7 @@ function DrInputComponent_button_7_Template(rf, ctx) { if (rf & 1) {
1103
1103
  i0.ɵɵtextInterpolate1(" ", ctx_r5._buttonOptions.text, "\n");
1104
1104
  } }
1105
1105
  const _c3$7 = [[["", "prefixIcon", ""]], [["", "suffixIcon", ""]]];
1106
- const _c4$5 = ["[prefixIcon]", "[suffixIcon]"];
1106
+ const _c4$4 = ["[prefixIcon]", "[suffixIcon]"];
1107
1107
  class DrInputComponent {
1108
1108
  set disabled(value) {
1109
1109
  this.setDisabledState(value);
@@ -1286,7 +1286,7 @@ class DrInputComponent {
1286
1286
  useExisting: forwardRef((() => DrInputComponent)),
1287
1287
  multi: true,
1288
1288
  },
1289
- ])], ngContentSelectors: _c4$5, decls: 8, vars: 5, consts: [[4, "ngIf", "ngIfElse"], ["maskedInput", ""], ["class", "clear-icon", 3, "click", 4, "ngIf"], ["class", "search-icon", 3, "click", 4, "ngIf"], [3, "click", 4, "ngIf"], [3, "ngModel", "disabled", "readonly", "type", "placeholder", "name", "min", "max", "minlength", "maxlength", "step", "ngModelChange", "ngModelDebounceChange", "blur", "focus"], ["inputRef", ""], [3, "ngModel", "disabled", "readonly", "type", "placeholder", "name", "min", "max", "minlength", "maxlength", "mask", "suffix", "prefix", "step", "ngModelChange", "ngModelDebounceChange", "blur", "focus"], [1, "clear-icon", 3, "click"], [1, "search-icon", 3, "click"], [3, "click"]], template: function DrInputComponent_Template(rf, ctx) { if (rf & 1) {
1289
+ ])], ngContentSelectors: _c4$4, decls: 8, vars: 5, consts: [[4, "ngIf", "ngIfElse"], ["maskedInput", ""], ["class", "clear-icon", 3, "click", 4, "ngIf"], ["class", "search-icon", 3, "click", 4, "ngIf"], [3, "click", 4, "ngIf"], [3, "ngModel", "disabled", "readonly", "type", "placeholder", "name", "min", "max", "minlength", "maxlength", "step", "ngModelChange", "ngModelDebounceChange", "blur", "focus"], ["inputRef", ""], [3, "ngModel", "disabled", "readonly", "type", "placeholder", "name", "min", "max", "minlength", "maxlength", "mask", "suffix", "prefix", "step", "ngModelChange", "ngModelDebounceChange", "blur", "focus"], [1, "clear-icon", 3, "click"], [1, "search-icon", 3, "click"], [3, "click"]], template: function DrInputComponent_Template(rf, ctx) { if (rf & 1) {
1290
1290
  i0.ɵɵprojectionDef(_c3$7);
1291
1291
  i0.ɵɵprojection(0);
1292
1292
  i0.ɵɵtemplate(1, DrInputComponent_ng_container_1_Template, 3, 11, "ng-container", 0);
@@ -1387,7 +1387,7 @@ const _c0$F = ["labelTemplate"];
1387
1387
  const _c1$i = ["multiLabelTemplate"];
1388
1388
  const _c2$8 = ["optionTemplate"];
1389
1389
  const _c3$6 = ["optionHeaderTemplate"];
1390
- const _c4$4 = ["optionFooterTemplate"];
1390
+ const _c4$3 = ["optionFooterTemplate"];
1391
1391
  const _c5 = function (a0) { return { item: a0 }; };
1392
1392
  function DrSelectComponent_2_ng_template_0_Template(rf, ctx) { if (rf & 1) {
1393
1393
  i0.ɵɵelementContainer(0, 6);
@@ -1624,7 +1624,7 @@ class DrSelectComponent {
1624
1624
  i0.ɵɵcontentQuery(dirIndex, _c1$i, 5);
1625
1625
  i0.ɵɵcontentQuery(dirIndex, _c2$8, 5);
1626
1626
  i0.ɵɵcontentQuery(dirIndex, _c3$6, 5);
1627
- i0.ɵɵcontentQuery(dirIndex, _c4$4, 5);
1627
+ i0.ɵɵcontentQuery(dirIndex, _c4$3, 5);
1628
1628
  } if (rf & 2) {
1629
1629
  let _t;
1630
1630
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.labelTemplate = _t.first);
@@ -6875,7 +6875,7 @@ function DrChatComponent_dr_chat_suggestions_7_Template(rf, ctx) { if (rf & 1) {
6875
6875
  i0.ɵɵproperty("values", ctx_r3.suggestions)("fullScreen", ctx_r3.fullScreen)("waitForReply", ctx_r3.waitForReply)("buttonMode", !!(ctx_r3.messages == null ? null : ctx_r3.messages.length));
6876
6876
  } }
6877
6877
  const _c3$4 = [[["dr-chat-alert"]], [["dr-chat-form"]], [["dr-ai-search-input"]], [["dr-chat-message"]]];
6878
- const _c4$3 = ["dr-chat-alert", "dr-chat-form", "dr-ai-search-input", "dr-chat-message"];
6878
+ const _c4$2 = ["dr-chat-alert", "dr-chat-form", "dr-ai-search-input", "dr-chat-message"];
6879
6879
  class DrChatComponent {
6880
6880
  set contentUpdateSubject(value) {
6881
6881
  if (value) {
@@ -6971,7 +6971,7 @@ class DrChatComponent {
6971
6971
  let _t;
6972
6972
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.messagesContainer = _t.first);
6973
6973
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._chatSuggestions = _t.first);
6974
- } }, inputs: { fullScreen: "fullScreen", noMessagesPlaceholder: "noMessagesPlaceholder", contentUpdateSubject: "contentUpdateSubject", scrollBottom: "scrollBottom", suggestions: "suggestions", reopen: "reopen", waitForReply: "waitForReply", scrollDelay: "scrollDelay" }, outputs: { suggestionSelect: "suggestionSelect" }, features: [i0.ɵɵProvidersFeature([DrChatCustomMessageService])], ngContentSelectors: _c4$3, decls: 11, vars: 6, consts: [[1, "chat"], [1, "chat__sticky-top"], [3, "ngTemplateOutlet", 4, "ngIf"], [1, "chat__alert"], ["class", "chat__empty-state", 4, "ngIf"], ["class", "chat__messages", 4, "ngIf"], ["class", "chat__suggestions", 3, "values", "fullScreen", "waitForReply", "chat__suggestions--full-height", "buttonMode", "suggestionSelect", 4, "ngIf"], [1, "form"], [3, "ngTemplateOutlet"], [1, "chat__empty-state"], [1, "chat__empty-state__text"], [1, "chat__messages"], [1, "chat__messages__container"], ["messagesContainer", ""], [1, "chat__suggestions", 3, "values", "fullScreen", "waitForReply", "buttonMode", "suggestionSelect"]], template: function DrChatComponent_Template(rf, ctx) { if (rf & 1) {
6974
+ } }, inputs: { fullScreen: "fullScreen", noMessagesPlaceholder: "noMessagesPlaceholder", contentUpdateSubject: "contentUpdateSubject", scrollBottom: "scrollBottom", suggestions: "suggestions", reopen: "reopen", waitForReply: "waitForReply", scrollDelay: "scrollDelay" }, outputs: { suggestionSelect: "suggestionSelect" }, features: [i0.ɵɵProvidersFeature([DrChatCustomMessageService])], ngContentSelectors: _c4$2, decls: 11, vars: 6, consts: [[1, "chat"], [1, "chat__sticky-top"], [3, "ngTemplateOutlet", 4, "ngIf"], [1, "chat__alert"], ["class", "chat__empty-state", 4, "ngIf"], ["class", "chat__messages", 4, "ngIf"], ["class", "chat__suggestions", 3, "values", "fullScreen", "waitForReply", "chat__suggestions--full-height", "buttonMode", "suggestionSelect", 4, "ngIf"], [1, "form"], [3, "ngTemplateOutlet"], [1, "chat__empty-state"], [1, "chat__empty-state__text"], [1, "chat__messages"], [1, "chat__messages__container"], ["messagesContainer", ""], [1, "chat__suggestions", 3, "values", "fullScreen", "waitForReply", "buttonMode", "suggestionSelect"]], template: function DrChatComponent_Template(rf, ctx) { if (rf & 1) {
6975
6975
  i0.ɵɵprojectionDef(_c3$4);
6976
6976
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
6977
6977
  i0.ɵɵtemplate(2, DrChatComponent_ng_container_2_Template, 1, 1, "ng-container", 2);
@@ -7067,7 +7067,7 @@ function DrChatFormDropdownComponent_dr_dot_flashing_15_Template(rf, ctx) { if (
7067
7067
  } }
7068
7068
  const _c2$4 = function (a0) { return { "message-row_loading": a0 }; };
7069
7069
  const _c3$3 = function (a0, a1) { return { "message-row__input--focused": a0, "message-row__input--filled": a1 }; };
7070
- const _c4$2 = ["*"];
7070
+ const _c4$1 = ["*"];
7071
7071
  class DrChatFormDropdownComponent {
7072
7072
  constructor(cdr, domSanitizer) {
7073
7073
  this.cdr = cdr;
@@ -7235,7 +7235,7 @@ class DrChatFormDropdownComponent {
7235
7235
  i0.ɵɵlistener("drop", function DrChatFormDropdownComponent_drop_HostBindingHandler($event) { return ctx.onDrop($event); })("dragover", function DrChatFormDropdownComponent_dragover_HostBindingHandler($event) { return ctx.onDragOver($event); })("dragleave", function DrChatFormDropdownComponent_dragleave_HostBindingHandler($event) { return ctx.onDragLeave($event); });
7236
7236
  } if (rf & 2) {
7237
7237
  i0.ɵɵclassProp("file-over", ctx.fileOver);
7238
- } }, inputs: { isUploadingFiles: "isUploadingFiles", message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply", showDotFlashing: "showDotFlashing" }, outputs: { send: "send", uploadFiles: "uploadFiles", abort: "abort", inputChange: "inputChange" }, ngContentSelectors: _c4$2, decls: 16, vars: 20, consts: [[1, "message-row", 3, "ngClass"], [1, "message-row__input", 3, "ngClass"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent", 4, "ngIf"], [1, "message-row__input-textarea-wrap"], ["type", "text", 3, "ngModel", "rows", "placeholder", "focus", "blur", "mouseenter", "mouseleave", "ngModelChange", "keydown.enter"], ["textAreaElement", ""], [1, "message-row__btns"], ["type", "file", "hidden", "", "multiple", "", 3, "change"], ["fileInput", ""], ["class", "dr-icon-send-arrow-up send-button", 3, "click", 4, "ngIf"], ["class", "dr-icon-stop abort-button", 3, "click", 4, "ngIf"], ["class", "wait-reply-dot-flashing", 4, "ngIf"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent"], [1, "dr-icon-send-arrow-up", "send-button", 3, "click"], [1, "dr-icon-stop", "abort-button", 3, "click"], [1, "wait-reply-dot-flashing"]], template: function DrChatFormDropdownComponent_Template(rf, ctx) { if (rf & 1) {
7238
+ } }, inputs: { isUploadingFiles: "isUploadingFiles", message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply", showDotFlashing: "showDotFlashing" }, outputs: { send: "send", uploadFiles: "uploadFiles", abort: "abort", inputChange: "inputChange" }, ngContentSelectors: _c4$1, decls: 16, vars: 20, consts: [[1, "message-row", 3, "ngClass"], [1, "message-row__input", 3, "ngClass"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent", 4, "ngIf"], [1, "message-row__input-textarea-wrap"], ["type", "text", 3, "ngModel", "rows", "placeholder", "focus", "blur", "mouseenter", "mouseleave", "ngModelChange", "keydown.enter"], ["textAreaElement", ""], [1, "message-row__btns"], ["type", "file", "hidden", "", "multiple", "", 3, "change"], ["fileInput", ""], ["class", "dr-icon-send-arrow-up send-button", 3, "click", 4, "ngIf"], ["class", "dr-icon-stop abort-button", 3, "click", 4, "ngIf"], ["class", "wait-reply-dot-flashing", 4, "ngIf"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent"], [1, "dr-icon-send-arrow-up", "send-button", 3, "click"], [1, "dr-icon-stop", "abort-button", 3, "click"], [1, "wait-reply-dot-flashing"]], template: function DrChatFormDropdownComponent_Template(rf, ctx) { if (rf & 1) {
7239
7239
  i0.ɵɵprojectionDef();
7240
7240
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
7241
7241
  i0.ɵɵpipe(2, "async");
@@ -9459,7 +9459,7 @@ function DrDropdownComponent_dr_dropdown_item_4_Template(rf, ctx) { if (rf & 1)
9459
9459
  i0.ɵɵproperty("ngIf", act_r2.templateRef);
9460
9460
  } }
9461
9461
  const _c3$2 = [[["dr-dropdown-item"]]];
9462
- const _c4$1 = ["dr-dropdown-item"];
9462
+ const _c4 = ["dr-dropdown-item"];
9463
9463
  class DrDropdownComponent {
9464
9464
  set options(data) {
9465
9465
  if (data) {
@@ -9579,7 +9579,7 @@ class DrDropdownComponent {
9579
9579
  } if (rf & 2) {
9580
9580
  let _t;
9581
9581
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.menuContainer = _t.first);
9582
- } }, inputs: { options: "options" }, outputs: { onAction: "action" }, features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c4$1, decls: 6, vars: 5, consts: [[1, "dr-dropdown"], ["menuContainer", ""], ["tabindex", "-1", "role", "listbox", 1, "dr-dropdown__container", 3, "mouseenter", "mouseleave"], ["drDropdownChild", "", "role", "option", "tabindex", "0", 3, "drTooltip", "drTooltipPosition", "drTooltipOptions", "drTooltipClass", "drDropdown", "drDropdownClass", "drDropdownInHover", "drDropdownPosition", "disabled", "selected", "divider", "mousedown", 4, "ngFor", "ngForOf"], ["drDropdownChild", "", "role", "option", "tabindex", "0", 3, "drTooltip", "drTooltipPosition", "drTooltipOptions", "drTooltipClass", "drDropdown", "drDropdownClass", "drDropdownInHover", "drDropdownPosition", "disabled", "selected", "divider", "mousedown"], ["dropdownItemContent", "", 4, "ngIf"], ["dropdownItemActions", "", 4, "ngIf"], ["dropdownItemContent", "", 3, "ngTemplateOutlet", "ngTemplateOutletContext", 4, "ngIf"], ["dropdownItemContent", ""], ["class", "dr-dropdown__icon", 3, "class", 4, "ngIf"], [1, "dr-dropdown__text"], [1, "dr-dropdown__icon"], ["dropdownItemActions", ""], [3, "class", "showOnHover", "mousedown", 4, "ngFor", "ngForOf"], ["class", "dr-icon-arrow-right", 4, "ngIf"], [3, "mousedown"], [1, "dr-icon-arrow-right"], ["dropdownItemContent", "", 3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function DrDropdownComponent_Template(rf, ctx) { if (rf & 1) {
9582
+ } }, inputs: { options: "options" }, outputs: { onAction: "action" }, features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c4, decls: 6, vars: 5, consts: [[1, "dr-dropdown"], ["menuContainer", ""], ["tabindex", "-1", "role", "listbox", 1, "dr-dropdown__container", 3, "mouseenter", "mouseleave"], ["drDropdownChild", "", "role", "option", "tabindex", "0", 3, "drTooltip", "drTooltipPosition", "drTooltipOptions", "drTooltipClass", "drDropdown", "drDropdownClass", "drDropdownInHover", "drDropdownPosition", "disabled", "selected", "divider", "mousedown", 4, "ngFor", "ngForOf"], ["drDropdownChild", "", "role", "option", "tabindex", "0", 3, "drTooltip", "drTooltipPosition", "drTooltipOptions", "drTooltipClass", "drDropdown", "drDropdownClass", "drDropdownInHover", "drDropdownPosition", "disabled", "selected", "divider", "mousedown"], ["dropdownItemContent", "", 4, "ngIf"], ["dropdownItemActions", "", 4, "ngIf"], ["dropdownItemContent", "", 3, "ngTemplateOutlet", "ngTemplateOutletContext", 4, "ngIf"], ["dropdownItemContent", ""], ["class", "dr-dropdown__icon", 3, "class", 4, "ngIf"], [1, "dr-dropdown__text"], [1, "dr-dropdown__icon"], ["dropdownItemActions", ""], [3, "class", "showOnHover", "mousedown", 4, "ngFor", "ngForOf"], ["class", "dr-icon-arrow-right", 4, "ngIf"], [3, "mousedown"], [1, "dr-icon-arrow-right"], ["dropdownItemContent", "", 3, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function DrDropdownComponent_Template(rf, ctx) { if (rf & 1) {
9583
9583
  i0.ɵɵprojectionDef(_c3$2);
9584
9584
  i0.ɵɵelementStart(0, "div", 0, 1)(2, "div", 2);
9585
9585
  i0.ɵɵlistener("mouseenter", function DrDropdownComponent_Template_div_mouseenter_2_listener() { return ctx.onMouseenter(); })("mouseleave", function DrDropdownComponent_Template_div_mouseleave_2_listener() { return ctx.onMouseleave(); });
@@ -13646,9 +13646,8 @@ function DrGalleryComponent_dr_button_0_Template(rf, ctx) { if (rf & 1) {
13646
13646
  function DrGalleryComponent_div_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {
13647
13647
  i0.ɵɵelementContainer(0);
13648
13648
  } }
13649
- const _c2 = function (a0) { return { "dr-gallery-item_active": a0 }; };
13650
- const _c3 = function () { return {}; };
13651
- const _c4 = function (a0) { return { $implicit: a0 }; };
13649
+ const _c2 = function () { return {}; };
13650
+ const _c3 = function (a0) { return { $implicit: a0 }; };
13652
13651
  function DrGalleryComponent_div_4_Template(rf, ctx) { if (rf & 1) {
13653
13652
  i0.ɵɵelementStart(0, "div", 6, 7);
13654
13653
  i0.ɵɵtemplate(2, DrGalleryComponent_div_4_ng_container_2_Template, 1, 0, "ng-container", 8);
@@ -13658,9 +13657,10 @@ function DrGalleryComponent_div_4_Template(rf, ctx) { if (rf & 1) {
13658
13657
  const i_r7 = ctx.index;
13659
13658
  const ctx_r2 = i0.ɵɵnextContext();
13660
13659
  i0.ɵɵstyleProp("transition", ctx_r2.transition);
13661
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c2, ctx_r2.centerIndex === i_r7))("ngStyle", ctx_r2.modeType === "loop" ? ctx_r2.getStyle() : i0.ɵɵpureFunction0(8, _c3));
13660
+ i0.ɵɵclassProp("dr-gallery-item_active", ctx_r2.centerIndex === i_r7)("dr-gallery-item_fadein", ctx_r2.fadeIn && ctx_r2.centerIndex === i_r7 + 1);
13661
+ i0.ɵɵproperty("ngStyle", ctx_r2.modeType === "loop" ? ctx_r2.getStyle() : i0.ɵɵpureFunction0(9, _c2));
13662
13662
  i0.ɵɵadvance(2);
13663
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r2.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(9, _c4, item_r6));
13663
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r2.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(10, _c3, item_r6));
13664
13664
  } }
13665
13665
  function DrGalleryComponent_dr_button_5_Template(rf, ctx) { if (rf & 1) {
13666
13666
  const _r11 = i0.ɵɵgetCurrentView();
@@ -13701,6 +13701,9 @@ class DrGalleryComponent {
13701
13701
  this.noTransition = '0ms';
13702
13702
  this.modeType = 'loop';
13703
13703
  this.isOutsideBtns = false;
13704
+ this.fadeIn = false;
13705
+ this.autoPlay = false;
13706
+ this.autoplayInterval = 5000; //5 seconds
13704
13707
  this.activeIndex = 0;
13705
13708
  this.carouselItems = [];
13706
13709
  this.transform = 'translateX(0%)';
@@ -13713,8 +13716,14 @@ class DrGalleryComponent {
13713
13716
  setTimeout(() => {
13714
13717
  this.calculateItemOffsets();
13715
13718
  this.updateTransform();
13719
+ if (this.autoPlay) {
13720
+ this.startAutoplay();
13721
+ }
13716
13722
  });
13717
13723
  }
13724
+ ngOnDestroy() {
13725
+ this.clearAutoplay();
13726
+ }
13718
13727
  initializeCarousel() {
13719
13728
  if (this.modeType === 'loop') {
13720
13729
  this.carouselItems = [
@@ -13783,11 +13792,18 @@ class DrGalleryComponent {
13783
13792
  this.activeIndex++;
13784
13793
  this.updateTransform();
13785
13794
  }
13795
+ else {
13796
+ this.activeIndex = 0;
13797
+ this.updateTransform();
13798
+ }
13786
13799
  }
13787
13800
  }
13788
13801
  navigate(index) {
13789
13802
  this.activeIndex = index;
13790
13803
  this.updateTransform();
13804
+ if (this.autoPlay) {
13805
+ this.startAutoplay();
13806
+ }
13791
13807
  }
13792
13808
  get canGoPrev() {
13793
13809
  if (this.modeType === 'loop')
@@ -13824,6 +13840,18 @@ class DrGalleryComponent {
13824
13840
  this.transition = this.defaultTransition;
13825
13841
  this.cdr.markForCheck();
13826
13842
  }
13843
+ startAutoplay() {
13844
+ this.clearAutoplay();
13845
+ this.autoplayTimer = setInterval(() => {
13846
+ this.next();
13847
+ }, this.autoplayInterval);
13848
+ }
13849
+ clearAutoplay() {
13850
+ if (this.autoplayTimer) {
13851
+ clearInterval(this.autoplayTimer);
13852
+ this.autoplayTimer = null;
13853
+ }
13854
+ }
13827
13855
  /** @nocollapse */ static { this.ɵfac = function DrGalleryComponent_Factory(t) { return new (t || DrGalleryComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
13828
13856
  /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrGalleryComponent, selectors: [["dr-gallery"]], contentQueries: function DrGalleryComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
13829
13857
  i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
@@ -13837,27 +13865,28 @@ class DrGalleryComponent {
13837
13865
  let _t;
13838
13866
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.containerRef = _t.first);
13839
13867
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemElements = _t);
13840
- } }, inputs: { modeType: "modeType", isOutsideBtns: "isOutsideBtns", items: "items", itemsCount: "itemsCount" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 6, vars: 10, consts: [["class", "dr-gallery-btn dr-gallery-btn_left", "theme", "icon", 3, "icon", "click", 4, "ngIf"], ["carouselContainer", ""], [1, "dr-gallery-items"], ["class", "dr-gallery-item", 3, "transition", "ngClass", "ngStyle", 4, "ngFor", "ngForOf"], ["class", "dr-gallery-btn dr-gallery-btn_right", "theme", "icon", 3, "iconSize", "icon", "click", 4, "ngIf"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_left", 3, "icon", "click"], [1, "dr-gallery-item", 3, "ngClass", "ngStyle"], ["carouselItem", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_right", 3, "iconSize", "icon", "click"]], template: function DrGalleryComponent_Template(rf, ctx) { if (rf & 1) {
13868
+ } }, inputs: { modeType: "modeType", isOutsideBtns: "isOutsideBtns", fadeIn: "fadeIn", autoPlay: "autoPlay", autoplayInterval: "autoplayInterval", items: "items", itemsCount: "itemsCount" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 6, vars: 12, consts: [["class", "dr-gallery-btn dr-gallery-btn_left", "theme", "icon", 3, "icon", "click", 4, "ngIf"], ["carouselContainer", ""], [1, "dr-gallery-items"], ["class", "dr-gallery-item", 3, "transition", "dr-gallery-item_active", "dr-gallery-item_fadein", "ngStyle", 4, "ngFor", "ngForOf"], ["class", "dr-gallery-btn dr-gallery-btn_right", "theme", "icon", 3, "iconSize", "icon", "click", 4, "ngIf"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_left", 3, "icon", "click"], [1, "dr-gallery-item", 3, "ngStyle"], ["carouselItem", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["theme", "icon", 1, "dr-gallery-btn", "dr-gallery-btn_right", 3, "iconSize", "icon", "click"]], template: function DrGalleryComponent_Template(rf, ctx) { if (rf & 1) {
13841
13869
  i0.ɵɵtemplate(0, DrGalleryComponent_dr_button_0_Template, 1, 1, "dr-button", 0);
13842
13870
  i0.ɵɵelementStart(1, "div", null, 1)(3, "div", 2);
13843
- i0.ɵɵtemplate(4, DrGalleryComponent_div_4_Template, 3, 11, "div", 3);
13871
+ i0.ɵɵtemplate(4, DrGalleryComponent_div_4_Template, 3, 12, "div", 3);
13844
13872
  i0.ɵɵelementEnd()();
13845
13873
  i0.ɵɵtemplate(5, DrGalleryComponent_dr_button_5_Template, 1, 2, "dr-button", 4);
13846
13874
  } if (rf & 2) {
13847
13875
  i0.ɵɵproperty("ngIf", !ctx.isOutsideBtns);
13848
13876
  i0.ɵɵadvance(1);
13849
13877
  i0.ɵɵclassMapInterpolate1("dr-gallery-caroousel dr-gallery-caroousel_", ctx.modeType, "");
13878
+ i0.ɵɵclassProp("dr-gallery-caroousel_fadein", ctx.fadeIn);
13850
13879
  i0.ɵɵadvance(2);
13851
13880
  i0.ɵɵstyleProp("transition", ctx.transition)("transform", ctx.transform);
13852
13881
  i0.ɵɵadvance(1);
13853
13882
  i0.ɵɵproperty("ngForOf", ctx.carouselItems);
13854
13883
  i0.ɵɵadvance(1);
13855
13884
  i0.ɵɵproperty("ngIf", !ctx.isOutsideBtns);
13856
- } }, dependencies: [CommonModule, i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, DrInputsModule, DrButtonComponent], styles: [".dr-gallery-caroousel[_ngcontent-%COMP%]{display:block;position:relative;overflow:hidden}.dr-gallery-items[_ngcontent-%COMP%]{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item[_ngcontent-%COMP%]{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1}.dr-gallery-btn[_ngcontent-%COMP%]{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:40px!important;height:40px!important}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-radius:50%}.dr-gallery-btn_left[_ngcontent-%COMP%]{left:0}.dr-gallery-btn_right[_ngcontent-%COMP%]{right:0}.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item[_ngcontent-%COMP%]{width:100%;min-height:240px}.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item_active[_ngcontent-%COMP%]{transform:scale(1.2)}"], changeDetection: 0 }); }
13885
+ } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, DrInputsModule, DrButtonComponent], styles: [".dr-gallery-caroousel[_ngcontent-%COMP%]{display:block;position:relative;overflow:hidden}.dr-gallery-caroousel.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item[_ngcontent-%COMP%]{width:100%;min-height:240px}.dr-gallery-caroousel.dr-gallery-caroousel_loop[_ngcontent-%COMP%] .dr-gallery-item_active[_ngcontent-%COMP%]{transform:scale(1.2)}.dr-gallery-caroousel.dr-gallery-caroousel_fadein[_ngcontent-%COMP%] .dr-gallery-item[_ngcontent-%COMP%]{opacity:0}.dr-gallery-items[_ngcontent-%COMP%]{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item[_ngcontent-%COMP%]{box-sizing:border-box;position:relative;flex-grow:1;padding:42px 24px;margin-top:-8px}.dr-gallery-item_fadein[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_fadeIn .3s ease-in .25s forwards}.dr-gallery-btn[_ngcontent-%COMP%]{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:40px!important;height:40px!important}.dr-gallery-btn[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{border-radius:50%}.dr-gallery-btn_left[_ngcontent-%COMP%]{left:0}.dr-gallery-btn_right[_ngcontent-%COMP%]{right:0}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}"], changeDetection: 0 }); }
13857
13886
  }
13858
13887
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrGalleryComponent, [{
13859
13888
  type: Component,
13860
- args: [{ selector: 'dr-gallery', imports: [CommonModule, DrInputsModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_left\"\n (click)=\"prev()\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-left'\">\n</dr-button>\n\n<div #carouselContainer class=\"dr-gallery-caroousel dr-gallery-caroousel_{{ modeType }}\">\n <div class=\"dr-gallery-items\" [style.transition]=\"transition\" [style.transform]=\"transform\">\n <div\n #carouselItem\n *ngFor=\"let item of carouselItems; let i = index\"\n class=\"dr-gallery-item\"\n [style.transition]=\"transition\"\n [ngClass]=\"{ 'dr-gallery-item_active': centerIndex === i }\"\n [ngStyle]=\"modeType === 'loop' ? getStyle() : {}\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item }\"></ng-container>\n </div>\n </div>\n</div>\n\n<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_right\"\n (click)=\"next()\"\n [iconSize]=\"'24px'\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-right'\">\n</dr-button>\n", styles: [".dr-gallery-caroousel{display:block;position:relative;overflow:hidden}.dr-gallery-items{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item{box-sizing:border-box;position:relative;padding:42px 24px;margin-top:-8px;flex-grow:1}.dr-gallery-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn button{width:40px!important;height:40px!important}.dr-gallery-btn button:hover{border-radius:50%}.dr-gallery-btn_left{left:0}.dr-gallery-btn_right{right:0}.dr-gallery-caroousel_loop .dr-gallery-item{width:100%;min-height:240px}.dr-gallery-caroousel_loop .dr-gallery-item_active{transform:scale(1.2)}\n"] }]
13889
+ args: [{ selector: 'dr-gallery', imports: [CommonModule, DrInputsModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_left\"\n (click)=\"prev()\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-left'\">\n</dr-button>\n\n<div\n #carouselContainer\n class=\"dr-gallery-caroousel dr-gallery-caroousel_{{ modeType }}\"\n [class.dr-gallery-caroousel_fadein]=\"fadeIn\">\n <div class=\"dr-gallery-items\" [style.transition]=\"transition\" [style.transform]=\"transform\">\n <div\n #carouselItem\n *ngFor=\"let item of carouselItems; let i = index\"\n class=\"dr-gallery-item\"\n [style.transition]=\"transition\"\n [class.dr-gallery-item_active]=\"centerIndex === i\"\n [class.dr-gallery-item_fadein]=\"fadeIn && centerIndex === i + 1\"\n [ngStyle]=\"modeType === 'loop' ? getStyle() : {}\">\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: item }\"></ng-container>\n </div>\n </div>\n</div>\n\n<dr-button\n *ngIf=\"!isOutsideBtns\"\n class=\"dr-gallery-btn dr-gallery-btn_right\"\n (click)=\"next()\"\n [iconSize]=\"'24px'\"\n theme=\"icon\"\n [icon]=\"'dr-icon-arrow-right'\">\n</dr-button>\n", styles: [".dr-gallery-caroousel{display:block;position:relative;overflow:hidden}.dr-gallery-caroousel.dr-gallery-caroousel_loop .dr-gallery-item{width:100%;min-height:240px}.dr-gallery-caroousel.dr-gallery-caroousel_loop .dr-gallery-item_active{transform:scale(1.2)}.dr-gallery-caroousel.dr-gallery-caroousel_fadein .dr-gallery-item{opacity:0}.dr-gallery-items{display:flex;position:relative;align-items:flex-end;will-change:transform}.dr-gallery-item{box-sizing:border-box;position:relative;flex-grow:1;padding:42px 24px;margin-top:-8px}.dr-gallery-item_fadein{animation:fadeIn .3s ease-in .25s forwards}.dr-gallery-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:9999;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:50%;box-shadow:0 4px 4px #00000040}.dr-gallery-btn button{width:40px!important;height:40px!important}.dr-gallery-btn button:hover{border-radius:50%}.dr-gallery-btn_left{left:0}.dr-gallery-btn_right{right:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"] }]
13861
13890
  }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { template: [{
13862
13891
  type: ContentChild,
13863
13892
  args: [TemplateRef]
@@ -13865,6 +13894,12 @@ class DrGalleryComponent {
13865
13894
  type: Input
13866
13895
  }], isOutsideBtns: [{
13867
13896
  type: Input
13897
+ }], fadeIn: [{
13898
+ type: Input
13899
+ }], autoPlay: [{
13900
+ type: Input
13901
+ }], autoplayInterval: [{
13902
+ type: Input
13868
13903
  }], items: [{
13869
13904
  type: Input
13870
13905
  }], itemsCount: [{