oasys-lib 1.63.0 → 1.64.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { DOCUMENT } from '@angular/common';
2
- import { Component, ElementRef, Input, ViewChild, ViewEncapsulation, Inject } from '@angular/core';
2
+ import { Component, ElementRef, Input, ViewChild, ViewEncapsulation, Inject, EventEmitter, Output } from '@angular/core';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../services/token.service";
5
5
  import * as i2 from "@angular/common";
@@ -25,6 +25,10 @@ export class CarouselComponent {
25
25
  this.carousel_loading = 'lazy'; // If we don't have multiple carousels on page and want to prioritise UI loading on time
26
26
  this.carousel_free_mode = false; // Enables scrolling with mousewheel / smoother momentum swiping experience
27
27
  this.center_insufficient_slides = true; // Centers the slides if there are not enough to fill the space
28
+ this.center_active_slide = false; // Centers the active slide
29
+ this.start_slide = 0; // Start slide index
30
+ this.offset_scrollbar_top = false; // Offset the scrollbar to the top of the carousel
31
+ this.activeIndexOnSlideChange = new EventEmitter();
28
32
  }
29
33
  ngOnInit() {
30
34
  if (this.carousel_loading === 'lazy') {
@@ -83,7 +87,7 @@ export class CarouselComponent {
83
87
  }
84
88
  if (carouselStack && this.carousel_pagination === 'scroll-bar') {
85
89
  this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-width", "100%");
86
- this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-offset-top", `0px`);
90
+ this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-offset-top", `${this.offset_scrollbar_top ? parseInt(this.getStyle(carouselStack, 'gap'), 10) + 'px' : '0px'}`);
87
91
  this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-height", "4px");
88
92
  this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-left", "0px");
89
93
  }
@@ -103,6 +107,8 @@ export class CarouselComponent {
103
107
  rewind: this.rewind,
104
108
  grabCursor: true,
105
109
  spaceBetween: (parseInt(carouselGap.replace('.', ''), 10)) || 0,
110
+ centeredSlides: this.center_active_slide,
111
+ initialSlide: this.start_slide,
106
112
  scrollbar: {
107
113
  enabled: this.carousel_pagination === 'scroll-arrows' || this.carousel_pagination === 'scroll-bar',
108
114
  draggable: true,
@@ -166,7 +172,9 @@ export class CarouselComponent {
166
172
  slidesPerView: this.carousel_slides_per_view_desktop
167
173
  }
168
174
  },
169
- on: {},
175
+ on: {
176
+ slideChange: this.onSlideChange.bind(this)
177
+ }
170
178
  };
171
179
  // now we need to assign all parameters to the Swiper element
172
180
  Object.assign(swiperEl, swiperParams);
@@ -190,8 +198,15 @@ export class CarouselComponent {
190
198
  previousSlide() {
191
199
  this.swiper.nativeElement.swiper.slidePrev();
192
200
  }
201
+ /**
202
+ * Emit event when the slide changes
203
+ * @param swiper
204
+ */
205
+ onSlideChange(swiper) {
206
+ this.activeIndexOnSlideChange.emit(swiper.activeIndex);
207
+ }
193
208
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: CarouselComponent, deps: [{ token: i1.TokenService }, { token: DOCUMENT }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
194
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: CarouselComponent, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides" }, viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\nclass=\"ui-carousel\"\n[ngClass]=\"{'ui-carousel-overflow': carousel_overflow}\"\nbox_align_y=\"center\"\nbox_space=\"none\"\nbox_content_fill_width=\"true\"\nbox_background=\"transparent\">\n\n <ui-stack #carouselctastack>\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\">\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack stack_direction=\"x\" stack_align=\"center\" *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\">\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none'}\"\n box_background=\"transparent\">\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\">\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n (clicked)=\"previousSlide()\"> Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n (clicked)=\"nextSlide()\"> Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel.ui-carousel-overflow swiper-container{overflow:visible!important}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.OasysButtonComponent, selector: "ui-button", inputs: ["button_icon", "button_icon_placement", "button_size", "button_full_width", "button_type", "button_event_type", "button_disabled", "button_text_nowrap", "href"], outputs: ["clicked"] }, { kind: "component", type: i4.LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: i5.LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }], encapsulation: i0.ViewEncapsulation.None }); }
209
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: CarouselComponent, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides", center_active_slide: "center_active_slide", start_slide: "start_slide", offset_scrollbar_top: "offset_scrollbar_top" }, outputs: { activeIndexOnSlideChange: "activeIndexOnSlideChange" }, viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\nclass=\"ui-carousel\"\n[ngClass]=\"{'ui-carousel-overflow': carousel_overflow}\"\nbox_align_y=\"center\"\nbox_space=\"none\"\nbox_content_fill_width=\"true\"\nbox_background=\"transparent\">\n\n <ui-stack #carouselctastack>\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\">\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack stack_direction=\"x\" stack_align=\"center\" *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\">\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none'}\"\n box_background=\"transparent\">\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\">\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n (clicked)=\"previousSlide()\"> Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n (clicked)=\"nextSlide()\"> Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel.ui-carousel-overflow swiper-container{overflow:visible!important}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.OasysButtonComponent, selector: "ui-button", inputs: ["button_icon", "button_icon_placement", "button_size", "button_full_width", "button_type", "button_event_type", "button_disabled", "button_text_nowrap", "href"], outputs: ["clicked"] }, { kind: "component", type: i4.LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: i5.LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }], encapsulation: i0.ViewEncapsulation.None }); }
195
210
  }
196
211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: CarouselComponent, decorators: [{
197
212
  type: Component,
@@ -201,13 +216,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
201
216
  args: [DOCUMENT]
202
217
  }] }, { type: i0.ElementRef }]; }, propDecorators: { swiper: [{
203
218
  type: ViewChild,
204
- args: ["swiper", { static: true }]
219
+ args: ['swiper', { static: true }]
205
220
  }], carouselscrollbarplaceholder: [{
206
221
  type: ViewChild,
207
- args: ["carouselscrollbarplaceholder", { static: false, read: ElementRef }]
222
+ args: ['carouselscrollbarplaceholder', { static: false, read: ElementRef }]
208
223
  }], carouselctastack: [{
209
224
  type: ViewChild,
210
- args: ["carouselctastack", { static: false, read: ElementRef }]
225
+ args: ['carouselctastack', { static: false, read: ElementRef }]
211
226
  }], rewind: [{
212
227
  type: Input
213
228
  }], carousel_overflow: [{
@@ -232,5 +247,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
232
247
  type: Input
233
248
  }], center_insufficient_slides: [{
234
249
  type: Input
250
+ }], center_active_slide: [{
251
+ type: Input
252
+ }], start_slide: [{
253
+ type: Input
254
+ }], offset_scrollbar_top: [{
255
+ type: Input
256
+ }], activeIndexOnSlideChange: [{
257
+ type: Output
235
258
  }] } });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2FzeXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYXN5cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ0ksTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFJbEMsb0VBQW9FO0FBUXBFLE1BQU0sT0FBTyxpQkFBaUI7SUEwQjVCLFlBQW9CLFlBQTBCLEVBQTRCLFFBQWtCLEVBQVUsT0FBbUI7UUFBckcsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBNEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFwQnpILHNGQUFzRjtRQUM3RSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXhCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUVuQyxpQkFBWSxHQUEwQyxTQUFTLENBQUM7UUFFaEUsd0JBQW1CLEdBQTRDLE1BQU0sQ0FBQztRQUV0RSxxQ0FBZ0MsR0FBVyxDQUFDLENBQUM7UUFDN0Msb0NBQStCLEdBQVcsQ0FBQyxDQUFDO1FBQzVDLG9DQUErQixHQUFXLEdBQUcsQ0FBQztRQUM5QyxvQ0FBK0IsR0FBVyxJQUFJLENBQUM7UUFFL0MsaUNBQTRCLEdBQVUsQ0FBQyxDQUFBLENBQUMscUVBQXFFO1FBRTdHLHFCQUFnQixHQUFxQixNQUFNLENBQUMsQ0FBQyx3RkFBd0Y7UUFDckksdUJB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Q0gsYUFBYTtRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMvQyxDQUFDOytHQXBPVSxpQkFBaUIsOENBMEI0QixRQUFRO21HQTFCckQsaUJBQWlCLHUzQkFHc0MsVUFBVSwrR0FDdEIsVUFBVSw2QkN6QmxFLGdyRUFzREE7OzRGRGpDYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsYUFBYSxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJOzswQkE0QlksTUFBTTsyQkFBQyxRQUFRO3FFQXhCekIsTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUMyQyw0QkFBNEI7c0JBQTNHLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ1YsZ0JBQWdCO3NCQUFuRixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUd6RCxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLGdDQUFnQztzQkFBeEMsS0FBSztnQkFDRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBQ0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFFRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEluamVjdCxcbiAgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN3aXBlck9wdGlvbnMgfSBmcm9tICdzd2lwZXInO1xuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9rZW4uc2VydmljZSc7XG5cbi8qIFRoaXMgY29tcG9uZW50IHdyYXBzIGFyb3VuZCB0aGUgc3dpcGVyLmpzIGxpYnJhcnkgV2ViQ29tcG9uZW50ICovXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLWNhcm91c2VsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIFRoZSBzd2lwZXIgaW5zdGFuY2VcbiAgQFZpZXdDaGlsZChcInN3aXBlclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBzd2lwZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoXCJjYXJvdXNlbHNjcm9sbGJhcnBsYWNlaG9sZGVyXCIsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KSBjYXJvdXNlbHNjcm9sbGJhcnBsYWNlaG9sZGVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKFwiY2Fyb3VzZWxjdGFzdGFja1wiLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2Fyb3VzZWxjdGFzdGFjazogRWxlbWVudFJlZjtcblxuICAvLyBSZXdpbmRzIHRoZSBzbGlkZXMgYmFjayB0byB0aGUgc3RhcnQgd2hlbiB0aGUgdXNlciByZWFjaGVzIHRoZSBlbmQgd2hlbiBzZXQgdG8gdHJ1ZVxuICBASW5wdXQoKSByZXdpbmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBjYXJvdXNlbF9vdmVyZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGNhcm91c2VsX2dhcDogJ2RlZmF1bHQnIHwgJ3RpZ2h0JyB8ICduZWFyJyB8ICdub25lJyA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKSBjYXJvdXNlbF9wYWdpbmF0aW9uOiAnc2Nyb2xsLWFycm93cycgfCAnbm9uZScgfCAnc2Nyb2xsLWJhcicgPSAnbm9uZSc7XG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X2Rlc2t0b3A6IG51bWJlciA9IDQ7XG4gIEBJbnB1dCgpIGNhcm91c2VsX3NsaWRlc19wZXJfdmlld19sYXB0b3A6IG51bWJlciA9IDM7XG4gIEBJbnB1dCgpIGNhcm91c2VsX3NsaWRlc19wZXJfdmlld190YWJsZXQ6IG51bWJlciA9IDIuNTtcbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X21vYmlsZTogbnVtYmVyID0gMS4yNTtcblxuICBASW5wdXQoKSBjYXJvdXNlbF9yb3dzX3Blcl9yb3dfbW9iaWxlOiAxIHwgMiA9IDEgLy8gUmVxdWlyZWQgZm9yIENBVEVHT1JZX0NBUkQgZXhwZXJpbWVudC4gUmVtb3ZlIGlmIGV4cGVyaW1lbnQgZmFpbHMuXG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfbG9hZGluZzogJ2xhenknIHwgJ2VhZ2VyJyA9ICdsYXp5JzsgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBjYXJvdXNlbHMgb24gcGFnZSBhbmQgd2FudCB0byBwcmlvcml0aXNlIFVJIGxvYWRpbmcgb24gdGltZVxuICBASW5wdXQoKSBjYXJvdXNlbF9mcmVlX21vZGU6IGJvb2xlYW4gPSBmYWxzZSAvLyBFbmFibGVzIHNjcm9sbGluZyB3aXRoIG1vdXNld2hlZWwgLyBzbW9vdGhlciBtb21lbnR1bSBzd2lwaW5nIGV4cGVyaWVuY2VcbiAgQElucHV0KCkgY2VudGVyX2luc3VmZmljaWVudF9zbGlkZXM6IGJvb2xlYW4gPSB0cnVlIC8vIENlbnRlcnMgdGhlIHNsaWRlcyBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCB0byBmaWxsIHRoZSBzcGFjZVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LCBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5jYXJvdXNlbF9sb2FkaW5nID09PSAnbGF6eScpe1xuICAgICAgdGhpcy5zZXRVcEludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFN3aXBlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgdGhlIGludGVyc2VjdGlvbiBvYnNlcnZlciB3aXRoIHRoZSByZWxldmFudCBvcHRpb25zXG4gICAqL1xuICBzZXRVcEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuICAgIC8vIFNldCBJbnRlcnNlY3Rpb25PYnNlcnZlciBvcHRpb25zXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IG51bGwsXG4gICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgIHRocmVzaG9sZDogMC41LFxuICAgICAgb25jZTogdHJ1ZVxuICAgIH1cbiAgICAvLyBTZXQgdXAgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIodGhpcy5vbkludGVyc2VjdGlvbi5iaW5kKHRoaXMpLCBvcHRpb25zKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSB1c2VyIHNjcm9sbHMgdGhpcyBjb21wb25lbnQgaW50byB2aWV3XG4gICAqIEBwYXJhbSBlbnRyaWVzIC0gQW4gYXJyYXkgb2YgaW50ZXJzd2VjdGlvbiBvYnNlcnZlciBlbnRyaWVzXG4gICAqIEBwYXJhbSBvYnNlcnZlciAtIEludGVyc2VjdGlvbiBvYnNlcnZlclxuICAgKi9cbiAgb25JbnRlcnNlY3Rpb24oZW50cmllczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdLCBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgIGlmKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgLy8gSW5pdGlhbGlzZSBzd2lwZXJcbiAgICAgICAgICB0aGlzLmluaXRTd2lwZXIoKTtcbiAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgZ2V0U3R5bGUoZWxlbWVudCwgc3R5bGUpOiBzdHJpbmcge1xuXG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNjcm9sbGJhciBwbGFjZW1lbnQgYW5kIHdpZHRoIGJhc2VkIG9uIGNhcm91c2Vsc2Nyb2xsYmFycGxhY2Vob2xkZXIgYW5kIGNhcm91c2VsY3Rhc3RhY2tcbiAgICovXG4gIHNldHVwU2Nyb2xsYmFyTGF5b3V0UHJvcGVydGllcygpOiB2b2lkIHtcbiAgICBpZih0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdub25lJyl7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2Fyb3VzZWxTdGFjazogSFRNTEVsZW1lbnQgPSB0aGlzLmNhcm91c2VsY3Rhc3RhY2s/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2Nyb2xsYmFyRWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmNhcm91c2Vsc2Nyb2xsYmFycGxhY2Vob2xkZXI/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBzY3JvbGxiYXJIZWlnaHQgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1zd2lwZXItc2Nyb2xsYmFyLXNpemVcIik7XG5cbiAgICBpZihjYXJvdXNlbFN0YWNrICYmIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnKXtcbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICBcIi0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLXdpZHRoXCIsIGAke3Njcm9sbGJhckVsZW1lbnQ/Lm9mZnNldFdpZHRoIC0gcGFyc2VJbnQodGhpcy5nZXRTdHlsZShjYXJvdXNlbFN0YWNrLCAnZ2FwJyksIDEwKX1weGBcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICBcIi0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLW9mZnNldC10b3BcIiwgYCR7cGFyc2VJbnQodGhpcy5nZXRTdHlsZShjYXJvdXNlbFN0YWNrLCAnZ2FwJyksIDEwKSArIChzY3JvbGxiYXJFbGVtZW50Py5vZmZzZXRIZWlnaHQgLyAyKSArIChwYXJzZUludChzY3JvbGxiYXJIZWlnaHQsIDEwKSAvIDIpfXB4YFxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgIFwiLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItaGVpZ2h0XCIsIFwiMnB4XCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYoY2Fyb3VzZWxTdGFjayAmJiB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyl7XG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCItLXVpLWNhcm91c2VsLXNjcm9sbGJhci13aWR0aFwiLCBcIjEwMCVcIlxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgIFwiLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItb2Zmc2V0LXRvcFwiLCBgMHB4YFxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgIFwiLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItaGVpZ2h0XCIsIFwiNHB4XCJcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICBcIi0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWxlZnRcIiwgXCIwcHhcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkeW5hbWljIHN3aXBlciBwYXJhbXMgYW5kIGluaXRpYWxpc2UgdGhlIHN3aXBlciBpbnN0YW5jZVxuICAgKi9cbiAgaW5pdFN3aXBlcigpOiB2b2lkIHtcbiAgICAvLyBDb2xvdXIgb3ZlcmlkZXNcbiAgICBjb25zdCBzY3JvbGxiYXJCYWNrZ3JvdW5kQ29sb3VyID0gdGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW5WYWx1ZSgnLS1vYXN5cy1jb2xvci1saW5lbi1ncmV5LTIwMCcpO1xuICAgIGNvbnN0IHNjcm9sbGJhclNsaWRlckNvbG91ciA9IHRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuVmFsdWUoJy0tb2FzeXMtY29sb3ItYnJhbmQtZm9yZWdyb3VuZC1wcmltYXJ5Jyk7XG5cbiAgICAvLyBzd2lwZXIgZWxlbWVudFxuICAgIGNvbnN0IHN3aXBlckVsID0gdGhpcy5zd2lwZXIubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IGNhcm91c2VsR2FwID0gdGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW5WYWx1ZShgLS1vYXN5cy1zcGFjaW5nLSR7dGhpcy5jYXJvdXNlbF9nYXB9YCk7XG5cbiAgICAvLyBzd2lwZXIgcGFyYW1ldGVyc1xuICAgIGNvbnN0IHN3aXBlclBhcmFtczogU3dpcGVyT3B0aW9ucyA9IHtcbiAgICAgIHJld2luZDogdGhpcy5yZXdpbmQsXG4gICAgICBncmFiQ3Vyc29yOiB0cnVlLFxuICAgICAgc3BhY2VCZXR3ZWVuOiAocGFyc2VJbnQoY2Fyb3VzZWxHYXAucmVwbGFjZSgnLicsICcnKSwgMTApKSB8fCAwLFxuICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2VudGVySW5zdWZmaWNpZW50U2xpZGVzOiB0aGlzLmNlbnRlcl9pbnN1ZmZpY2llbnRfc2xpZGVzLFxuICAgICAgZnJlZU1vZGU6IHRoaXMuY2Fyb3VzZWxfZnJlZV9tb2RlID8ge1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBzdGlja3k6IHRydWUsXG4gICAgICAgIG1vbWVudHVtVmVsb2NpdHlSYXRpbzogMC43NSxcbiAgICAgICAgbW9tZW50dW1SYXRpbzogMC43NVxuICAgICAgfSA6IGZhbHNlLFxuICAgICAgbW91c2V3aGVlbDogdGhpcy5jYXJvdXNlbF9mcmVlX21vZGUgPyB7XG4gICAgICAgIGZvcmNlVG9BeGlzOiB0cnVlXG4gICAgICB9OiBmYWxzZSxcbiAgICAgIGluamVjdFN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgIC5zd2lwZXItc2Nyb2xsYmFyLnN3aXBlci1zY3JvbGxiYXItaG9yaXpvbnRhbCB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHRvcDogdmFyKC0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLW9mZnNldC10b3ApO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItd2lkdGgpO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWhlaWdodCk7XG4gICAgICAgICAgbGVmdDogJHt0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyA/ICd2YXIoLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItbGVmdCknIDogJzElJ307XG4gICAgICAgICAgYmFja2dyb3VuZDogJHtzY3JvbGxiYXJCYWNrZ3JvdW5kQ29sb3VyfVxuICAgICAgICB9XG5cbiAgICAgICAgLnN3aXBlci1zY3JvbGxiYXItZHJhZyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJHtzY3JvbGxiYXJTbGlkZXJDb2xvdXJ9XG4gICAgICAgIH1gLFxuICAgICAgXSxcbiAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgIDA6IHtcbiAgICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiB0aGlzLmNhcm91c2VsX3NsaWRlc19wZXJfdmlld19tb2JpbGUsXG4gICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgcm93czogdGhpcy5jYXJvdXNlbF9yb3dzX3Blcl9yb3dfbW9iaWxlLFxuICAgICAgICAgICAgZmlsbDogXCJyb3dcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICA3Njc6IHtcbiAgICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiB0aGlzLmNhcm91c2VsX3NsaWRlc19wZXJfdmlld190YWJsZXRcbiAgICAgICAgfSxcbiAgICAgICAgMTA4MDoge1xuICAgICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHwgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicsXG4gICAgICAgICAgICBkcmFnZ2FibGU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMuY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X2xhcHRvcFxuICAgICAgICB9LFxuICAgICAgICAxNDQwOiB7XG4gICAgICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJyB8fCB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyxcbiAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogdGhpcy5jYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfZGVza3RvcFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb246IHt9LFxuICAgIH07XG5cbiAgICAvLyBub3cgd2UgbmVlZCB0byBhc3NpZ24gYWxsIHBhcmFtZXRlcnMgdG8gdGhlIFN3aXBlciBlbGVtZW50XG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXJFbCwgc3dpcGVyUGFyYW1zKTtcblxuICAgIC8vIGFuZCBub3cgaW5pdGlhbGl6ZSBpdFxuICAgIHN3aXBlckVsLmluaXRpYWxpemUoKTtcblxuICAgIC8vIFNldCB1cCBzY3JvbGxiYXIgYW5kIGVuc3VyZSB0aGlzIGlzIHJlY2FsY3VsYXRlZCBvbiByZXNpemUgZXZlbnRzXG4gICAgdGhpcy5zZXR1cFNjcm9sbGJhckxheW91dFByb3BlcnRpZXMoKTtcblxuICAgIHN3aXBlckVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBTY3JvbGxiYXJMYXlvdXRQcm9wZXJ0aWVzKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0aGUgY2Fyb3VzZWwgb24gdG8gdGhlIG5leHQgc2xpZGVcbiAgICovXG4gIG5leHRTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN3aXBlci5uYXRpdmVFbGVtZW50LnN3aXBlci5zbGlkZU5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRoZSBjYXJvdXNlbCBiYWNrIHRvIHRoZSBwcmV2aW91cyBzbGlkZVxuICAgKi9cbiAgcHJldmlvdXNTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN3aXBlci5uYXRpdmVFbGVtZW50LnN3aXBlci5zbGlkZVByZXYoKTtcbiAgfVxufVxuIiwiPHVpLWJveFxuY2xhc3M9XCJ1aS1jYXJvdXNlbFwiXG5bbmdDbGFzc109XCJ7J3VpLWNhcm91c2VsLW92ZXJmbG93JzogY2Fyb3VzZWxfb3ZlcmZsb3d9XCJcbmJveF9hbGlnbl95PVwiY2VudGVyXCJcbmJveF9zcGFjZT1cIm5vbmVcIlxuYm94X2NvbnRlbnRfZmlsbF93aWR0aD1cInRydWVcIlxuYm94X2JhY2tncm91bmQ9XCJ0cmFuc3BhcmVudFwiPlxuXG4gICAgPHVpLXN0YWNrICNjYXJvdXNlbGN0YXN0YWNrPlxuICAgICAgICA8IS0tIFN3aXBlciBXZWJDb21wb25lbnQtLT5cbiAgICAgICAgPHN3aXBlci1jb250YWluZXJcbiAgICAgICAgI3N3aXBlclxuICAgICAgICBpbml0PVwiZmFsc2VcIlxuICAgICAgICB0b3VjaC1zdGFydC1wcmV2ZW50LWRlZmF1bHQ9XCJmYWxzZVwiXG4gICAgICAgIHByZXZlbnQtY2xpY2tzLXByb3BhZ2F0aW9uPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L3N3aXBlci1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBDdXN0b20gbmF2aWdhdGlvbiBidXR0b25zIC0tPlxuICAgICAgICA8dWktc3RhY2sgc3RhY2tfZGlyZWN0aW9uPVwieFwiIHN0YWNrX2FsaWduPVwiY2VudGVyXCIgKm5nSWY9XCJjYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHwgY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktY2Fyb3VzZWwtc2Nyb2xsYmFyLXBsYWNlaG9sZGVyXCIgI2Nhcm91c2Vsc2Nyb2xsYmFycGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgICAgICA8dWktYm94XG4gICAgICAgICAgICAqbmdJZj1cImNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJ1wiXG4gICAgICAgICAgICBib3hfc3BhY2U9XCJub25lXCJcbiAgICAgICAgICAgIGJveF9maWxsX21vZGU9XCJmaXRcIlxuICAgICAgICAgICAgW2JveF9zcGFjZV9yaWdodF09XCJ7bW9iaWxlOiAndGlnaHQnLCB0YWJsZXQ6ICdub25lJywgbGFwdG9wOiAnbm9uZScsIGRlc2t0b3A6ICdub25lJ31cIlxuICAgICAgICAgICAgYm94X2JhY2tncm91bmQ9XCJ0cmFuc3BhcmVudFwiPlxuICAgICAgICAgICAgICAgIDx1aS1zdGFja1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiIShzd2lwZXI/LnN3aXBlcj8uaXNCZWdpbm5pbmcgJiYgc3dpcGVyPy5zd2lwZXI/LmlzRW5kKVwiXG4gICAgICAgICAgICAgICAgc3RhY2tfZGlyZWN0aW9uPVwieFwiXG4gICAgICAgICAgICAgICAgc3RhY2tfZ2FwPVwibmVhclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFByZXZpb3VzIGJ1dHRvbi0tPlxuICAgICAgICAgICAgICAgICAgICA8dWktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidWktY2Fyb3VzZWxfX3ByZXZpb3VzXCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX3NpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbl9pY29uX3BsYWNlbWVudD1cImljb25Pbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX2ljb249XCJhcnJvdy1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX3R5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJwcmV2aW91c1NsaWRlKClcIj4gUHJldm91cyBzbGlkZVxuICAgICAgICAgICAgICAgICAgICA8L3VpLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBOZXh0IGJ1dHRvbi0tPlxuICAgICAgICAgICAgICAgICAgICA8dWktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidWktY2Fyb3VzZWxfX25leHRcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25fc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX2ljb25fcGxhY2VtZW50PVwiaWNvbk9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25faWNvbj1cImFycm93LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX3R5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJuZXh0U2xpZGUoKVwiPiBOZXh0IHNsaWRlXG4gICAgICAgICAgICAgICAgICAgIDwvdWktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvdWktc3RhY2s+XG4gICAgICAgICAgICA8L3VpLWJveD5cbiAgICAgICAgPC91aS1zdGFjaz5cbiAgICA8L3VpLXN0YWNrPlxuPC91aS1ib3g+XG4iXX0=
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2FzeXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYXN5cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUloQyxvRUFBb0U7QUFRcEUsTUFBTSxPQUFPLGlCQUFpQjtJQStCNUIsWUFBb0IsWUFBMEIsRUFBNEIsUUFBa0IsRUFBVSxPQUFtQjtRQUFyRyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUE0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQXpCekgsc0ZBQXNGO1FBQzdFLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRW5DLGlCQUFZLEdBQTBDLFNBQVMsQ0FBQztRQUVoRSx3QkFBbUIsR0FBNEMsTUFBTSxDQUFDO1FBRXRFLHFDQUFnQyxHQUFXLENBQUMsQ0FBQztRQUM3QyxvQ0FBK0IsR0FBVyxDQUFDLENBQUM7UUFDNUMsb0NBQStCLEdBQVcsR0FBRyxDQUFDO1FBQzlDLG9DQUErQixHQUFXLElBQUksQ0FBQztRQUUvQyxpQ0FBNEIsR0FBVSxDQUFDLENBQUMsQ0FBQyxxRUFBcUU7UUFFOUcscUJBQWdCLEdBQXFCLE1BQU0sQ0FBQyxDQUFDLHdGQUF3RjtRQUNySSx1QkFBa0IsR0FBWSxLQUFLLENBQUMsQ0FBQywyRUFBMkU7UUFDaEgsK0JBQTBCLEdBQVksSUFBSSxDQUFDLENBQUMsK0RBQStEO1FBQzNHLHdCQUFtQixHQUFZLEtBQUssQ0FBQyxDQUFDLDJCQUEyQjtRQUNqRSxnQkFBVyxHQUFXLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUM3Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUMsQ0FBQyxrREFBa0Q7UUFFeEYsNkJBQXdCLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFOEMsQ0FBQztJQUU3SCxRQUFRO1FBQ04sSUFBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxFQUFDO1lBQ2xDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCx5QkFBeUI7UUFDdkIsbUNBQW1DO1FBQ25DLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsS0FBSztZQUNqQixTQUFTLEVBQUUsR0FBRztZQUNkLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQTtRQUNELGtDQUFrQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25GLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxPQUFvQyxFQUFFLFFBQThCO1FBQy9FLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsSUFBRyxLQUFLLENBQUMsY0FBYyxFQUFFO2dCQUN2QixvQkFBb0I7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDakM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFFckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsOEJBQThCO1FBQzVCLElBQUcsSUFBSSxDQUFDLG1CQUFtQixLQUFLLE1BQU0sRUFBQztZQUNyQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGFBQWEsR0FBZ0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztRQUN4RSxNQUFNLGdCQUFnQixHQUFnQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsYUFBYSxDQUFDO1FBRXZGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRXpJLElBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxlQUFlLEVBQUM7WUFDL0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FDN0MsK0JBQStCLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQzFILENBQUM7WUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUM3QyxvQ0FBb0MsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDNUssQ0FBQztZQUVGLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQzdDLGdDQUFnQyxFQUFFLEtBQUssQ0FDeEMsQ0FBQztTQUNIO1FBRUQsSUFBRyxhQUFhLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFlBQVksRUFBQztZQUM1RCxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUM3QywrQkFBK0IsRUFBRSxNQUFNLENBQ3hDLENBQUM7WUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUM3QyxvQ0FBb0MsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQ3hJLENBQUM7WUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUM3QyxnQ0FBZ0MsRUFBRSxLQUFLLENBQ3hDLENBQUM7WUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUM3Qyw4QkFBOEIsRUFBRSxLQUFLLENBQ3RDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUixrQkFBa0I7UUFDbEIsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUV4RyxpQkFBaUI7UUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFFM0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRTVGLG9CQUFvQjtRQUNwQixNQUFNLFlBQVksR0FBa0I7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDL0QsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDeEMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzlCLFNBQVMsRUFBRTtnQkFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixLQUFLLGVBQWUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssWUFBWTtnQkFDbEcsU0FBUyxFQUFFLElBQUk7YUFDaEI7WUFDRCx3QkFBd0IsRUFBRSxJQUFJLENBQUMsMEJBQTBCO1lBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUUsSUFBSTtnQkFDWixxQkFBcUIsRUFBRSxJQUFJO2dCQUMzQixhQUFhLEVBQUUsSUFBSTthQUNwQixDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ1QsVUFBVSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQUEsQ0FBQyxDQUFDLEtBQUs7WUFDUixZQUFZLEVBQUU7Z0JBQ1o7Ozs7OztrQkFNVSxJQUFJLENBQUMsbUJBQW1CLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsSUFBSTt3QkFDaEYseUJBQXlCOzs7O3dCQUl6QixxQkFBcUI7VUFDbkM7YUFDSDtZQUNELFdBQVcsRUFBRTtnQkFDWCxDQUFDLEVBQUU7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxZQUFZO3dCQUNsRyxTQUFTLEVBQUUsSUFBSTtxQkFDaEI7b0JBQ0QsYUFBYSxFQUFFLElBQUksQ0FBQywrQkFBK0I7b0JBQ25ELElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLDRCQUE0Qjt3QkFDdkMsSUFBSSxFQUFFLEtBQUs7cUJBQ1o7aUJBQ0Y7Z0JBQ0QsR0FBRyxFQUFFO29CQUNILFNBQVMsRUFBRTt3QkFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixLQUFLLGVBQWUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssWUFBWTt3QkFDbEcsU0FBUyxFQUFFLElBQUk7cUJBQ2hCO29CQUNELGFBQWEsRUFBRSxJQUFJLENBQUMsK0JBQStCO2lCQUNwRDtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osU0FBUyxFQUFFO3dCQUNULE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxZQUFZO3dCQUNsRyxTQUFTLEVBQUUsSUFBSTtxQkFDaEI7b0JBQ0QsYUFBYSxFQUFFLElBQUksQ0FBQywrQkFBK0I7aUJBQ3BEO2dCQUNELElBQUksRUFBRTtvQkFDSixTQUFTLEVBQUU7d0JBQ1QsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxlQUFlLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFlBQVk7d0JBQ2xHLFNBQVMsRUFBRSxJQUFJO3FCQUNoQjtvQkFDRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGdDQUFnQztpQkFDckQ7YUFDRjtZQUNELEVBQUUsRUFBRTtnQkFDRixXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQzNDO1NBQ0YsQ0FBQztRQUVGLDZEQUE2RDtRQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV0Qyx3QkFBd0I7UUFDeEIsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXRCLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUV0QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekQsQ0FBQzsrR0FyUFUsaUJBQWlCLDhDQStCNEIsUUFBUTttR0EvQnJELGlCQUFpQixnakNBR3NDLFVBQVUsK0dBQ3RCLFVBQVUsNkJDMUJsRSxnckVBc0RBOzs0RkRoQ2EsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLGFBQWEsaUJBR1IsaUJBQWlCLENBQUMsSUFBSTs7MEJBaUNZLE1BQU07MkJBQUMsUUFBUTtxRUE3QnpCLE1BQU07c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDMkMsNEJBQTRCO3NCQUEzRyxTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNWLGdCQUFnQjtzQkFBbkYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFHekQsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxnQ0FBZ0M7c0JBQXhDLEtBQUs7Z0JBQ0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBRUcsNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSx3QkFBd0I7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEluamVjdCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBTd2lwZXIsIHsgU3dpcGVyT3B0aW9ucyB9IGZyb20gJ3N3aXBlcic7XG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b2tlbi5zZXJ2aWNlJztcblxuLyogVGhpcyBjb21wb25lbnQgd3JhcHMgYXJvdW5kIHRoZSBzd2lwZXIuanMgbGlicmFyeSBXZWJDb21wb25lbnQgKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktY2Fyb3VzZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gVGhlIHN3aXBlciBpbnN0YW5jZVxuICBAVmlld0NoaWxkKCdzd2lwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzd2lwZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Nhcm91c2Vsc2Nyb2xsYmFycGxhY2Vob2xkZXInLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY2Fyb3VzZWxjdGFzdGFjaycsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KSBjYXJvdXNlbGN0YXN0YWNrOiBFbGVtZW50UmVmO1xuXG4gIC8vIFJld2luZHMgdGhlIHNsaWRlcyBiYWNrIHRvIHRoZSBzdGFydCB3aGVuIHRoZSB1c2VyIHJlYWNoZXMgdGhlIGVuZCB3aGVuIHNldCB0byB0cnVlXG4gIEBJbnB1dCgpIHJld2luZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGNhcm91c2VsX292ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfZ2FwOiAnZGVmYXVsdCcgfCAndGlnaHQnIHwgJ25lYXInIHwgJ25vbmUnID0gJ2RlZmF1bHQnO1xuXG4gIEBJbnB1dCgpIGNhcm91c2VsX3BhZ2luYXRpb246ICdzY3JvbGwtYXJyb3dzJyB8ICdub25lJyB8ICdzY3JvbGwtYmFyJyA9ICdub25lJztcblxuICBASW5wdXQoKSBjYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfZGVza3RvcDogbnVtYmVyID0gNDtcbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X2xhcHRvcDogbnVtYmVyID0gMztcbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X3RhYmxldDogbnVtYmVyID0gMi41O1xuICBASW5wdXQoKSBjYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfbW9iaWxlOiBudW1iZXIgPSAxLjI1O1xuXG4gIEBJbnB1dCgpIGNhcm91c2VsX3Jvd3NfcGVyX3Jvd19tb2JpbGU6IDEgfCAyID0gMTsgLy8gUmVxdWlyZWQgZm9yIENBVEVHT1JZX0NBUkQgZXhwZXJpbWVudC4gUmVtb3ZlIGlmIGV4cGVyaW1lbnQgZmFpbHMuXG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfbG9hZGluZzogJ2xhenknIHwgJ2VhZ2VyJyA9ICdsYXp5JzsgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBjYXJvdXNlbHMgb24gcGFnZSBhbmQgd2FudCB0byBwcmlvcml0aXNlIFVJIGxvYWRpbmcgb24gdGltZVxuICBASW5wdXQoKSBjYXJvdXNlbF9mcmVlX21vZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRW5hYmxlcyBzY3JvbGxpbmcgd2l0aCBtb3VzZXdoZWVsIC8gc21vb3RoZXIgbW9tZW50dW0gc3dpcGluZyBleHBlcmllbmNlXG4gIEBJbnB1dCgpIGNlbnRlcl9pbnN1ZmZpY2llbnRfc2xpZGVzOiBib29sZWFuID0gdHJ1ZTsgLy8gQ2VudGVycyB0aGUgc2xpZGVzIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHRvIGZpbGwgdGhlIHNwYWNlXG4gIEBJbnB1dCgpIGNlbnRlcl9hY3RpdmVfc2xpZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gQ2VudGVycyB0aGUgYWN0aXZlIHNsaWRlXG4gIEBJbnB1dCgpIHN0YXJ0X3NsaWRlOiBudW1iZXIgPSAwOyAvLyBTdGFydCBzbGlkZSBpbmRleFxuICBASW5wdXQoKSBvZmZzZXRfc2Nyb2xsYmFyX3RvcDogYm9vbGVhbiA9IGZhbHNlOyAvLyBPZmZzZXQgdGhlIHNjcm9sbGJhciB0byB0aGUgdG9wIG9mIHRoZSBjYXJvdXNlbFxuXG4gIEBPdXRwdXQoKSBhY3RpdmVJbmRleE9uU2xpZGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZih0aGlzLmNhcm91c2VsX2xvYWRpbmcgPT09ICdsYXp5Jyl7XG4gICAgICB0aGlzLnNldFVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0U3dpcGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCB0aGUgaW50ZXJzZWN0aW9uIG9ic2VydmVyIHdpdGggdGhlIHJlbGV2YW50IG9wdGlvbnNcbiAgICovXG4gIHNldFVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgLy8gU2V0IEludGVyc2VjdGlvbk9ic2VydmVyIG9wdGlvbnNcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogbnVsbCxcbiAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgdGhyZXNob2xkOiAwLjUsXG4gICAgICBvbmNlOiB0cnVlXG4gICAgfVxuICAgIC8vIFNldCB1cCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLm9uSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksIG9wdGlvbnMpO1xuICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIHVzZXIgc2Nyb2xscyB0aGlzIGNvbXBvbmVudCBpbnRvIHZpZXdcbiAgICogQHBhcmFtIGVudHJpZXMgLSBBbiBhcnJheSBvZiBpbnRlcnN3ZWN0aW9uIG9ic2VydmVyIGVudHJpZXNcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gSW50ZXJzZWN0aW9uIG9ic2VydmVyXG4gICAqL1xuICBvbkludGVyc2VjdGlvbihlbnRyaWVzOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10sIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgaWYoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAvLyBJbml0aWFsaXNlIHN3aXBlclxuICAgICAgICAgIHRoaXMuaW5pdFN3aXBlcigpO1xuICAgICAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbnRyeS50YXJnZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBnZXRTdHlsZShlbGVtZW50LCBzdHlsZSk6IHN0cmluZyB7XG5cbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoc3R5bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2Nyb2xsYmFyIHBsYWNlbWVudCBhbmQgd2lkdGggYmFzZWQgb24gY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlciBhbmQgY2Fyb3VzZWxjdGFzdGFja1xuICAgKi9cbiAgc2V0dXBTY3JvbGxiYXJMYXlvdXRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ25vbmUnKXtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYXJvdXNlbFN0YWNrOiBIVE1MRWxlbWVudCA9IHRoaXMuY2Fyb3VzZWxjdGFzdGFjaz8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBzY3JvbGxiYXJFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlcj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IHNjcm9sbGJhckhlaWdodCA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXCItLXN3aXBlci1zY3JvbGxiYXItc2l6ZVwiKTtcblxuICAgIGlmKGNhcm91c2VsU3RhY2sgJiYgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycpe1xuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgIFwiLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItd2lkdGhcIiwgYCR7c2Nyb2xsYmFyRWxlbWVudD8ub2Zmc2V0V2lkdGggLSBwYXJzZUludCh0aGlzLmdldFN0eWxlKGNhcm91c2VsU3RhY2ssICdnYXAnKSwgMTApfXB4YFxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgIFwiLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItb2Zmc2V0LXRvcFwiLCBgJHtwYXJzZUludCh0aGlzLmdldFN0eWxlKGNhcm91c2VsU3RhY2ssICdnYXAnKSwgMTApICsgKHNjcm9sbGJhckVsZW1lbnQ/Lm9mZnNldEhlaWdodCAvIDIpICsgKHBhcnNlSW50KHNjcm9sbGJhckhlaWdodCwgMTApIC8gMil9cHhgXG4gICAgICApO1xuXG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCItLXVpLWNhcm91c2VsLXNjcm9sbGJhci1oZWlnaHRcIiwgXCIycHhcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZihjYXJvdXNlbFN0YWNrICYmIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInKXtcbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICBcIi0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLXdpZHRoXCIsIFwiMTAwJVwiXG4gICAgICApO1xuXG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCItLXVpLWNhcm91c2VsLXNjcm9sbGJhci1vZmZzZXQtdG9wXCIsIGAke3RoaXMub2Zmc2V0X3Njcm9sbGJhcl90b3AgPyBwYXJzZUludCh0aGlzLmdldFN0eWxlKGNhcm91c2VsU3RhY2ssICdnYXAnKSwgMTApICsgJ3B4JyA6ICcwcHgnfWBcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICBcIi0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWhlaWdodFwiLCBcIjRweFwiXG4gICAgICApO1xuXG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCItLXVpLWNhcm91c2VsLXNjcm9sbGJhci1sZWZ0XCIsIFwiMHB4XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZHluYW1pYyBzd2lwZXIgcGFyYW1zIGFuZCBpbml0aWFsaXNlIHRoZSBzd2lwZXIgaW5zdGFuY2VcbiAgICovXG4gIGluaXRTd2lwZXIoKTogdm9pZCB7XG4gICAgLy8gQ29sb3VyIG92ZXJpZGVzXG4gICAgY29uc3Qgc2Nyb2xsYmFyQmFja2dyb3VuZENvbG91ciA9IHRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuVmFsdWUoJy0tb2FzeXMtY29sb3ItbGluZW4tZ3JleS0yMDAnKTtcbiAgICBjb25zdCBzY3JvbGxiYXJTbGlkZXJDb2xvdXIgPSB0aGlzLnRva2VuU2VydmljZS5nZXRUb2tlblZhbHVlKCctLW9hc3lzLWNvbG9yLWJyYW5kLWZvcmVncm91bmQtcHJpbWFyeScpO1xuXG4gICAgLy8gc3dpcGVyIGVsZW1lbnRcbiAgICBjb25zdCBzd2lwZXJFbCA9IHRoaXMuc3dpcGVyLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBjYXJvdXNlbEdhcCA9IHRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuVmFsdWUoYC0tb2FzeXMtc3BhY2luZy0ke3RoaXMuY2Fyb3VzZWxfZ2FwfWApO1xuXG4gICAgLy8gc3dpcGVyIHBhcmFtZXRlcnNcbiAgICBjb25zdCBzd2lwZXJQYXJhbXM6IFN3aXBlck9wdGlvbnMgPSB7XG4gICAgICByZXdpbmQ6IHRoaXMucmV3aW5kLFxuICAgICAgZ3JhYkN1cnNvcjogdHJ1ZSxcbiAgICAgIHNwYWNlQmV0d2VlbjogKHBhcnNlSW50KGNhcm91c2VsR2FwLnJlcGxhY2UoJy4nLCAnJyksIDEwKSkgfHwgMCxcbiAgICAgIGNlbnRlcmVkU2xpZGVzOiB0aGlzLmNlbnRlcl9hY3RpdmVfc2xpZGUsXG4gICAgICBpbml0aWFsU2xpZGU6IHRoaXMuc3RhcnRfc2xpZGUsXG4gICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgZW5hYmxlZDogdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHwgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicsXG4gICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IHRoaXMuY2VudGVyX2luc3VmZmljaWVudF9zbGlkZXMsXG4gICAgICBmcmVlTW9kZTogdGhpcy5jYXJvdXNlbF9mcmVlX21vZGUgPyB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHN0aWNreTogdHJ1ZSxcbiAgICAgICAgbW9tZW50dW1WZWxvY2l0eVJhdGlvOiAwLjc1LFxuICAgICAgICBtb21lbnR1bVJhdGlvOiAwLjc1XG4gICAgICB9IDogZmFsc2UsXG4gICAgICBtb3VzZXdoZWVsOiB0aGlzLmNhcm91c2VsX2ZyZWVfbW9kZSA/IHtcbiAgICAgICAgZm9yY2VUb0F4aXM6IHRydWVcbiAgICAgIH06IGZhbHNlLFxuICAgICAgaW5qZWN0U3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICAgICAgLnN3aXBlci1zY3JvbGxiYXIuc3dpcGVyLXNjcm9sbGJhci1ob3Jpem9udGFsIHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgdG9wOiB2YXIoLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItb2Zmc2V0LXRvcCk7XG4gICAgICAgICAgd2lkdGg6IHZhcigtLXVpLWNhcm91c2VsLXNjcm9sbGJhci13aWR0aCk7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItaGVpZ2h0KTtcbiAgICAgICAgICBsZWZ0OiAke3RoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInID8gJ3ZhcigtLXVpLWNhcm91c2VsLXNjcm9sbGJhci1sZWZ0KScgOiAnMSUnfTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3Njcm9sbGJhckJhY2tncm91bmRDb2xvdXJ9XG4gICAgICAgIH1cblxuICAgICAgICAuc3dpcGVyLXNjcm9sbGJhci1kcmFnIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAke3Njcm9sbGJhclNsaWRlckNvbG91cn1cbiAgICAgICAgfWAsXG4gICAgICBdLFxuICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgMDoge1xuICAgICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHwgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicsXG4gICAgICAgICAgICBkcmFnZ2FibGU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMuY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X21vYmlsZSxcbiAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICByb3dzOiB0aGlzLmNhcm91c2VsX3Jvd3NfcGVyX3Jvd19tb2JpbGUsXG4gICAgICAgICAgICBmaWxsOiBcInJvd1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIDc2Nzoge1xuICAgICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHwgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicsXG4gICAgICAgICAgICBkcmFnZ2FibGU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMuY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X3RhYmxldFxuICAgICAgICB9LFxuICAgICAgICAxMDgwOiB7XG4gICAgICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJyB8fCB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyxcbiAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogdGhpcy5jYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfbGFwdG9wXG4gICAgICAgIH0sXG4gICAgICAgIDE0NDA6IHtcbiAgICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiB0aGlzLmNhcm91c2VsX3NsaWRlc19wZXJfdmlld19kZXNrdG9wXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBzbGlkZUNoYW5nZTogdGhpcy5vblNsaWRlQ2hhbmdlLmJpbmQodGhpcylcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gbm93IHdlIG5lZWQgdG8gYXNzaWduIGFsbCBwYXJhbWV0ZXJzIHRvIHRoZSBTd2lwZXIgZWxlbWVudFxuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyRWwsIHN3aXBlclBhcmFtcyk7XG5cbiAgICAvLyBhbmQgbm93IGluaXRpYWxpemUgaXRcbiAgICBzd2lwZXJFbC5pbml0aWFsaXplKCk7XG5cbiAgICAvLyBTZXQgdXAgc2Nyb2xsYmFyIGFuZCBlbnN1cmUgdGhpcyBpcyByZWNhbGN1bGF0ZWQgb24gcmVzaXplIGV2ZW50c1xuICAgIHRoaXMuc2V0dXBTY3JvbGxiYXJMYXlvdXRQcm9wZXJ0aWVzKCk7XG5cbiAgICBzd2lwZXJFbC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnNldHVwU2Nyb2xsYmFyTGF5b3V0UHJvcGVydGllcygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGNhcm91c2VsIG9uIHRvIHRoZSBuZXh0IHNsaWRlXG4gICAqL1xuICBuZXh0U2xpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zd2lwZXIubmF0aXZlRWxlbWVudC5zd2lwZXIuc2xpZGVOZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0aGUgY2Fyb3VzZWwgYmFjayB0byB0aGUgcHJldmlvdXMgc2xpZGVcbiAgICovXG4gIHByZXZpb3VzU2xpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zd2lwZXIubmF0aXZlRWxlbWVudC5zd2lwZXIuc2xpZGVQcmV2KCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIHRoZSBzbGlkZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBzd2lwZXIgXG4gICAqL1xuICBvblNsaWRlQ2hhbmdlKHN3aXBlcjogU3dpcGVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbmRleE9uU2xpZGVDaGFuZ2UuZW1pdChzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICB9XG59XG4iLCI8dWktYm94XG5jbGFzcz1cInVpLWNhcm91c2VsXCJcbltuZ0NsYXNzXT1cInsndWktY2Fyb3VzZWwtb3ZlcmZsb3cnOiBjYXJvdXNlbF9vdmVyZmxvd31cIlxuYm94X2FsaWduX3k9XCJjZW50ZXJcIlxuYm94X3NwYWNlPVwibm9uZVwiXG5ib3hfY29udGVudF9maWxsX3dpZHRoPVwidHJ1ZVwiXG5ib3hfYmFja2dyb3VuZD1cInRyYW5zcGFyZW50XCI+XG5cbiAgICA8dWktc3RhY2sgI2Nhcm91c2VsY3Rhc3RhY2s+XG4gICAgICAgIDwhLS0gU3dpcGVyIFdlYkNvbXBvbmVudC0tPlxuICAgICAgICA8c3dpcGVyLWNvbnRhaW5lclxuICAgICAgICAjc3dpcGVyXG4gICAgICAgIGluaXQ9XCJmYWxzZVwiXG4gICAgICAgIHRvdWNoLXN0YXJ0LXByZXZlbnQtZGVmYXVsdD1cImZhbHNlXCJcbiAgICAgICAgcHJldmVudC1jbGlja3MtcHJvcGFnYXRpb249XCJ0cnVlXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvc3dpcGVyLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEN1c3RvbSBuYXZpZ2F0aW9uIGJ1dHRvbnMgLS0+XG4gICAgICAgIDx1aS1zdGFjayBzdGFja19kaXJlY3Rpb249XCJ4XCIgc3RhY2tfYWxpZ249XCJjZW50ZXJcIiAqbmdJZj1cImNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJyB8fCBjYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcidcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1jYXJvdXNlbC1zY3JvbGxiYXItcGxhY2Vob2xkZXJcIiAjY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgICAgICAgIDx1aS1ib3hcbiAgICAgICAgICAgICpuZ0lmPVwiY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnXCJcbiAgICAgICAgICAgIGJveF9zcGFjZT1cIm5vbmVcIlxuICAgICAgICAgICAgYm94X2ZpbGxfbW9kZT1cImZpdFwiXG4gICAgICAgICAgICBbYm94X3NwYWNlX3JpZ2h0XT1cInttb2JpbGU6ICd0aWdodCcsIHRhYmxldDogJ25vbmUnLCBsYXB0b3A6ICdub25lJywgZGVza3RvcDogJ25vbmUnfVwiXG4gICAgICAgICAgICBib3hfYmFja2dyb3VuZD1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgICAgICAgICAgPHVpLXN0YWNrXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhKHN3aXBlcj8uc3dpcGVyPy5pc0JlZ2lubmluZyAmJiBzd2lwZXI/LnN3aXBlcj8uaXNFbmQpXCJcbiAgICAgICAgICAgICAgICBzdGFja19kaXJlY3Rpb249XCJ4XCJcbiAgICAgICAgICAgICAgICBzdGFja19nYXA9XCJuZWFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUHJldmlvdXMgYnV0dG9uLS0+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1jYXJvdXNlbF9fcHJldmlvdXNcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25fc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uX2ljb25fcGxhY2VtZW50PVwiaWNvbk9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25faWNvbj1cImFycm93LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25fdHlwZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInByZXZpb3VzU2xpZGUoKVwiPiBQcmV2b3VzIHNsaWRlXG4gICAgICAgICAgICAgICAgICAgIDwvdWktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5leHQgYnV0dG9uLS0+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1jYXJvdXNlbF9fbmV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbl9zaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25faWNvbl9wbGFjZW1lbnQ9XCJpY29uT25seVwiXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbl9pY29uPVwiYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25fdHlwZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cIm5leHRTbGlkZSgpXCI+IE5leHQgc2xpZGVcbiAgICAgICAgICAgICAgICAgICAgPC91aS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC91aS1zdGFjaz5cbiAgICAgICAgICAgIDwvdWktYm94PlxuICAgICAgICA8L3VpLXN0YWNrPlxuICAgIDwvdWktc3RhY2s+XG48L3VpLWJveD5cbiJdfQ==
@@ -39,11 +39,11 @@ export class SelectCardComponent {
39
39
  }
