@kirbydesign/designsystem 8.2.0 → 8.3.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.
Files changed (93) hide show
  1. package/button/button.component.d.ts +2 -1
  2. package/button/public_api.d.ts +1 -1
  3. package/dropdown/keyboard-handler.service.d.ts +1 -1
  4. package/esm2020/button/button.component.mjs +3 -3
  5. package/esm2020/button/public_api.mjs +2 -2
  6. package/esm2020/card/card.component.mjs +2 -2
  7. package/esm2020/dropdown/dropdown.component.mjs +4 -4
  8. package/esm2020/dropdown/dropdown.module.mjs +1 -1
  9. package/esm2020/dropdown/keyboard-handler.service.mjs +12 -7
  10. package/esm2020/item/item.component.mjs +2 -2
  11. package/esm2020/lib/index.mjs +3 -1
  12. package/esm2020/lib/kirby.module.mjs +22 -5
  13. package/esm2020/list/list-item/list-item.component.mjs +2 -2
  14. package/esm2020/list/list.component.mjs +2 -2
  15. package/esm2020/menu/kirbydesign-designsystem-menu.mjs +5 -0
  16. package/esm2020/menu/menu.component.mjs +69 -0
  17. package/esm2020/menu/public_api.mjs +2 -0
  18. package/esm2020/modal/modal/footer/modal-footer.component.mjs +3 -3
  19. package/esm2020/modal/v2/footer/footer.component.mjs +2 -2
  20. package/esm2020/modal/v2/modal-routing/modal-routing.component.mjs +3 -3
  21. package/esm2020/page/page-footer/page-footer.component.mjs +2 -2
  22. package/esm2020/page/page.component.mjs +35 -13
  23. package/esm2020/page/public_api.mjs +2 -12
  24. package/esm2020/shared/floating/floating.directive.mjs +96 -27
  25. package/esm2020/shared/floating/public_api.mjs +2 -2
  26. package/esm2020/tab-navigation/kirbydesign-designsystem-tab-navigation.mjs +5 -0
  27. package/esm2020/tab-navigation/public_api.mjs +4 -0
  28. package/esm2020/tab-navigation/tab-navigation/tab-navigation.component.mjs +121 -0
  29. package/esm2020/tab-navigation/tab-navigation-item/tab-navigation-item.component.mjs +17 -0
  30. package/esm2020/tab-navigation/tab-navigation.module.mjs +19 -0
  31. package/fesm2015/kirbydesign-designsystem-button.mjs +2 -2
  32. package/fesm2015/kirbydesign-designsystem-button.mjs.map +1 -1
  33. package/fesm2015/kirbydesign-designsystem-card.mjs +2 -2
  34. package/fesm2015/kirbydesign-designsystem-card.mjs.map +1 -1
  35. package/fesm2015/kirbydesign-designsystem-dropdown.mjs +15 -10
  36. package/fesm2015/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  37. package/fesm2015/kirbydesign-designsystem-item.mjs +2 -2
  38. package/fesm2015/kirbydesign-designsystem-item.mjs.map +1 -1
  39. package/fesm2015/kirbydesign-designsystem-list.mjs +4 -4
  40. package/fesm2015/kirbydesign-designsystem-list.mjs.map +1 -1
  41. package/fesm2015/kirbydesign-designsystem-menu.mjs +76 -0
  42. package/fesm2015/kirbydesign-designsystem-menu.mjs.map +1 -0
  43. package/fesm2015/kirbydesign-designsystem-modal-v2.mjs +4 -4
  44. package/fesm2015/kirbydesign-designsystem-modal-v2.mjs.map +1 -1
  45. package/fesm2015/kirbydesign-designsystem-modal.mjs +2 -2
  46. package/fesm2015/kirbydesign-designsystem-modal.mjs.map +1 -1
  47. package/fesm2015/kirbydesign-designsystem-page.mjs +36 -14
  48. package/fesm2015/kirbydesign-designsystem-page.mjs.map +1 -1
  49. package/fesm2015/kirbydesign-designsystem-shared-floating.mjs +97 -27
  50. package/fesm2015/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  51. package/fesm2015/kirbydesign-designsystem-tab-navigation.mjs +156 -0
  52. package/fesm2015/kirbydesign-designsystem-tab-navigation.mjs.map +1 -0
  53. package/fesm2015/kirbydesign-designsystem.mjs +23 -4
  54. package/fesm2015/kirbydesign-designsystem.mjs.map +1 -1
  55. package/fesm2020/kirbydesign-designsystem-button.mjs +2 -2
  56. package/fesm2020/kirbydesign-designsystem-button.mjs.map +1 -1
  57. package/fesm2020/kirbydesign-designsystem-card.mjs +2 -2
  58. package/fesm2020/kirbydesign-designsystem-card.mjs.map +1 -1
  59. package/fesm2020/kirbydesign-designsystem-dropdown.mjs +15 -10
  60. package/fesm2020/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  61. package/fesm2020/kirbydesign-designsystem-item.mjs +2 -2
  62. package/fesm2020/kirbydesign-designsystem-item.mjs.map +1 -1
  63. package/fesm2020/kirbydesign-designsystem-list.mjs +4 -4
  64. package/fesm2020/kirbydesign-designsystem-list.mjs.map +1 -1
  65. package/fesm2020/kirbydesign-designsystem-menu.mjs +76 -0
  66. package/fesm2020/kirbydesign-designsystem-menu.mjs.map +1 -0
  67. package/fesm2020/kirbydesign-designsystem-modal-v2.mjs +4 -4
  68. package/fesm2020/kirbydesign-designsystem-modal-v2.mjs.map +1 -1
  69. package/fesm2020/kirbydesign-designsystem-modal.mjs +2 -2
  70. package/fesm2020/kirbydesign-designsystem-modal.mjs.map +1 -1
  71. package/fesm2020/kirbydesign-designsystem-page.mjs +36 -14
  72. package/fesm2020/kirbydesign-designsystem-page.mjs.map +1 -1
  73. package/fesm2020/kirbydesign-designsystem-shared-floating.mjs +96 -27
  74. package/fesm2020/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  75. package/fesm2020/kirbydesign-designsystem-tab-navigation.mjs +155 -0
  76. package/fesm2020/kirbydesign-designsystem-tab-navigation.mjs.map +1 -0
  77. package/fesm2020/kirbydesign-designsystem.mjs +23 -4
  78. package/fesm2020/kirbydesign-designsystem.mjs.map +1 -1
  79. package/lib/index.d.ts +2 -0
  80. package/lib/kirby.module.d.ts +42 -39
  81. package/menu/index.d.ts +5 -0
  82. package/menu/menu.component.d.ts +31 -0
  83. package/menu/public_api.d.ts +1 -0
  84. package/package.json +19 -2
  85. package/page/page.component.d.ts +11 -3
  86. package/page/public_api.d.ts +1 -12
  87. package/shared/floating/floating.directive.d.ts +32 -6
  88. package/shared/floating/public_api.d.ts +1 -1
  89. package/tab-navigation/index.d.ts +5 -0
  90. package/tab-navigation/public_api.d.ts +3 -0
  91. package/tab-navigation/tab-navigation/tab-navigation.component.d.ts +30 -0
  92. package/tab-navigation/tab-navigation-item/tab-navigation-item.component.d.ts +7 -0
  93. package/tab-navigation/tab-navigation.module.d.ts +9 -0
@@ -11,6 +11,13 @@ export var FloatingOffset;
11
11
  FloatingOffset[FloatingOffset["small"] = 4] = "small";
12
12
  FloatingOffset[FloatingOffset["medium"] = 8] = "medium";
13
13
  })(FloatingOffset || (FloatingOffset = {}));
14
+ export var OutletSelector;
15
+ (function (OutletSelector) {
16
+ OutletSelector["tag"] = "tag";
17
+ OutletSelector["id"] = "id";
18
+ OutletSelector["class"] = "class";
19
+ OutletSelector["name"] = "name";
20
+ })(OutletSelector || (OutletSelector = {}));
14
21
  /**
15
22
  * @summary FloatingDirective is a utility that lets you declarative anchor "popup" containers to another element.
16
23
  *
@@ -55,7 +62,7 @@ export class FloatingDirective {
55
62
  this._strategy = 'absolute';
56
63
  this._triggers = ['click'];
57
64
  this.isShown = false;
58
- this.eventListenerDisposeFns = [];
65
+ this.referenceEventListenerDisposeFns = [];
59
66
  this.triggerEventMap = new Map([
60
67
  ['click', [{ event: 'click', method: this.toggleShow.bind(this) }]],
61
68
  [
@@ -73,12 +80,19 @@ export class FloatingDirective {
73
80
  ],
74
81
  ],
75
82
  ]);
83
+ this.HTMLElements = {
84
+ id: (value) => Array.of(document.getElementById(value)),
85
+ class: (value) => Array.from(document.getElementsByClassName(value)),
86
+ name: (value) => Array.from(document.getElementsByName(value)),
87
+ tag: (value) => Array.from(document.getElementsByTagName(value)),
88
+ default: () => null,
89
+ };
76
90
  }
77
91
  /**
78
92
  * Reference to the element for which the host should anchor to
79
93
  * */
