valtech-components 2.0.566 → 2.0.567

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 (56) hide show
  1. package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +51 -14
  2. package/esm2022/lib/components/atoms/fab/fab.component.mjs +63 -25
  3. package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +64 -19
  4. package/esm2022/lib/components/molecules/accordion/accordion.component.mjs +45 -18
  5. package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +43 -15
  6. package/esm2022/lib/components/molecules/card/card.component.mjs +2 -2
  7. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +52 -8
  8. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +54 -37
  9. package/esm2022/lib/components/molecules/comment/comment.component.mjs +1 -1
  10. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +62 -27
  11. package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +74 -46
  12. package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +2 -2
  13. package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +1 -1
  14. package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +95 -59
  15. package/esm2022/lib/components/molecules/pill/pill.component.mjs +61 -13
  16. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +2 -2
  17. package/esm2022/lib/components/molecules/rating/rating.component.mjs +60 -43
  18. package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +56 -26
  19. package/esm2022/lib/components/molecules/searchbar/types.mjs +2 -0
  20. package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +52 -29
  21. package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +2 -2
  22. package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +67 -51
  23. package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +51 -23
  24. package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +59 -21
  25. package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +93 -59
  26. package/esm2022/lib/components/molecules/toggle-input/toggle-input.component.mjs +49 -15
  27. package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +1 -1
  28. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +2 -2
  29. package/esm2022/lib/components/organisms/form/form.component.mjs +2 -2
  30. package/esm2022/lib/components/organisms/tabbed-content/tabbed-content.component.mjs +1 -1
  31. package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +2 -2
  32. package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +2 -2
  33. package/fesm2022/valtech-components.mjs +1259 -675
  34. package/fesm2022/valtech-components.mjs.map +1 -1
  35. package/lib/components/atoms/avatar/avatar.component.d.ts +26 -5
  36. package/lib/components/atoms/fab/fab.component.d.ts +24 -5
  37. package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +21 -6
  38. package/lib/components/molecules/accordion/accordion.component.d.ts +10 -4
  39. package/lib/components/molecules/breadcrumb/breadcrumb.component.d.ts +10 -4
  40. package/lib/components/molecules/check-input/check-input.component.d.ts +25 -4
  41. package/lib/components/molecules/chip-group/chip-group.component.d.ts +10 -4
  42. package/lib/components/molecules/date-input/date-input.component.d.ts +25 -7
  43. package/lib/components/molecules/glow-card/glow-card.component.d.ts +16 -5
  44. package/lib/components/molecules/phone-input/phone-input.component.d.ts +28 -5
  45. package/lib/components/molecules/pill/pill.component.d.ts +27 -3
  46. package/lib/components/molecules/rating/rating.component.d.ts +10 -4
  47. package/lib/components/molecules/searchbar/searchbar.component.d.ts +15 -11
  48. package/lib/components/molecules/searchbar/types.d.ts +33 -0
  49. package/lib/components/molecules/segment-control/segment-control.component.d.ts +17 -6
  50. package/lib/components/molecules/stats-card/stats-card.component.d.ts +10 -4
  51. package/lib/components/molecules/stepper/stepper.component.d.ts +20 -4
  52. package/lib/components/molecules/tabs/tabs.component.d.ts +27 -4
  53. package/lib/components/molecules/textarea-input/textarea-input.component.d.ts +27 -4
  54. package/lib/components/molecules/toggle-input/toggle-input.component.d.ts +25 -4
  55. package/package.json +1 -1
  56. package/src/lib/components/styles/_docs-page.scss +310 -0
@@ -1,6 +1,7 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
1
+ import { Component, inject, Input, Output, EventEmitter } from '@angular/core';
2
2
  import { IonIcon } from '@ionic/angular/standalone';
3
3
  import { CommonModule } from '@angular/common';
4
+ import { PresetService } from '../../../services/presets';
4
5
  import { addIcons } from 'ionicons';
5
6
  import { checkmark, close, ellipse } from 'ionicons/icons';
6
7
  import * as i0 from "@angular/core";
@@ -37,14 +38,40 @@ addIcons({ checkmark, close, ellipse });
37
38
  */