40
40
  }
41
41
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: SelectCardComponent, deps: [{ token: i1.TokenService }], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: SelectCardComponent, selector: "ui-select-card", inputs: { image: "image", alt_text: "alt_text", image_format: "image_format", title: "title", copy: "copy", price: "price", price_before_discount: "price_before_discount", selected: "selected", select_card_type: "select_card_type" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<!--- GIFT CARD -->\n<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <span class=\"text-body--default\">{{copy}}</span>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: i4.LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }, { kind: "component", type: i5.ImageComponent, selector: "ui-image", inputs: ["image_src", "image_alt_text", "image_fill", "fetchpriority", "loading", "preload_aspect_ratio"] }, { kind: "component", type: i6.OasysPriceComponent, selector: "ui-price", inputs: ["price", "price_before_discount", "price_type"] }], encapsulation: i0.ViewEncapsulation.None }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: SelectCardComponent, selector: "ui-select-card", inputs: { image: "image", alt_text: "alt_text", image_format: "image_format", title: "title", primary_copy: "primary_copy", secondary_copy: "secondary_copy", price: "price", price_before_discount: "price_before_discount", selected: "selected", select_card_type: "select_card_type" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_fill_mode=\"fit\" box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_gap=\"near\">\n <p class=\"text-body--supporting\">{{secondary_copy}}</p>\n <p class=\"text-body--default\">{{primary_copy}}</p>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: i4.LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }, { kind: "component", type: i5.ImageComponent, selector: "ui-image", inputs: ["image_src", "image_alt_text", "image_fill", "fetchpriority", "loading", "preload_aspect_ratio"] }, { kind: "component", type: i6.OasysPriceComponent, selector: "ui-price", inputs: ["price", "price_before_discount", "price_type"] }], encapsulation: i0.ViewEncapsulation.None }); }
43
43
  }