80
94
  set reference(ref) {
81
- this.tearDownEventHandling();
95
+ this.tearDownReferenceElementEventHandling();
82
96
  this._reference = ref;
83
97
  this.setupEventHandling();
84
98
  this.autoUpdatePosition();
@@ -113,7 +127,7 @@ export class FloatingDirective {
113
127
  * */
114
128
  set triggers(eventTriggers) {
115
129
  this._triggers = eventTriggers;
116
- this.tearDownEventHandling();
130
+ this.tearDownReferenceElementEventHandling();
117
131
  this.setupEventHandling();
118
132
  }
119
133
  get triggers() {
@@ -125,22 +139,31 @@ export class FloatingDirective {
125
139
  * This should be used when there's issues with the stacking context, and not as a default option.
126
140
  * */
127
141
  set DOMPortalOutlet(outlet) {
128
- this.portalDirective.outlet = outlet;
142
+ this._providedPortalOutlet = outlet;
143
+ this.portalDirective.outlet =
144
+ this.DOMPortalOutlet ?? this.getOutletElement(this.portalOutletConfig);
145
+ }
146
+ get DOMPortalOutlet() {
147
+ return this._providedPortalOutlet;
148
+ }
149
+ /**
150
+ * Defines how to automatically find and assign DOMPortalOutlet if none is provided in DOMPortalOutlet.
151
+ * If nothing is provided here and in DOMPortalOutlet, the provided strategy is used
152
+ * */
153
+ set portalOutletConfig(config) {
154
+ this._portalOutletConfig = config;
155
+ if (!this.DOMPortalOutlet) {
156
+ this.portalDirective.outlet = this.getOutletElement(config);
157
+ }
158
+ }
159
+ get portalOutletConfig() {
160
+ return this._portalOutletConfig;
129
161
  }
130
162
  onEscapeKeyPressed() {
131
163
  if (this.closeOnEscapeKey) {
132
164
  this.hide();
133
165
  }
134
166
  }
135
- onMouseClick(event) {
136
- const clickedOnHost = this.elementRef.nativeElement.contains(event.target);
137
- if (clickedOnHost) {
138
- this.handleClickInsideHostElement();
139
- }
140
- else {
141
- this.handleClickOutsideHostElement(event);
142
- }
143
- }
144
167
  ngOnInit() {
145
168
  this.addFloatStylingToHostElement();
146
169
  this.updateHostElementPosition();
@@ -150,6 +173,7 @@ export class FloatingDirective {
150
173
  if (this.isDisabled) {
151
174
  return;
152
175
  }
176
+ this.attachDocumentClickEvent();
153
177
  this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'block');
154
178
  this.isShown = true;
155
179
  this.displayChanged.emit(this.isShown);
@@ -159,6 +183,7 @@ export class FloatingDirective {
159
183
  if (this.isDisabled) {
160
184
  return;
161
185
  }
186
+ this.tearDownDocumentClickEventHandling();
162
187
  this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'none');
163
188
  this.isShown = false;
164
189
  this.displayChanged.emit(this.isShown);
@@ -172,11 +197,24 @@ export class FloatingDirective {
172
197
  this.show();
173
198
  }
174
199
  }
200
+ onDocumentClickWhileHostShown(event) {
201
+ const clickedOnHost = this.elementRef.nativeElement.contains(event.target);
202
+ if (clickedOnHost) {
203
+ this.handleClickInsideHostElement();
204
+ }
205
+ else {
206
+ this.handleClickOutsideHostElement(event);
207
+ }
208
+ }
175
209
  addFloatStylingToHostElement() {
176
210
  this.renderer.setStyle(this.elementRef.nativeElement, 'left', `0px`);
177
211
  this.renderer.setStyle(this.elementRef.nativeElement, 'top', `0px`);
178
212
  this.renderer.setStyle(this.elementRef.nativeElement, 'position', this.strategy);
179
213
  this.renderer.setStyle(this.elementRef.nativeElement, 'z-index', DesignTokenHelper.zLayer('popover'));
214
+ this.setDisplayStyling();
215
+ }
216
+ setDisplayStyling() {
217
+ this.renderer.setStyle(this.elementRef.nativeElement, 'display', this.isShown ? `block` : `none`);
180
218
  }
181
219
  updateHostElementPosition() {
182
220
  if (!this.reference) {
@@ -210,7 +248,7 @@ export class FloatingDirective {
210
248
  setPositionStylingOnHostElement(xPosition, yPosition) {
211
249
  this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${xPosition}px`);
212
250
  this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${yPosition}px`);
213
- this.renderer.setStyle(this.elementRef.nativeElement, 'display', this.isShown ? `block` : `none`);
251
+ this.setDisplayStyling();
214
252
  }
215
253
  setupEventHandling() {
216
254
  if (!this.reference || !this.triggers) {
@@ -218,6 +256,12 @@ export class FloatingDirective {
218
256
  }
219
257
  this.triggers.forEach((trigger) => this.attachTriggerEventToReferenceElement(trigger));
220
258
  }
259
+ attachDocumentClickEvent() {
260
+ if (this.documentClickEventListenerDisposeFn) {
261
+ return;
262
+ }
263
+ this.documentClickEventListenerDisposeFn = this.renderer.listen('document', 'mousedown', (event) => this.onDocumentClickWhileHostShown(event));
264
+ }
221
265
  attachTriggerEventToReferenceElement(trigger) {
222
266
  const events = this.triggerEventMap.get(trigger);
223
267
  if (!events) {
@@ -225,7 +269,7 @@ export class FloatingDirective {
225
269
  }
226
270
  events.forEach((event) => {
227
271
  const eventListenerDisposeFn = this.renderer.listen(this.reference?.nativeElement, event.event, event.method);
228
- this.eventListenerDisposeFns.push(eventListenerDisposeFn);
272
+ this.referenceEventListenerDisposeFns.push(eventListenerDisposeFn);
229
273
  });
230
274
  }
231
275
  handleClickInsideHostElement() {
@@ -234,18 +278,43 @@ export class FloatingDirective {
234
278
  }
235
279
  }
236
280
  handleClickOutsideHostElement(event) {
237
- const clickedOnReferenceWithClickTriggerEnabled = this.reference?.nativeElement.contains(event.target) && this.triggers.includes('click');
238
- if (this.closeOnBackdrop && !clickedOnReferenceWithClickTriggerEnabled) {
239
- this.hide();
281
+ if (event.target instanceof Node) {
282
+ const clickedOnReferenceWithClickTriggerEnabled = this.reference?.nativeElement.contains(event.target) && this.triggers.includes('click');
283
+ if (this.closeOnBackdrop && !clickedOnReferenceWithClickTriggerEnabled) {
284
+ this.hide();
285
+ }
286
+ }
287
+ }
288
+ getOutletElement(config) {
289
+ if (!config || !config.selector || !config.value) {
290
+ return null;
291
+ }
292
+ const elements = this.getHTMLElements(config);
293
+ if (!elements || elements.length === 0) {
294
+ throw Error(`Could not locate HTMLElement for ${config.selector}. Did you misspell it?`);
295
+ }
296
+ if (elements.length > 1) {
297
+ throw Error(`Multiple HTMLElements found for ${config.selector}.
298
+ This can lead to unintended behaviours. Provide an unique outlet`);
240
299
  }
300
+ return elements[0];
241
301
  }
242
- tearDownEventHandling() {
243
- this.eventListenerDisposeFns.forEach((eventListenerDisposeFunction) => {
302
+ getHTMLElements(config) {
303
+ return (this.HTMLElements[config.selector](config.value) || this.HTMLElements['default'](config.value));
304
+ }
305
+ tearDownReferenceElementEventHandling() {
306
+ this.referenceEventListenerDisposeFns.forEach((eventListenerDisposeFunction) => {
244
307
  if (eventListenerDisposeFunction != null) {
245
308
  eventListenerDisposeFunction();
246
309
  }
247
310
  });
248
- this.eventListenerDisposeFns = [];
311
+ this.referenceEventListenerDisposeFns = [];
312
+ }
313
+ tearDownDocumentClickEventHandling() {
314
+ if (this.documentClickEventListenerDisposeFn) {
315
+ this.documentClickEventListenerDisposeFn();
316
+ this.documentClickEventListenerDisposeFn = null;
317
+ }
249
318
  }
250
319
  removeAutoUpdaterRef() {
251
320
  if (this.autoUpdaterRef) {
@@ -253,12 +322,13 @@ export class FloatingDirective {
253
322
  }
254
323
  }
255
324
  ngOnDestroy() {
256
- this.tearDownEventHandling();
325
+ this.tearDownDocumentClickEventHandling();
326
+ this.tearDownReferenceElementEventHandling();
257
327
  this.removeAutoUpdaterRef();
258
328
  }
259
329
  }
260
330
  /** @nocollapse */ FloatingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FloatingDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.PortalDirective }], target: i0.ɵɵFactoryTarget.Directive });
261
- /** @nocollapse */ FloatingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: FloatingDirective, isStandalone: true, selector: "[kirbyFloating]", inputs: { reference: "reference", placement: "placement", strategy: "strategy", triggers: "triggers", DOMPortalOutlet: "DOMPortalOutlet", isDisabled: "isDisabled", offset: "offset", shift: "shift", autoPlacement: "autoPlacement", closeOnSelect: "closeOnSelect", closeOnEscapeKey: "closeOnEscapeKey", closeOnBackdrop: "closeOnBackdrop" }, outputs: { displayChanged: "displayChanged" }, host: { listeners: { "document:keydown.escape": "onEscapeKeyPressed($event)", "document:mousedown": "onMouseClick($event)" } }, providers: [PortalDirective], hostDirectives: [{ directive: i1.PortalDirective }], ngImport: i0 });
331
+ /** @nocollapse */ FloatingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: FloatingDirective, isStandalone: true, selector: "[kirbyFloating]", inputs: { reference: "reference", placement: "placement", strategy: "strategy", triggers: "triggers", DOMPortalOutlet: "DOMPortalOutlet", portalOutletConfig: "portalOutletConfig", isDisabled: "isDisabled", offset: "offset", shift: "shift", autoPlacement: "autoPlacement", closeOnSelect: "closeOnSelect", closeOnEscapeKey: "closeOnEscapeKey", closeOnBackdrop: "closeOnBackdrop" }, outputs: { displayChanged: "displayChanged" }, host: { listeners: { "document:keydown.escape": "onEscapeKeyPressed($event)" } }, providers: [PortalDirective], hostDirectives: [{ directive: i1.PortalDirective }], ngImport: i0 });
262
332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FloatingDirective, decorators: [{
263
333
  type: Directive,
264
334
  args: [{
@@ -277,6 +347,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
277
347
  type: Input
278
348
  }], DOMPortalOutlet: [{
279
349
  type: Input
350
+ }], portalOutletConfig: [{
351
+ type: Input
280
352
  }], isDisabled: [{
281
353
  type: Input
282
354
  }], offset: [{
@@ -296,8 +368,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
296
368
  }], onEscapeKeyPressed: [{
297
369
  type: HostListener,
298
370
  args: ['document:keydown.escape', ['$event']]
299
- }], onMouseClick: [{
300
- type: HostListener,
301
- args: ['document:mousedown', ['$event']]
302
371
  }] } });
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc2hhcmVkL2Zsb2F0aW5nL3NyYy9mbG9hdGluZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FFTixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFJMUUsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtREFBUSxDQUFBO0lBQ1IscURBQVMsQ0FBQTtJQUNULHVEQUFVLENBQUE7QUFDWixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFTRDs7Ozs7OztHQU9HO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQThJNUIsWUFDVSxVQUFzQixFQUN0QixRQUFtQixFQUNuQixlQUFnQztRQUZoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBbEYxQzs7YUFFSztRQUNXLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUM7O2FBRUs7UUFDVyxXQUFNLEdBQW1CLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFN0Q7OzthQUdLO1FBQ1csVUFBSyxHQUFZLEtBQUssQ0FBQztR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WWMsUUFBUTtzQkFBM0IsS0FBSztnQkFjYyxRQUFRO3NCQUEzQixLQUFLO2dCQWVjLGVBQWU7c0JBQWxDLEtBQUs7Z0JBT1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxNQUFNO3NCQUFyQixLQUFLO2dCQU1VLEtBQUs7c0JBQXBCLEtBQUs7Z0JBS1UsYUFBYTtzQkFBNUIsS0FBSztnQkFLVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUtXLGNBQWM7c0JBQTlCLE1BQU07Z0JBR0Esa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVE1QyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBhdXRvUGxhY2VtZW50LFxuICBhdXRvVXBkYXRlLFxuICBjb21wdXRlUG9zaXRpb24sXG4gIG9mZnNldCxcbiAgc2hpZnQsXG4gIFN0cmF0ZWd5LFxufSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IENvbXB1dGVQb3NpdGlvbkNvbmZpZywgTWlkZGxld2FyZSwgUGxhY2VtZW50IH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUvc3JjL3R5cGVzJztcbmltcG9ydCB7IERlc2lnblRva2VuSGVscGVyIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2NvcmUnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9ydGFsRGlyZWN0aXZlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9zaGFyZWQvcG9ydGFsJztcblxuZXhwb3J0IHR5cGUgVHJpZ2dlckV2ZW50ID0gJ2hvdmVyJyB8ICdjbGljaycgfCAnZm9jdXMnO1xuXG5leHBvcnQgZW51bSBGbG9hdGluZ09mZnNldCB7XG4gIG5vbmUgPSAwLFxuICBzbWFsbCA9IDQsXG4gIG1lZGl1bSA9IDgsXG59XG5cbmludGVyZmFjZSBFdmVudE1ldGhvZHMge1xuICBldmVudDogc3RyaW5nO1xuICBtZXRob2Q6ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbiA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQHN1bW1hcnkgRmxvYXRpbmdEaXJlY3RpdmUgaXMgYSB1dGlsaXR5IHRoYXQgbGV0cyB5b3UgZGVjbGFyYXRpdmUgYW5jaG9yIFwicG9wdXBcIiBjb250YWluZXJzIHRvIGFub3RoZXIgZWxlbWVudC5cbiAqXG4gKiBVc2VzIGZsb2F0aW5nLXVpLCB3aXRoIHRoaXMgZGlyZWN0aXZlIHdyYXBzIHRoZSBmdW5jdGlvbmFsaXR5OiBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2dldHRpbmctc3RhcnRlZFxuICpcbiAqIFVzZXMgUG9ydGFsRGlyZWN0aXZlIHRvIGVuYWJsZSBmdW5jdGlvbmFsaXR5IGZvciBwb3J0YWxpbmcgdGhlIGZsb2F0ZWQgY29udGVudC4gVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVuIG5lZWRlZFxuICogYW5kIG5vdCBhcyB0aGUgZGVmYXVsdCBvcHRpb24uXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieUZsb2F0aW5nXScsXG4gIHByb3ZpZGVyczogW1BvcnRhbERpcmVjdGl2ZV0sXG4gIGhvc3REaXJlY3RpdmVzOiBbUG9ydGFsRGlyZWN0aXZlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmxvYXRpbmdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBob3N0IHNob3VsZCBhbmNob3IgdG9cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCByZWZlcmVuY2UocmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy50ZWFyRG93bkV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLl9yZWZlcmVuY2UgPSByZWY7XG4gICAgdGhpcy5zZXR1cEV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLmF1dG9VcGRhdGVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGdldCByZWZlcmVuY2UoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZmVyZW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGhvc3Qgc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlLiBDYW4gYmUgYWZmZWN0ZWQgYnkgbWlkZGxld2FyZVxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHBsYWNlbWVudChwbGFjZW1lbnQ6IFBsYWNlbWVudCkge1xuICAgIHRoaXMuX3BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGxhY2VtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IGZvciBob3cgdGhlIGhvc3Qgc2hvdWxkIGJlIHBvc2l0aW9uZWQuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc3RyYXRlZ3koc3RyYXRlZ3k6IFN0cmF0ZWd5KSB7XG4gICAgdGhpcy5fc3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RyYXRlZ3koKTogU3RyYXRlZ3kge1xuICAgIHJldHVybiB0aGlzLl9zdHJhdGVneTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoZW4gdGhlIGhvc3Qgc2hvdWxkIGJlIGRpc3BsYXllZC9oaWRkZW4sIGkuZS4gY2xpY2sgd2lsbCBhdHRhY2ggYSBjbGljayBsaXN0ZW5lciB0byB0aGUgcmVmZXJlbmNlXG4gICAqIHRoYXQgbWFrZXMgdGhlIGhvc3QgdG9nZ2xlIGRpc3BsYXkuIFN1cHBvcnRzIG11bHRpcGxlIHRyaWdnZXJzLCB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbWJpbmF0aW9uc1xuICAgKiBsaWtlIGNsaWNrL2ZvY3VzLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRyaWdnZXJzKGV2ZW50VHJpZ2dlcnM6IEFycmF5PFRyaWdnZXJFdmVudD4pIHtcbiAgICB0aGlzLl90cmlnZ2VycyA9IGV2ZW50VHJpZ2dlcnM7XG4gICAgdGhpcy50ZWFyRG93bkV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGluZygpO1xuICB9XG5cbiAgcHVibGljIGdldCB0cmlnZ2VycygpOiBBcnJheTxUcmlnZ2VyRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlcnM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IGZvciB3aGljaCB0aGUgY29udGVudCBzaG91bGQgcG9ydGFsIGludG8uXG4gICAqIFByb3ZpZGluZyBhbiBvdXRsZXQgZW5hYmxlcyB0aGUgcG9ydGFsLCBpZiBub3RoaW5nIGlzIHByb3ZpZGVkLCB0aGUgcHJvdmlkZWQgc3RyYXRlZ3kgaXMgdXNlZC5cbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZXJlJ3MgaXNzdWVzIHdpdGggdGhlIHN0YWNraW5nIGNvbnRleHQsIGFuZCBub3QgYXMgYSBkZWZhdWx0IG9wdGlvbi5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBET01Qb3J0YWxPdXRsZXQob3V0bGV0OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucG9ydGFsRGlyZWN0aXZlLm91dGxldCA9IG91dGxldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGhvc3QgZnJvbSBiZWluZyB0b2dnbGVkIGlmIHNldC5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzcGxhY2VzIHRoZSBmbG9hdGluZyBlbGVtZW50IGZyb20gaXRzIGNvcmUgcGxhY2VtZW50IGFsb25nIHRoZSBzcGVjaWZpZWQgYXhlcy5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIG9mZnNldDogRmxvYXRpbmdPZmZzZXQgPSBGbG9hdGluZ09mZnNldC5ub25lO1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGUgc3BlY2lmaWVkIGF4ZXMgaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3LlxuICAgKiBUaGlzIGRvZXMgbm90IGFsd2F5cyB3b3JrIGFzIGV4cGVjdGVkLCBzbyBkb24ndCBcImp1c3RcIiBzZXQgaXQuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzaGlmdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDaG9vc2VzIHRoZSBwbGFjZW1lbnQgdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHkuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvUGxhY2VtZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgaGlkaW5nIHRoZSBob3N0IGJ5IGV2ZW50cy4gU2VlIHZhcmlhYmxlIG5hbWVzLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VPblNlbGVjdDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjbG9zZU9uRXNjYXBlS2V5OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGNsb3NlT25CYWNrZHJvcDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIG9wdGlvbiB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBob3N0IGNoYW5nZXMgZGlzcGxheS4gVGhlIG5ldyBkaXNwbGF5IHZhbHVlIGlzIHByb3ZpZGVkLlxuICAgKiAqL1xuICBAT3V0cHV0KCkgcHVibGljIGRpc3BsYXlDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25Fc2NhcGVLZXlQcmVzc2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT25Fc2NhcGVLZXkpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbk1vdXNlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tlZE9uSG9zdDogYm9vbGVhbiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGNsaWNrZWRPbkhvc3QpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tJbnNpZGVIb3N0RWxlbWVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZUhvc3RFbGVtZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZW1lbnQ6IFBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xuXG4gIHByaXZhdGUgX3N0cmF0ZWd5OiBTdHJhdGVneSA9ICdhYnNvbHV0ZSc7XG5cbiAgcHJpdmF0ZSBfdHJpZ2dlcnM6IEFycmF5PFRyaWdnZXJFdmVudD4gPSBbJ2NsaWNrJ107XG5cbiAgcHJpdmF0ZSBfcmVmZXJlbmNlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgYXV0b1VwZGF0ZXJSZWY6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNTaG93bjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zOiBFdmVudExpc3RlbmVyRGlzcG9zZUZuW10gPSBbXTtcbiAgcHJpdmF0ZSB0cmlnZ2VyRXZlbnRNYXA6IE1hcDxUcmlnZ2VyRXZlbnQsIEV2ZW50TWV0aG9kc1tdPiA9IG5ldyBNYXAoW1xuICAgIFsnY2xpY2snLCBbeyBldmVudDogJ2NsaWNrJywgbWV0aG9kOiB0aGlzLnRvZ2dsZVNob3cuYmluZCh0aGlzKSB9XV0sXG4gICAgW1xuICAgICAgJ2hvdmVyJyxcbiAgICAgIFtcbiAgICAgICAgeyBldmVudDogJ21vdXNlZW50ZXInLCBtZXRob2Q6IHRoaXMuc2hvdy5iaW5kKHRoaXMpIH0sXG4gICAgICAgIHsgZXZlbnQ6ICdtb3VzZWxlYXZlJywgbWV0aG9kOiB0aGlzLmhpZGUuYmluZCh0aGlzKSB9LFxuICAgICAgXSxcbiAgICBdLFxuICAgIFtcbiAgICAgICdmb2N1cycsXG4gICAgICBbXG4gICAgICAgIHsgZXZlbnQ6ICdmb2N1cycsIG1ldGhvZDogdGhpcy5zaG93LmJpbmQodGhpcykgfSxcbiAgICAgICAgeyBldmVudDogJ2JsdXInLCBtZXRob2Q6IHRoaXMuaGlkZS5iaW5kKHRoaXMpIH0sXG4gICAgICBdLFxuICAgIF0sXG4gIF0pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcG9ydGFsRGlyZWN0aXZlOiBQb3J0YWxEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEZsb2F0U3R5bGluZ1RvSG9zdEVsZW1lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qIFNob3VsZCBiZSBhY2Nlc3NpYmxlIGZvciBwcm9ncmFtbWF0aWNhbGx5IHNldHRpbmcgZGlzcGxheSAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICB0aGlzLmlzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuZGlzcGxheUNoYW5nZWQuZW1pdCh0aGlzLmlzU2hvd24pO1xuICB9XG5cbiAgLyogU2hvdWxkIGJlIGFjY2Vzc2libGUgZm9yIHByb2dyYW1tYXRpY2FsbHkgc2V0dGluZyBkaXNwbGF5ICovXG4gIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgdGhpcy5pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5kaXNwbGF5Q2hhbmdlZC5lbWl0KHRoaXMuaXNTaG93bik7XG4gIH1cblxuICAvKiBTaG91bGQgYmUgYWNjZXNzaWJsZSBmb3IgcHJvZ3JhbW1hdGljYWxseSBzZXR0aW5nIGRpc3BsYXkgKi9cbiAgcHVibGljIHRvZ2dsZVNob3coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTaG93bikge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRmxvYXRTdHlsaW5nVG9Ib3N0RWxlbWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAwcHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndG9wJywgYDBweGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdwb3NpdGlvbicsIHRoaXMuc3RyYXRlZ3kpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICd6LWluZGV4JyxcbiAgICAgIERlc2lnblRva2VuSGVscGVyLnpMYXllcigncG9wb3ZlcicpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSG9zdEVsZW1lbnRQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBDb21wdXRlUG9zaXRpb25Db25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgbWlkZGxld2FyZTogdGhpcy5nZXRNaWRkbGV3YXJlQ29uZmlnKCksXG4gICAgICBzdHJhdGVneTogdGhpcy5zdHJhdGVneSxcbiAgICB9IGFzIENvbXB1dGVQb3NpdGlvbkNvbmZpZztcblxuICAgIGZyb20oXG4gICAgICBjb21wdXRlUG9zaXRpb24odGhpcy5yZWZlcmVuY2U/Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjb25maWcpXG4gICAgKS5zdWJzY3JpYmUoKHsgeCwgeSB9KSA9PiB0aGlzLnNldFBvc2l0aW9uU3R5bGluZ09uSG9zdEVsZW1lbnQoeCwgeSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaWRkbGV3YXJlQ29uZmlnKCk6IEFycmF5PE1pZGRsZXdhcmUgfCBudWxsIHwgdW5kZWZpbmVkIHwgZmFsc2U+IHtcbiAgICBjb25zdCBtaWRkbGV3YXJlOiBBcnJheTxNaWRkbGV3YXJlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGZhbHNlPiA9IFtdO1xuICAgIG1pZGRsZXdhcmUucHVzaChvZmZzZXQodGhpcy5vZmZzZXQpKTtcblxuICAgIGlmICh0aGlzLnNoaWZ0KSB7XG4gICAgICBtaWRkbGV3YXJlLnB1c2goc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXV0b1BsYWNlbWVudCkge1xuICAgICAgbWlkZGxld2FyZS5wdXNoKGF1dG9QbGFjZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gIH1cblxuICBwcml2YXRlIGF1dG9VcGRhdGVQb3NpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUF1dG9VcGRhdGVyUmVmKCk7XG5cbiAgICBpZiAoIXRoaXMucmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvVXBkYXRlclJlZiA9IGF1dG9VcGRhdGUoXG4gICAgICB0aGlzLnJlZmVyZW5jZT8ubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy51cGRhdGVIb3N0RWxlbWVudFBvc2l0aW9uLmJpbmQodGhpcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvblN0eWxpbmdPbkhvc3RFbGVtZW50KHhQb3NpdGlvbjogbnVtYmVyLCB5UG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsZWZ0JywgYCR7eFBvc2l0aW9ufXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3lQb3NpdGlvbn1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNwbGF5JyxcbiAgICAgIHRoaXMuaXNTaG93biA/IGBibG9ja2AgOiBgbm9uZWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50SGFuZGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZmVyZW5jZSB8fCAhdGhpcy50cmlnZ2Vycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlcnMuZm9yRWFjaCgodHJpZ2dlcjogVHJpZ2dlckV2ZW50KSA9PlxuICAgICAgdGhpcy5hdHRhY2hUcmlnZ2VyRXZlbnRUb1JlZmVyZW5jZUVsZW1lbnQodHJpZ2dlcilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hUcmlnZ2VyRXZlbnRUb1JlZmVyZW5jZUVsZW1lbnQodHJpZ2dlcjogVHJpZ2dlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRzOiBFdmVudE1ldGhvZHNbXSB8IHVuZGVmaW5lZCA9IHRoaXMudHJpZ2dlckV2ZW50TWFwLmdldCh0cmlnZ2VyKTtcblxuICAgIGlmICghZXZlbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHJpZ2dlcn0gaXMgbWlzc2luZyBldmVudCBkZWZpbml0aW9uKHMpYCk7XG4gICAgfVxuXG4gICAgZXZlbnRzLmZvckVhY2goKGV2ZW50OiBFdmVudE1ldGhvZHMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJEaXNwb3NlRm46IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgdGhpcy5yZWZlcmVuY2U/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGV2ZW50LmV2ZW50LFxuICAgICAgICBldmVudC5tZXRob2RcbiAgICAgICk7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zLnB1c2goZXZlbnRMaXN0ZW5lckRpc3Bvc2VGbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrSW5zaWRlSG9zdEVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGlja091dHNpZGVIb3N0RWxlbWVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjbGlja2VkT25SZWZlcmVuY2VXaXRoQ2xpY2tUcmlnZ2VyRW5hYmxlZDogYm9vbGVhbiA9XG4gICAgICB0aGlzLnJlZmVyZW5jZT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmIHRoaXMudHJpZ2dlcnMuaW5jbHVkZXMoJ2NsaWNrJyk7XG5cbiAgICBpZiAodGhpcy5jbG9zZU9uQmFja2Ryb3AgJiYgIWNsaWNrZWRPblJlZmVyZW5jZVdpdGhDbGlja1RyaWdnZXJFbmFibGVkKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRlYXJEb3duRXZlbnRIYW5kbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zLmZvckVhY2goKGV2ZW50TGlzdGVuZXJEaXNwb3NlRnVuY3Rpb246IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4pID0+IHtcbiAgICAgIGlmIChldmVudExpc3RlbmVyRGlzcG9zZUZ1bmN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckRpc3Bvc2VGdW5jdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lckRpc3Bvc2VGbnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXV0b1VwZGF0ZXJSZWYoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZXJSZWYpIHtcbiAgICAgIHRoaXMuYXV0b1VwZGF0ZXJSZWYoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50ZWFyRG93bkV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLnJlbW92ZUF1dG9VcGRhdGVyUmVmKCk7XG4gIH1cbn1cbiJdfQ==
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc2hhcmVkL2Zsb2F0aW5nL3NyYy9mbG9hdGluZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FFTixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFJMUUsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtREFBUSxDQUFBO0lBQ1IscURBQVMsQ0FBQTtJQUNULHVEQUFVLENBQUE7QUFDWixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFFRCxNQUFNLENBQU4sSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3hCLDZCQUFXLENBQUE7SUFDWCwyQkFBUyxDQUFBO0lBQ1QsaUNBQWUsQ0FBQTtJQUNmLCtCQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekI7QUFjRDs7Ozs7OztHQU9HO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQXlLNUIsWUFDVSxVQUFzQixFQUN0QixRQUFtQixFQUNuQixlQUFnQztRQUZoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsb0JBQWUs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SUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7O2lJQXBaVSxpQkFBaUI7cUhBQWpCLGlCQUFpQiwyakJBSmpCLENBQUMsZUFBZSxDQUFDOzJGQUlqQixpQkFBaUI7a0JBTjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUM1QixjQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1SkFLcUIsU0FBUztzQkFBNUIsS0FBSztnQkFjYyxTQUFTO3NCQUE1QixLQUFLO2dCQVljLFFBQVE7c0JBQTNCLEtBQUs7Z0JBY2MsUUFBUTtzQkFBM0IsS0FBSztnQkFlYyxlQUFlO3NCQUFsQyxLQUFLO2dCQWNjLGtCQUFrQjtzQkFBckMsS0FBSztnQkFlVSxVQUFVO3NCQUF6QixLQUFLO2dCQUtVLE1BQU07c0JBQXJCLEtBQUs7Z0JBTVUsS0FBSztzQkFBcEIsS0FBSztnQkFLVSxhQUFhO3NCQUE1QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBS1csY0FBYztzQkFBOUIsTUFBTTtnQkFHQSxrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGF1dG9QbGFjZW1lbnQsXG4gIGF1dG9VcGRhdGUsXG4gIGNvbXB1dGVQb3NpdGlvbixcbiAgb2Zmc2V0LFxuICBzaGlmdCxcbiAgU3RyYXRlZ3ksXG59IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgQ29tcHV0ZVBvc2l0aW9uQ29uZmlnLCBNaWRkbGV3YXJlLCBQbGFjZW1lbnQgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZS9zcmMvdHlwZXMnO1xuaW1wb3J0IHsgRGVzaWduVG9rZW5IZWxwZXIgfSBmcm9tICdAa2lyYnlkZXNpZ24vY29yZSc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb3J0YWxEaXJlY3RpdmUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NoYXJlZC9wb3J0YWwnO1xuXG5leHBvcnQgdHlwZSBUcmlnZ2VyRXZlbnQgPSAnaG92ZXInIHwgJ2NsaWNrJyB8ICdmb2N1cyc7XG5cbmV4cG9ydCBlbnVtIEZsb2F0aW5nT2Zmc2V0IHtcbiAgbm9uZSA9IDAsXG4gIHNtYWxsID0gNCxcbiAgbWVkaXVtID0gOCxcbn1cblxuZXhwb3J0IGVudW0gT3V0bGV0U2VsZWN0b3Ige1xuICB0YWcgPSAndGFnJyxcbiAgaWQgPSAnaWQnLFxuICBjbGFzcyA9ICdjbGFzcycsXG4gIG5hbWUgPSAnbmFtZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydGFsT3V0bGV0Q29uZmlnIHtcbiAgc2VsZWN0b3I6IE91dGxldFNlbGVjdG9yO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRXZlbnRNZXRob2RzIHtcbiAgZXZlbnQ6IHN0cmluZztcbiAgbWV0aG9kOiAoKSA9PiB2b2lkO1xufVxuXG50eXBlIEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4gPSAoKSA9PiB2b2lkO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEZsb2F0aW5nRGlyZWN0aXZlIGlzIGEgdXRpbGl0eSB0aGF0IGxldHMgeW91IGRlY2xhcmF0aXZlIGFuY2hvciBcInBvcHVwXCIgY29udGFpbmVycyB0byBhbm90aGVyIGVsZW1lbnQuXG4gKlxuICogVXNlcyBmbG9hdGluZy11aSwgd2l0aCB0aGlzIGRpcmVjdGl2ZSB3cmFwcyB0aGUgZnVuY3Rpb25hbGl0eTogaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9nZXR0aW5nLXN0YXJ0ZWRcbiAqXG4gKiBVc2VzIFBvcnRhbERpcmVjdGl2ZSB0byBlbmFibGUgZnVuY3Rpb25hbGl0eSBmb3IgcG9ydGFsaW5nIHRoZSBmbG9hdGVkIGNvbnRlbnQuIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2hlbiBuZWVkZWRcbiAqIGFuZCBub3QgYXMgdGhlIGRlZmF1bHQgb3B0aW9uLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlGbG9hdGluZ10nLFxuICBwcm92aWRlcnM6IFtQb3J0YWxEaXJlY3RpdmVdLFxuICBob3N0RGlyZWN0aXZlczogW1BvcnRhbERpcmVjdGl2ZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZsb2F0aW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGZvciB3aGljaCB0aGUgaG9zdCBzaG91bGQgYW5jaG9yIHRvXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcmVmZXJlbmNlKHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnRlYXJEb3duUmVmZXJlbmNlRWxlbWVudEV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLl9yZWZlcmVuY2UgPSByZWY7XG4gICAgdGhpcy5zZXR1cEV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLmF1dG9VcGRhdGVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGdldCByZWZlcmVuY2UoKTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZWZlcmVuY2U7XG4gIH1cblxuICAvKipcbiAgICogSG93IHRoZSBob3N0IHNob3VsZCBiZSBwbGFjZWQgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZS4gQ2FuIGJlIGFmZmVjdGVkIGJ5IG1pZGRsZXdhcmVcbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBwbGFjZW1lbnQocGxhY2VtZW50OiBQbGFjZW1lbnQpIHtcbiAgICB0aGlzLl9wbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgdGhpcy51cGRhdGVIb3N0RWxlbWVudFBvc2l0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBsYWNlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2VtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSBmb3IgaG93IHRoZSBob3N0IHNob3VsZCBiZSBwb3NpdGlvbmVkLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHN0cmF0ZWd5KHN0cmF0ZWd5OiBTdHJhdGVneSkge1xuICAgIHRoaXMuX3N0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gICAgdGhpcy51cGRhdGVIb3N0RWxlbWVudFBvc2l0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0cmF0ZWd5KCk6IFN0cmF0ZWd5IHtcbiAgICByZXR1cm4gdGhpcy5fc3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyB3aGVuIHRoZSBob3N0IHNob3VsZCBiZSBkaXNwbGF5ZWQvaGlkZGVuLCBpLmUuIGNsaWNrIHdpbGwgYXR0YWNoIGEgY2xpY2sgbGlzdGVuZXIgdG8gdGhlIHJlZmVyZW5jZVxuICAgKiB0aGF0IG1ha2VzIHRoZSBob3N0IHRvZ2dsZSBkaXNwbGF5LiBTdXBwb3J0cyBtdWx0aXBsZSB0cmlnZ2VycywgdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5IGZvciBjb21iaW5hdGlvbnNcbiAgICogbGlrZSBjbGljay9mb2N1cy5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCB0cmlnZ2VycyhldmVudFRyaWdnZXJzOiBBcnJheTxUcmlnZ2VyRXZlbnQ+KSB7XG4gICAgdGhpcy5fdHJpZ2dlcnMgPSBldmVudFRyaWdnZXJzO1xuICAgIHRoaXMudGVhckRvd25SZWZlcmVuY2VFbGVtZW50RXZlbnRIYW5kbGluZygpO1xuICAgIHRoaXMuc2V0dXBFdmVudEhhbmRsaW5nKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyaWdnZXJzKCk6IEFycmF5PFRyaWdnZXJFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLl90cmlnZ2VycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgZm9yIHdoaWNoIHRoZSBjb250ZW50IHNob3VsZCBwb3J0YWwgaW50by5cbiAgICogUHJvdmlkaW5nIGFuIG91dGxldCBlbmFibGVzIHRoZSBwb3J0YWwsIGlmIG5vdGhpbmcgaXMgcHJvdmlkZWQsIHRoZSBwcm92aWRlZCBzdHJhdGVneSBpcyB1c2VkLlxuICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlcmUncyBpc3N1ZXMgd2l0aCB0aGUgc3RhY2tpbmcgY29udGV4dCwgYW5kIG5vdCBhcyBhIGRlZmF1bHQgb3B0aW9uLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IERPTVBvcnRhbE91dGxldChvdXRsZXQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcHJvdmlkZWRQb3J0YWxPdXRsZXQgPSBvdXRsZXQ7XG4gICAgdGhpcy5wb3J0YWxEaXJlY3RpdmUub3V0bGV0ID1cbiAgICAgIHRoaXMuRE9NUG9ydGFsT3V0bGV0ID8/IHRoaXMuZ2V0T3V0bGV0RWxlbWVudCh0aGlzLnBvcnRhbE91dGxldENvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IERPTVBvcnRhbE91dGxldCgpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3ZpZGVkUG9ydGFsT3V0bGV0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgaG93IHRvIGF1dG9tYXRpY2FsbHkgZmluZCBhbmQgYXNzaWduIERPTVBvcnRhbE91dGxldCBpZiBub25lIGlzIHByb3ZpZGVkIGluIERPTVBvcnRhbE91dGxldC5cbiAgICogSWYgbm90aGluZyBpcyBwcm92aWRlZCBoZXJlIGFuZCBpbiBET01Qb3J0YWxPdXRsZXQsIHRoZSBwcm92aWRlZCBzdHJhdGVneSBpcyB1c2VkXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcG9ydGFsT3V0bGV0Q29uZmlnKGNvbmZpZzogUG9ydGFsT3V0bGV0Q29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcG9ydGFsT3V0bGV0Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLkRPTVBvcnRhbE91dGxldCkge1xuICAgICAgdGhpcy5wb3J0YWxEaXJlY3RpdmUub3V0bGV0ID0gdGhpcy5nZXRPdXRsZXRFbGVtZW50KGNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBwb3J0YWxPdXRsZXRDb25maWcoKTogUG9ydGFsT3V0bGV0Q29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Q29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgaG9zdCBmcm9tIGJlaW5nIHRvZ2dsZWQgaWYgc2V0LlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwbGFjZXMgdGhlIGZsb2F0aW5nIGVsZW1lbnQgZnJvbSBpdHMgY29yZSBwbGFjZW1lbnQgYWxvbmcgdGhlIHNwZWNpZmllZCBheGVzLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgb2Zmc2V0OiBGbG9hdGluZ09mZnNldCA9IEZsb2F0aW5nT2Zmc2V0Lm5vbmU7XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBmbG9hdGluZyBlbGVtZW50IGFsb25nIHRoZSBzcGVjaWZpZWQgYXhlcyBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcuXG4gICAqIFRoaXMgZG9lcyBub3QgYWx3YXlzIHdvcmsgYXMgZXhwZWN0ZWQsIHNvIGRvbid0IFwianVzdFwiIHNldCBpdC5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNoaWZ0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENob29zZXMgdGhlIHBsYWNlbWVudCB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseS5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIGF1dG9QbGFjZW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRW5hYmxlcyBoaWRpbmcgdGhlIGhvc3QgYnkgZXZlbnRzLiBTZWUgdmFyaWFibGUgbmFtZXMuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjbG9zZU9uU2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGNsb3NlT25Fc2NhcGVLZXk6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VPbkJhY2tkcm9wOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgb3B0aW9uIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGhvc3QgY2hhbmdlcyBkaXNwbGF5LiBUaGUgbmV3IGRpc3BsYXkgdmFsdWUgaXMgcHJvdmlkZWQuXG4gICAqICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgZGlzcGxheUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkVzY2FwZUtleVByZXNzZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VPbkVzY2FwZUtleSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0JztcblxuICBwcml2YXRlIF9zdHJhdGVneTogU3RyYXRlZ3kgPSAnYWJzb2x1dGUnO1xuXG4gIHByaXZhdGUgX3Byb3ZpZGVkUG9ydGFsT3V0bGV0OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9wb3J0YWxPdXRsZXRDb25maWc6IFBvcnRhbE91dGxldENvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF90cmlnZ2VyczogQXJyYXk8VHJpZ2dlckV2ZW50PiA9IFsnY2xpY2snXTtcblxuICBwcml2YXRlIF9yZWZlcmVuY2U6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgYXV0b1VwZGF0ZXJSZWY6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNTaG93bjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlZmVyZW5jZUV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zOiBFdmVudExpc3RlbmVyRGlzcG9zZUZuW10gPSBbXTtcbiAgcHJpdmF0ZSBkb2N1bWVudENsaWNrRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbjogRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbjtcbiAgcHJpdmF0ZSB0cmlnZ2VyRXZlbnRNYXA6IE1hcDxUcmlnZ2VyRXZlbnQsIEV2ZW50TWV0aG9kc1tdPiA9IG5ldyBNYXAoW1xuICAgIFsnY2xpY2snLCBbeyBldmVudDogJ2NsaWNrJywgbWV0aG9kOiB0aGlzLnRvZ2dsZVNob3cuYmluZCh0aGlzKSB9XV0sXG4gICAgW1xuICAgICAgJ2hvdmVyJyxcbiAgICAgIFtcbiAgICAgICAgeyBldmVudDogJ21vdXNlZW50ZXInLCBtZXRob2Q6IHRoaXMuc2hvdy5iaW5kKHRoaXMpIH0sXG4gICAgICAgIHsgZXZlbnQ6ICdtb3VzZWxlYXZlJywgbWV0aG9kOiB0aGlzLmhpZGUuYmluZCh0aGlzKSB9LFxuICAgICAgXSxcbiAgICBdLFxuICAgIFtcbiAgICAgICdmb2N1cycsXG4gICAgICBbXG4gICAgICAgIHsgZXZlbnQ6ICdmb2N1cycsIG1ldGhvZDogdGhpcy5zaG93LmJpbmQodGhpcykgfSxcbiAgICAgICAgeyBldmVudDogJ2JsdXInLCBtZXRob2Q6IHRoaXMuaGlkZS5iaW5kKHRoaXMpIH0sXG4gICAgICBdLFxuICAgIF0sXG4gIF0pO1xuXG4gIHByaXZhdGUgSFRNTEVsZW1lbnRzOiB7XG4gICAgW2tleSBpbiBPdXRsZXRTZWxlY3RvciB8ICdkZWZhdWx0J106ICh2YWx1ZT86IHN0cmluZykgPT4gQXJyYXk8RWxlbWVudD4gfCBudWxsO1xuICB9ID0ge1xuICAgIGlkOiAodmFsdWUpID0+IEFycmF5Lm9mKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZhbHVlKSksXG4gICAgY2xhc3M6ICh2YWx1ZSkgPT4gQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHZhbHVlKSksXG4gICAgbmFtZTogKHZhbHVlKSA9PiBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHZhbHVlKSksXG4gICAgdGFnOiAodmFsdWUpID0+IEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodmFsdWUpKSxcbiAgICBkZWZhdWx0OiAoKSA9PiBudWxsLFxuICB9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcG9ydGFsRGlyZWN0aXZlOiBQb3J0YWxEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEZsb2F0U3R5bGluZ1RvSG9zdEVsZW1lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qIFNob3VsZCBiZSBhY2Nlc3NpYmxlIGZvciBwcm9ncmFtbWF0aWNhbGx5IHNldHRpbmcgZGlzcGxheSAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hdHRhY2hEb2N1bWVudENsaWNrRXZlbnQoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xuICAgIHRoaXMuaXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5Q2hhbmdlZC5lbWl0KHRoaXMuaXNTaG93bik7XG4gIH1cblxuICAvKiBTaG91bGQgYmUgYWNjZXNzaWJsZSBmb3IgcHJvZ3JhbW1hdGljYWxseSBzZXR0aW5nIGRpc3BsYXkgKi9cbiAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGVhckRvd25Eb2N1bWVudENsaWNrRXZlbnRIYW5kbGluZygpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICB0aGlzLmlzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLmRpc3BsYXlDaGFuZ2VkLmVtaXQodGhpcy5pc1Nob3duKTtcbiAgfVxuXG4gIC8qIFNob3VsZCBiZSBhY2Nlc3NpYmxlIGZvciBwcm9ncmFtbWF0aWNhbGx5IHNldHRpbmcgZGlzcGxheSAqL1xuICBwdWJsaWMgdG9nZ2xlU2hvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Nob3duKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkRvY3VtZW50Q2xpY2tXaGlsZUhvc3RTaG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjbGlja2VkT25Ib3N0OiBib29sZWFuID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoY2xpY2tlZE9uSG9zdCkge1xuICAgICAgdGhpcy5oYW5kbGVDbGlja0luc2lkZUhvc3RFbGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlSG9zdEVsZW1lbnQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRmxvYXRTdHlsaW5nVG9Ib3N0RWxlbWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAwcHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndG9wJywgYDBweGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdwb3NpdGlvbicsIHRoaXMuc3RyYXRlZ3kpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICd6LWluZGV4JyxcbiAgICAgIERlc2lnblRva2VuSGVscGVyLnpMYXllcigncG9wb3ZlcicpXG4gICAgKTtcbiAgICB0aGlzLnNldERpc3BsYXlTdHlsaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXlTdHlsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNwbGF5JyxcbiAgICAgIHRoaXMuaXNTaG93biA/IGBibG9ja2AgOiBgbm9uZWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIb3N0RWxlbWVudFBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWZlcmVuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IENvbXB1dGVQb3NpdGlvbkNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXG4gICAgICBtaWRkbGV3YXJlOiB0aGlzLmdldE1pZGRsZXdhcmVDb25maWcoKSxcbiAgICAgIHN0cmF0ZWd5OiB0aGlzLnN0cmF0ZWd5LFxuICAgIH0gYXMgQ29tcHV0ZVBvc2l0aW9uQ29uZmlnO1xuXG4gICAgZnJvbShcbiAgICAgIGNvbXB1dGVQb3NpdGlvbih0aGlzLnJlZmVyZW5jZT8ubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZylcbiAgICApLnN1YnNjcmliZSgoeyB4LCB5IH0pID0+IHRoaXMuc2V0UG9zaXRpb25TdHlsaW5nT25Ib3N0RWxlbWVudCh4LCB5KSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pZGRsZXdhcmVDb25maWcoKTogQXJyYXk8TWlkZGxld2FyZSB8IG51bGwgfCB1bmRlZmluZWQgfCBmYWxzZT4ge1xuICAgIGNvbnN0IG1pZGRsZXdhcmU6IEFycmF5PE1pZGRsZXdhcmUgfCBudWxsIHwgdW5kZWZpbmVkIHwgZmFsc2U+ID0gW107XG4gICAgbWlkZGxld2FyZS5wdXNoKG9mZnNldCh0aGlzLm9mZnNldCkpO1xuXG4gICAgaWYgKHRoaXMuc2hpZnQpIHtcbiAgICAgIG1pZGRsZXdhcmUucHVzaChzaGlmdCgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdXRvUGxhY2VtZW50KSB7XG4gICAgICBtaWRkbGV3YXJlLnB1c2goYXV0b1BsYWNlbWVudCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWlkZGxld2FyZTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b1VwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlQXV0b1VwZGF0ZXJSZWYoKTtcblxuICAgIGlmICghdGhpcy5yZWZlcmVuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmF1dG9VcGRhdGVyUmVmID0gYXV0b1VwZGF0ZShcbiAgICAgIHRoaXMucmVmZXJlbmNlPy5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24uYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uU3R5bGluZ09uSG9zdEVsZW1lbnQoeFBvc2l0aW9uOiBudW1iZXIsIHlQb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBgJHt4UG9zaXRpb259cHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndG9wJywgYCR7eVBvc2l0aW9ufXB4YCk7XG4gICAgdGhpcy5zZXREaXNwbGF5U3R5bGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50SGFuZGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZmVyZW5jZSB8fCAhdGhpcy50cmlnZ2Vycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlcnMuZm9yRWFjaCgodHJpZ2dlcjogVHJpZ2dlckV2ZW50KSA9PlxuICAgICAgdGhpcy5hdHRhY2hUcmlnZ2VyRXZlbnRUb1JlZmVyZW5jZUVsZW1lbnQodHJpZ2dlcilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hEb2N1bWVudENsaWNrRXZlbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0V2ZW50TGlzdGVuZXJEaXNwb3NlRm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50Q2xpY2tFdmVudExpc3RlbmVyRGlzcG9zZUZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ21vdXNlZG93bicsXG4gICAgICAoZXZlbnQpID0+IHRoaXMub25Eb2N1bWVudENsaWNrV2hpbGVIb3N0U2hvd24oZXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoVHJpZ2dlckV2ZW50VG9SZWZlcmVuY2VFbGVtZW50KHRyaWdnZXI6IFRyaWdnZXJFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50czogRXZlbnRNZXRob2RzW10gfCB1bmRlZmluZWQgPSB0aGlzLnRyaWdnZXJFdmVudE1hcC5nZXQodHJpZ2dlcik7XG5cbiAgICBpZiAoIWV2ZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RyaWdnZXJ9IGlzIG1pc3NpbmcgZXZlbnQgZGVmaW5pdGlvbihzKWApO1xuICAgIH1cblxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudDogRXZlbnRNZXRob2RzKSA9PiB7XG4gICAgICBjb25zdCBldmVudExpc3RlbmVyRGlzcG9zZUZuOiBFdmVudExpc3RlbmVyRGlzcG9zZUZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgIHRoaXMucmVmZXJlbmNlPy5uYXRpdmVFbGVtZW50LFxuICAgICAgICBldmVudC5ldmVudCxcbiAgICAgICAgZXZlbnQubWV0aG9kXG4gICAgICApO1xuICAgICAgdGhpcy5yZWZlcmVuY2VFdmVudExpc3RlbmVyRGlzcG9zZUZucy5wdXNoKGV2ZW50TGlzdGVuZXJEaXNwb3NlRm4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGlja0luc2lkZUhvc3RFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2tPdXRzaWRlSG9zdEVsZW1lbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRPblJlZmVyZW5jZVdpdGhDbGlja1RyaWdnZXJFbmFibGVkOiBib29sZWFuID1cbiAgICAgICAgdGhpcy5yZWZlcmVuY2U/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiB0aGlzLnRyaWdnZXJzLmluY2x1ZGVzKCdjbGljaycpO1xuXG4gICAgICBpZiAodGhpcy5jbG9zZU9uQmFja2Ryb3AgJiYgIWNsaWNrZWRPblJlZmVyZW5jZVdpdGhDbGlja1RyaWdnZXJFbmFibGVkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3V0bGV0RWxlbWVudChjb25maWc6IFBvcnRhbE91dGxldENvbmZpZyB8IHVuZGVmaW5lZCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5zZWxlY3RvciB8fCAhY29uZmlnLnZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50czogQXJyYXk8RWxlbWVudD4gfCBudWxsID0gdGhpcy5nZXRIVE1MRWxlbWVudHMoY29uZmlnKTtcblxuICAgIGlmICghZWxlbWVudHMgfHwgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgQ291bGQgbm90IGxvY2F0ZSBIVE1MRWxlbWVudCBmb3IgJHtjb25maWcuc2VsZWN0b3J9LiBEaWQgeW91IG1pc3NwZWxsIGl0P2ApO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYE11bHRpcGxlIEhUTUxFbGVtZW50cyBmb3VuZCBmb3IgJHtjb25maWcuc2VsZWN0b3J9LlxuICAgICAgICAgVGhpcyBjYW4gbGVhZCB0byB1bmludGVuZGVkIGJlaGF2aW91cnMuIFByb3ZpZGUgYW4gdW5pcXVlIG91dGxldGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzWzBdIGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIVE1MRWxlbWVudHMoY29uZmlnOiBQb3J0YWxPdXRsZXRDb25maWcgfCB1bmRlZmluZWQpOiBBcnJheTxFbGVtZW50PiB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLkhUTUxFbGVtZW50c1tjb25maWcuc2VsZWN0b3JdKGNvbmZpZy52YWx1ZSkgfHwgdGhpcy5IVE1MRWxlbWVudHNbJ2RlZmF1bHQnXShjb25maWcudmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVhckRvd25SZWZlcmVuY2VFbGVtZW50RXZlbnRIYW5kbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZmVyZW5jZUV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zLmZvckVhY2goXG4gICAgICAoZXZlbnRMaXN0ZW5lckRpc3Bvc2VGdW5jdGlvbjogRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbikgPT4ge1xuICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lckRpc3Bvc2VGdW5jdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgZXZlbnRMaXN0ZW5lckRpc3Bvc2VGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZmVyZW5jZUV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zID0gW107XG4gIH1cblxuICBwcml2YXRlIHRlYXJEb3duRG9jdW1lbnRDbGlja0V2ZW50SGFuZGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0V2ZW50TGlzdGVuZXJEaXNwb3NlRm4pIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0V2ZW50TGlzdGVuZXJEaXNwb3NlRm4oKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0V2ZW50TGlzdGVuZXJEaXNwb3NlRm4gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXV0b1VwZGF0ZXJSZWYoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZXJSZWYpIHtcbiAgICAgIHRoaXMuYXV0b1VwZGF0ZXJSZWYoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50ZWFyRG93bkRvY3VtZW50Q2xpY2tFdmVudEhhbmRsaW5nKCk7XG4gICAgdGhpcy50ZWFyRG93blJlZmVyZW5jZUVsZW1lbnRFdmVudEhhbmRsaW5nKCk7XG4gICAgdGhpcy5yZW1vdmVBdXRvVXBkYXRlclJlZigpO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
- export { FloatingDirective } from './floating.directive';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NoYXJlZC9mbG9hdGluZy9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGbG9hdGluZ0RpcmVjdGl2ZSwgVHJpZ2dlckV2ZW50IH0gZnJvbSAnLi9mbG9hdGluZy5kaXJlY3RpdmUnO1xuIl19
1
+ export { FloatingDirective, FloatingOffset, OutletSelector, } from './floating.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NoYXJlZC9mbG9hdGluZy9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGNBQWMsRUFFZCxjQUFjLEdBQ2YsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEZsb2F0aW5nRGlyZWN0aXZlLFxuICBUcmlnZ2VyRXZlbnQsXG4gIEZsb2F0aW5nT2Zmc2V0LFxuICBQb3J0YWxPdXRsZXRDb25maWcsXG4gIE91dGxldFNlbGVjdG9yLFxufSBmcm9tICcuL2Zsb2F0aW5nLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2lyYnlkZXNpZ24tZGVzaWduc3lzdGVtLXRhYi1uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vdGFiLW5hdmlnYXRpb24vc3JjL2tpcmJ5ZGVzaWduLWRlc2lnbnN5c3RlbS10YWItbmF2aWdhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
@@ -0,0 +1,4 @@
1
+ export { TabNavigationComponent } from './tab-navigation/tab-navigation.component';
2
+ export { TabNavigationItemComponent } from './tab-navigation-item/tab-navigation-item.component';
3
+ export { TabNavigationModule } from './tab-navigation.module';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3RhYi1uYXZpZ2F0aW9uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgVGFiTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFiLW5hdmlnYXRpb24vdGFiLW5hdmlnYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCB7IFRhYk5hdmlnYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90YWItbmF2aWdhdGlvbi1pdGVtL3RhYi1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCB7IFRhYk5hdmlnYXRpb25Nb2R1bGUgfSBmcm9tICcuL3RhYi1uYXZpZ2F0aW9uLm1vZHVsZSc7XG4iXX0=
@@ -0,0 +1,121 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, HostListener, Input, Output, QueryList, ViewChild, } from '@angular/core';
2
+ import { WindowRef } from '@kirbydesign/designsystem/types';
3
+ import { KeyboardHandlerService } from '@kirbydesign/designsystem/dropdown';
4
+ import { TabNavigationItemComponent } from '../tab-navigation-item/tab-navigation-item.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@kirbydesign/designsystem/types";
7
+ import * as i2 from "@kirbydesign/designsystem/dropdown";
8
+ export class TabNavigationComponent {
9
+ constructor(window, keyboardHandlerService) {
10
+ this.window = window;
11
+ this.keyboardHandlerService = keyboardHandlerService;
12
+ this.DEBOUNCE_TIME_MS = 250;
13
+ this.tabElements = new Array();
14
+ this.tabButtonElements = new Array();
15
+ this._selectedIndex = -1;
16
+ this._focusIndex = -1;
17
+ this.selectedIndexChange = new EventEmitter();
18
+ /**/
19
+ }
20
+ get selectedIndex() {
21
+ return this._selectedIndex;
22
+ }
23
+ set selectedIndex(index) {
24
+ if (index !== this._selectedIndex) {
25
+ this._selectedIndex = index;
26
+ this.focusIndex = index;
27
+ this.selectTab(this.selectedIndex);
28
+ this.selectedIndexChange.emit(this.selectedIndex);
29
+ }
30
+ }
31
+ get focusIndex() {
32
+ return this._focusIndex;
33
+ }
34
+ set focusIndex(index) {
35
+ if (index !== this._focusIndex) {
36
+ this._focusIndex = index;
37
+ this.scrollToTab(this.focusIndex);
38
+ this.focusTab(this.focusIndex);
39
+ }
40
+ }
41
+ ngAfterViewInit() {
42
+ this.tabBarElement = this.tabBar.nativeElement;
43
+ this.tabs.forEach((tab) => this.tabElements.push(tab.nativeElement));
44
+ this.tabElements.forEach((tabElement) => this.tabButtonElements.push(tabElement.querySelector('[role="tab"]')));
45
+ setTimeout(() => {
46
+ this.selectTab(this.selectedIndex);
47
+ this.scrollToTab(this.focusIndex);
48
+ this.focusTab(this.focusIndex);
49
+ }, this.DEBOUNCE_TIME_MS);
50
+ }
51
+ onItemSelect(event) {
52
+ const targetTabNavItem = event.target.closest('button');
53
+ this.selectedIndex = this.tabButtonElements.indexOf(targetTabNavItem);
54
+ }
55
+ onKeydown(event) {
56
+ event.preventDefault();
57
+ this.focusIndex = this.keyboardHandlerService.handle(event, this.focusIndex, this.tabElements.length - 1, true);
58
+ }
59
+ selectTab(tabIndex) {
60
+ this.tabButtonElements.forEach((tabButtonElement, index) => {
61
+ tabButtonElement.setAttribute('aria-selected', index === tabIndex ? 'true' : 'false');
62
+ });
63
+ }
64
+ focusTab(focusIndex) {
65
+ this.tabButtonElements.forEach((tabButtonElement, index) => {
66
+ tabButtonElement.setAttribute('tabindex', index === focusIndex ? '0' : '-1');
67
+ });
68
+ if (0 <= focusIndex && focusIndex < this.tabButtonElements.length) {
69
+ this.tabButtonElements[focusIndex].focus();
70
+ }
71
+ }
72
+ scrollToTab(tabIndex) {
73
+ if (0 <= tabIndex && tabIndex < this.tabElements.length) {
74
+ const selectedTabElement = this.tabElements[tabIndex];
75
+ const selectedTabElementWidth = selectedTabElement.getBoundingClientRect().width;
76
+ const selectedTabElementOffsetLeft = selectedTabElement.offsetLeft;
77
+ const tabBarElementWidth = this.tabBarElement.getBoundingClientRect().width;
78
+ this.window.nativeWindow.requestAnimationFrame(() => {
79
+ this.tabBarElement?.scrollTo({
80
+ behavior: 'smooth',
81
+ left: Math.max(0, selectedTabElementOffsetLeft - (tabBarElementWidth - selectedTabElementWidth) / 2),
82
+ });
83
+ });
84
+ }
85
+ }
86
+ }
87
+ /** @nocollapse */ TabNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationComponent, deps: [{ token: i1.WindowRef }, { token: i2.KeyboardHandlerService }], target: i0.ɵɵFactoryTarget.Component });
88
+ /** @nocollapse */ TabNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TabNavigationComponent, selector: "kirby-tab-navigation", inputs: { selectedIndex: "selectedIndex" }, outputs: { selectedIndexChange: "selectedIndexChange" }, host: { listeners: { "click": "onItemSelect($event)", "keydown.enter": "onItemSelect($event)", "keydown.home": "onKeydown($event)", "keydown.end": "onKeydown($event)", "keydown.arrowright": "onKeydown($event)", "keydown.arrowleft": "onKeydown($event)" } }, queries: [{ propertyName: "tabs", predicate: TabNavigationItemComponent, read: ElementRef }], viewQueries: [{ propertyName: "tabBar", first: true, predicate: ["tabBar"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\n <div role=\"tablist\" #tabBar>\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["div[role=tablist]{position:relative;margin:0 auto;display:flex;gap:12px;align-items:center;justify-content:left;flex-wrap:nowrap;overflow-x:scroll;-webkit-overflow-scrolling:auto;scrollbar-width:none}@media (max-width: 720px){div[role=tablist]{padding-inline:var(--padding-start) var(--padding-end)}}div[role=tablist]::-webkit-scrollbar{display:none}.container{position:relative;background-color:var(--kirby-background-color);max-width:var(--page-content-max-width, 720px)}@media (max-width: 720px){.container{margin-inline:calc(-1 * var(--padding-start)) calc(-1 * var(--padding-end))}}.container:before{content:\"\";background-color:var(--kirby-medium);position:absolute;height:1px;bottom:0;z-index:1;left:0;width:100%}@media (max-width: 752px){.container:before{left:calc(-1 * var(--padding-start, 16px));width:calc(100% + var(--padding-start, 16px) * 2)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: 'kirby-tab-navigation', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div role=\"tablist\" #tabBar>\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["div[role=tablist]{position:relative;margin:0 auto;display:flex;gap:12px;align-items:center;justify-content:left;flex-wrap:nowrap;overflow-x:scroll;-webkit-overflow-scrolling:auto;scrollbar-width:none}@media (max-width: 720px){div[role=tablist]{padding-inline:var(--padding-start) var(--padding-end)}}div[role=tablist]::-webkit-scrollbar{display:none}.container{position:relative;background-color:var(--kirby-background-color);max-width:var(--page-content-max-width, 720px)}@media (max-width: 720px){.container{margin-inline:calc(-1 * var(--padding-start)) calc(-1 * var(--padding-end))}}.container:before{content:\"\";background-color:var(--kirby-medium);position:absolute;height:1px;bottom:0;z-index:1;left:0;width:100%}@media (max-width: 752px){.container:before{left:calc(-1 * var(--padding-start, 16px));width:calc(100% + var(--padding-start, 16px) * 2)}}\n"] }]
92
+ }], ctorParameters: function () { return [{ type: i1.WindowRef }, { type: i2.KeyboardHandlerService }]; }, propDecorators: { tabBar: [{
93
+ type: ViewChild,
94
+ args: ['tabBar']
95
+ }], tabs: [{
96
+ type: ContentChildren,
97
+ args: [TabNavigationItemComponent, { read: ElementRef }]
98
+ }], selectedIndex: [{
99
+ type: Input
100
+ }], selectedIndexChange: [{
101
+ type: Output
102
+ }], onItemSelect: [{
103
+ type: HostListener,
104
+ args: ['click', ['$event']]
105
+ }, {
106
+ type: HostListener,
107
+ args: ['keydown.enter', ['$event']]
108
+ }], onKeydown: [{
109
+ type: HostListener,
110
+ args: ['keydown.home', ['$event']]
111
+ }, {
112
+ type: HostListener,
113
+ args: ['keydown.end', ['$event']]
114
+ }, {
115
+ type: HostListener,
116
+ args: ['keydown.arrowright', ['$event']]
117
+ }, {
118
+ type: HostListener,
119
+ args: ['keydown.arrowleft', ['$event']]
120
+ }] } });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdmlnYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vdGFiLW5hdmlnYXRpb24vc3JjL3RhYi1uYXZpZ2F0aW9uL3RhYi1uYXZpZ2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3RhYi1uYXZpZ2F0aW9uL3NyYy90YWItbmF2aWdhdGlvbi90YWItbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7OztBQVFsRyxNQUFNLE9BQU8sc0JBQXNCO0lBOENqQyxZQUFvQixNQUFpQixFQUFVLHNCQUE4QztRQUF6RSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQTdDN0UscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBUy9CLGdCQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQUN2QyxzQkFBaUIsR0FBRyxJQUFJLEtBQUssRUFBZSxDQUFDO1FBZ0I3QyxtQkFBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBY3BCLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFHekIsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcvQyxJQUFJ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QUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7c0lBdEhVLHNCQUFzQjswSEFBdEIsc0JBQXNCLHViQU1oQiwwQkFBMEIsUUFBVSxVQUFVLCtIQzdCakUsZ0hBS0E7MkZEa0JhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTTtxSUFNdkMsTUFBTTtzQkFEYixTQUFTO3VCQUFDLFFBQVE7Z0JBSVgsSUFBSTtzQkFEWCxlQUFlO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFRN0QsYUFBYTtzQkFEaEIsS0FBSztnQkErQk4sbUJBQW1CO3NCQURsQixNQUFNO2dCQXVCUCxZQUFZO3NCQUZYLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDaEMsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXpDLFNBQVM7c0JBSlIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUN2QyxZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3RDLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM3QyxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS90eXBlcyc7XG5pbXBvcnQgeyBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9kcm9wZG93bic7XG5pbXBvcnQgeyBUYWJOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYi1uYXZpZ2F0aW9uLWl0ZW0vdGFiLW5hdmlnYXRpb24taXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS10YWItbmF2aWdhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWItbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYi1uYXZpZ2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJOYXZpZ2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHB1YmxpYyByZWFkb25seSBERUJPVU5DRV9USU1FX01TID0gMjUwO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYkJhcicpXG4gIHByaXZhdGUgdGFiQmFyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFRhYk5hdmlnYXRpb25JdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSB0YWJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gIHByaXZhdGUgdGFiQmFyRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgdGFiRWxlbWVudHMgPSBuZXcgQXJyYXk8SFRNTEVsZW1lbnQ+KCk7XG4gIHByaXZhdGUgdGFiQnV0dG9uRWxlbWVudHMgPSBuZXcgQXJyYXk8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT09IHRoaXMuX3NlbGVjdGVkSW5kZXgpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSBpbmRleDtcblxuICAgICAgdGhpcy5mb2N1c0luZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmRleCA9IC0xO1xuXG4gIGdldCBmb2N1c0luZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzSW5kZXg7XG4gIH1cblxuICBzZXQgZm9jdXNJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ICE9PSB0aGlzLl9mb2N1c0luZGV4KSB7XG4gICAgICB0aGlzLl9mb2N1c0luZGV4ID0gaW5kZXg7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG9UYWIodGhpcy5mb2N1c0luZGV4KTtcbiAgICAgIHRoaXMuZm9jdXNUYWIodGhpcy5mb2N1c0luZGV4KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZm9jdXNJbmRleCA9IC0xO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3RlZEluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3aW5kb3c6IFdpbmRvd1JlZiwgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXJTZXJ2aWNlOiBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlKSB7XG4gICAgLyoqL1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudGFiQmFyRWxlbWVudCA9IHRoaXMudGFiQmFyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYikgPT4gdGhpcy50YWJFbGVtZW50cy5wdXNoKHRhYi5uYXRpdmVFbGVtZW50KSk7XG4gICAgdGhpcy50YWJFbGVtZW50cy5mb3JFYWNoKCh0YWJFbGVtZW50KSA9PlxuICAgICAgdGhpcy50YWJCdXR0b25FbGVtZW50cy5wdXNoKHRhYkVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9XCJ0YWJcIl0nKSlcbiAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgdGhpcy5zY3JvbGxUb1RhYih0aGlzLmZvY3VzSW5kZXgpO1xuICAgICAgdGhpcy5mb2N1c1RhYih0aGlzLmZvY3VzSW5kZXgpO1xuICAgIH0sIHRoaXMuREVCT1VOQ0VfVElNRV9NUyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBvbkl0ZW1TZWxlY3QoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldFRhYk5hdkl0ZW06IEhUTUxFbGVtZW50ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnYnV0dG9uJyk7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy50YWJCdXR0b25FbGVtZW50cy5pbmRleE9mKHRhcmdldFRhYk5hdkl0ZW0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5ob21lJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5mb2N1c0luZGV4ID0gdGhpcy5rZXlib2FyZEhhbmRsZXJTZXJ2aWNlLmhhbmRsZShcbiAgICAgIGV2ZW50LFxuICAgICAgdGhpcy5mb2N1c0luZGV4LFxuICAgICAgdGhpcy50YWJFbGVtZW50cy5sZW5ndGggLSAxLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFRhYih0YWJJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy50YWJCdXR0b25FbGVtZW50cy5mb3JFYWNoKCh0YWJCdXR0b25FbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgdGFiQnV0dG9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBpbmRleCA9PT0gdGFiSW5kZXggPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNUYWIoZm9jdXNJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy50YWJCdXR0b25FbGVtZW50cy5mb3JFYWNoKCh0YWJCdXR0b25FbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgdGFiQnV0dG9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgaW5kZXggPT09IGZvY3VzSW5kZXggPyAnMCcgOiAnLTEnKTtcbiAgICB9KTtcblxuICAgIGlmICgwIDw9IGZvY3VzSW5kZXggJiYgZm9jdXNJbmRleCA8IHRoaXMudGFiQnV0dG9uRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRhYkJ1dHRvbkVsZW1lbnRzW2ZvY3VzSW5kZXhdLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1RhYih0YWJJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKDAgPD0gdGFiSW5kZXggJiYgdGFiSW5kZXggPCB0aGlzLnRhYkVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJFbGVtZW50ID0gdGhpcy50YWJFbGVtZW50c1t0YWJJbmRleF07XG4gICAgICBjb25zdCBzZWxlY3RlZFRhYkVsZW1lbnRXaWR0aCA9IHNlbGVjdGVkVGFiRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIGNvbnN0IHNlbGVjdGVkVGFiRWxlbWVudE9mZnNldExlZnQgPSBzZWxlY3RlZFRhYkVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgIGNvbnN0IHRhYkJhckVsZW1lbnRXaWR0aCA9IHRoaXMudGFiQmFyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgdGhpcy53aW5kb3cubmF0aXZlV2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFiQmFyRWxlbWVudD8uc2Nyb2xsVG8oe1xuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgICBsZWZ0OiBNYXRoLm1heChcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBzZWxlY3RlZFRhYkVsZW1lbnRPZmZzZXRMZWZ0IC0gKHRhYkJhckVsZW1lbnRXaWR0aCAtIHNlbGVjdGVkVGFiRWxlbWVudFdpZHRoKSAvIDJcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8ZGl2IHJvbGU9XCJ0YWJsaXN0XCIgI3RhYkJhcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TabNavigationItemComponent {
4
+ constructor() {
5
+ this.label = '';
6
+ /* */
7
+ }
8
+ }
9
+ /** @nocollapse */ TabNavigationItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
+ /** @nocollapse */ TabNavigationItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TabNavigationItemComponent, selector: "kirby-tab-navigation-item", inputs: { label: "label" }, ngImport: i0, template: "<button role=\"tab\" #tabButton>\n <span attr.data-text=\"{{ label }}\">{{ label }}</span>\n <ng-content></ng-content>\n</button>\n", styles: [":host{position:relative;padding-bottom:2px}:host button[role=tab]{background:transparent;color:inherit;font:inherit;cursor:pointer;display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;user-select:none;text-decoration:none;margin:0;width:auto;border:none;outline:none;background-color:var(--kirby-background-color);color:var(--kirby-black);box-sizing:border-box;padding:16px;font-size:16px;line-height:24px;gap:4px}:host button[role=tab]:focus,:host button[role=tab]:hover{font-weight:700}:host button[role=tab][aria-selected=true]{font-weight:700}:host button[role=tab][aria-selected=true]:before{content:\"\";width:100%;background-color:var(--kirby-dark);position:absolute;border-radius:1px;height:2px;bottom:0;z-index:2}span[data-text]{max-width:100px;overflow:hidden;text-overflow:ellipsis}span[data-text]:before{display:block;content:attr(data-text);font-weight:700;height:0;overflow:hidden;visibility:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationItemComponent, decorators: [{
12
+ type: Component,
13
+ args: [{ selector: 'kirby-tab-navigation-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button role=\"tab\" #tabButton>\n <span attr.data-text=\"{{ label }}\">{{ label }}</span>\n <ng-content></ng-content>\n</button>\n", styles: [":host{position:relative;padding-bottom:2px}:host button[role=tab]{background:transparent;color:inherit;font:inherit;cursor:pointer;display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;user-select:none;text-decoration:none;margin:0;width:auto;border:none;outline:none;background-color:var(--kirby-background-color);color:var(--kirby-black);box-sizing:border-box;padding:16px;font-size:16px;line-height:24px;gap:4px}:host button[role=tab]:focus,:host button[role=tab]:hover{font-weight:700}:host button[role=tab][aria-selected=true]{font-weight:700}:host button[role=tab][aria-selected=true]:before{content:\"\";width:100%;background-color:var(--kirby-dark);position:absolute;border-radius:1px;height:2px;bottom:0;z-index:2}span[data-text]{max-width:100px;overflow:hidden;text-overflow:ellipsis}span[data-text]:before{display:block;content:attr(data-text);font-weight:700;height:0;overflow:hidden;visibility:hidden}\n"] }]
14
+ }], ctorParameters: function () { return []; }, propDecorators: { label: [{
15
+ type: Input
16
+ }] } });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdmlnYXRpb24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS90YWItbmF2aWdhdGlvbi9zcmMvdGFiLW5hdmlnYXRpb24taXRlbS90YWItbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3RhYi1uYXZpZ2F0aW9uL3NyYy90YWItbmF2aWdhdGlvbi1pdGVtL3RhYi1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUXRGLE1BQU0sT0FBTywwQkFBMEI7SUFJckM7UUFGQSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR1QsS0FBSztJQUNQLENBQUM7OzBJQU5VLDBCQUEwQjs4SEFBMUIsMEJBQTBCLDZGQ1J2Qyx1SUFJQTsyRkRJYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNOzBFQUkvQyxLQUFLO3NCQURKLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS10YWItbmF2aWdhdGlvbi1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWItbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIGxhYmVsID0gJyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyogKi9cbiAgfVxufVxuIiwiPGJ1dHRvbiByb2xlPVwidGFiXCIgI3RhYkJ1dHRvbj5cbiAgPHNwYW4gYXR0ci5kYXRhLXRleHQ9XCJ7eyBsYWJlbCB9fVwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2J1dHRvbj5cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TabNavigationComponent } from './tab-navigation/tab-navigation.component';
4
+ import { TabNavigationItemComponent } from './tab-navigation-item/tab-navigation-item.component';
5
+ import * as i0 from "@angular/core";
6
+ export class TabNavigationModule {
7
+ }
8
+ /** @nocollapse */ TabNavigationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ /** @nocollapse */ TabNavigationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, declarations: [TabNavigationComponent, TabNavigationItemComponent], imports: [CommonModule], exports: [TabNavigationComponent, TabNavigationItemComponent] });
10
+ /** @nocollapse */ TabNavigationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, imports: [CommonModule] });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ imports: [CommonModule],
15
+ declarations: [TabNavigationComponent, TabNavigationItemComponent],
16
+ exports: [TabNavigationComponent, TabNavigationItemComponent],
17
+ }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdmlnYXRpb24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vdGFiLW5hdmlnYXRpb24vc3JjL3RhYi1uYXZpZ2F0aW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7QUFPakcsTUFBTSxPQUFPLG1CQUFtQjs7bUlBQW5CLG1CQUFtQjtvSUFBbkIsbUJBQW1CLGlCQUhmLHNCQUFzQixFQUFFLDBCQUEwQixhQUR2RCxZQUFZLGFBRVosc0JBQXNCLEVBQUUsMEJBQTBCO29JQUVqRCxtQkFBbUIsWUFKcEIsWUFBWTsyRkFJWCxtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSwwQkFBMEIsQ0FBQztvQkFDbEUsT0FBTyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsMEJBQTBCLENBQUM7aUJBQzlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUYWJOYXZpZ2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWItbmF2aWdhdGlvbi90YWItbmF2aWdhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFiTmF2aWdhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3RhYi1uYXZpZ2F0aW9uLWl0ZW0vdGFiLW5hdmlnYXRpb24taXRlbS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbVGFiTmF2aWdhdGlvbkNvbXBvbmVudCwgVGFiTmF2aWdhdGlvbkl0ZW1Db21wb25lbnRdLFxuICBleHBvcnRzOiBbVGFiTmF2aWdhdGlvbkNvbXBvbmVudCwgVGFiTmF2aWdhdGlvbkl0ZW1Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJOYXZpZ2F0aW9uTW9kdWxlIHt9XG4iXX0=