@ks89/angular-modal-gallery 12.0.0 → 13.0.0

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.
Files changed (65) hide show
  1. package/CONTRIBUTING.md +8 -11
  2. package/README.md +7 -5
  3. package/fesm2022/ks89-angular-modal-gallery.mjs +112 -100
  4. package/fesm2022/ks89-angular-modal-gallery.mjs.map +1 -1
  5. package/package.json +6 -8
  6. package/public-api.d.ts +23 -18
  7. package/esm2022/ks89-angular-modal-gallery.mjs +0 -5
  8. package/esm2022/lib/components/accessibility-default.mjs +0 -41
  9. package/esm2022/lib/components/accessible.component.mjs +0 -130
  10. package/esm2022/lib/components/carousel/carousel-previews/carousel-previews.component.mjs +0 -456
  11. package/esm2022/lib/components/carousel/carousel.component.mjs +0 -738
  12. package/esm2022/lib/components/components.mjs +0 -50
  13. package/esm2022/lib/components/current-image/current-image.component.mjs +0 -607
  14. package/esm2022/lib/components/current-image/loading-spinner/loading-spinner.component.mjs +0 -80
  15. package/esm2022/lib/components/dots/dots.component.mjs +0 -124
  16. package/esm2022/lib/components/modal-gallery/attach-to-overlay.service.mjs +0 -42
  17. package/esm2022/lib/components/modal-gallery/modal-gallery-ref.mjs +0 -103
  18. package/esm2022/lib/components/modal-gallery/modal-gallery.component.mjs +0 -499
  19. package/esm2022/lib/components/modal-gallery/modal-gallery.service.mjs +0 -168
  20. package/esm2022/lib/components/modal-gallery/modal-gallery.tokens.mjs +0 -26
  21. package/esm2022/lib/components/plain-gallery/plain-gallery.component.mjs +0 -249
  22. package/esm2022/lib/components/previews/previews.component.mjs +0 -263
  23. package/esm2022/lib/components/upper-buttons/upper-buttons-default.mjs +0 -76
  24. package/esm2022/lib/components/upper-buttons/upper-buttons.component.mjs +0 -243
  25. package/esm2022/lib/directives/a-tag-bg-image.directive.mjs +0 -78
  26. package/esm2022/lib/directives/click-outside.directive.mjs +0 -91
  27. package/esm2022/lib/directives/description.directive.mjs +0 -98
  28. package/esm2022/lib/directives/direction.directive.mjs +0 -73
  29. package/esm2022/lib/directives/directives.mjs +0 -51
  30. package/esm2022/lib/directives/fallback-image.directive.mjs +0 -59
  31. package/esm2022/lib/directives/keyboard-navigation.directive.mjs +0 -64
  32. package/esm2022/lib/directives/margin.directive.mjs +0 -84
  33. package/esm2022/lib/directives/max-size.directive.mjs +0 -75
  34. package/esm2022/lib/directives/size.directive.mjs +0 -76
  35. package/esm2022/lib/directives/swipe.directive.mjs +0 -116
  36. package/esm2022/lib/directives/wrap.directive.mjs +0 -74
  37. package/esm2022/lib/modal-gallery.module.mjs +0 -88
  38. package/esm2022/lib/model/accessibility.interface.mjs +0 -25
  39. package/esm2022/lib/model/action.enum.mjs +0 -36
  40. package/esm2022/lib/model/buttons-config.interface.mjs +0 -62
  41. package/esm2022/lib/model/carousel-config.interface.mjs +0 -25
  42. package/esm2022/lib/model/carousel-image-config.interface.mjs +0 -25
  43. package/esm2022/lib/model/carousel-preview-config.interface.mjs +0 -25
  44. package/esm2022/lib/model/current-image-config.interface.mjs +0 -25
  45. package/esm2022/lib/model/description.interface.mjs +0 -33
  46. package/esm2022/lib/model/dots-config.interface.mjs +0 -25
  47. package/esm2022/lib/model/image-internal.class.mjs +0 -35
  48. package/esm2022/lib/model/image.class.mjs +0 -56
  49. package/esm2022/lib/model/interaction-event.interface.mjs +0 -2
  50. package/esm2022/lib/model/keyboard-config.interface.mjs +0 -25
  51. package/esm2022/lib/model/keyboard.enum.mjs +0 -35
  52. package/esm2022/lib/model/lib-config.interface.mjs +0 -25
  53. package/esm2022/lib/model/loading-config.interface.mjs +0 -37
  54. package/esm2022/lib/model/max-size.interface.mjs +0 -25
  55. package/esm2022/lib/model/modal-gallery-config.interface.mjs +0 -25
  56. package/esm2022/lib/model/plain-gallery-config.interface.mjs +0 -55
  57. package/esm2022/lib/model/play-config.interface.mjs +0 -25
  58. package/esm2022/lib/model/preview-config.interface.mjs +0 -25
  59. package/esm2022/lib/model/size.interface.mjs +0 -25
  60. package/esm2022/lib/model/slide-config.interface.mjs +0 -25
  61. package/esm2022/lib/services/config.service.mjs +0 -388
  62. package/esm2022/lib/services/id-validator.service.mjs +0 -71
  63. package/esm2022/lib/utils/image.util.mjs +0 -48
  64. package/esm2022/lib/utils/user-input.util.mjs +0 -104
  65. package/esm2022/public-api.mjs +0 -42