44
44
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: SelectCardComponent, decorators: [{
45
45
  type: Component,
46
- args: [{ selector: 'ui-select-card', encapsulation: ViewEncapsulation.None, template: "<!--- GIFT CARD -->\n<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <span class=\"text-body--default\">{{copy}}</span>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"] }]
46
+ args: [{ selector: 'ui-select-card', encapsulation: ViewEncapsulation.None, template: "<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_fill_mode=\"fit\" box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_gap=\"near\">\n <p class=\"text-body--supporting\">{{secondary_copy}}</p>\n <p class=\"text-body--default\">{{primary_copy}}</p>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"] }]
47
47
  }], ctorParameters: function () { return [{ type: i1.TokenService }]; }, propDecorators: { image: [{
48
48
  type: Input
49
49
  }], alt_text: [{
@@ -52,7 +52,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
52
52
  type: Input
53
53
  }], title: [{
54
54
  type: Input
55
- }], copy: [{
55
+ }], primary_copy: [{
56
+ type: Input
57
+ }], secondary_copy: [{
56
58
  type: Input
57
59
  }], price: [{
58
60
  type: Input
@@ -65,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
65
67
  }], clicked: [{
66
68
  type: Output
67
69
  }] } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2FzeXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtY2FyZC9zZWxlY3QtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYXN5cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1jYXJkL3NlbGVjdC1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBYWxHLE1BQU0sT0FBTyxtQkFBbUI7SUFtQjlCLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBUnJDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQW9CLFdBQVcsQ0FBQztRQUUvQyxZQUFPLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7SUFLVCxDQUFDO0lBRW5ELFFBQVE7UUFDTixJQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQztZQUNiLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUdEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxNQUFjO1FBQ2hDLFFBQU8sTUFBTSxFQUFFO1lBQ2IsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUN2RixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ3pGO2dCQUNFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsOENBQThDLENBQUMsQ0FBQztTQUMxRjtJQUNILENBQUM7K0dBakRVLG1CQUFtQjttR0FBbkIsbUJBQW1CLGlVQ2JoQyxvdEVBMENjOzs0RkQ3QkQsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJO21HQUs1QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rva2VuLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBJU2VsZWN0Q2FyZFR5cGUgPSAncHJvZHVjdC1jYXJkJyB8ICdnaWZ0LWNhcmQnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLXNlbGVjdC1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcblxuZXhwb3J0IGNsYXNzIFNlbGVjdENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBJbWFnZVxuICBASW5wdXQoKSBpbWFnZT86IHN0cmluZztcbiAgQElucHV0KCkgYWx0X3RleHQ6IHN0cmluZztcbiAgQElucHV0KCkgaW1hZ2VfZm9ybWF0OiBzdHJpbmc7XG5cbiAgLy8gQ29udGVudFxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBjb3B5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByaWNlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHByaWNlX2JlZm9yZV9kaXNjb3VudDogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RfY2FyZF90eXBlOiBJU2VsZWN0Q2FyZFR5cGUgPSAnZ2lmdC1jYXJkJztcblxuICBAT3V0cHV0KCkgY2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGFzcGVjdFJhdGlvOiBzdHJpbmc7XG4gIGFsaWdubWVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmKCF0aGlzLmltYWdlKXtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFzcGVjdFJhdGlvID0gdGhpcy5zZXRJbWFnZUFzcGVjdFJhdGlvKHRoaXMuaW1hZ2VfZm9ybWF0KTtcbiAgfVxuXG4gIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkO1xuICAgIHRoaXMuY2xpY2tlZC5lbWl0KCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBcbiAgICogQHBhcmFtIGZvcm1hdCBcbiAgICogQHJldHVybnMgXG4gICAqL1xuICBzZXRJbWFnZUFzcGVjdFJhdGlvKGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2goZm9ybWF0KSB7XG4gICAgICBjYXNlICdzcXVhcmUnOlxuICAgICAgICByZXR1cm4gdGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW5WYWx1ZSgnLS1vYXN5cy1jb21wb25lbnQtY2FyZC1hc3BlY3QtcmF0aW8tc3F1YXJlJyk7XG4gICAgICBjYXNlICdwb3J0cmFpdCc6XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuU2VydmljZS5nZXRUb2tlblZhbHVlKCctLW9hc3lzLWNvbXBvbmVudC1jYXJkLWFzcGVjdC1yYXRpby1wb3J0cmFpdCcpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuVmFsdWUoJy0tb2FzeXMtY29tcG9uZW50LWNhcmQtYXNwZWN0LXJhdGlvLXBvcnRyYWl0Jyk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjwhLS0tIEdJRlQgQ0FSRCAtLT5cbjxidXR0b24gcm9sZT1cImJ1dHRvblwiIGNsYXNzPVwidWktc2VsZWN0LWNhcmQtLXt7c2VsZWN0X2NhcmRfdHlwZX19XCIgdGFiaW5kZXg9XCIwXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZCc6IHNlbGVjdGVkfVwiIFthdHRyLmFyaWEtcHJlc3NlZF09XCJzZWxlY3RlZCA/ICd0cnVlJyA6ICdmYWxzZSdcIiAoY2xpY2spPVwib25DbGljaygpXCI+XG4gICAgPHVpLWJveCBib3hfc3BhY2U9XCJub25lXCIgYm94X2JhY2tncm91bmQ9XCJ0cmFuc3BhcmVudFwiPlxuICAgICAgICA8dWktc3RhY2sgc3RhY2tfZ2FwPVwibm9uZVwiIHN0YWNrX2FsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8dWktYm94IGNsYXNzPVwidWktc2VsZWN0LWNhcmRfX2ltYWdlXCIgW25nU3R5bGVdPVwieydhc3BlY3QtcmF0aW8nOiBhc3BlY3RSYXRpb31cIiBib3hfYmFja2dyb3VuZD1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBib3hfYWxpZ25feD1cImNlbnRlclwiIGJveF9zcGFjZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICA8dWktaW1hZ2UgKm5nSWY9XCJpbWFnZVwiIFtpbWFnZV9zcmNdPVwiaW1hZ2VcIiBbaW1hZ2VfYWx0X3RleHRdPVwiYWx0X3RleHRcIiBbaW1hZ2VfZmlsbF09XCJ0cnVlXCI+PC91aS1pbWFnZT5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L3VpLWJveD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInNlbGVjdF9jYXJkX3R5cGUgPT09ICdnaWZ0LWNhcmQnXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2lmdGNhcmRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwic2VsZWN0X2NhcmRfdHlwZSA9PT0gJ3Byb2R1Y3QtY2FyZCdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9kdWN0Y2FyZFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdWktc3RhY2s+XG4gICAgPC91aS1ib3g+XG48L2J1dHRvbj5cblxuXG48IS0tLSBHSUZUIENBUkQgVEVNUExBVEUgLS0+XG48bmctdGVtcGxhdGUgI2dpZnRjYXJkPlxuICAgIDx1aS1ib3ggYm94X3NwYWNlPVwidGlnaHRcIiBib3hfYmFja2dyb3VuZD1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgIDx1aS1zdGFjayBjbGFzcz1cInVpLXNlbGVjdC1jYXJkX190ZXh0LXN0YWNrXCIgc3RhY2tfZGlyZWN0aW9uPVwieVwiIHN0YWNrX2dhcD1cInRpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1zZWxlY3QtY2FyZF9fdGV4dC1ib2R5IHRleHQtbGFiZWwtLXByaW1hcnlcIj57e3RpdGxlfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8dWktcHJpY2UgW3ByaWNlXT1cInByaWNlXCIgW3ByaWNlX2JlZm9yZV9kaXNjb3VudF09XCJwcmljZV9iZWZvcmVfZGlzY291bnRcIlxuICAgICAgICAgICAgICAgICAgICBwcmljZV90eXBlPVwicHJpbWFyeVwiPjwvdWktcHJpY2U+XG4gICAgICAgIDwvdWktc3RhY2s+XG4gICAgPC91aS1ib3g+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tLSBQUk9EVUNUIENBUkQgVEVNUExBVEUgLS0+XG48bmctdGVtcGxhdGUgI3Byb2R1Y3RjYXJkPlxuICAgIDx1aS1ib3ggYm94X3NwYWNlPVwibmVhclwiIGJveF9iYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIj5cbiAgICAgICAgPHVpLXN0YWNrICBzdGFja19kaXJlY3Rpb249XCJ5XCIgc3RhY2tfZ2FwPVwibmVhclwiPlxuICAgICAgICAgICAgPHVpLXN0YWNrIGNsYXNzPVwidWktc2VsZWN0LWNhcmRfX3RleHQtc3RhY2tcIiBzdGFja19kaXJlY3Rpb249XCJ5XCIgc3RhY2tfZ2FwPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aDU+e3t0aXRsZX19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXByaWNlIFtwcmljZV09XCJwcmljZVwiIFtwcmljZV9iZWZvcmVfZGlzY291bnRdPVwicHJpY2VfYmVmb3JlX2Rpc2NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlX3R5cGU9XCJoZXJvXCI+PC91aS1wcmljZT5cbiAgICAgICAgICAgIDwvdWktc3RhY2s+XG4gICAgICAgICAgICA8dWktc3RhY2sgc3RhY2tfZGlyZWN0aW9uPVwieVwiIHN0YWNrX2dhcD1cIm5lYXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYm9keS0tZGVmYXVsdFwiPnt7Y29weX19PC9zcGFuPlxuICAgICAgICAgICAgPC91aS1zdGFjaz5cbiAgICAgICAgPC91aS1zdGFjaz5cbiAgICA8L3VpLWJveD5cbjwvbmctdGVtcGxhdGU+Il19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2FzeXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtY2FyZC9zZWxlY3QtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYXN5cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1jYXJkL3NlbGVjdC1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBYWxHLE1BQU0sT0FBTyxtQkFBbUI7SUFvQjlCLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBUnJDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQW9CLFdBQVcsQ0FBQztRQUUvQyxZQUFPLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7SUFLVCxDQUFDO0lBRW5ELFFBQVE7UUFDTixJQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQztZQUNiLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUdEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxNQUFjO1FBQ2hDLFFBQU8sTUFBTSxFQUFFO1lBQ2IsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUN2RixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ3pGO2dCQUNFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsOENBQThDLENBQUMsQ0FBQztTQUMxRjtJQUNILENBQUM7K0dBbERVLG1CQUFtQjttR0FBbkIsbUJBQW1CLG1YQ2JoQyw0d0VBMENjOzs0RkQ3QkQsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJO21HQUs1QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rva2VuLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBJU2VsZWN0Q2FyZFR5cGUgPSAncHJvZHVjdC1jYXJkJyB8ICdnaWZ0LWNhcmQnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLXNlbGVjdC1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcblxuZXhwb3J0IGNsYXNzIFNlbGVjdENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBJbWFnZVxuICBASW5wdXQoKSBpbWFnZT86IHN0cmluZztcbiAgQElucHV0KCkgYWx0X3RleHQ6IHN0cmluZztcbiAgQElucHV0KCkgaW1hZ2VfZm9ybWF0OiBzdHJpbmc7XG5cbiAgLy8gQ29udGVudFxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBwcmltYXJ5X2NvcHk6IHN0cmluZztcbiAgQElucHV0KCkgc2Vjb25kYXJ5X2NvcHk6IHN0cmluZztcbiAgQElucHV0KCkgcHJpY2U6IHN0cmluZztcbiAgQElucHV0KCkgcHJpY2VfYmVmb3JlX2Rpc2NvdW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdF9jYXJkX3R5cGU6IElTZWxlY3RDYXJkVHlwZSA9ICdnaWZ0LWNhcmQnO1xuXG4gIEBPdXRwdXQoKSBjbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgYXNwZWN0UmF0aW86IHN0cmluZztcbiAgYWxpZ25tZW50OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuaW1hZ2Upe1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXNwZWN0UmF0aW8gPSB0aGlzLnNldEltYWdlQXNwZWN0UmF0aW8odGhpcy5pbWFnZV9mb3JtYXQpO1xuICB9XG5cbiAgb25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7XG4gICAgdGhpcy5jbGlja2VkLmVtaXQoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFxuICAgKiBAcGFyYW0gZm9ybWF0IFxuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIHNldEltYWdlQXNwZWN0UmF0aW8oZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ3NxdWFyZSc6XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuU2VydmljZS5nZXRUb2tlblZhbHVlKCctLW9hc3lzLWNvbXBvbmVudC1jYXJkLWFzcGVjdC1yYXRpby1zcXVhcmUnKTtcbiAgICAgIGNhc2UgJ3BvcnRyYWl0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuVmFsdWUoJy0tb2FzeXMtY29tcG9uZW50LWNhcmQtYXNwZWN0LXJhdGlvLXBvcnRyYWl0Jyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW5WYWx1ZSgnLS1vYXN5cy1jb21wb25lbnQtY2FyZC1hc3BlY3QtcmF0aW8tcG9ydHJhaXQnKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGJ1dHRvbiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJ1aS1zZWxlY3QtY2FyZC0te3tzZWxlY3RfY2FyZF90eXBlfX1cIiB0YWJpbmRleD1cIjBcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogc2VsZWN0ZWR9XCIgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInNlbGVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJ1wiIChjbGljayk9XCJvbkNsaWNrKClcIj5cbiAgICA8dWktYm94IGJveF9zcGFjZT1cIm5vbmVcIiBib3hfYmFja2dyb3VuZD1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgIDx1aS1zdGFjayBzdGFja19nYXA9XCJub25lXCIgc3RhY2tfYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDx1aS1ib3ggY2xhc3M9XCJ1aS1zZWxlY3QtY2FyZF9faW1hZ2VcIiBbbmdTdHlsZV09XCJ7J2FzcGVjdC1yYXRpbyc6IGFzcGVjdFJhdGlvfVwiIGJveF9iYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGJveF9hbGlnbl94PVwiY2VudGVyXCIgYm94X3NwYWNlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgIDx1aS1pbWFnZSAqbmdJZj1cImltYWdlXCIgW2ltYWdlX3NyY109XCJpbWFnZVwiIFtpbWFnZV9hbHRfdGV4dF09XCJhbHRfdGV4dFwiIFtpbWFnZV9maWxsXT1cInRydWVcIj48L3VpLWltYWdlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvdWktYm94PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwic2VsZWN0X2NhcmRfdHlwZSA9PT0gJ2dpZnQtY2FyZCdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJnaWZ0Y2FyZFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJzZWxlY3RfY2FyZF90eXBlID09PSAncHJvZHVjdC1jYXJkJ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2R1Y3RjYXJkXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC91aS1zdGFjaz5cbiAgICA8L3VpLWJveD5cbjwvYnV0dG9uPlxuXG5cbjwhLS0tIEdJRlQgQ0FSRCBURU1QTEFURSAtLT5cbjxuZy10ZW1wbGF0ZSAjZ2lmdGNhcmQ+XG4gICAgPHVpLWJveCBib3hfc3BhY2U9XCJ0aWdodFwiIGJveF9iYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIj5cbiAgICAgICAgPHVpLXN0YWNrIGNsYXNzPVwidWktc2VsZWN0LWNhcmRfX3RleHQtc3RhY2tcIiBzdGFja19kaXJlY3Rpb249XCJ5XCIgc3RhY2tfZ2FwPVwidGlnaHRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVpLXNlbGVjdC1jYXJkX190ZXh0LWJvZHkgdGV4dC1sYWJlbC0tcHJpbWFyeVwiPnt7dGl0bGV9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDx1aS1wcmljZSBbcHJpY2VdPVwicHJpY2VcIiBbcHJpY2VfYmVmb3JlX2Rpc2NvdW50XT1cInByaWNlX2JlZm9yZV9kaXNjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgIHByaWNlX3R5cGU9XCJwcmltYXJ5XCI+PC91aS1wcmljZT5cbiAgICAgICAgPC91aS1zdGFjaz5cbiAgICA8L3VpLWJveD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0tIFBST0RVQ1QgQ0FSRCBURU1QTEFURSAtLT5cbjxuZy10ZW1wbGF0ZSAjcHJvZHVjdGNhcmQ+XG4gICAgPHVpLWJveCBib3hfZmlsbF9tb2RlPVwiZml0XCIgYm94X3NwYWNlPVwibmVhclwiIGJveF9iYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIj5cbiAgICAgICAgPHVpLXN0YWNrICBzdGFja19kaXJlY3Rpb249XCJ5XCIgc3RhY2tfZ2FwPVwibmVhclwiPlxuICAgICAgICAgICAgPHVpLXN0YWNrIGNsYXNzPVwidWktc2VsZWN0LWNhcmRfX3RleHQtc3RhY2tcIiBzdGFja19kaXJlY3Rpb249XCJ5XCIgc3RhY2tfZ2FwPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aDU+e3t0aXRsZX19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXByaWNlIFtwcmljZV09XCJwcmljZVwiIFtwcmljZV9iZWZvcmVfZGlzY291bnRdPVwicHJpY2VfYmVmb3JlX2Rpc2NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlX3R5cGU9XCJoZXJvXCI+PC91aS1wcmljZT5cbiAgICAgICAgICAgIDwvdWktc3RhY2s+XG4gICAgICAgICAgICA8dWktc3RhY2sgc3RhY2tfZ2FwPVwibmVhclwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1ib2R5LS1zdXBwb3J0aW5nXCI+e3tzZWNvbmRhcnlfY29weX19PC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1ib2R5LS1kZWZhdWx0XCI+e3twcmltYXJ5X2NvcHl9fTwvcD5cbiAgICAgICAgICAgIDwvdWktc3RhY2s+XG4gICAgICAgIDwvdWktc3RhY2s+XG4gICAgPC91aS1ib3g+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -2170,6 +2170,10 @@ class CarouselComponent {
2170
2170
  this.carousel_loading = 'lazy'; // If we don't have multiple carousels on page and want to prioritise UI loading on time
2171
2171
  this.carousel_free_mode = false; // Enables scrolling with mousewheel / smoother momentum swiping experience
2172
2172
  this.center_insufficient_slides = true; // Centers the slides if there are not enough to fill the space
2173
+ this.center_active_slide = false; // Centers the active slide
2174
+ this.start_slide = 0; // Start slide index
2175
+ this.offset_scrollbar_top = false; // Offset the scrollbar to the top of the carousel
2176
+ this.activeIndexOnSlideChange = new EventEmitter();
2173
2177
  }