38
39
  export class StepperComponent {
39
40
  constructor() {
41
+ this.presets = inject(PresetService);
42
+ /**
43
+ * Stepper configuration object. Values here override preset values.
44
+ */
45
+ this.props = {};
46
+ /**
47
+ * Resolved props after merging preset + explicit props.
48
+ */
49
+ this.resolvedProps = {};
40
50
  this.stepChange = new EventEmitter();
41
51
  }
52
+ ngOnInit() {
53
+ this.resolveProps();
54
+ }
55
+ ngOnChanges(changes) {
56
+ if (changes['preset'] || changes['props']) {
57
+ this.resolveProps();
58
+ }
59
+ }
60
+ resolveProps() {
61
+ const presetProps = this.preset
62
+ ? this.presets.get('stepper', this.preset)
63
+ : {};
64
+ this.resolvedProps = {
65
+ ...presetProps,
66
+ ...this.props,
67
+ };
68
+ }
42
69
  getCurrentIndex() {
43
- if (this.props.currentIndex !== undefined) {
44
- return this.props.currentIndex;
70
+ if (this.resolvedProps.currentIndex !== undefined) {
71
+ return this.resolvedProps.currentIndex;
45
72
  }
46
- if (this.props.currentStep) {
47
- return this.props.steps.findIndex((s) => s.value === this.props.currentStep);
73
+ if (this.resolvedProps.currentStep) {
74
+ return this.resolvedProps.steps?.findIndex((s) => s.value === this.resolvedProps.currentStep) ?? 0;
48
75
  }
49
76
  return 0;
50
77
  }
@@ -60,7 +87,7 @@ export class StepperComponent {
60
87
  }
61
88
  getStepColor(step, index) {
62
89
  const status = this.getStepStatus(step, index);
63
- const color = this.props.color || 'primary';
90
+ const color = this.resolvedProps.color || 'primary';
64
91
  switch (status) {
65
92
  case 'completed':
66
93
  return `var(--ion-color-${color})`;
@@ -75,10 +102,9 @@ export class StepperComponent {
75
102
  isStepClickable(step, index) {
76
103
  if (step.disabled)
77
104
  return false;
78
- if (!this.props.linear)
105
+ if (!this.resolvedProps.linear)
79
106
  return true;
80
107
  const currentIndex = this.getCurrentIndex();
81
- // In linear mode, can only go to completed steps or next step
82
108
  return index <= currentIndex || (step.editable && index < currentIndex);
83
109
  }
84
110
  onStepClick(step, index) {
@@ -97,13 +123,13 @@ export class StepperComponent {
97
123
  return step.label || step.contentFallback || '';
98
124
  }
99
125
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
100
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: StepperComponent, isStandalone: true, selector: "val-stepper", inputs: { props: "props" }, outputs: { stepChange: "stepChange" }, ngImport: i0, template: `
126
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: StepperComponent, isStandalone: true, selector: "val-stepper", inputs: { preset: "preset", props: "props" }, outputs: { stepChange: "stepChange" }, usesOnChanges: true, ngImport: i0, template: `
101
127
  <div
102
128
  class="stepper-container"
103
- [class.horizontal]="props.orientation !== 'vertical'"
104
- [class.vertical]="props.orientation === 'vertical'"
129
+ [class.horizontal]="resolvedProps.orientation !== 'vertical'"
130
+ [class.vertical]="resolvedProps.orientation === 'vertical'"
105
131
  >
106
- @for (step of props.steps; track step.value; let i = $index; let isLast = $last) {
132
+ @for (step of resolvedProps.steps; track step.value; let i = $index; let isLast = $last) {
107
133
  <div
108
134
  class="step"
109
135
  [class.current]="getStepStatus(step, i) === 'current'"
@@ -121,16 +147,16 @@ export class StepperComponent {
121
147
  <ion-icon name="close"></ion-icon>
122
148
  } @else if (step.icon) {
123
149
  <ion-icon [name]="step.icon"></ion-icon>
124
- } @else if (props.showNumbers !== false) {
150
+ } @else if (resolvedProps.showNumbers !== false) {
125
151
  <span class="step-number">{{ i + 1 }}</span>
126
152
  } @else {
127
153
  <ion-icon name="ellipse"></ion-icon>
128
154
  }
129
155
  </div>
130
- @if (!isLast && props.connectorStyle !== 'none') {
156
+ @if (!isLast && resolvedProps.connectorStyle !== 'none') {
131
157
  <div
132
158
  class="step-connector"
133
- [class.dashed]="props.connectorStyle === 'dashed'"
159
+ [class.dashed]="resolvedProps.connectorStyle === 'dashed'"
134
160
  [class.completed]="getStepStatus(step, i) === 'completed'"
135
161
  ></div>
136
162
  }
@@ -156,10 +182,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
156
182
  args: [{ selector: 'val-stepper', standalone: true, imports: [CommonModule, IonIcon], template: `
157
183
  <div
158
184
  class="stepper-container"
159
- [class.horizontal]="props.orientation !== 'vertical'"
160
- [class.vertical]="props.orientation === 'vertical'"
185
+ [class.horizontal]="resolvedProps.orientation !== 'vertical'"
186
+ [class.vertical]="resolvedProps.orientation === 'vertical'"
161
187
  >
162
- @for (step of props.steps; track step.value; let i = $index; let isLast = $last) {
188
+ @for (step of resolvedProps.steps; track step.value; let i = $index; let isLast = $last) {
163
189
  <div
164
190
  class="step"
165
191
  [class.current]="getStepStatus(step, i) === 'current'"
@@ -177,16 +203,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
177
203
  <ion-icon name="close"></ion-icon>
178
204
  } @else if (step.icon) {
179
205
  <ion-icon [name]="step.icon"></ion-icon>
180
- } @else if (props.showNumbers !== false) {
206
+ } @else if (resolvedProps.showNumbers !== false) {
181
207
  <span class="step-number">{{ i + 1 }}</span>
182
208
  } @else {
183
209
  <ion-icon name="ellipse"></ion-icon>
184
210
  }
185
211
  </div>
186
- @if (!isLast && props.connectorStyle !== 'none') {
212
+ @if (!isLast && resolvedProps.connectorStyle !== 'none') {
187
213
  <div
188
214
  class="step-connector"
189
- [class.dashed]="props.connectorStyle === 'dashed'"
215
+ [class.dashed]="resolvedProps.connectorStyle === 'dashed'"
190
216
  [class.completed]="getStepStatus(step, i) === 'completed'"
191
217
  ></div>
192
218
  }
@@ -206,9 +232,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
206
232
  }
207
233
  </div>
208
234
  `, styles: [":host{display:block}.stepper-container{display:flex}.stepper-container.horizontal{flex-direction:row;align-items:flex-start}.stepper-container.horizontal .step{flex:1;flex-direction:column;align-items:center;text-align:center}.stepper-container.horizontal .step .step-indicator{flex-direction:row;width:100%;justify-content:center}.stepper-container.horizontal .step .step-connector{flex:1;height:2px;margin:0 8px;align-self:center}.stepper-container.vertical{flex-direction:column}.stepper-container.vertical .step{flex-direction:row;align-items:flex-start}.stepper-container.vertical .step .step-indicator{flex-direction:column;align-items:center}.stepper-container.vertical .step .step-connector{width:2px;flex:1;min-height:24px;margin:8px 0}.stepper-container.vertical .step .step-content{margin-left:12px;padding-bottom:24px}.step{display:flex;cursor:default}.step.clickable{cursor:pointer}.step.clickable:hover .step-circle{transform:scale(1.1)}.step.disabled{opacity:.5;pointer-events:none}.step.current .step-circle{box-shadow:0 0 0 4px rgba(var(--ion-color-primary-rgb),.2)}.step-indicator{display:flex;position:relative}.step-circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;background-color:var(--step-color, var(--ion-color-medium));color:#fff;font-weight:600;font-size:14px;transition:transform .2s,box-shadow .2s;flex-shrink:0}.step-circle ion-icon{font-size:18px}.step-connector{background-color:var(--ion-color-light-shade);transition:background-color .3s}.step-connector.completed{background-color:var(--ion-color-primary)}.step-connector.dashed{background:repeating-linear-gradient(90deg,var(--ion-color-light-shade),var(--ion-color-light-shade) 4px,transparent 4px,transparent 8px)}.step-connector.dashed.completed{background:repeating-linear-gradient(90deg,var(--ion-color-primary),var(--ion-color-primary) 4px,transparent 4px,transparent 8px)}.step-content{margin-top:8px}.step-label{font-weight:500;font-size:14px;color:var(--ion-text-color)}.step-label .optional-text{font-weight:400;font-size:12px;color:var(--ion-color-medium);margin-left:4px}.step-description{font-size:12px;color:var(--ion-color-medium);margin-top:4px}\n"] }]
209
- }], propDecorators: { props: [{
235
+ }], propDecorators: { preset: [{
236
+ type: Input
237
+ }], props: [{
210
238
  type: Input
211
239
  }], stepChange: [{
212
240
  type: Output
213
241
  }] } });
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3N0ZXBwZXIvc3RlcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTNELFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQTZEeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQXpGN0I7UUE0RlksZUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0tBOEQ1RDtJQTVEQyxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWtCLEVBQUUsS0FBYTtRQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXBDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QyxJQUFJLEtBQUssR0FBRyxZQUFZO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDN0MsSUFBSSxLQUFLLEtBQUssWUFBWTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzdDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBa0IsRUFBRSxLQUFhO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQztRQUU1QyxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxXQUFXO2dCQUNkLE9BQU8sbUJBQW1CLEtBQUssR0FBRyxDQUFDO1lBQ3JDLEtBQUssU0FBUztnQkFDWixPQUFPLG1CQUFtQixLQUFLLEdBQUcsQ0FBQztZQUNyQyxLQUFLLE9BQU87Z0JBQ1YsT0FBTyx5QkFBeUIsQ0FBQztZQUNuQztnQkFDRSxPQUFPLHlCQUF5QixDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQWtCLEVBQUUsS0FBYTtRQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXBDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1Qyw4REFBOEQ7UUFDOUQsT0FBTyxLQUFLLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFrQixFQUFFLEtBQWE7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLElBQUksS0FBSyxLQUFLLFlBQVk7WUFBRSxPQUFPO1FBRW5DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25CLElBQUk7WUFDSixLQUFLO1lBQ0wsYUFBYSxFQUFFLFlBQVk7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFrQjtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQzsrR0FoRVUsZ0JBQWdCO21HQUFoQixnQkFBZ0IsMElBckZqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9EVCxtdUVBckRTLFlBQVksK0JBQUUsT0FBTzs7NEZBc0ZwQixnQkFBZ0I7a0JBekY1QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RUOzhCQWtDUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3RlcHBlck1ldGFkYXRhLCBTdGVwTWV0YWRhdGEsIFN0ZXBDaGFuZ2VFdmVudCwgU3RlcFN0YXR1cyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjaGVja21hcmssIGNsb3NlLCBlbGxpcHNlIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5hZGRJY29ucyh7IGNoZWNrbWFyaywgY2xvc2UsIGVsbGlwc2UgfSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1zdGVwcGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzdGVwcGVyLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3MuaG9yaXpvbnRhbF09XCJwcm9wcy5vcmllbnRhdGlvbiAhPT0gJ3ZlcnRpY2FsJ1wiXG4gICAgICBbY2xhc3MudmVydGljYWxdPVwicHJvcHMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgID5cbiAgICAgIEBmb3IgKHN0ZXAgb2YgcHJvcHMuc3RlcHM7IHRyYWNrIHN0ZXAudmFsdWU7IGxldCBpID0gJGluZGV4OyBsZXQgaXNMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RlcFwiXG4gICAgICAgICAgW2NsYXNzLmN1cnJlbnRdPVwiZ2V0U3RlcFN0YXR1cyhzdGVwLCBpKSA9PT0gJ2N1cnJlbnQnXCJcbiAgICAgICAgICBbY2xhc3MuY29tcGxldGVkXT1cImdldFN0ZXBTdGF0dXMoc3RlcCwgaSkgPT09ICdjb21wbGV0ZWQnXCJcbiAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiZ2V0U3RlcFN0YXR1cyhzdGVwLCBpKSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInN0ZXAuZGlzYWJsZWRcIlxuICAgICAgICAgIFtjbGFzcy5jbGlja2FibGVdPVwiaXNTdGVwQ2xpY2thYmxlKHN0ZXAsIGkpXCJcbiAgICAgICAgICAoY2xpY2spPVwib25TdGVwQ2xpY2soc3RlcCwgaSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1jaXJjbGVcIiBbc3R5bGUuLS1zdGVwLWNvbG9yXT1cImdldFN0ZXBDb2xvcihzdGVwLCBpKVwiPlxuICAgICAgICAgICAgICBAaWYgKGdldFN0ZXBTdGF0dXMoc3RlcCwgaSkgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGVja21hcmtcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIGlmIChnZXRTdGVwU3RhdHVzKHN0ZXAsIGkpID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHN0ZXAuaWNvbikge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJzdGVwLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIGlmIChwcm9wcy5zaG93TnVtYmVycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXAtbnVtYmVyXCI+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZWxsaXBzZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghaXNMYXN0ICYmIHByb3BzLmNvbm5lY3RvclN0eWxlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RlcC1jb25uZWN0b3JcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5kYXNoZWRdPVwicHJvcHMuY29ubmVjdG9yU3R5bGUgPT09ICdkYXNoZWQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY29tcGxldGVkXT1cImdldFN0ZXBTdGF0dXMoc3RlcCwgaSkgPT09ICdjb21wbGV0ZWQnXCJcbiAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWxhYmVsXCI+XG4gICAgICAgICAgICAgIHt7IGdldFN0ZXBMYWJlbChzdGVwKSB9fVxuICAgICAgICAgICAgICBAaWYgKHN0ZXAub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLXRleHRcIj4oT3B0aW9uYWwpPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoc3RlcC5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1kZXNjcmlwdGlvblwiPnt7IHN0ZXAuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3N0ZXBwZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1zdGVwcGVyXG4gKlxuICogQSBzdGVwcGVyIGNvbXBvbmVudCBmb3IgbXVsdGktc3RlcCBwcm9jZXNzZXMuXG4gKiBTdXBwb3J0cyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBvcmllbnRhdGlvbnMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIDx2YWwtc3RlcHBlciBbcHJvcHNdPVwie1xuICogICBzdGVwczogW1xuICogICAgIHsgdmFsdWU6ICdpbmZvJywgbGFiZWw6ICdQZXJzb25hbCBJbmZvJyB9LFxuICogICAgIHsgdmFsdWU6ICdhZGRyZXNzJywgbGFiZWw6ICdBZGRyZXNzJyB9LFxuICogICAgIHsgdmFsdWU6ICdwYXltZW50JywgbGFiZWw6ICdQYXltZW50JyB9LFxuICogICAgIHsgdmFsdWU6ICdjb25maXJtJywgbGFiZWw6ICdDb25maXJtJyB9XG4gKiAgIF0sXG4gKiAgIGN1cnJlbnRJbmRleDogMVxuICogfVwiIChzdGVwQ2hhbmdlKT1cIm9uU3RlcENoYW5nZSgkZXZlbnQpXCI+PC92YWwtc3RlcHBlcj5cbiAqXG4gKiBAZXhhbXBsZSBWZXJ0aWNhbCB3aXRoIGRlc2NyaXB0aW9uc1xuICogPHZhbC1zdGVwcGVyIFtwcm9wc109XCJ7XG4gKiAgIHN0ZXBzOiBbXG4gKiAgICAgeyB2YWx1ZTogJ3N0ZXAxJywgbGFiZWw6ICdTdGVwIDEnLCBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIGhlcmUnIH0sXG4gKiAgICAgeyB2YWx1ZTogJ3N0ZXAyJywgbGFiZWw6ICdTdGVwIDInLCBvcHRpb25hbDogdHJ1ZSB9XG4gKiAgIF0sXG4gKiAgIG9yaWVudGF0aW9uOiAndmVydGljYWwnLFxuICogICBjdXJyZW50SW5kZXg6IDBcbiAqIH1cIj48L3ZhbC1zdGVwcGVyPlxuICpcbiAqIEBpbnB1dCBwcm9wczogU3RlcHBlck1ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIHN0ZXBwZXJcbiAqIEBvdXRwdXQgc3RlcENoYW5nZTogU3RlcENoYW5nZUV2ZW50IC0gRW1pdHMgd2hlbiBzdGVwIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFN0ZXBwZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBwcm9wczogU3RlcHBlck1ldGFkYXRhO1xuXG4gIEBPdXRwdXQoKSBzdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTdGVwQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgZ2V0Q3VycmVudEluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMucHJvcHMuY3VycmVudEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmN1cnJlbnRJbmRleDtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY3VycmVudFN0ZXApIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLnN0ZXBzLmZpbmRJbmRleCgocykgPT4gcy52YWx1ZSA9PT0gdGhpcy5wcm9wcy5jdXJyZW50U3RlcCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0U3RlcFN0YXR1cyhzdGVwOiBTdGVwTWV0YWRhdGEsIGluZGV4OiBudW1iZXIpOiBTdGVwU3RhdHVzIHtcbiAgICBpZiAoc3RlcC5zdGF0dXMpIHJldHVybiBzdGVwLnN0YXR1cztcblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG4gICAgaWYgKGluZGV4IDwgY3VycmVudEluZGV4KSByZXR1cm4gJ2NvbXBsZXRlZCc7XG4gICAgaWYgKGluZGV4ID09PSBjdXJyZW50SW5kZXgpIHJldHVybiAnY3VycmVudCc7XG4gICAgcmV0dXJuICdwZW5kaW5nJztcbiAgfVxuXG4gIGdldFN0ZXBDb2xvcihzdGVwOiBTdGVwTWV0YWRhdGEsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZ2V0U3RlcFN0YXR1cyhzdGVwLCBpbmRleCk7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLnByb3BzLmNvbG9yIHx8ICdwcmltYXJ5JztcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICByZXR1cm4gYHZhcigtLWlvbi1jb2xvci0ke2NvbG9yfSlgO1xuICAgICAgY2FzZSAnY3VycmVudCc6XG4gICAgICAgIHJldHVybiBgdmFyKC0taW9uLWNvbG9yLSR7Y29sb3J9KWA7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiAndmFyKC0taW9uLWNvbG9yLWRhbmdlciknO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd2YXIoLS1pb24tY29sb3ItbWVkaXVtKSc7XG4gICAgfVxuICB9XG5cbiAgaXNTdGVwQ2xpY2thYmxlKHN0ZXA6IFN0ZXBNZXRhZGF0YSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChzdGVwLmRpc2FibGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnByb3BzLmxpbmVhcikgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmdldEN1cnJlbnRJbmRleCgpO1xuICAgIC8vIEluIGxpbmVhciBtb2RlLCBjYW4gb25seSBnbyB0byBjb21wbGV0ZWQgc3RlcHMgb3IgbmV4dCBzdGVwXG4gICAgcmV0dXJuIGluZGV4IDw9IGN1cnJlbnRJbmRleCB8fCAoc3RlcC5lZGl0YWJsZSAmJiBpbmRleCA8IGN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBvblN0ZXBDbGljayhzdGVwOiBTdGVwTWV0YWRhdGEsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdGVwQ2xpY2thYmxlKHN0ZXAsIGluZGV4KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDdXJyZW50SW5kZXgoKTtcbiAgICBpZiAoaW5kZXggPT09IGN1cnJlbnRJbmRleCkgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoe1xuICAgICAgc3RlcCxcbiAgICAgIGluZGV4LFxuICAgICAgcHJldmlvdXNJbmRleDogY3VycmVudEluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3RlcExhYmVsKHN0ZXA6IFN0ZXBNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ZXAubGFiZWwgfHwgc3RlcC5jb250ZW50RmFsbGJhY2sgfHwgJyc7XG4gIH1cbn1cbiJdfQ==
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3N0ZXBwZXIvc3RlcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUUzRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUE2RHhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUF6RjdCO1FBMEZVLFlBQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFReEM7O1dBRUc7UUFDTSxVQUFLLEdBQTZCLEVBQUUsQ0FBQztRQUU5Qzs7V0FFRztRQUNILGtCQUFhLEdBQW9CLEVBQXFCLENBQUM7UUFFN0MsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0tBa0Y1RDtJQWhGQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxD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YUFBYSxFQUFFLFlBQVk7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFrQjtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQzsrR0FwR1UsZ0JBQWdCO21HQUFoQixnQkFBZ0IsaUxBckZqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9EVCxtdUVBckRTLFlBQVksK0JBQUUsT0FBTzs7NEZBc0ZwQixnQkFBZ0I7a0JBekY1QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RUOzhCQXdDUSxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQU9JLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZXRzJztcbmltcG9ydCB7IFN0ZXBwZXJNZXRhZGF0YSwgU3RlcE1ldGFkYXRhLCBTdGVwQ2hhbmdlRXZlbnQsIFN0ZXBTdGF0dXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hlY2ttYXJrLCBjbG9zZSwgZWxsaXBzZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuYWRkSWNvbnMoeyBjaGVja21hcmssIGNsb3NlLCBlbGxpcHNlIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtc3RlcHBlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkljb25dLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic3RlcHBlci1jb250YWluZXJcIlxuICAgICAgW2NsYXNzLmhvcml6b250YWxdPVwicmVzb2x2ZWRQcm9wcy5vcmllbnRhdGlvbiAhPT0gJ3ZlcnRpY2FsJ1wiXG4gICAgICBbY2xhc3MudmVydGljYWxdPVwicmVzb2x2ZWRQcm9wcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJ1wiXG4gICAgPlxuICAgICAgQGZvciAoc3RlcCBvZiByZXNvbHZlZFByb3BzLnN0ZXBzOyB0cmFjayBzdGVwLnZhbHVlOyBsZXQgaSA9ICRpbmRleDsgbGV0IGlzTGFzdCA9ICRsYXN0KSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ZXBcIlxuICAgICAgICAgIFtjbGFzcy5jdXJyZW50XT1cImdldFN0ZXBTdGF0dXMoc3RlcCwgaSkgPT09ICdjdXJyZW50J1wiXG4gICAgICAgICAgW2NsYXNzLmNvbXBsZXRlZF09XCJnZXRTdGVwU3RhdHVzKHN0ZXAsIGkpID09PSAnY29tcGxldGVkJ1wiXG4gICAgICAgICAgW2NsYXNzLmVycm9yXT1cImdldFN0ZXBTdGF0dXMoc3RlcCwgaSkgPT09ICdlcnJvcidcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJzdGVwLmRpc2FibGVkXCJcbiAgICAgICAgICBbY2xhc3MuY2xpY2thYmxlXT1cImlzU3RlcENsaWNrYWJsZShzdGVwLCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3RlcENsaWNrKHN0ZXAsIGkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtY2lyY2xlXCIgW3N0eWxlLi0tc3RlcC1jb2xvcl09XCJnZXRTdGVwQ29sb3Ioc3RlcCwgaSlcIj5cbiAgICAgICAgICAgICAgQGlmIChnZXRTdGVwU3RhdHVzKHN0ZXAsIGkpID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoZ2V0U3RlcFN0YXR1cyhzdGVwLCBpKSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIGlmIChzdGVwLmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwic3RlcC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAocmVzb2x2ZWRQcm9wcy5zaG93TnVtYmVycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXAtbnVtYmVyXCI+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZWxsaXBzZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghaXNMYXN0ICYmIHJlc29sdmVkUHJvcHMuY29ubmVjdG9yU3R5bGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdGVwLWNvbm5lY3RvclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRhc2hlZF09XCJyZXNvbHZlZFByb3BzLmNvbm5lY3RvclN0eWxlID09PSAnZGFzaGVkJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmNvbXBsZXRlZF09XCJnZXRTdGVwU3RhdHVzKHN0ZXAsIGkpID09PSAnY29tcGxldGVkJ1wiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyBnZXRTdGVwTGFiZWwoc3RlcCkgfX1cbiAgICAgICAgICAgICAgQGlmIChzdGVwLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb25hbC10ZXh0XCI+KE9wdGlvbmFsKTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKHN0ZXAuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXAtZGVzY3JpcHRpb25cIj57eyBzdGVwLmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9zdGVwcGVyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtc3RlcHBlclxuICpcbiAqIEEgc3RlcHBlciBjb21wb25lbnQgZm9yIG11bHRpLXN0ZXAgcHJvY2Vzc2VzLlxuICogU3VwcG9ydHMgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb3JpZW50YXRpb25zLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiA8dmFsLXN0ZXBwZXIgW3Byb3BzXT1cIntcbiAqICAgc3RlcHM6IFtcbiAqICAgICB7IHZhbHVlOiAnaW5mbycsIGxhYmVsOiAnUGVyc29uYWwgSW5mbycgfSxcbiAqICAgICB7IHZhbHVlOiAnYWRkcmVzcycsIGxhYmVsOiAnQWRkcmVzcycgfSxcbiAqICAgICB7IHZhbHVlOiAncGF5bWVudCcsIGxhYmVsOiAnUGF5bWVudCcgfSxcbiAqICAgICB7IHZhbHVlOiAnY29uZmlybScsIGxhYmVsOiAnQ29uZmlybScgfVxuICogICBdLFxuICogICBjdXJyZW50SW5kZXg6IDFcbiAqIH1cIiAoc3RlcENoYW5nZSk9XCJvblN0ZXBDaGFuZ2UoJGV2ZW50KVwiPjwvdmFsLXN0ZXBwZXI+XG4gKlxuICogQGV4YW1wbGUgVmVydGljYWwgd2l0aCBkZXNjcmlwdGlvbnNcbiAqIDx2YWwtc3RlcHBlciBbcHJvcHNdPVwie1xuICogICBzdGVwczogW1xuICogICAgIHsgdmFsdWU6ICdzdGVwMScsIGxhYmVsOiAnU3RlcCAxJywgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbiBoZXJlJyB9LFxuICogICAgIHsgdmFsdWU6ICdzdGVwMicsIGxhYmVsOiAnU3RlcCAyJywgb3B0aW9uYWw6IHRydWUgfVxuICogICBdLFxuICogICBvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyxcbiAqICAgY3VycmVudEluZGV4OiAwXG4gKiB9XCI+PC92YWwtc3RlcHBlcj5cbiAqXG4gKiBAaW5wdXQgcHJvcHM6IFN0ZXBwZXJNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdGVwcGVyXG4gKiBAb3V0cHV0IHN0ZXBDaGFuZ2U6IFN0ZXBDaGFuZ2VFdmVudCAtIEVtaXRzIHdoZW4gc3RlcCBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGVwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSBzdGVwcGVyIGNvbmZpZ3VyYXRpb25zXG4gICAqIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQgYXQgYXBwIGxldmVsIHZpYSBwcm92aWRlVmFsdGVjaFByZXNldHMoKS5cbiAgICovXG4gIEBJbnB1dCgpIHByZXNldD86IHN0cmluZztcblxuICAvKipcbiAgICogU3RlcHBlciBjb25maWd1cmF0aW9uIG9iamVjdC4gVmFsdWVzIGhlcmUgb3ZlcnJpZGUgcHJlc2V0IHZhbHVlcy5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPFN0ZXBwZXJNZXRhZGF0YT4gPSB7fTtcblxuICAvKipcbiAgICogUmVzb2x2ZWQgcHJvcHMgYWZ0ZXIgbWVyZ2luZyBwcmVzZXQgKyBleHBsaWNpdCBwcm9wcy5cbiAgICovXG4gIHJlc29sdmVkUHJvcHM6IFN0ZXBwZXJNZXRhZGF0YSA9IHt9IGFzIFN0ZXBwZXJNZXRhZGF0YTtcblxuICBAT3V0cHV0KCkgc3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U3RlcENoYW5nZUV2ZW50PigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzb2x2ZVByb3BzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ3ByZXNldCddIHx8IGNoYW5nZXNbJ3Byb3BzJ10pIHtcbiAgICAgIHRoaXMucmVzb2x2ZVByb3BzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUHJvcHMoKTogdm9pZCB7XG4gICAgY29uc3QgcHJlc2V0UHJvcHMgPSB0aGlzLnByZXNldFxuICAgICAgPyAodGhpcy5wcmVzZXRzLmdldCgnc3RlcHBlcicsIHRoaXMucHJlc2V0KSBhcyBQYXJ0aWFsPFN0ZXBwZXJNZXRhZGF0YT4pXG4gICAgICA6IHt9O1xuXG4gICAgdGhpcy5yZXNvbHZlZFByb3BzID0ge1xuICAgICAgLi4ucHJlc2V0UHJvcHMsXG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgIH0gYXMgU3RlcHBlck1ldGFkYXRhO1xuICB9XG5cbiAgZ2V0Q3VycmVudEluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRQcm9wcy5jdXJyZW50SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRQcm9wcy5jdXJyZW50SW5kZXg7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc29sdmVkUHJvcHMuY3VycmVudFN0ZXApIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVkUHJvcHMuc3RlcHM/LmZpbmRJbmRleCgocykgPT4gcy52YWx1ZSA9PT0gdGhpcy5yZXNvbHZlZFByb3BzLmN1cnJlbnRTdGVwKSA/PyAwO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldFN0ZXBTdGF0dXMoc3RlcDogU3RlcE1ldGFkYXRhLCBpbmRleDogbnVtYmVyKTogU3RlcFN0YXR1cyB7XG4gICAgaWYgKHN0ZXAuc3RhdHVzKSByZXR1cm4gc3RlcC5zdGF0dXM7XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmdldEN1cnJlbnRJbmRleCgpO1xuICAgIGlmIChpbmRleCA8IGN1cnJlbnRJbmRleCkgcmV0dXJuICdjb21wbGV0ZWQnO1xuICAgIGlmIChpbmRleCA9PT0gY3VycmVudEluZGV4KSByZXR1cm4gJ2N1cnJlbnQnO1xuICAgIHJldHVybiAncGVuZGluZyc7XG4gIH1cblxuICBnZXRTdGVwQ29sb3Ioc3RlcDogU3RlcE1ldGFkYXRhLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmdldFN0ZXBTdGF0dXMoc3RlcCwgaW5kZXgpO1xuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5yZXNvbHZlZFByb3BzLmNvbG9yIHx8ICdwcmltYXJ5JztcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICByZXR1cm4gYHZhcigtLWlvbi1jb2xvci0ke2NvbG9yfSlgO1xuICAgICAgY2FzZSAnY3VycmVudCc6XG4gICAgICAgIHJldHVybiBgdmFyKC0taW9uLWNvbG9yLSR7Y29sb3J9KWA7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiAndmFyKC0taW9uLWNvbG9yLWRhbmdlciknO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd2YXIoLS1pb24tY29sb3ItbWVkaXVtKSc7XG4gICAgfVxuICB9XG5cbiAgaXNTdGVwQ2xpY2thYmxlKHN0ZXA6IFN0ZXBNZXRhZGF0YSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChzdGVwLmRpc2FibGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnJlc29sdmVkUHJvcHMubGluZWFyKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4KCk7XG4gICAgcmV0dXJuIGluZGV4IDw9IGN1cnJlbnRJbmRleCB8fCAoc3RlcC5lZGl0YWJsZSAmJiBpbmRleCA8IGN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBvblN0ZXBDbGljayhzdGVwOiBTdGVwTWV0YWRhdGEsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNTdGVwQ2xpY2thYmxlKHN0ZXAsIGluZGV4KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5nZXRDdXJyZW50SW5kZXgoKTtcbiAgICBpZiAoaW5kZXggPT09IGN1cnJlbnRJbmRleCkgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoe1xuICAgICAgc3RlcCxcbiAgICAgIGluZGV4LFxuICAgICAgcHJldmlvdXNJbmRleDogY3VycmVudEluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3RlcExhYmVsKHN0ZXA6IFN0ZXBNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ZXAubGFiZWwgfHwgc3RlcC5jb250ZW50RmFsbGJhY2sgfHwgJyc7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,7 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
1
+ import { Component, inject, Input, Output, EventEmitter } from '@angular/core';
2
2
  import { IonTabBar, IonTabButton, IonIcon, IonLabel, IonBadge } from '@ionic/angular/standalone';
3
3
  import { CommonModule } from '@angular/common';
4
+ import { PresetService } from '../../../services/presets';
4
5
  import { addIcons } from 'ionicons';
5
6
  import { home, settings, person, search, heart, star, notifications, mail, calendar, folder } from 'ionicons/icons';
6
7
  import * as i0 from "@angular/core";
@@ -9,8 +10,12 @@ addIcons({ home, settings, person, search, heart, star, notifications, mail, cal
9
10
  * val-tabs
10
11
  *
11
12
  * A tab bar component for navigation between views.
13
+ * Supports presets for reusable configurations.
12
14
  *
13
- * @example
15
+ * @example With preset (recommended):
16
+ * <val-tabs preset="main-nav" [props]="{ tabs: [...], selectedTab: 'home' }" (tabChange)="onTabChange($event)"></val-tabs>
17
+ *
18
+ * @example Static (backwards compatible):
14
19
  * <val-tabs [props]="{
15
20
  * tabs: [
16
21
  * { value: 'home', label: 'Inicio', icon: 'home' },
@@ -20,13 +25,44 @@ addIcons({ home, settings, person, search, heart, star, notifications, mail, cal
20
25
  * selectedTab: 'home'
21
26
  * }" (tabChange)="onTabChange($event)"></val-tabs>
22
27
  *
28
+ * @input preset: string - Name of preset to apply
23
29
  * @input props: TabsMetadata - Configuration for the tabs
24
30
  * @output tabChange: TabMetadata - Emits when a tab is selected
25
31
  */
26
32
  export class TabsComponent {
27
33
  constructor() {
34
+ this.presets = inject(PresetService);
35
+ /**
36
+ * Tabs configuration object. Values here override preset values.
37
+ */
38
+ this.props = {};
39
+ /**
40
+ * Resolved props after merging preset + explicit props.
41
+ */
42
+ this.resolvedProps = {};
28
43
  this.tabChange = new EventEmitter();
29
44
  }
45
+ ngOnInit() {
46
+ this.resolveProps();
47
+ }
48
+ ngOnChanges(changes) {
49
+ if (changes['preset'] || changes['props']) {
50
+ this.resolveProps();
51
+ }
52
+ }
53
+ /**
54
+ * Merge preset configuration with explicit props.
55
+ * Explicit props take precedence over preset values.
56
+ */
57
+ resolveProps() {
58
+ const presetProps = this.preset
59
+ ? this.presets.get('tabs', this.preset)
60
+ : {};
61
+ this.resolvedProps = {
62
+ ...presetProps,
63
+ ...this.props,
64
+ };
65
+ }
30
66
  onTabClick(tab) {
31
67
  if (!tab.disabled) {
32
68
  this.tabChange.emit(tab);
@@ -36,24 +72,24 @@ export class TabsComponent {
36
72
  return tab.label || tab.contentFallback || '';
37
73
  }
38
74
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TabsComponent, isStandalone: true, selector: "val-tabs", inputs: { props: "props" }, outputs: { tabChange: "tabChange" }, ngImport: i0, template: `
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TabsComponent, isStandalone: true, selector: "val-tabs", inputs: { preset: "preset", props: "props" }, outputs: { tabChange: "tabChange" }, usesOnChanges: true, ngImport: i0, template: `
40
76
  <ion-tab-bar
41
- [color]="props.color"
42
- [mode]="props.mode"
43
- [translucent]="props.translucent ?? false"
44
- [selectedTab]="props.selectedTab || props.tabs[0]?.value"
77
+ [color]="resolvedProps.color"
78
+ [mode]="resolvedProps.mode"
79
+ [translucent]="resolvedProps.translucent ?? false"
80
+ [selectedTab]="resolvedProps.selectedTab || resolvedProps.tabs?.[0]?.value"
45
81
  >
46
- @for (tab of props.tabs; track tab.value) {
82
+ @for (tab of resolvedProps.tabs; track tab.value) {
47
83
  <ion-tab-button
48
84
  [tab]="tab.value"
49
85
  [disabled]="tab.disabled"
50
- [layout]="props.layout || 'icon-top'"
86
+ [layout]="resolvedProps.layout || 'icon-top'"
51
87
  (click)="onTabClick(tab)"
52
88
  >
53
- @if (tab.icon && props.layout !== 'icon-hide') {
89
+ @if (tab.icon && resolvedProps.layout !== 'icon-hide') {
54
90
  <ion-icon [name]="tab.icon"></ion-icon>
55
91
  }
56
- @if (getTabLabel(tab) && props.layout !== 'label-hide') {
92
+ @if (getTabLabel(tab) && resolvedProps.layout !== 'label-hide') {
57
93
  <ion-label>{{ getTabLabel(tab) }}</ion-label>
58
94
  }
59
95
  @if (tab.badge) {
@@ -68,22 +104,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68
104
  type: Component,
69
105
  args: [{ selector: 'val-tabs', standalone: true, imports: [CommonModule, IonTabBar, IonTabButton, IonIcon, IonLabel, IonBadge], template: `
70
106
  <ion-tab-bar
71
- [color]="props.color"
72
- [mode]="props.mode"
73
- [translucent]="props.translucent ?? false"
74
- [selectedTab]="props.selectedTab || props.tabs[0]?.value"
107
+ [color]="resolvedProps.color"
108
+ [mode]="resolvedProps.mode"
109
+ [translucent]="resolvedProps.translucent ?? false"
110
+ [selectedTab]="resolvedProps.selectedTab || resolvedProps.tabs?.[0]?.value"
75
111
  >
76
- @for (tab of props.tabs; track tab.value) {
112
+ @for (tab of resolvedProps.tabs; track tab.value) {
77
113
  <ion-tab-button
78
114
  [tab]="tab.value"
79
115
  [disabled]="tab.disabled"
80
- [layout]="props.layout || 'icon-top'"
116
+ [layout]="resolvedProps.layout || 'icon-top'"
81
117
  (click)="onTabClick(tab)"
82
118
  >
83
- @if (tab.icon && props.layout !== 'icon-hide') {
119
+ @if (tab.icon && resolvedProps.layout !== 'icon-hide') {
84
120
  <ion-icon [name]="tab.icon"></ion-icon>
85
121
  }
86
- @if (getTabLabel(tab) && props.layout !== 'label-hide') {
122
+ @if (getTabLabel(tab) && resolvedProps.layout !== 'label-hide') {
87
123
  <ion-label>{{ getTabLabel(tab) }}</ion-label>
88
124
  }
89
125
  @if (tab.badge) {
@@ -93,9 +129,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
93
129
  }
94
130
  </ion-tab-bar>
95
131
  `, styles: [":host{display:block}ion-tab-bar{--background: var(--ion-background-color);--border: 1px solid var(--ion-color-light-shade);border-radius:0}ion-tab-button{--color: var(--ion-color-medium);--color-selected: var(--ion-color-primary);--padding-top: 8px;--padding-bottom: 8px}ion-tab-button ion-icon{font-size:22px}ion-tab-button ion-label{font-size:12px;font-weight:500;text-transform:none}ion-tab-button ion-badge{position:absolute;top:4px;right:calc(50% - 20px);font-size:10px;padding:2px 6px;min-width:16px}\n"] }]
96
- }], propDecorators: { props: [{
132
+ }], propDecorators: { preset: [{
133
+ type: Input
134
+ }], props: [{
97
135
  type: Input
98
136
  }], tabChange: [{
99
137
  type: Output
100
138
  }] } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3RhYnMvdGFicy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFcEgsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQW1Dakc7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFuRDFCO1FBc0RZLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0tBV3ZEO0lBVEMsVUFBVSxDQUFDLEdBQWdCO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsR0FBZ0I7UUFDMUIsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO0lBQ2hELENBQUM7K0dBYlUsYUFBYTttR0FBYixhQUFhLHFJQS9DZDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQscWtCQTNCUyxZQUFZLCtCQUFFLFNBQVMsaUhBQUUsWUFBWSwySkFBRSxPQUFPLDJKQUFFLFFBQVEsNkZBQUUsUUFBUTs7NEZBZ0RqRSxhQUFhO2tCQW5EekIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsWUFDbkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUOzhCQXNCUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25UYWJCYXIsIElvblRhYkJ1dHRvbiwgSW9uSWNvbiwgSW9uTGFiZWwsIElvbkJhZGdlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGFic01ldGFkYXRhLCBUYWJNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBob21lLCBzZXR0aW5ncywgcGVyc29uLCBzZWFyY2gsIGhlYXJ0LCBzdGFyLCBub3RpZmljYXRpb25zLCBtYWlsLCBjYWxlbmRhciwgZm9sZGVyIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5hZGRJY29ucyh7IGhvbWUsIHNldHRpbmdzLCBwZXJzb24sIHNlYXJjaCwgaGVhcnQsIHN0YXIsIG5vdGlmaWNhdGlvbnMsIG1haWwsIGNhbGVuZGFyLCBmb2xkZXIgfSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC10YWJzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uVGFiQmFyLCBJb25UYWJCdXR0b24sIElvbkljb24sIElvbkxhYmVsLCBJb25CYWRnZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi10YWItYmFyXG4gICAgICBbY29sb3JdPVwicHJvcHMuY29sb3JcIlxuICAgICAgW21vZGVdPVwicHJvcHMubW9kZVwiXG4gICAgICBbdHJhbnNsdWNlbnRdPVwicHJvcHMudHJhbnNsdWNlbnQgPz8gZmFsc2VcIlxuICAgICAgW3NlbGVjdGVkVGFiXT1cInByb3BzLnNlbGVjdGVkVGFiIHx8IHByb3BzLnRhYnNbMF0/LnZhbHVlXCJcbiAgICA+XG4gICAgICBAZm9yICh0YWIgb2YgcHJvcHMudGFiczsgdHJhY2sgdGFiLnZhbHVlKSB7XG4gICAgICAgIDxpb24tdGFiLWJ1dHRvblxuICAgICAgICAgIFt0YWJdPVwidGFiLnZhbHVlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGFiLmRpc2FibGVkXCJcbiAgICAgICAgICBbbGF5b3V0XT1cInByb3BzLmxheW91dCB8fCAnaWNvbi10b3AnXCJcbiAgICAgICAgICAoY2xpY2spPVwib25UYWJDbGljayh0YWIpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBpZiAodGFiLmljb24gJiYgcHJvcHMubGF5b3V0ICE9PSAnaWNvbi1oaWRlJykge1xuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInRhYi5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChnZXRUYWJMYWJlbCh0YWIpICYmIHByb3BzLmxheW91dCAhPT0gJ2xhYmVsLWhpZGUnKSB7XG4gICAgICAgICAgICA8aW9uLWxhYmVsPnt7IGdldFRhYkxhYmVsKHRhYikgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICh0YWIuYmFkZ2UpIHtcbiAgICAgICAgICAgIDxpb24tYmFkZ2UgW2NvbG9yXT1cInRhYi5iYWRnZUNvbG9yIHx8ICdkYW5nZXInXCI+e3sgdGFiLmJhZGdlIH19PC9pb24tYmFkZ2U+XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi10YWItYnV0dG9uPlxuICAgICAgfVxuICAgIDwvaW9uLXRhYi1iYXI+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC10YWJzXG4gKlxuICogQSB0YWIgYmFyIGNvbXBvbmVudCBmb3IgbmF2aWdhdGlvbiBiZXR3ZWVuIHZpZXdzLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLXRhYnMgW3Byb3BzXT1cIntcbiAqICAgdGFiczogW1xuICogICAgIHsgdmFsdWU6ICdob21lJywgbGFiZWw6ICdJbmljaW8nLCBpY29uOiAnaG9tZScgfSxcbiAqICAgICB7IHZhbHVlOiAnc2VhcmNoJywgbGFiZWw6ICdCdXNjYXInLCBpY29uOiAnc2VhcmNoJyB9LFxuICogICAgIHsgdmFsdWU6ICdwcm9maWxlJywgbGFiZWw6ICdQZXJmaWwnLCBpY29uOiAncGVyc29uJyB9XG4gKiAgIF0sXG4gKiAgIHNlbGVjdGVkVGFiOiAnaG9tZSdcbiAqIH1cIiAodGFiQ2hhbmdlKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIj48L3ZhbC10YWJzPlxuICpcbiAqIEBpbnB1dCBwcm9wczogVGFic01ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIHRhYnNcbiAqIEBvdXRwdXQgdGFiQ2hhbmdlOiBUYWJNZXRhZGF0YSAtIEVtaXRzIHdoZW4gYSB0YWIgaXMgc2VsZWN0ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQge1xuICBASW5wdXQoKSBwcm9wczogVGFic01ldGFkYXRhO1xuXG4gIEBPdXRwdXQoKSB0YWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYk1ldGFkYXRhPigpO1xuXG4gIG9uVGFiQ2xpY2sodGFiOiBUYWJNZXRhZGF0YSk6IHZvaWQge1xuICAgIGlmICghdGFiLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnRhYkNoYW5nZS5lbWl0KHRhYik7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGFiTGFiZWwodGFiOiBUYWJNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRhYi5sYWJlbCB8fCB0YWIuY29udGVudEZhbGxiYWNrIHx8ICcnO1xuICB9XG59XG4iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3RhYnMvdGFicy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXBILFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFtQ2pHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUF4RDFCO1FBeURVLFlBQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFXeEM7O1dBRUc7UUFDTSxVQUFLLEdBQTBCLEVBQUUsQ0FBQztRQUUzQzs7V0FFRztRQUNILGtCQUFhLEdBQWlCLEVBQWtCLENBQUM7UUFFdkMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7S0FvQ3ZEO0lBbENDLFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxZQUFZO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQzdCLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBMkI7WUFDbEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsR0FBRyxXQUFXO1lBQ2QsR0FBRyxJQUFJLENBQUMsS0FBSztTQUNFLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFnQjtRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQWdCO1FBQzFCLE9BQU8sR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDOytHQXpEVSxhQUFhO21HQUFiLGFBQWEsNEtBcERkOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVCxxa0JBM0JTLFlBQVksK0JBQUUsU0FBUyxpSEFBRSxZQUFZLDJKQUFFLE9BQU8sMkpBQUUsUUFBUSw2RkFBRSxRQUFROzs0RkFxRGpFLGFBQWE7a0JBeER6QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxZQUNuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQ7OEJBb0NRLE1BQU07c0JBQWQsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBT0ksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25UYWJCYXIsIElvblRhYkJ1dHRvbiwgSW9uSWNvbiwgSW9uTGFiZWwsIElvbkJhZGdlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNldHMnO1xuaW1wb3J0IHsgVGFic01ldGFkYXRhLCBUYWJNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBob21lLCBzZXR0aW5ncywgcGVyc29uLCBzZWFyY2gsIGhlYXJ0LCBzdGFyLCBub3RpZmljYXRpb25zLCBtYWlsLCBjYWxlbmRhciwgZm9sZGVyIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5hZGRJY29ucyh7IGhvbWUsIHNldHRpbmdzLCBwZXJzb24sIHNlYXJjaCwgaGVhcnQsIHN0YXIsIG5vdGlmaWNhdGlvbnMsIG1haWwsIGNhbGVuZGFyLCBmb2xkZXIgfSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC10YWJzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uVGFiQmFyLCBJb25UYWJCdXR0b24sIElvbkljb24sIElvbkxhYmVsLCBJb25CYWRnZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi10YWItYmFyXG4gICAgICBbY29sb3JdPVwicmVzb2x2ZWRQcm9wcy5jb2xvclwiXG4gICAgICBbbW9kZV09XCJyZXNvbHZlZFByb3BzLm1vZGVcIlxuICAgICAgW3RyYW5zbHVjZW50XT1cInJlc29sdmVkUHJvcHMudHJhbnNsdWNlbnQgPz8gZmFsc2VcIlxuICAgICAgW3NlbGVjdGVkVGFiXT1cInJlc29sdmVkUHJvcHMuc2VsZWN0ZWRUYWIgfHwgcmVzb2x2ZWRQcm9wcy50YWJzPy5bMF0/LnZhbHVlXCJcbiAgICA+XG4gICAgICBAZm9yICh0YWIgb2YgcmVzb2x2ZWRQcm9wcy50YWJzOyB0cmFjayB0YWIudmFsdWUpIHtcbiAgICAgICAgPGlvbi10YWItYnV0dG9uXG4gICAgICAgICAgW3RhYl09XCJ0YWIudmFsdWVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0YWIuZGlzYWJsZWRcIlxuICAgICAgICAgIFtsYXlvdXRdPVwicmVzb2x2ZWRQcm9wcy5sYXlvdXQgfHwgJ2ljb24tdG9wJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uVGFiQ2xpY2sodGFiKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHRhYi5pY29uICYmIHJlc29sdmVkUHJvcHMubGF5b3V0ICE9PSAnaWNvbi1oaWRlJykge1xuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInRhYi5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChnZXRUYWJMYWJlbCh0YWIpICYmIHJlc29sdmVkUHJvcHMubGF5b3V0ICE9PSAnbGFiZWwtaGlkZScpIHtcbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgZ2V0VGFiTGFiZWwodGFiKSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHRhYi5iYWRnZSkge1xuICAgICAgICAgICAgPGlvbi1iYWRnZSBbY29sb3JdPVwidGFiLmJhZGdlQ29sb3IgfHwgJ2RhbmdlcidcIj57eyB0YWIuYmFkZ2UgfX08L2lvbi1iYWRnZT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLXRhYi1idXR0b24+XG4gICAgICB9XG4gICAgPC9pb24tdGFiLWJhcj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vdGFicy5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLXRhYnNcbiAqXG4gKiBBIHRhYiBiYXIgY29tcG9uZW50IGZvciBuYXZpZ2F0aW9uIGJldHdlZW4gdmlld3MuXG4gKiBTdXBwb3J0cyBwcmVzZXRzIGZvciByZXVzYWJsZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHByZXNldCAocmVjb21tZW5kZWQpOlxuICogPHZhbC10YWJzIHByZXNldD1cIm1haW4tbmF2XCIgW3Byb3BzXT1cInsgdGFiczogWy4uLl0sIHNlbGVjdGVkVGFiOiAnaG9tZScgfVwiICh0YWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiPjwvdmFsLXRhYnM+XG4gKlxuICogQGV4YW1wbGUgU3RhdGljIChiYWNrd2FyZHMgY29tcGF0aWJsZSk6XG4gKiA8dmFsLXRhYnMgW3Byb3BzXT1cIntcbiAqICAgdGFiczogW1xuICogICAgIHsgdmFsdWU6ICdob21lJywgbGFiZWw6ICdJbmljaW8nLCBpY29uOiAnaG9tZScgfSxcbiAqICAgICB7IHZhbHVlOiAnc2VhcmNoJywgbGFiZWw6ICdCdXNjYXInLCBpY29uOiAnc2VhcmNoJyB9LFxuICogICAgIHsgdmFsdWU6ICdwcm9maWxlJywgbGFiZWw6ICdQZXJmaWwnLCBpY29uOiAncGVyc29uJyB9XG4gKiAgIF0sXG4gKiAgIHNlbGVjdGVkVGFiOiAnaG9tZSdcbiAqIH1cIiAodGFiQ2hhbmdlKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIj48L3ZhbC10YWJzPlxuICpcbiAqIEBpbnB1dCBwcmVzZXQ6IHN0cmluZyAtIE5hbWUgb2YgcHJlc2V0IHRvIGFwcGx5XG4gKiBAaW5wdXQgcHJvcHM6IFRhYnNNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YWJzXG4gKiBAb3V0cHV0IHRhYkNoYW5nZTogVGFiTWV0YWRhdGEgLSBFbWl0cyB3aGVuIGEgdGFiIGlzIHNlbGVjdGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSB0YWJzIGNvbmZpZ3VyYXRpb25zXG4gICAqIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQgYXQgYXBwIGxldmVsIHZpYSBwcm92aWRlVmFsdGVjaFByZXNldHMoKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHZhbC10YWJzIHByZXNldD1cIm1haW4tbmF2XCIgW3Byb3BzXT1cInsgdGFiczogWy4uLl0gfVwiPjwvdmFsLXRhYnM+XG4gICAqL1xuICBASW5wdXQoKSBwcmVzZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhYnMgY29uZmlndXJhdGlvbiBvYmplY3QuIFZhbHVlcyBoZXJlIG92ZXJyaWRlIHByZXNldCB2YWx1ZXMuXG4gICAqL1xuICBASW5wdXQoKSBwcm9wczogUGFydGlhbDxUYWJzTWV0YWRhdGE+ID0ge307XG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIHByb3BzIGFmdGVyIG1lcmdpbmcgcHJlc2V0ICsgZXhwbGljaXQgcHJvcHMuXG4gICAqL1xuICByZXNvbHZlZFByb3BzOiBUYWJzTWV0YWRhdGEgPSB7fSBhcyBUYWJzTWV0YWRhdGE7XG5cbiAgQE91dHB1dCgpIHRhYkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFiTWV0YWRhdGE+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZXNvbHZlUHJvcHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sncHJlc2V0J10gfHwgY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5yZXNvbHZlUHJvcHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgcHJlc2V0IGNvbmZpZ3VyYXRpb24gd2l0aCBleHBsaWNpdCBwcm9wcy5cbiAgICogRXhwbGljaXQgcHJvcHMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgcHJlc2V0IHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZVByb3BzKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXNldFByb3BzID0gdGhpcy5wcmVzZXRcbiAgICAgID8gKHRoaXMucHJlc2V0cy5nZXQoJ3RhYnMnLCB0aGlzLnByZXNldCkgYXMgUGFydGlhbDxUYWJzTWV0YWRhdGE+KVxuICAgICAgOiB7fTtcblxuICAgIHRoaXMucmVzb2x2ZWRQcm9wcyA9IHtcbiAgICAgIC4uLnByZXNldFByb3BzLFxuICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICB9IGFzIFRhYnNNZXRhZGF0YTtcbiAgfVxuXG4gIG9uVGFiQ2xpY2sodGFiOiBUYWJNZXRhZGF0YSk6IHZvaWQge1xuICAgIGlmICghdGFiLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnRhYkNoYW5nZS5lbWl0KHRhYik7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGFiTGFiZWwodGFiOiBUYWJNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRhYi5sYWJlbCB8fCB0YWIuY29udGVudEZhbGxiYWNrIHx8ICcnO1xuICB9XG59XG4iXX0=