@@ -1,263 +0,0 @@
1
- /*
2
- The MIT License (MIT)
3
-
4
- Copyright (c) 2017-2024 Stefano Cappa (Ks89)
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in all
14
- copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.
23
- */
24
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
25
- import { AccessibleComponent } from '../accessible.component';
26
- import { ImageModalEvent } from '../../model/image.class';
27
- import { NEXT, PREV } from '../../utils/user-input.util';
28
- import { getIndex } from '../../utils/image.util';
29
- import { Action } from '../../model/action.enum';
30
- import { DEFAULT_PREVIEW_SIZE } from '../../services/config.service';
31
- import * as i0 from "@angular/core";
32
- import * as i1 from "../../services/config.service";
33
- import * as i2 from "@angular/common";
34
- import * as i3 from "../../directives/size.directive";
35
- import * as i4 from "../../directives/fallback-image.directive";
36
- /**
37
- * Component with image previews
38
- */
39
- export class PreviewsComponent extends AccessibleComponent {
40
- constructor(configService) {
41
- super();
42
- this.configService = configService;
43
- /**
44
- * Output to emit the clicked preview. The payload contains the `ImageEvent` associated to the clicked preview.
45
- */
46
- this.clickPreview = new EventEmitter();
47
- /**
48
- * Enum of type `Action` that represents a mouse click on a button.
49
- * Declared here to be used inside the template.
50
- */
51
- this.clickAction = Action.CLICK;
52
- /**
53
- * Enum of type `Action` that represents a keyboard action.
54
- * Declared here to be used inside the template.
55
- */
56
- this.keyboardAction = Action.KEYBOARD;
57
- /**
58
- * Array of `InternalLibImage` exposed to the template. This field is initialized
59
- * applying transformations, default values and so on to the input of the same type.
60
- */
61
- this.previews = [];
62
- this.defaultPreviewSize = DEFAULT_PREVIEW_SIZE;
63
- }
64
- /**
65
- * Method ´ngOnInit´ to build `configPreview` applying a default value and also to
66
- * init the `previews` array.
67
- * This is an angular lifecycle hook, so its called automatically by Angular itself.
68
- * In particular, it's called only one time!!!
69
- */
70
- ngOnInit() {
71
- const libConfig = this.configService.getConfig(this.id);
72
- if (!libConfig) {
73
- throw new Error('Internal library error - libConfig must be defined');
74
- }
75
- this.accessibilityConfig = libConfig.accessibilityConfig;
76
- this.slideConfig = libConfig.slideConfig;
77
- this.previewConfig = libConfig.previewConfig;
78
- this.initPreviews(this.currentImage, this.images);
79
- }
80
- /**
81
- * Method to check if an image is active (i.e. a preview image).
82
- * @param InternalLibImage preview is an image to check if it's active or not
83
- * @returns boolean true if is active, false otherwise
84
- */
85
- isActive(preview) {
86
- if (!preview) {
87
- return false;
88
- }
89
- return preview.id === this.currentImage.id;
90
- }
91
- /**
92
- * Method ´ngOnChanges´ to update `previews` array.
93
- * Also, both `start` and `end` local variables will be updated accordingly.
94
- * This is an angular lifecycle hook, so its called automatically by Angular itself.
95
- * In particular, it's called when any data-bound property of a directive changes!!!
96
- */
97
- ngOnChanges(changes) {
98
- let currentImage = changes.currentImage?.currentValue ?? this.currentImage;
99
- let images = changes.images?.currentValue ?? this.images;
100
- if (this.previewConfig && currentImage && images) {
101
- this.initPreviews(currentImage, images);
102
- }
103
- }
104
- /**
105
- * Method called by events from both keyboard and mouse on a preview.
106
- * This will trigger the `clickpreview` output with the input preview as its payload.
107
- * @param InternalLibImage preview that triggered this method
108
- * @param KeyboardEvent | MouseEvent event payload
109
- * @param Action action that triggered the source event or `Action.NORMAL` if not specified
110
- */
111
- onImageEvent(preview, event, action = Action.NORMAL) {
112
- // It's suggested to stop propagation of the event, so the
113
- // Cdk background will not catch a click and close the modal (like it does on Windows Chrome/FF).
114
- event?.stopPropagation();
115
- if (!this.previewConfig || !this.previewConfig.clickable) {
116
- return;
117
- }
118
- const result = super.handleImageEvent(event);
119
- if (result === NEXT || result === PREV) {
120
- this.clickPreview.emit(new ImageModalEvent(this.id, action, getIndex(preview, this.images)));
121
- }
122
- }
123
- /**
124
- * Method called by events from both keyboard and mouse on a navigation arrow.
125
- * It also emits an event to specify which arrow.
126
- * @param string direction of the navigation that can be either 'next' or 'prev'
127
- * @param KeyboardEvent | MouseEvent event payload
128
- * @param Action action that triggered the source event or `Action.NORMAL` if not specified
129
- */
130
- onNavigationEvent(direction, event, action = Action.NORMAL) {
131
- const result = super.handleNavigationEvent(direction, event);
132
- if (result === NEXT) {
133
- this.next();
134
- }
135
- else if (result === PREV) {
136
- this.previous();
137
- }
138
- }
139
- /**
140
- * Method used in the template to track ids in ngFor.
141
- * @param number index of the array
142
- * @param Image item of the array
143
- * @returns number the id of the item
144
- */
145
- trackById(index, item) {
146
- return item.id;
147
- }
148
- /**
149
- * Indicates if the previews 'left arrow' should be displayed or not.
150
- * @returns
151
- */
152
- displayLeftPreviewsArrow() {
153
- // Don't show arrows if requested previews number equals or is greated than total number of imgaes
154
- if (this.previewConfig?.number !== undefined && this.images && this.previewConfig?.number >= this.images?.length) {
155
- return false;
156
- }
157
- return (this.previewConfig?.arrows && this.start > 0) || !!this.slideConfig?.infinite;
158
- }
159
- /**
160
- * Indicates if the previews 'right arrow' should be displayed or not.
161
- * @returns
162
- */
163
- displayRightPreviewsArrow() {
164
- // Don't show arrows if requested previews number equals or is greated than total number of imgaes
165
- if (this.previewConfig?.number !== undefined && this.images && this.previewConfig?.number >= this.images?.length) {
166
- return false;
167
- }
168
- return (this.previewConfig?.arrows && this.images && this.end < this.images.length) || !!this.slideConfig?.infinite;
169
- }
170
- /**
171
- * Private method to init previews based on the currentImage and the full array of images.
172
- * The current image in mandatory to show always the current preview (as highlighted).
173
- * @param InternalLibImage currentImage to decide how to show previews, because I always want to see the current image as highlighted
174
- * @param InternalLibImage[] images is the array of all images.
175
- */
176
- initPreviews(currentImage, images) {
177
- this.setIndexesPreviews(currentImage, images);
178
- this.previews = images.filter((img, i) => i >= this.start && i < this.end);
179
- }
180
- /**
181
- * Private method to update both `start` and `end` based on the currentImage.
182
- */
183
- setIndexesPreviews(currentImage, images) {
184
- if (!this.previewConfig || !images || !currentImage) {
185
- throw new Error('Internal library error - previewConfig, currentImage and images must be defined');
186
- }
187
- const previewsNumber = this.previewConfig.number;
188
- let start = getIndex(currentImage, images) - Math.floor(previewsNumber / 2);
189
- // start is, at a minimum, the first index
190
- if (start < 0)
191
- start = 0;
192
- // end index
193
- let end = start + previewsNumber;
194
- // end is, at a maximum, the last index
195
- if (end > images.length) {
196
- start -= end - images.length;
197
- if (start < 0)
198
- start = 0; // start is, at a minimum, the first index
199
- end = images.length;
200
- }
201
- this.start = start;
202
- this.end = end;
203
- }
204
- /**
205
- * Private method to update the visible previews navigating to the right (next).
206
- */
207
- next() {
208
- if (!this.previewConfig) {
209
- throw new Error('Internal library error - previewConfig must be defined');
210
- }
211
- if (this.end >= this.images.length) {
212
- // check if nextImage should be blocked
213
- const preventSliding = !!this.slideConfig && this.slideConfig.infinite === false;
214
- if (preventSliding) {
215
- return;
216
- }
217
- this.start = 0;
218
- }
219
- else {
220
- this.start++;
221
- }
222
- this.end = this.start + Math.min(this.previewConfig.number, this.images.length);
223
- this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
224
- }
225
- /**
226
- * Private method to update the visible previews navigating to the left (previous).
227
- */
228
- previous() {
229
- if (!this.previewConfig) {
230
- throw new Error('Internal library error - previewConfig must be defined');
231
- }
232
- if (this.start <= 0) {
233
- // check if prevImage should be blocked
234
- const preventSliding = !!this.slideConfig && this.slideConfig.infinite === false;
235
- if (preventSliding) {
236
- return;
237
- }
238
- this.end = this.images.length;
239
- }
240
- else {
241
- this.end--;
242
- }
243
- this.start = this.end - Math.min(this.previewConfig.number, this.images.length);
244
- this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
245
- }
246
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: PreviewsComponent, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: PreviewsComponent, selector: "ks-previews", inputs: { id: "id", currentImage: "currentImage", images: "images", customTemplate: "customTemplate" }, outputs: { clickPreview: "clickPreview" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<nav class=\"previews-container\"\n [class.mobile-visible]=\"previewConfig?.mobileVisible\"\n [attr.aria-label]=\"accessibilityConfig?.previewsContainerAriaLabel\"\n [title]=\"accessibilityConfig?.previewsContainerTitle\">\n\n <ng-container *ngIf=\"previewConfig?.visible\">\n <a class=\"nav-left\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollPrevAriaLabel\"\n [tabIndex]=\"displayLeftPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('left', $event)\" (keyup)=\"onNavigationEvent('left', $event)\">\n <div class=\"inside {{ displayLeftPreviewsArrow() ? 'left-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollPrevTitle\"></div>\n </a>\n\n <ng-container *ngFor=\"let preview of previews; trackBy: trackById; let index = index\">\n\n <div class=\"preview-container {{!previewConfig?.clickable ? ' unclickable' : ''}}\"\n (click)=\"onImageEvent(preview, $event, clickAction)\"\n (keyup)=\"onImageEvent(preview, $event, keyboardAction)\"\n >\n <ng-container \n *ngTemplateOutlet=\"!customTemplate ? defaultTemplate : customTemplate ; context:{preview, defaultTemplate}\">\n </ng-container>\n <ng-template #defaultTemplate>\n <img *ngIf=\"preview?.modal?.img\"\n class=\"inside preview-image {{isActive(preview) ? 'active' : ''}}\"\n [loading]=\"preview.loading\"\n [attr.fetchpriority]=\"preview.fetchpriority\"\n [src]=\"preview.plain?.img ? preview.plain?.img! : preview.modal.img\"\n ksFallbackImage [fallbackImg]=\"preview.plain?.fallbackImg ? preview.plain?.fallbackImg : preview.modal.fallbackImg\"\n ksSize [sizeConfig]=\"{width: previewConfig?.size ? previewConfig?.size?.width! : defaultPreviewSize.width,\n height: previewConfig?.size ? previewConfig?.size?.height! : defaultPreviewSize.height}\"\n [attr.aria-label]=\"preview.modal.ariaLabel ? preview.modal.ariaLabel : ''\"\n [title]=\"(preview.modal.title || preview.modal.title === '') ? preview.modal.title : ''\"\n alt=\"{{preview.modal.alt ? preview.modal.alt : ''}}\"\n [tabIndex]=\"0\" role=\"img\"\n />\n </ng-template>\n </div>\n\n </ng-container>\n\n\n <a class=\"nav-right\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollNextAriaLabel\"\n [tabIndex]=\"displayRightPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('right', $event)\" (keyup)=\"onNavigationEvent('right', $event)\">\n <div class=\"inside {{ displayRightPreviewsArrow() ? 'right-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollNextTitle\"></div>\n </a>\n </ng-container>\n\n</nav>\n", styles: ["@media only screen and (max-width: 767px),only screen and (max-device-width: 767px){.previews-container{display:none}.previews-container>.preview-image{display:none}.previews-container>.nav-left{display:none}.previews-container>.nav-right{display:none}.previews-container.mobile-visible{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container.mobile-visible>.nav-left{display:flex}.previews-container.mobile-visible>.nav-right{display:flex}.previews-container.mobile-visible>.preview-image{cursor:pointer;display:flex;margin-left:2px;margin-right:2px;opacity:.7;height:50px}.previews-container.mobile-visible>.preview-image.active{opacity:1}.previews-container.mobile-visible>.preview-image.unclickable{cursor:not-allowed}.previews-container.mobile-visible>.preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}}@media only screen and (min-device-width: 768px){.previews-container{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container .preview-container{margin-left:2px;margin-right:2px;cursor:pointer}.previews-container .preview-container.unclickable{cursor:not-allowed}.previews-container .preview-container .preview-image{opacity:.7;height:50px}.previews-container .preview-container .preview-image.active{opacity:1}.previews-container .preview-container .preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}.previews-container .nav,.previews-container>.nav-right,.previews-container>.nav-left{color:#919191;cursor:pointer;transition:all .5s}.previews-container .nav:hover,.previews-container>.nav-right:hover,.previews-container>.nav-left:hover{transform:scale(1.1)}.previews-container>.nav-left{margin-right:10px}.previews-container>.nav-right{margin-left:10px}}@keyframes fadein-visible{0%{opacity:0}to{opacity:1}}@keyframes fadein-semi-visible05{0%{opacity:0}to{opacity:.5}}@keyframes fadein-semi-visible08{0%{opacity:0}to{opacity:.8}}@keyframes fadein-semi-visible09{0%{opacity:0}to{opacity:.9}}\n", ".arrow-preview-image,.right-arrow-preview-image,.left-arrow-preview-image,.empty-arrow-preview-image{width:15px;height:15px;opacity:.5}.empty-arrow-preview-image{background:#000;opacity:0}.left-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMTQ1LjE4OCwyMzguNTc1bDIxNS41LTIxNS41YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xcy0xMy44LTUuMy0xOS4xLDBsLTIyNS4xLDIyNS4xYy01LjMsNS4zLTUuMywxMy44LDAsMTkuMWwyMjUuMSwyMjUgICBjMi42LDIuNiw2LjEsNCw5LjUsNHM2LjktMS4zLDkuNS00YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xTDE0NS4xODgsMjM4LjU3NXoiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.left-arrow-preview-image:hover{transform:scale(1.2)}.right-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMzYwLjczMSwyMjkuMDc1bC0yMjUuMS0yMjUuMWMtNS4zLTUuMy0xMy44LTUuMy0xOS4xLDBzLTUuMywxMy44LDAsMTkuMWwyMTUuNSwyMTUuNWwtMjE1LjUsMjE1LjUgICBjLTUuMyw1LjMtNS4zLDEzLjgsMCwxOS4xYzIuNiwyLjYsNi4xLDQsOS41LDRjMy40LDAsNi45LTEuMyw5LjUtNGwyMjUuMS0yMjUuMUMzNjUuOTMxLDI0Mi44NzUsMzY1LjkzMSwyMzQuMjc1LDM2MC43MzEsMjI5LjA3NXogICAiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.right-arrow-preview-image:hover{transform:scale(1.2)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: i3.SizeDirective, selector: "[ksSize]", inputs: ["sizeConfig"] }, { kind: "directive", type: i4.FallbackImageDirective, selector: "[ksFallbackImage]", inputs: ["fallbackImg"], outputs: ["fallbackApplied"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
248
- }
249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: PreviewsComponent, decorators: [{
250
- type: Component,
251
- args: [{ selector: 'ks-previews', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav class=\"previews-container\"\n [class.mobile-visible]=\"previewConfig?.mobileVisible\"\n [attr.aria-label]=\"accessibilityConfig?.previewsContainerAriaLabel\"\n [title]=\"accessibilityConfig?.previewsContainerTitle\">\n\n <ng-container *ngIf=\"previewConfig?.visible\">\n <a class=\"nav-left\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollPrevAriaLabel\"\n [tabIndex]=\"displayLeftPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('left', $event)\" (keyup)=\"onNavigationEvent('left', $event)\">\n <div class=\"inside {{ displayLeftPreviewsArrow() ? 'left-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollPrevTitle\"></div>\n </a>\n\n <ng-container *ngFor=\"let preview of previews; trackBy: trackById; let index = index\">\n\n <div class=\"preview-container {{!previewConfig?.clickable ? ' unclickable' : ''}}\"\n (click)=\"onImageEvent(preview, $event, clickAction)\"\n (keyup)=\"onImageEvent(preview, $event, keyboardAction)\"\n >\n <ng-container \n *ngTemplateOutlet=\"!customTemplate ? defaultTemplate : customTemplate ; context:{preview, defaultTemplate}\">\n </ng-container>\n <ng-template #defaultTemplate>\n <img *ngIf=\"preview?.modal?.img\"\n class=\"inside preview-image {{isActive(preview) ? 'active' : ''}}\"\n [loading]=\"preview.loading\"\n [attr.fetchpriority]=\"preview.fetchpriority\"\n [src]=\"preview.plain?.img ? preview.plain?.img! : preview.modal.img\"\n ksFallbackImage [fallbackImg]=\"preview.plain?.fallbackImg ? preview.plain?.fallbackImg : preview.modal.fallbackImg\"\n ksSize [sizeConfig]=\"{width: previewConfig?.size ? previewConfig?.size?.width! : defaultPreviewSize.width,\n height: previewConfig?.size ? previewConfig?.size?.height! : defaultPreviewSize.height}\"\n [attr.aria-label]=\"preview.modal.ariaLabel ? preview.modal.ariaLabel : ''\"\n [title]=\"(preview.modal.title || preview.modal.title === '') ? preview.modal.title : ''\"\n alt=\"{{preview.modal.alt ? preview.modal.alt : ''}}\"\n [tabIndex]=\"0\" role=\"img\"\n />\n </ng-template>\n </div>\n\n </ng-container>\n\n\n <a class=\"nav-right\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollNextAriaLabel\"\n [tabIndex]=\"displayRightPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('right', $event)\" (keyup)=\"onNavigationEvent('right', $event)\">\n <div class=\"inside {{ displayRightPreviewsArrow() ? 'right-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollNextTitle\"></div>\n </a>\n </ng-container>\n\n</nav>\n", styles: ["@media only screen and (max-width: 767px),only screen and (max-device-width: 767px){.previews-container{display:none}.previews-container>.preview-image{display:none}.previews-container>.nav-left{display:none}.previews-container>.nav-right{display:none}.previews-container.mobile-visible{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container.mobile-visible>.nav-left{display:flex}.previews-container.mobile-visible>.nav-right{display:flex}.previews-container.mobile-visible>.preview-image{cursor:pointer;display:flex;margin-left:2px;margin-right:2px;opacity:.7;height:50px}.previews-container.mobile-visible>.preview-image.active{opacity:1}.previews-container.mobile-visible>.preview-image.unclickable{cursor:not-allowed}.previews-container.mobile-visible>.preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}}@media only screen and (min-device-width: 768px){.previews-container{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container .preview-container{margin-left:2px;margin-right:2px;cursor:pointer}.previews-container .preview-container.unclickable{cursor:not-allowed}.previews-container .preview-container .preview-image{opacity:.7;height:50px}.previews-container .preview-container .preview-image.active{opacity:1}.previews-container .preview-container .preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}.previews-container .nav,.previews-container>.nav-right,.previews-container>.nav-left{color:#919191;cursor:pointer;transition:all .5s}.previews-container .nav:hover,.previews-container>.nav-right:hover,.previews-container>.nav-left:hover{transform:scale(1.1)}.previews-container>.nav-left{margin-right:10px}.previews-container>.nav-right{margin-left:10px}}@keyframes fadein-visible{0%{opacity:0}to{opacity:1}}@keyframes fadein-semi-visible05{0%{opacity:0}to{opacity:.5}}@keyframes fadein-semi-visible08{0%{opacity:0}to{opacity:.8}}@keyframes fadein-semi-visible09{0%{opacity:0}to{opacity:.9}}\n", ".arrow-preview-image,.right-arrow-preview-image,.left-arrow-preview-image,.empty-arrow-preview-image{width:15px;height:15px;opacity:.5}.empty-arrow-preview-image{background:#000;opacity:0}.left-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMTQ1LjE4OCwyMzguNTc1bDIxNS41LTIxNS41YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xcy0xMy44LTUuMy0xOS4xLDBsLTIyNS4xLDIyNS4xYy01LjMsNS4zLTUuMywxMy44LDAsMTkuMWwyMjUuMSwyMjUgICBjMi42LDIuNiw2LjEsNCw5LjUsNHM2LjktMS4zLDkuNS00YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xTDE0NS4xODgsMjM4LjU3NXoiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.left-arrow-preview-image:hover{transform:scale(1.2)}.right-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMzYwLjczMSwyMjkuMDc1bC0yMjUuMS0yMjUuMWMtNS4zLTUuMy0xMy44LTUuMy0xOS4xLDBzLTUuMywxMy44LDAsMTkuMWwyMTUuNSwyMTUuNWwtMjE1LjUsMjE1LjUgICBjLTUuMyw1LjMtNS4zLDEzLjgsMCwxOS4xYzIuNiwyLjYsNi4xLDQsOS41LDRjMy40LDAsNi45LTEuMyw5LjUtNGwyMjUuMS0yMjUuMUMzNjUuOTMxLDI0Mi44NzUsMzY1LjkzMSwyMzQuMjc1LDM2MC43MzEsMjI5LjA3NXogICAiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.right-arrow-preview-image:hover{transform:scale(1.2)}\n"] }]
252
- }], ctorParameters: () => [{ type: i1.ConfigService }], propDecorators: { id: [{
253
- type: Input
254
- }], currentImage: [{
255
- type: Input
256
- }], images: [{
257
- type: Input
258
- }], customTemplate: [{
259
- type: Input
260
- }], clickPreview: [{
261
- type: Output
262
- }] } });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlld3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3M4OS9hbmd1bGFyLW1vZGFsLWdhbGxlcnkvc3JjL2xpYi9jb21wb25lbnRzL3ByZXZpZXdzL3ByZXZpZXdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tzODkvYW5ndWxhci1tb2RhbC1nYWxsZXJ5L3NyYy9saWIvY29tcG9uZW50cy9wcmV2aWV3cy9wcmV2aWV3cy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUE0QyxNQUFNLGVBQWUsQ0FBQztBQUUzSyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc5RCxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQWlCLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7OztBQUlwRjs7R0FFRztBQU9ILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxtQkFBbUI7SUE0RXhELFlBQW9CLGFBQTRCO1FBQzlDLEtBQUssRUFBRSxDQUFDO1FBRFUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFoRGhEOztXQUVHO1FBRUgsaUJBQVksR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQWdCeEU7OztXQUdHO1FBQ0gsZ0JBQVcsR0FBVyxNQUFNLENB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QUNuQix1Q0FBdUM7WUFDdkMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDO1lBQ2pGLElBQUcsY0FBYyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQWlCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBcUIsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUcsQ0FBQzs4R0EvUVUsaUJBQWlCO2tHQUFqQixpQkFBaUIsa1BDbEQ5QiwyN0ZBdURBOzsyRkRMYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNO2tGQVEvQyxFQUFFO3NCQURELEtBQUs7Z0JBTU4sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLE1BQU07c0JBREwsS0FBSztnQkFVTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuIENvcHlyaWdodCAoYykgMjAxNy0yMDI0IFN0ZWZhbm8gQ2FwcGEgKEtzODkpXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTiBJTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFjY2Vzc2libGVDb21wb25lbnQgfSBmcm9tICcuLi9hY2Nlc3NpYmxlLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbC9hY2Nlc3NpYmlsaXR5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbWFnZSwgSW1hZ2VFdmVudCwgSW1hZ2VNb2RhbEV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWwvaW1hZ2UuY2xhc3MnO1xuaW1wb3J0IHsgSW50ZXJuYWxMaWJJbWFnZSB9IGZyb20gJy4uLy4uL21vZGVsL2ltYWdlLWludGVybmFsLmNsYXNzJztcbmltcG9ydCB7IFByZXZpZXdDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbC9wcmV2aWV3LWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2xpZGVDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbC9zbGlkZS1jb25maWcuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgTkVYVCwgUFJFViB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZXItaW5wdXQudXRpbCc7XG5pbXBvcnQgeyBnZXRJbmRleCB9IGZyb20gJy4uLy4uL3V0aWxzL2ltYWdlLnV0aWwnO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSwgREVGQVVMVF9QUkVWSUVXX1NJWkUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2l6ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGliQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWwvbGliLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIENvbXBvbmVudCB3aXRoIGltYWdlIHByZXZpZXdzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tzLXByZXZpZXdzJyxcbiAgc3R5bGVVcmxzOiBbJ3ByZXZpZXdzLnNjc3MnLCAnLi4vcHJldmlld3MtYXJyb3dzLnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICdwcmV2aWV3cy5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUHJldmlld3NDb21wb25lbnQgZXh0ZW5kcyBBY2Nlc3NpYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogVW5pcXVlIGlkICg+PTApIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoaXMgbGlicmFyeS4gVGhpcyBpcyByZXF1aXJlZCB3aGVuIHlvdSBhcmUgdXNpbmdcbiAgICogdGhlIHNlcnZpY2UgdG8gY2FsbCBtb2RhbCBnYWxsZXJ5LlxuICAgKi9cbiAgQElucHV0KClcbiAgaWQhOiBudW1iZXI7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgdHlwZSBgSW50ZXJuYWxMaWJJbWFnZWAgdGhhdCByZXByZXNlbnQgdGhlIHZpc2libGUgaW1hZ2UuXG4gICAqL1xuICBASW5wdXQoKVxuICBjdXJyZW50SW1hZ2UhOiBJbnRlcm5hbExpYkltYWdlO1xuICAvKipcbiAgICogQXJyYXkgb2YgYEludGVybmFsTGliSW1hZ2VgIHRoYXQgcmVwcmVzZW50IHRoZSBtb2RlbCBvZiB0aGlzIGxpYnJhcnkgd2l0aCBhbGwgaW1hZ2VzLFxuICAgKiB0aHVtYnMgYW5kIHNvIG9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgaW1hZ2VzITogSW50ZXJuYWxMaWJJbWFnZVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIHRoZSByZW5kZXJpbmcgb2YgcHJldmlld3MuXG4gICAqIFRlbXBsYXRlIG1heSBhY2Nlc3MgZm9sbG93aW5nIGNvbnRleHQgdmFyaWFibGVzOlxuICAgKiAtIHByZXZpZXc6IHRoZSBgSW1hZ2VgIG9iamVjdFxuICAgKiAtIGRlZmF1bHRUZW1wbGF0ZTogdGhlIHRlbXBsYXRlIHVzZWQgYnkgZGVmYXVsdCB0byByZW5kZXIgdGhlIHByZXZpZXcgKGluIGNhc2UgdGhlIG5lZWQgaXMgdG8gd3JhcCBpdClcbiAgICovXG4gIEBJbnB1dCgpXG4gIGN1c3RvbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgdG8gZW1pdCB0aGUgY2xpY2tlZCBwcmV2aWV3LiBUaGUgcGF5bG9hZCBjb250YWlucyB0aGUgYEltYWdlRXZlbnRgIGFzc29jaWF0ZWQgdG8gdGhlIGNsaWNrZWQgcHJldmlldy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBjbGlja1ByZXZpZXc6IEV2ZW50RW1pdHRlcjxJbWFnZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SW1hZ2VFdmVudD4oKTtcblxuICAvKipcbiAgICogT2JqZWN0IG9mIHR5cGUgYEFjY2Vzc2liaWxpdHlDb25maWdgIHRvIGluaXQgY3VzdG9tIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgaXQgY29udGFpbnMgdGl0bGVzLCBhbHQgdGV4dHMsIGFyaWEtbGFiZWxzIGFuZCBzbyBvbi5cbiAgICovXG4gIGFjY2Vzc2liaWxpdHlDb25maWc6IEFjY2Vzc2liaWxpdHlDb25maWcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgdHlwZSBgU2xpZGVDb25maWdgIHRvIGdldCBgaW5maW5pdGUgc2xpZGluZ2AuXG4gICAqL1xuICBzbGlkZUNvbmZpZzogU2xpZGVDb25maWcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgdHlwZSBgUHJldmlld0NvbmZpZ2AgdG8gaW5pdCBQcmV2aWV3c0NvbXBvbmVudCdzIGZlYXR1cmVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIGl0IGNvbnRhaW5zIGEgcGFyYW0gdG8gc2hvdy9oaWRlIHRoaXMgY29tcG9uZW50LCBzaXplcy5cbiAgICovXG4gIHByZXZpZXdDb25maWc6IFByZXZpZXdDb25maWcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBFbnVtIG9mIHR5cGUgYEFjdGlvbmAgdGhhdCByZXByZXNlbnRzIGEgbW91c2UgY2xpY2sgb24gYSBidXR0b24uXG4gICAqIERlY2xhcmVkIGhlcmUgdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgY2xpY2tBY3Rpb246IEFjdGlvbiA9IEFjdGlvbi5DTElDSztcbiAgLyoqXG4gICAqIEVudW0gb2YgdHlwZSBgQWN0aW9uYCB0aGF0IHJlcHJlc2VudHMgYSBrZXlib2FyZCBhY3Rpb24uXG4gICAqIERlY2xhcmVkIGhlcmUgdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAga2V5Ym9hcmRBY3Rpb246IEFjdGlvbiA9IEFjdGlvbi5LRVlCT0FSRDtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGBJbnRlcm5hbExpYkltYWdlYCBleHBvc2VkIHRvIHRoZSB0ZW1wbGF0ZS4gVGhpcyBmaWVsZCBpcyBpbml0aWFsaXplZFxuICAgKiBhcHBseWluZyB0cmFuc2Zvcm1hdGlvbnMsIGRlZmF1bHQgdmFsdWVzIGFuZCBzbyBvbiB0byB0aGUgaW5wdXQgb2YgdGhlIHNhbWUgdHlwZS5cbiAgICovXG4gIHByZXZpZXdzOiBJbnRlcm5hbExpYkltYWdlW10gPSBbXTtcbiAgLyoqXG4gICAqIFN0YXJ0IGluZGV4IChpbmNsdWRlZCkgb2YgdGhlIGlucHV0IGltYWdlcyB1c2VkIHRvIGRpc3BsYXkgcHJldmlld3MuXG4gICAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEVuZCBpbmRleCAoZXhjbHVkZWQpIG9mIHRoZSBpbnB1dCBpbWFnZXMgdXNlZCB0byBkaXNwbGF5IHByZXZpZXdzLlxuICAgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gIGVuZDogbnVtYmVyO1xuXG4gIGRlZmF1bHRQcmV2aWV3U2l6ZTogU2l6ZSA9IERFRkFVTFRfUFJFVklFV19TSVpFO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIMK0bmdPbkluaXTCtCB0byBidWlsZCBgY29uZmlnUHJldmlld2AgYXBwbHlpbmcgYSBkZWZhdWx0IHZhbHVlIGFuZCBhbHNvIHRvXG4gICAqIGluaXQgdGhlIGBwcmV2aWV3c2AgYXJyYXkuXG4gICAqIFRoaXMgaXMgYW4gYW5ndWxhciBsaWZlY3ljbGUgaG9vaywgc28gaXRzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IEFuZ3VsYXIgaXRzZWxmLlxuICAgKiBJbiBwYXJ0aWN1bGFyLCBpdCdzIGNhbGxlZCBvbmx5IG9uZSB0aW1lISEhXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBsaWJDb25maWc6IExpYkNvbmZpZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcodGhpcy5pZCk7XG4gICAgaWYgKCFsaWJDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbGlicmFyeSBlcnJvciAtIGxpYkNvbmZpZyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG4gICAgdGhpcy5hY2Nlc3NpYmlsaXR5Q29uZmlnID0gbGliQ29uZmlnLmFjY2Vzc2liaWxpdHlDb25maWc7XG4gICAgdGhpcy5zbGlkZUNvbmZpZyA9IGxpYkNvbmZpZy5zbGlkZUNvbmZpZztcbiAgICB0aGlzLnByZXZpZXdDb25maWcgPSBsaWJDb25maWcucHJldmlld0NvbmZpZztcbiAgICB0aGlzLmluaXRQcmV2aWV3cyh0aGlzLmN1cnJlbnRJbWFnZSwgdGhpcy5pbWFnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBjaGVjayBpZiBhbiBpbWFnZSBpcyBhY3RpdmUgKGkuZS4gYSBwcmV2aWV3IGltYWdlKS5cbiAgICogQHBhcmFtIEludGVybmFsTGliSW1hZ2UgcHJldmlldyBpcyBhbiBpbWFnZSB0byBjaGVjayBpZiBpdCdzIGFjdGl2ZSBvciBub3RcbiAgICogQHJldHVybnMgYm9vbGVhbiB0cnVlIGlmIGlzIGFjdGl2ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc0FjdGl2ZShwcmV2aWV3OiBJbnRlcm5hbExpYkltYWdlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwcmV2aWV3KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBwcmV2aWV3LmlkID09PSB0aGlzLmN1cnJlbnRJbWFnZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgwrRuZ09uQ2hhbmdlc8K0IHRvIHVwZGF0ZSBgcHJldmlld3NgIGFycmF5LlxuICAgKiBBbHNvLCBib3RoIGBzdGFydGAgYW5kIGBlbmRgIGxvY2FsIHZhcmlhYmxlcyB3aWxsIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG4gICAqIFRoaXMgaXMgYW4gYW5ndWxhciBsaWZlY3ljbGUgaG9vaywgc28gaXRzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IEFuZ3VsYXIgaXRzZWxmLlxuICAgKiBJbiBwYXJ0aWN1bGFyLCBpdCdzIGNhbGxlZCB3aGVuIGFueSBkYXRhLWJvdW5kIHByb3BlcnR5IG9mIGEgZGlyZWN0aXZlIGNoYW5nZXMhISFcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblxuICAgIGxldCBjdXJyZW50SW1hZ2UgPSBjaGFuZ2VzLmN1cnJlbnRJbWFnZT8uY3VycmVudFZhbHVlID8/IHRoaXMuY3VycmVudEltYWdlO1xuICAgIGxldCBpbWFnZXMgPSBjaGFuZ2VzLmltYWdlcz8uY3VycmVudFZhbHVlID8/IHRoaXMuaW1hZ2VzO1xuXG4gICAgaWYodGhpcy5wcmV2aWV3Q29uZmlnICYmIGN1cnJlbnRJbWFnZSAmJiBpbWFnZXMpIHtcbiAgICAgIHRoaXMuaW5pdFByZXZpZXdzKCBjdXJyZW50SW1hZ2UsIGltYWdlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBjYWxsZWQgYnkgZXZlbnRzIGZyb20gYm90aCBrZXlib2FyZCBhbmQgbW91c2Ugb24gYSBwcmV2aWV3LlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgYGNsaWNrcHJldmlld2Agb3V0cHV0IHdpdGggdGhlIGlucHV0IHByZXZpZXcgYXMgaXRzIHBheWxvYWQuXG4gICAqIEBwYXJhbSBJbnRlcm5hbExpYkltYWdlIHByZXZpZXcgdGhhdCB0cmlnZ2VyZWQgdGhpcyBtZXRob2RcbiAgICogQHBhcmFtIEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50IGV2ZW50IHBheWxvYWRcbiAgICogQHBhcmFtIEFjdGlvbiBhY3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIHNvdXJjZSBldmVudCBvciBgQWN0aW9uLk5PUk1BTGAgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgb25JbWFnZUV2ZW50KHByZXZpZXc6IEludGVybmFsTGliSW1hZ2UsIGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCwgYWN0aW9uOiBBY3Rpb24gPSBBY3Rpb24uTk9STUFMKTogdm9pZCB7XG4gICAgLy8gSXQncyBzdWdnZXN0ZWQgdG8gc3RvcCBwcm9wYWdhdGlvbiBvZiB0aGUgZXZlbnQsIHNvIHRoZVxuICAgIC8vIENkayBiYWNrZ3JvdW5kIHdpbGwgbm90IGNhdGNoIGEgY2xpY2sgYW5kIGNsb3NlIHRoZSBtb2RhbCAobGlrZSBpdCBkb2VzIG9uIFdpbmRvd3MgQ2hyb21lL0ZGKS5cbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdDb25maWcgfHwgIXRoaXMucHJldmlld0NvbmZpZy5jbGlja2FibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBzdXBlci5oYW5kbGVJbWFnZUV2ZW50KGV2ZW50KTtcbiAgICBpZiAocmVzdWx0ID09PSBORVhUIHx8IHJlc3VsdCA9PT0gUFJFVikge1xuICAgICAgdGhpcy5jbGlja1ByZXZpZXcuZW1pdChuZXcgSW1hZ2VNb2RhbEV2ZW50KHRoaXMuaWQsIGFjdGlvbiwgZ2V0SW5kZXgocHJldmlldywgdGhpcy5pbWFnZXMpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBjYWxsZWQgYnkgZXZlbnRzIGZyb20gYm90aCBrZXlib2FyZCBhbmQgbW91c2Ugb24gYSBuYXZpZ2F0aW9uIGFycm93LlxuICAgKiBJdCBhbHNvIGVtaXRzIGFuIGV2ZW50IHRvIHNwZWNpZnkgd2hpY2ggYXJyb3cuXG4gICAqIEBwYXJhbSBzdHJpbmcgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uIHRoYXQgY2FuIGJlIGVpdGhlciAnbmV4dCcgb3IgJ3ByZXYnXG4gICAqIEBwYXJhbSBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCBldmVudCBwYXlsb2FkXG4gICAqIEBwYXJhbSBBY3Rpb24gYWN0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBzb3VyY2UgZXZlbnQgb3IgYEFjdGlvbi5OT1JNQUxgIGlmIG5vdCBzcGVjaWZpZWRcbiAgICovXG4gIG9uTmF2aWdhdGlvbkV2ZW50KGRpcmVjdGlvbjogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQsIGFjdGlvbjogQWN0aW9uID0gQWN0aW9uLk5PUk1BTCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyID0gc3VwZXIuaGFuZGxlTmF2aWdhdGlvbkV2ZW50KGRpcmVjdGlvbiwgZXZlbnQpO1xuICAgIGlmIChyZXN1bHQgPT09IE5FWFQpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBQUkVWKSB7XG4gICAgICB0aGlzLnByZXZpb3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIHRoZSB0ZW1wbGF0ZSB0byB0cmFjayBpZHMgaW4gbmdGb3IuXG4gICAqIEBwYXJhbSBudW1iZXIgaW5kZXggb2YgdGhlIGFycmF5XG4gICAqIEBwYXJhbSBJbWFnZSBpdGVtIG9mIHRoZSBhcnJheVxuICAgKiBAcmV0dXJucyBudW1iZXIgdGhlIGlkIG9mIHRoZSBpdGVtXG4gICAqL1xuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogSW1hZ2UpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgcHJldmlld3MgJ2xlZnQgYXJyb3cnIHNob3VsZCBiZSBkaXNwbGF5ZWQgb3Igbm90LlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZGlzcGxheUxlZnRQcmV2aWV3c0Fycm93KCk6IGJvb2xlYW4ge1xuICAgIC8vIERvbid0IHNob3cgYXJyb3dzIGlmIHJlcXVlc3RlZCBwcmV2aWV3cyBudW1iZXIgZXF1YWxzIG9yIGlzIGdyZWF0ZWQgdGhhbiB0b3RhbCBudW1iZXIgb2YgaW1nYWVzXG4gICAgaWYodGhpcy5wcmV2aWV3Q29uZmlnPy5udW1iZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmltYWdlcyAmJiB0aGlzLnByZXZpZXdDb25maWc/Lm51bWJlciA+PSB0aGlzLmltYWdlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5wcmV2aWV3Q29uZmlnPy5hcnJvd3MgJiYgdGhpcy5zdGFydCA+IDApIHx8ICEhdGhpcy5zbGlkZUNvbmZpZz8uaW5maW5pdGU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBwcmV2aWV3cyAncmlnaHQgYXJyb3cnIHNob3VsZCBiZSBkaXNwbGF5ZWQgb3Igbm90LlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZGlzcGxheVJpZ2h0UHJldmlld3NBcnJvdygpOiBib29sZWFuIHtcbiAgICAvLyBEb24ndCBzaG93IGFycm93cyBpZiByZXF1ZXN0ZWQgcHJldmlld3MgbnVtYmVyIGVxdWFscyBvciBpcyBncmVhdGVkIHRoYW4gdG90YWwgbnVtYmVyIG9mIGltZ2Flc1xuICAgIGlmKHRoaXMucHJldmlld0NvbmZpZz8ubnVtYmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbWFnZXMgJiYgdGhpcy5wcmV2aWV3Q29uZmlnPy5udW1iZXIgPj0gdGhpcy5pbWFnZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKHRoaXMucHJldmlld0NvbmZpZz8uYXJyb3dzICYmIHRoaXMuaW1hZ2VzICYmIHRoaXMuZW5kIDwgdGhpcy5pbWFnZXMubGVuZ3RoKSB8fCAhIXRoaXMuc2xpZGVDb25maWc/LmluZmluaXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kIHRvIGluaXQgcHJldmlld3MgYmFzZWQgb24gdGhlIGN1cnJlbnRJbWFnZSBhbmQgdGhlIGZ1bGwgYXJyYXkgb2YgaW1hZ2VzLlxuICAgKiBUaGUgY3VycmVudCBpbWFnZSBpbiBtYW5kYXRvcnkgdG8gc2hvdyBhbHdheXMgdGhlIGN1cnJlbnQgcHJldmlldyAoYXMgaGlnaGxpZ2h0ZWQpLlxuICAgKiBAcGFyYW0gSW50ZXJuYWxMaWJJbWFnZSBjdXJyZW50SW1hZ2UgdG8gZGVjaWRlIGhvdyB0byBzaG93IHByZXZpZXdzLCBiZWNhdXNlIEkgYWx3YXlzIHdhbnQgdG8gc2VlIHRoZSBjdXJyZW50IGltYWdlIGFzIGhpZ2hsaWdodGVkXG4gICAqIEBwYXJhbSBJbnRlcm5hbExpYkltYWdlW10gaW1hZ2VzIGlzIHRoZSBhcnJheSBvZiBhbGwgaW1hZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UHJldmlld3MoY3VycmVudEltYWdlOiBJbnRlcm5hbExpYkltYWdlLCBpbWFnZXM6IEludGVybmFsTGliSW1hZ2VbXSk6IHZvaWQge1xuICAgIHRoaXMuc2V0SW5kZXhlc1ByZXZpZXdzKGN1cnJlbnRJbWFnZSwgaW1hZ2VzKTtcbiAgICB0aGlzLnByZXZpZXdzID0gaW1hZ2VzLmZpbHRlcigoaW1nOiBJbnRlcm5hbExpYkltYWdlLCBpOiBudW1iZXIpID0+IGkgPj0gdGhpcy5zdGFydCAmJiBpIDwgdGhpcy5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kIHRvIHVwZGF0ZSBib3RoIGBzdGFydGAgYW5kIGBlbmRgIGJhc2VkIG9uIHRoZSBjdXJyZW50SW1hZ2UuXG4gICAqL1xuICBwcml2YXRlIHNldEluZGV4ZXNQcmV2aWV3cyhjdXJyZW50SW1hZ2U6IEludGVybmFsTGliSW1hZ2UsIGltYWdlczogSW50ZXJuYWxMaWJJbWFnZVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdDb25maWcgfHwgIWltYWdlcyB8fCAhY3VycmVudEltYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGxpYnJhcnkgZXJyb3IgLSBwcmV2aWV3Q29uZmlnLCBjdXJyZW50SW1hZ2UgYW5kIGltYWdlcyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlld3NOdW1iZXIgPSB0aGlzLnByZXZpZXdDb25maWcubnVtYmVyIGFzIG51bWJlcjtcbiAgICBsZXQgc3RhcnQgPSBnZXRJbmRleChjdXJyZW50SW1hZ2UsIGltYWdlcykgLSBNYXRoLmZsb29yKHByZXZpZXdzTnVtYmVyIC8gMik7XG4gICAgLy8gc3RhcnQgaXMsIGF0IGEgbWluaW11bSwgdGhlIGZpcnN0IGluZGV4XG4gICAgaWYoc3RhcnQgPCAwKSBzdGFydCA9IDA7XG4gICAgLy8gZW5kIGluZGV4XG4gICAgbGV0IGVuZCA9IHN0YXJ0ICsgcHJldmlld3NOdW1iZXI7XG4gICAgLy8gZW5kIGlzLCBhdCBhIG1heGltdW0sIHRoZSBsYXN0IGluZGV4XG4gICAgaWYoZW5kID4gaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgc3RhcnQgLT0gZW5kIC0gaW1hZ2VzLmxlbmd0aDtcbiAgICAgIGlmKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOyAvLyBzdGFydCBpcywgYXQgYSBtaW5pbXVtLCB0aGUgZmlyc3QgaW5kZXhcbiAgICAgIGVuZCA9IGltYWdlcy5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcml2YXRlIG1ldGhvZCB0byB1cGRhdGUgdGhlIHZpc2libGUgcHJldmlld3MgbmF2aWdhdGluZyB0byB0aGUgcmlnaHQgKG5leHQpLlxuICAgKi9cbiAgcHJpdmF0ZSBuZXh0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmV2aWV3Q29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGxpYnJhcnkgZXJyb3IgLSBwcmV2aWV3Q29uZmlnIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZih0aGlzLmVuZCA+PSB0aGlzLmltYWdlcy5sZW5ndGgpIHtcbiAgICAgIC8vIGNoZWNrIGlmIG5leHRJbWFnZSBzaG91bGQgYmUgYmxvY2tlZFxuICAgICAgY29uc3QgcHJldmVudFNsaWRpbmcgPSAhIXRoaXMuc2xpZGVDb25maWcgJiYgdGhpcy5zbGlkZUNvbmZpZy5pbmZpbml0ZSA9PT0gZmFsc2U7XG4gICAgICBpZihwcmV2ZW50U2xpZGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydCsrO1xuICAgIH1cbiAgICB0aGlzLmVuZCA9IHRoaXMuc3RhcnQgKyBNYXRoLm1pbigodGhpcy5wcmV2aWV3Q29uZmlnLm51bWJlciBhcyBudW1iZXIpLCB0aGlzLmltYWdlcy5sZW5ndGgpO1xuXG4gICAgdGhpcy5wcmV2aWV3cyA9IHRoaXMuaW1hZ2VzLmZpbHRlcigoaW1nOiBJbnRlcm5hbExpYkltYWdlLCBpOiBudW1iZXIpID0+IGkgPj0gdGhpcy5zdGFydCAmJiBpIDwgdGhpcy5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgdmlzaWJsZSBwcmV2aWV3cyBuYXZpZ2F0aW5nIHRvIHRoZSBsZWZ0IChwcmV2aW91cykuXG4gICAqL1xuICBwcml2YXRlIHByZXZpb3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmV2aWV3Q29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGxpYnJhcnkgZXJyb3IgLSBwcmV2aWV3Q29uZmlnIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZih0aGlzLnN0YXJ0IDw9IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHByZXZJbWFnZSBzaG91bGQgYmUgYmxvY2tlZFxuICAgICAgY29uc3QgcHJldmVudFNsaWRpbmcgPSAhIXRoaXMuc2xpZGVDb25maWcgJiYgdGhpcy5zbGlkZUNvbmZpZy5pbmZpbml0ZSA9PT0gZmFsc2U7XG4gICAgICBpZihwcmV2ZW50U2xpZGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmVuZCA9IHRoaXMuaW1hZ2VzLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmQtLTtcbiAgICB9XG4gICAgdGhpcy5zdGFydCA9IHRoaXMuZW5kIC0gTWF0aC5taW4oKHRoaXMucHJldmlld0NvbmZpZy5udW1iZXIgYXMgbnVtYmVyKSwgdGhpcy5pbWFnZXMubGVuZ3RoKTtcblxuICAgIHRoaXMucHJldmlld3MgPSB0aGlzLmltYWdlcy5maWx0ZXIoKGltZzogSW50ZXJuYWxMaWJJbWFnZSwgaTogbnVtYmVyKSA9PiBpID49IHRoaXMuc3RhcnQgJiYgaSA8IHRoaXMuZW5kKTtcbiAgfVxuXG59XG4iLCI8bmF2IGNsYXNzPVwicHJldmlld3MtY29udGFpbmVyXCJcbiAgICAgW2NsYXNzLm1vYmlsZS12aXNpYmxlXT1cInByZXZpZXdDb25maWc/Lm1vYmlsZVZpc2libGVcIlxuICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFjY2Vzc2liaWxpdHlDb25maWc/LnByZXZpZXdzQ29udGFpbmVyQXJpYUxhYmVsXCJcbiAgICAgW3RpdGxlXT1cImFjY2Vzc2liaWxpdHlDb25maWc/LnByZXZpZXdzQ29udGFpbmVyVGl0bGVcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld0NvbmZpZz8udmlzaWJsZVwiPlxuICAgIDxhIGNsYXNzPVwibmF2LWxlZnRcIlxuICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWNjZXNzaWJpbGl0eUNvbmZpZz8ucHJldmlld1Njcm9sbFByZXZBcmlhTGFiZWxcIlxuICAgICAgIFt0YWJJbmRleF09XCJkaXNwbGF5TGVmdFByZXZpZXdzQXJyb3coKSA/IDAgOiAtMVwiIHJvbGU9XCJidXR0b25cIlxuICAgICAgIChjbGljayk9XCJvbk5hdmlnYXRpb25FdmVudCgnbGVmdCcsICRldmVudClcIiAoa2V5dXApPVwib25OYXZpZ2F0aW9uRXZlbnQoJ2xlZnQnLCAkZXZlbnQpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlIHt7IGRpc3BsYXlMZWZ0UHJldmlld3NBcnJvdygpID8gJ2xlZnQtYXJyb3ctcHJldmlldy1pbWFnZScgOiAnZW1wdHktYXJyb3ctcHJldmlldy1pbWFnZSd9fVwiXG4gICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0aXRsZV09XCJhY2Nlc3NpYmlsaXR5Q29uZmlnPy5wcmV2aWV3U2Nyb2xsUHJldlRpdGxlXCI+PC9kaXY+XG4gICAgPC9hPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJldmlldyBvZiBwcmV2aWV3czsgdHJhY2tCeTogdHJhY2tCeUlkOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1jb250YWluZXIge3shcHJldmlld0NvbmZpZz8uY2xpY2thYmxlID8gJyB1bmNsaWNrYWJsZScgOiAnJ319XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uSW1hZ2VFdmVudChwcmV2aWV3LCAkZXZlbnQsIGNsaWNrQWN0aW9uKVwiXG4gICAgICAgIChrZXl1cCk9XCJvbkltYWdlRXZlbnQocHJldmlldywgJGV2ZW50LCBrZXlib2FyZEFjdGlvbilcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiIWN1c3RvbVRlbXBsYXRlID8gZGVmYXVsdFRlbXBsYXRlIDogY3VzdG9tVGVtcGxhdGUgOyBjb250ZXh0OntwcmV2aWV3LCBkZWZhdWx0VGVtcGxhdGV9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwicHJldmlldz8ubW9kYWw/LmltZ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaW5zaWRlIHByZXZpZXctaW1hZ2Uge3tpc0FjdGl2ZShwcmV2aWV3KSA/ICdhY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgIFtsb2FkaW5nXT1cInByZXZpZXcubG9hZGluZ1wiXG4gICAgICAgICAgICAgIFthdHRyLmZldGNocHJpb3JpdHldPVwicHJldmlldy5mZXRjaHByaW9yaXR5XCJcbiAgICAgICAgICAgICAgW3NyY109XCJwcmV2aWV3LnBsYWluPy5pbWcgPyBwcmV2aWV3LnBsYWluPy5pbWchIDogcHJldmlldy5tb2RhbC5pbWdcIlxuICAgICAgICAgICAgICBrc0ZhbGxiYWNrSW1hZ2UgW2ZhbGxiYWNrSW1nXT1cInByZXZpZXcucGxhaW4/LmZhbGxiYWNrSW1nID8gcHJldmlldy5wbGFpbj8uZmFsbGJhY2tJbWcgOiBwcmV2aWV3Lm1vZGFsLmZhbGxiYWNrSW1nXCJcbiAgICAgICAgICAgICAga3NTaXplIFtzaXplQ29uZmlnXT1cInt3aWR0aDogcHJldmlld0NvbmZpZz8uc2l6ZSA/IHByZXZpZXdDb25maWc/LnNpemU/LndpZHRoISA6IGRlZmF1bHRQcmV2aWV3U2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogcHJldmlld0NvbmZpZz8uc2l6ZSA/IHByZXZpZXdDb25maWc/LnNpemU/LmhlaWdodCEgOiBkZWZhdWx0UHJldmlld1NpemUuaGVpZ2h0fVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldmlldy5tb2RhbC5hcmlhTGFiZWwgPyBwcmV2aWV3Lm1vZGFsLmFyaWFMYWJlbCA6ICcnXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIihwcmV2aWV3Lm1vZGFsLnRpdGxlIHx8IHByZXZpZXcubW9kYWwudGl0bGUgPT09ICcnKSA/IHByZXZpZXcubW9kYWwudGl0bGUgOiAnJ1wiXG4gICAgICAgICAgICAgIGFsdD1cInt7cHJldmlldy5tb2RhbC5hbHQgPyBwcmV2aWV3Lm1vZGFsLmFsdCA6ICcnfX1cIlxuICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiMFwiIHJvbGU9XCJpbWdcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8YSBjbGFzcz1cIm5hdi1yaWdodFwiXG4gICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY2Nlc3NpYmlsaXR5Q29uZmlnPy5wcmV2aWV3U2Nyb2xsTmV4dEFyaWFMYWJlbFwiXG4gICAgICAgW3RhYkluZGV4XT1cImRpc3BsYXlSaWdodFByZXZpZXdzQXJyb3coKSA/IDAgOiAtMVwiIHJvbGU9XCJidXR0b25cIlxuICAgICAgIChjbGljayk9XCJvbk5hdmlnYXRpb25FdmVudCgncmlnaHQnLCAkZXZlbnQpXCIgKGtleXVwKT1cIm9uTmF2aWdhdGlvbkV2ZW50KCdyaWdodCcsICRldmVudClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUge3sgZGlzcGxheVJpZ2h0UHJldmlld3NBcnJvdygpID8gJ3JpZ2h0LWFycm93LXByZXZpZXctaW1hZ2UnIDogJ2VtcHR5LWFycm93LXByZXZpZXctaW1hZ2UnfX1cIlxuICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICBbdGl0bGVdPVwiYWNjZXNzaWJpbGl0eUNvbmZpZz8ucHJldmlld1Njcm9sbE5leHRUaXRsZVwiPjwvZGl2PlxuICAgIDwvYT5cbiAgPC9uZy1jb250YWluZXI+XG5cbjwvbmF2PlxuIl19
@@ -1,76 +0,0 @@
1
- import { ButtonType } from '../../model/buttons-config.interface';
2
- /**
3
- * Default button size object
4
- */
5
- export const KS_DEFAULT_SIZE = { height: 'auto', width: '30px' };
6
- /**
7
- * Default close button object
8
- */
9
- export const KS_DEFAULT_BTN_CLOSE = {
10
- className: 'close-image',
11
- size: KS_DEFAULT_SIZE,
12
- type: ButtonType.CLOSE,
13
- title: 'Close this modal image gallery',
14
- ariaLabel: 'Close this modal image gallery'
15
- };
16
- /**
17
- * Default download button object
18
- */
19
- export const KS_DEFAULT_BTN_DOWNLOAD = {
20
- className: 'download-image',
21
- size: KS_DEFAULT_SIZE,
22
- type: ButtonType.DOWNLOAD,
23
- title: 'Download the current image',
24
- ariaLabel: 'Download the current image'
25
- };
26
- /**
27
- * Default exturl button object
28
- */
29
- export const KS_DEFAULT_BTN_EXTURL = {
30
- className: 'ext-url-image',
31
- size: KS_DEFAULT_SIZE,
32
- type: ButtonType.EXTURL,
33
- title: 'Navigate the current image',
34
- ariaLabel: 'Navigate the current image'
35
- };
36
- // /**
37
- // * Default refresh button object
38
- // */
39
- // export const KS_DEFAULT_BTN_REFRESH: ButtonConfig = {
40
- // className: 'refresh-image',
41
- // size: KS_DEFAULT_SIZE,
42
- // type: ButtonType.REFRESH,
43
- // title: 'Refresh all images',
44
- // ariaLabel: 'Refresh all images'
45
- // };
46
- /**
47
- * Default delete button object
48
- */
49
- export const KS_DEFAULT_BTN_DELETE = {
50
- className: 'delete-image',
51
- size: KS_DEFAULT_SIZE,
52
- type: ButtonType.DELETE,
53
- title: 'Delete the current image',
54
- ariaLabel: 'Delete the current image'
55
- };
56
- /**
57
- * Default full-screen button object
58
- */
59
- export const KS_DEFAULT_BTN_FULL_SCREEN = {
60
- className: 'fullscreen-image',
61
- size: KS_DEFAULT_SIZE,
62
- type: ButtonType.FULLSCREEN,
63
- title: 'Switch to full-screen',
64
- ariaLabel: 'Switch to full-screen'
65
- };
66
- /**
67
- * Default rotate button object
68
- */
69
- // export const KS_DEFAULT_BTN_ROTATE: ButtonConfig = {
70
- // className: 'rotate-image',
71
- // size: KS_DEFAULT_SIZE,
72
- // type: ButtonType.ROTATE,
73
- // title: 'Rotate clockwise of 90 degrees the current image',
74
- // ariaLabel: 'Rotate clockwise of 90 degrees the current image'
75
- // };
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBwZXItYnV0dG9ucy1kZWZhdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3M4OS9hbmd1bGFyLW1vZGFsLWdhbGxlcnkvc3JjL2xpYi9jb21wb25lbnRzL3VwcGVyLWJ1dHRvbnMvdXBwZXItYnV0dG9ucy1kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHaEY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxTQUFTLEVBQUUsYUFBYTtJQUN4QixJQUFJLEVBQUUsZUFBZTtJQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUs7SUFDdEIsS0FBSyxFQUFFLGdDQUFnQztJQUN2QyxTQUFTLEVBQUUsZ0NBQWdDO0NBQzVDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQjtJQUNuRCxTQUFTLEVBQUUsZ0JBQWdCO0lBQzNCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtJQUN6QixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFNBQVMsRUFBRSw0QkFBNEI7Q0FDeEMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWlCO0lBQ2pELFNBQVMsRUFBRSxlQUFlO0lBQzFCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTTtJQUN2QixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFNBQVMsRUFBRSw0QkFBNEI7Q0FDeEMsQ0FBQztBQUNGLE1BQU07QUFDTixtQ0FBbUM7QUFDbkMsTUFBTTtBQUNOLHdEQUF3RDtBQUN4RCxnQ0FBZ0M7QUFDaEMsMkJBQTJCO0FBQzNCLDhCQUE4QjtBQUM5QixpQ0FBaUM7QUFDakMsb0NBQW9DO0FBQ3BDLEtBQUs7QUFFTDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFpQjtJQUNqRCxTQUFTLEVBQUUsY0FBYztJQUN6QixJQUFJLEVBQUUsZUFBZTtJQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU07SUFDdkIsS0FBSyxFQUFFLDBCQUEwQjtJQUNqQyxTQUFTLEVBQUUsMEJBQTBCO0NBQ3RDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFpQjtJQUN0RCxTQUFTLEVBQUUsa0JBQWtCO0lBQzdCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVTtJQUMzQixLQUFLLEVBQUUsdUJBQXVCO0lBQzlCLFNBQVMsRUFBRSx1QkFBdUI7Q0FDbkMsQ0FBQztBQUNGOztHQUVHO0FBQ0gsdURBQXVEO0FBQ3ZELCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsNkJBQTZCO0FBQzdCLCtEQUErRDtBQUMvRCxrRUFBa0U7QUFDbEUsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1dHRvbkNvbmZpZywgQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2J1dHRvbnMtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2l6ZS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIERlZmF1bHQgYnV0dG9uIHNpemUgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX1NJWkU6IFNpemUgPSB7IGhlaWdodDogJ2F1dG8nLCB3aWR0aDogJzMwcHgnIH07XG5cbi8qKlxuICogRGVmYXVsdCBjbG9zZSBidXR0b24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX0JUTl9DTE9TRTogQnV0dG9uQ29uZmlnID0ge1xuICBjbGFzc05hbWU6ICdjbG9zZS1pbWFnZScsXG4gIHNpemU6IEtTX0RFRkFVTFRfU0laRSxcbiAgdHlwZTogQnV0dG9uVHlwZS5DTE9TRSxcbiAgdGl0bGU6ICdDbG9zZSB0aGlzIG1vZGFsIGltYWdlIGdhbGxlcnknLFxuICBhcmlhTGFiZWw6ICdDbG9zZSB0aGlzIG1vZGFsIGltYWdlIGdhbGxlcnknXG59O1xuXG4vKipcbiAqIERlZmF1bHQgZG93bmxvYWQgYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRE9XTkxPQUQ6IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZG93bmxvYWQtaW1hZ2UnLFxuICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4gIHR5cGU6IEJ1dHRvblR5cGUuRE9XTkxPQUQsXG4gIHRpdGxlOiAnRG93bmxvYWQgdGhlIGN1cnJlbnQgaW1hZ2UnLFxuICBhcmlhTGFiZWw6ICdEb3dubG9hZCB0aGUgY3VycmVudCBpbWFnZSdcbn07XG5cbi8qKlxuICogRGVmYXVsdCBleHR1cmwgYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRVhUVVJMOiBCdXR0b25Db25maWcgPSB7XG4gIGNsYXNzTmFtZTogJ2V4dC11cmwtaW1hZ2UnLFxuICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4gIHR5cGU6IEJ1dHRvblR5cGUuRVhUVVJMLFxuICB0aXRsZTogJ05hdmlnYXRlIHRoZSBjdXJyZW50IGltYWdlJyxcbiAgYXJpYUxhYmVsOiAnTmF2aWdhdGUgdGhlIGN1cnJlbnQgaW1hZ2UnXG59O1xuLy8gLyoqXG4vLyAgKiBEZWZhdWx0IHJlZnJlc2ggYnV0dG9uIG9iamVjdFxuLy8gICovXG4vLyBleHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fUkVGUkVTSDogQnV0dG9uQ29uZmlnID0ge1xuLy8gICBjbGFzc05hbWU6ICdyZWZyZXNoLWltYWdlJyxcbi8vICAgc2l6ZTogS1NfREVGQVVMVF9TSVpFLFxuLy8gICB0eXBlOiBCdXR0b25UeXBlLlJFRlJFU0gsXG4vLyAgIHRpdGxlOiAnUmVmcmVzaCBhbGwgaW1hZ2VzJyxcbi8vICAgYXJpYUxhYmVsOiAnUmVmcmVzaCBhbGwgaW1hZ2VzJ1xuLy8gfTtcblxuLyoqXG4gKiBEZWZhdWx0IGRlbGV0ZSBidXR0b24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX0JUTl9ERUxFVEU6IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZGVsZXRlLWltYWdlJyxcbiAgc2l6ZTogS1NfREVGQVVMVF9TSVpFLFxuICB0eXBlOiBCdXR0b25UeXBlLkRFTEVURSxcbiAgdGl0bGU6ICdEZWxldGUgdGhlIGN1cnJlbnQgaW1hZ2UnLFxuICBhcmlhTGFiZWw6ICdEZWxldGUgdGhlIGN1cnJlbnQgaW1hZ2UnXG59O1xuXG4vKipcbiAqIERlZmF1bHQgZnVsbC1zY3JlZW4gYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRlVMTF9TQ1JFRU46IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZnVsbHNjcmVlbi1pbWFnZScsXG4gIHNpemU6IEtTX0RFRkFVTFRfU0laRSxcbiAgdHlwZTogQnV0dG9uVHlwZS5GVUxMU0NSRUVOLFxuICB0aXRsZTogJ1N3aXRjaCB0byBmdWxsLXNjcmVlbicsXG4gIGFyaWFMYWJlbDogJ1N3aXRjaCB0byBmdWxsLXNjcmVlbidcbn07XG4vKipcbiAqIERlZmF1bHQgcm90YXRlIGJ1dHRvbiBvYmplY3RcbiAqL1xuLy8gZXhwb3J0IGNvbnN0IEtTX0RFRkFVTFRfQlROX1JPVEFURTogQnV0dG9uQ29uZmlnID0ge1xuLy8gICBjbGFzc05hbWU6ICdyb3RhdGUtaW1hZ2UnLFxuLy8gICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4vLyAgIHR5cGU6IEJ1dHRvblR5cGUuUk9UQVRFLFxuLy8gICB0aXRsZTogJ1JvdGF0ZSBjbG9ja3dpc2Ugb2YgOTAgZGVncmVlcyB0aGUgY3VycmVudCBpbWFnZScsXG4vLyAgIGFyaWFMYWJlbDogJ1JvdGF0ZSBjbG9ja3dpc2Ugb2YgOTAgZGVncmVlcyB0aGUgY3VycmVudCBpbWFnZSdcbi8vIH07XG4iXX0=