2174
2178
  ngOnInit() {
2175
2179
  if (this.carousel_loading === 'lazy') {
@@ -2228,7 +2232,7 @@ class CarouselComponent {
2228
2232
  }
2229
2233
  if (carouselStack && this.carousel_pagination === 'scroll-bar') {
2230
2234
  this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-width", "100%");
2231
- this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-offset-top", `0px`);
2235
+ this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-offset-top", `${this.offset_scrollbar_top ? parseInt(this.getStyle(carouselStack, 'gap'), 10) + 'px' : '0px'}`);
2232
2236
  this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-height", "4px");
2233
2237
  this.element?.nativeElement?.style?.setProperty("--ui-carousel-scrollbar-left", "0px");
2234
2238
  }
@@ -2248,6 +2252,8 @@ class CarouselComponent {
2248
2252
  rewind: this.rewind,
2249
2253
  grabCursor: true,
2250
2254
  spaceBetween: (parseInt(carouselGap.replace('.', ''), 10)) || 0,
2255
+ centeredSlides: this.center_active_slide,
2256
+ initialSlide: this.start_slide,
2251
2257
  scrollbar: {
2252
2258
  enabled: this.carousel_pagination === 'scroll-arrows' || this.carousel_pagination === 'scroll-bar',
2253
2259
  draggable: true,
@@ -2311,7 +2317,9 @@ class CarouselComponent {
2311
2317
  slidesPerView: this.carousel_slides_per_view_desktop
2312
2318
  }
2313
2319
  },
2314
- on: {},
2320
+ on: {
2321
+ slideChange: this.onSlideChange.bind(this)
2322
+ }
2315
2323
  };
2316
2324
  // now we need to assign all parameters to the Swiper element
2317
2325
  Object.assign(swiperEl, swiperParams);
@@ -2335,8 +2343,15 @@ class CarouselComponent {
2335
2343
  previousSlide() {
2336
2344
  this.swiper.nativeElement.swiper.slidePrev();
2337
2345
  }
2346
+ /**
2347
+ * Emit event when the slide changes
2348
+ * @param swiper
2349
+ */
2350
+ onSlideChange(swiper) {
2351
+ this.activeIndexOnSlideChange.emit(swiper.activeIndex);
2352
+ }
2338
2353
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: CarouselComponent, deps: [{ token: TokenService }, { token: DOCUMENT }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
2339
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: CarouselComponent, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides" }, viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\nclass=\"ui-carousel\"\n[ngClass]=\"{'ui-carousel-overflow': carousel_overflow}\"\nbox_align_y=\"center\"\nbox_space=\"none\"\nbox_content_fill_width=\"true\"\nbox_background=\"transparent\">\n\n <ui-stack #carouselctastack>\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\">\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack stack_direction=\"x\" stack_align=\"center\" *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\">\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none'}\"\n box_background=\"transparent\">\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\">\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n (clicked)=\"previousSlide()\"> Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n (clicked)=\"nextSlide()\"> Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel.ui-carousel-overflow swiper-container{overflow:visible!important}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OasysButtonComponent, selector: "ui-button", inputs: ["button_icon", "button_icon_placement", "button_size", "button_full_width", "button_type", "button_event_type", "button_disabled", "button_text_nowrap", "href"], outputs: ["clicked"] }, { kind: "component", type: LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }], encapsulation: i0.ViewEncapsulation.None }); }
2354
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: CarouselComponent, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides", center_active_slide: "center_active_slide", start_slide: "start_slide", offset_scrollbar_top: "offset_scrollbar_top" }, outputs: { activeIndexOnSlideChange: "activeIndexOnSlideChange" }, viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\nclass=\"ui-carousel\"\n[ngClass]=\"{'ui-carousel-overflow': carousel_overflow}\"\nbox_align_y=\"center\"\nbox_space=\"none\"\nbox_content_fill_width=\"true\"\nbox_background=\"transparent\">\n\n <ui-stack #carouselctastack>\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\">\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack stack_direction=\"x\" stack_align=\"center\" *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\">\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none'}\"\n box_background=\"transparent\">\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\">\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n (clicked)=\"previousSlide()\"> Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n (clicked)=\"nextSlide()\"> Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel.ui-carousel-overflow swiper-container{overflow:visible!important}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OasysButtonComponent, selector: "ui-button", inputs: ["button_icon", "button_icon_placement", "button_size", "button_full_width", "button_type", "button_event_type", "button_disabled", "button_text_nowrap", "href"], outputs: ["clicked"] }, { kind: "component", type: LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }], encapsulation: i0.ViewEncapsulation.None }); }
2340
2355
  }
2341
2356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: CarouselComponent, decorators: [{
2342
2357
  type: Component,
@@ -2346,13 +2361,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
2346
2361
  args: [DOCUMENT]
2347
2362
  }] }, { type: i0.ElementRef }]; }, propDecorators: { swiper: [{
2348
2363
  type: ViewChild,
2349
- args: ["swiper", { static: true }]
2364
+ args: ['swiper', { static: true }]
2350
2365
  }], carouselscrollbarplaceholder: [{
2351
2366
  type: ViewChild,
2352
- args: ["carouselscrollbarplaceholder", { static: false, read: ElementRef }]
2367
+ args: ['carouselscrollbarplaceholder', { static: false, read: ElementRef }]
2353
2368
  }], carouselctastack: [{
2354
2369
  type: ViewChild,
2355
- args: ["carouselctastack", { static: false, read: ElementRef }]
2370
+ args: ['carouselctastack', { static: false, read: ElementRef }]
2356
2371
  }], rewind: [{
2357
2372
  type: Input
2358
2373
  }], carousel_overflow: [{
@@ -2377,6 +2392,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
2377
2392
  type: Input
2378
2393
  }], center_insufficient_slides: [{
2379
2394
  type: Input
2395
+ }], center_active_slide: [{
2396
+ type: Input
2397
+ }], start_slide: [{
2398
+ type: Input
2399
+ }], offset_scrollbar_top: [{
2400
+ type: Input
2401
+ }], activeIndexOnSlideChange: [{
2402
+ type: Output
2380
2403
  }] } });
2381
2404
 
2382
2405
  class OasysCarouselModule {
@@ -2698,11 +2721,11 @@ class SelectCardComponent {
2698
2721
  }
2699
2722
  }
2700
2723
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: SelectCardComponent, deps: [{ token: TokenService }], target: i0.ɵɵFactoryTarget.Component }); }
2701
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: SelectCardComponent, selector: "ui-select-card", inputs: { image: "image", alt_text: "alt_text", image_format: "image_format", title: "title", copy: "copy", price: "price", price_before_discount: "price_before_discount", selected: "selected", select_card_type: "select_card_type" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<!--- GIFT CARD -->\n<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <span class=\"text-body--default\">{{copy}}</span>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }, { kind: "component", type: ImageComponent, selector: "ui-image", inputs: ["image_src", "image_alt_text", "image_fill", "fetchpriority", "loading", "preload_aspect_ratio"] }, { kind: "component", type: OasysPriceComponent, selector: "ui-price", inputs: ["price", "price_before_discount", "price_type"] }], encapsulation: i0.ViewEncapsulation.None }); }
2724
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: SelectCardComponent, selector: "ui-select-card", inputs: { image: "image", alt_text: "alt_text", image_format: "image_format", title: "title", primary_copy: "primary_copy", secondary_copy: "secondary_copy", price: "price", price_before_discount: "price_before_discount", selected: "selected", select_card_type: "select_card_type" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_fill_mode=\"fit\" box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_gap=\"near\">\n <p class=\"text-body--supporting\">{{secondary_copy}}</p>\n <p class=\"text-body--default\">{{primary_copy}}</p>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "component", type: LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }, { kind: "component", type: ImageComponent, selector: "ui-image", inputs: ["image_src", "image_alt_text", "image_fill", "fetchpriority", "loading", "preload_aspect_ratio"] }, { kind: "component", type: OasysPriceComponent, selector: "ui-price", inputs: ["price", "price_before_discount", "price_type"] }], encapsulation: i0.ViewEncapsulation.None }); }
2702
2725
  }
2703
2726
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: SelectCardComponent, decorators: [{
2704
2727
  type: Component,
2705
- args: [{ selector: 'ui-select-card', encapsulation: ViewEncapsulation.None, template: "<!--- GIFT CARD -->\n<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <span class=\"text-body--default\">{{copy}}</span>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"] }]
2728
+ args: [{ selector: 'ui-select-card', encapsulation: ViewEncapsulation.None, template: "<button role=\"button\" class=\"ui-select-card--{{select_card_type}}\" tabindex=\"0\" [ngClass]=\"{'selected': selected}\" [attr.aria-pressed]=\"selected ? 'true' : 'false'\" (click)=\"onClick()\">\n <ui-box box_space=\"none\" box_background=\"transparent\">\n <ui-stack stack_gap=\"none\" stack_align=\"center\">\n <ui-box class=\"ui-select-card__image\" [ngStyle]=\"{'aspect-ratio': aspectRatio}\" box_background=\"transparent\"\n box_align_x=\"center\" box_space=\"none\">\n <ui-image *ngIf=\"image\" [image_src]=\"image\" [image_alt_text]=\"alt_text\" [image_fill]=\"true\"></ui-image>\n <ng-content></ng-content>\n </ui-box>\n <ng-template *ngIf=\"select_card_type === 'gift-card'\" [ngTemplateOutlet]=\"giftcard\"></ng-template>\n <ng-template *ngIf=\"select_card_type === 'product-card'\" [ngTemplateOutlet]=\"productcard\"></ng-template>\n </ui-stack>\n </ui-box>\n</button>\n\n\n<!--- GIFT CARD TEMPLATE -->\n<ng-template #giftcard>\n <ui-box box_space=\"tight\" box_background=\"transparent\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"tight\">\n <span class=\"ui-select-card__text-body text-label--primary\">{{title}}</span>\n\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"primary\"></ui-price>\n </ui-stack>\n </ui-box>\n</ng-template>\n\n<!--- PRODUCT CARD TEMPLATE -->\n<ng-template #productcard>\n <ui-box box_fill_mode=\"fit\" box_space=\"near\" box_background=\"transparent\">\n <ui-stack stack_direction=\"y\" stack_gap=\"near\">\n <ui-stack class=\"ui-select-card__text-stack\" stack_direction=\"y\" stack_gap=\"none\">\n <h5>{{title}}</h5>\n <ui-price [price]=\"price\" [price_before_discount]=\"price_before_discount\"\n price_type=\"hero\"></ui-price>\n </ui-stack>\n <ui-stack stack_gap=\"near\">\n <p class=\"text-body--supporting\">{{secondary_copy}}</p>\n <p class=\"text-body--default\">{{primary_copy}}</p>\n </ui-stack>\n </ui-stack>\n </ui-box>\n</ng-template>", styles: [".ui-select-card--gift-card,.ui-select-card--product-card{background-color:transparent;border:1px solid transparent;width:100%;display:block;padding:0;appearance:none;cursor:pointer;overflow:hidden}.ui-select-card--gift-card .ui-select-card__image .ui-box-content,.ui-select-card--product-card .ui-select-card__image .ui-box-content{height:100%}.ui-select-card--gift-card__text-stack,.ui-select-card--product-card__text-stack{width:100%}.ui-select-card--gift-card{border-radius:var(--oasys-radius-soften)}.ui-select-card--gift-card .ui-select-card__text-body{text-align:left;min-height:calc(var(--oasys-typography-heading-label-primary-line-height) * 2)}.ui-select-card--product-card{border-radius:var(--oasys-radius-layout);border:1px solid var(--oasys-color-brand-border-secondary)}.ui-select-card--product-card .text-body--default{text-align:left}.ui-select-card--gift-card.selected,.ui-select-card--product-card.selected{--_select-border-width: var(--oasys-border-width-primary);--_select-border-color: var(--oasys-color-interaction-border-selected);--_select-background-color: var(--oasys-color-interaction-background-selected);background-color:var(--_select-background-color);border:var(--_select-border-width) solid var(--_select-border-color)}\n"] }]
2706
2729
  }], ctorParameters: function () { return [{ type: TokenService }]; }, propDecorators: { image: [{
2707
2730
  type: Input
2708
2731
  }], alt_text: [{
@@ -2711,7 +2734,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImpo
2711
2734
  type: Input
2712
2735
  }], title: [{
2713
2736
  type: Input
2714
- }], copy: [{
2737
+ }], primary_copy: [{
2738
+ type: Input
2739
+ }], secondary_copy: [{
2715
2740
  type: Input
2716
2741
  }], price: [{
2717
2742
  type: Input