ngx-tethys 14.0.6 → 14.0.7

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 (48) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/badge/badge.component.d.ts +25 -26
  3. package/badge/examples/custom-color/custom-color.component.scss +9 -0
  4. package/badge/styles/badge.scss +20 -6
  5. package/cascader/cascader.component.d.ts +2 -2
  6. package/core/color/color.d.ts +1 -1
  7. package/esm2020/badge/badge.component.mjs +112 -131
  8. package/esm2020/cascader/cascader.component.mjs +7 -6
  9. package/esm2020/core/color/color.mjs +2 -2
  10. package/esm2020/table/table.component.mjs +21 -5
  11. package/esm2020/table/table.interface.mjs +1 -1
  12. package/esm2020/timeline/timeline-item.component.mjs +1 -1
  13. package/esm2020/timeline/timeline.component.mjs +13 -3
  14. package/esm2020/version.mjs +2 -2
  15. package/fesm2015/ngx-tethys-badge.mjs +111 -130
  16. package/fesm2015/ngx-tethys-badge.mjs.map +1 -1
  17. package/fesm2015/ngx-tethys-cascader.mjs +6 -5
  18. package/fesm2015/ngx-tethys-cascader.mjs.map +1 -1
  19. package/fesm2015/ngx-tethys-core.mjs +1 -1
  20. package/fesm2015/ngx-tethys-core.mjs.map +1 -1
  21. package/fesm2015/ngx-tethys-table.mjs +20 -4
  22. package/fesm2015/ngx-tethys-table.mjs.map +1 -1
  23. package/fesm2015/ngx-tethys-timeline.mjs +12 -2
  24. package/fesm2015/ngx-tethys-timeline.mjs.map +1 -1
  25. package/fesm2015/ngx-tethys.mjs +1 -1
  26. package/fesm2015/ngx-tethys.mjs.map +1 -1
  27. package/fesm2020/ngx-tethys-badge.mjs +111 -130
  28. package/fesm2020/ngx-tethys-badge.mjs.map +1 -1
  29. package/fesm2020/ngx-tethys-cascader.mjs +6 -5
  30. package/fesm2020/ngx-tethys-cascader.mjs.map +1 -1
  31. package/fesm2020/ngx-tethys-core.mjs +1 -1
  32. package/fesm2020/ngx-tethys-core.mjs.map +1 -1
  33. package/fesm2020/ngx-tethys-table.mjs +20 -4
  34. package/fesm2020/ngx-tethys-table.mjs.map +1 -1
  35. package/fesm2020/ngx-tethys-timeline.mjs +12 -2
  36. package/fesm2020/ngx-tethys-timeline.mjs.map +1 -1
  37. package/fesm2020/ngx-tethys.mjs +1 -1
  38. package/fesm2020/ngx-tethys.mjs.map +1 -1
  39. package/package.json +1 -1
  40. package/schematics/version.d.ts +1 -1
  41. package/schematics/version.js +1 -1
  42. package/styles/mixins/link.scss +6 -2
  43. package/styles/modules/link.scss +2 -1
  44. package/styles/variables.scss +2 -0
  45. package/table/table.component.d.ts +5 -1
  46. package/table/table.interface.d.ts +1 -0
  47. package/timeline/timeline-item.component.d.ts +3 -2
  48. package/timeline/timeline.component.d.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [14.0.7](https://github.com/atinc/ngx-tethys/compare/14.0.6...14.0.7) (2022-09-08)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **cascader:** should only show one column when first opened #INFR-4617 ([#2177](https://github.com/atinc/ngx-tethys/issues/2177)) ([09bfbc9](https://github.com/atinc/ngx-tethys/commit/09bfbc9fc23ce2507d802b8277a83b304041f6f9)), closes [#INFR-4617](https://github.com/atinc/ngx-tethys/issues/INFR-4617) [#INFR-4617](https://github.com/atinc/ngx-tethys/issues/INFR-4617)
11
+
12
+
13
+ ### Features
14
+
15
+ * **badge:** add default type instead of secondary and support built-in color for thyTextColor and thyBackgroundColor #INFR-4576 ([#2173](https://github.com/atinc/ngx-tethys/issues/2173)) ([7cc2dcf](https://github.com/atinc/ngx-tethys/commit/7cc2dcff398808337d6b46624e4ae80086210868)), closes [#INFR-4576](https://github.com/atinc/ngx-tethys/issues/INFR-4576)
16
+ * **link:** set opacity to 50% for disabled #INFR-4621 ([#2178](https://github.com/atinc/ngx-tethys/issues/2178)) ([bf4fe5c](https://github.com/atinc/ngx-tethys/commit/bf4fe5ce77a934562aa00b86140574572cb62b9d)), closes [#INFR-4621](https://github.com/atinc/ngx-tethys/issues/INFR-4621)
17
+ * **table:** add page size controller to table pagination #INFR-3371 ([#2138](https://github.com/atinc/ngx-tethys/issues/2138)) ([736f495](https://github.com/atinc/ngx-tethys/commit/736f4956a7e8e7e2b0fb8e01f433acbe9582c0b6)), closes [#INFR-3371](https://github.com/atinc/ngx-tethys/issues/INFR-3371)
18
+ * **timeline:** improve timeline examples and overview #INFR-4538 ([d4267c0](https://github.com/atinc/ngx-tethys/commit/d4267c0a37a11a0e6a76860a3ebbdc610f6ab3e4)), closes [#INFR-4538](https://github.com/atinc/ngx-tethys/issues/INFR-4538)
19
+
20
+
21
+
5
22
  ## [14.0.6](https://github.com/atinc/ngx-tethys/compare/14.0.5...14.0.6) (2022-09-06)
6
23
 
7
24
 
@@ -1,34 +1,35 @@
1
1
  import { ElementRef, OnInit } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ export declare type ThyBadgeSize = 'md' | 'sm' | 'lg';
3
4
  /**
4
5
  * 徽标组件,支持组件`thy-badge`和`thyBadge`指令两种使用方式
6
+ * @name thy-badge,[thyBadge]
5
7
  */
6
8
  export declare class ThyBadgeComponent implements OnInit {
7
9
  private elementRef;
8
10
  displayContent: string;
9
11
  badgeClassName: string;
10
12
  private nativeElement;
11
- private _initialized;
12
- private badgeClassNameMap;
13
- st: {
14
- value: number | string;
15
- isValueOfString: boolean;
16
- isSetValue: boolean;
17
- isValueKeepShow: boolean;
18
- max: {
19
- is: boolean;
20
- value: number;
21
- };
22
- isElement: boolean;
23
- isSup: boolean;
24
- isShowBadge: boolean;
25
- };
26
- textColor: string;
27
- backgroundColor: string;
13
+ private initialized;
14
+ protected isWrapper: boolean;
15
+ isShowBadge: boolean;
16
+ private keepShowValue;
17
+ private value;
18
+ private valueHasBeenSet;
19
+ private maxCount;
20
+ private type;
21
+ private size;
22
+ private isDot;
23
+ private isHollow;
24
+ protected textColor: string;
25
+ protected builtInTextColorClass: string;
26
+ protected backgroundColor: string;
27
+ protected builtInBackgroundColorClass: string;
28
+ protected supClasses: string[];
28
29
  constructor(elementRef: ElementRef);
29
- containerClassName: boolean;
30
30
  /**
31
- * 徽标类型, 类型为 'primary' | 'danger' | 'warning' | 'secondary'
31
+ * 徽标类型, 类型为 'default' | 'primary' | 'danger' | 'warning' | 'success'
32
+ * @default danger
32
33
  */
33
34
  set thyType(value: string);
34
35
  /**
@@ -49,13 +50,12 @@ export declare class ThyBadgeComponent implements OnInit {
49
50
  */
50
51
  set thyMaxCount(value: number);
51
52
  /**
52
- * 徽标显示的大小,分别为 `sm` | `md` | `lg`
53
+ * 徽标显示的大小,分别为 'sm' | 'md' | 'lg'
53
54
  * @default md
54
55
  */
55
- set thySize(value: string);
56
+ set thySize(value: ThyBadgeSize);
56
57
  /**
57
58
  * 已废弃,徽标是一个实心点,已经被废弃
58
- * @default md
59
59
  */
60
60
  set thyIsDot(value: boolean);
61
61
  /**
@@ -67,17 +67,16 @@ export declare class ThyBadgeComponent implements OnInit {
67
67
  */
68
68
  set thyKeepShow(value: boolean);
69
69
  /**
70
- * 设置徽标字体的颜色
70
+ * 设置徽标字体的颜色,支持内置颜色和自定义颜色 'primary' | '#87d068' | ...
71
71
  */
72
72
  set thyTextColor(value: string);
73
73
  /**
74
- * 设置徽标的背景颜色
74
+ * 设置徽标的背景颜色,支持内置颜色和自定义颜色 'primary' | '#87d068' | ...
75
75
  */
76
76
  set thyBackgroundColor(value: string);
77
77
  ngOnInit(): void;
78
- private combineBadgeClassName;
78
+ private combineBadgeClasses;
79
79
  private combineBadgeDisplayContent;
80
- private resetBadgeClassNameMap;
81
80
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyBadgeComponent, never>;
82
81
  static ɵcmp: i0.ɵɵComponentDeclaration<ThyBadgeComponent, "thy-badge,[thyBadge]", never, { "thyType": "thyType"; "thyCount": "thyCount"; "thyContent": "thyContent"; "thyContext": "thyContext"; "thyMaxCount": "thyMaxCount"; "thySize": "thySize"; "thyIsDot": "thyIsDot"; "thyIsHollow": "thyIsHollow"; "thyKeepShow": "thyKeepShow"; "thyTextColor": "thyTextColor"; "thyBackgroundColor": "thyBackgroundColor"; }, {}, never, ["*"]>;
83
82
  }
@@ -0,0 +1,9 @@
1
+ thy-badge {
2
+ margin-right: 40px;
3
+ }
4
+ .square {
5
+ width: 42px;
6
+ height: 42px;
7
+ border-radius: 5px;
8
+ background: #eee;
9
+ }
@@ -75,6 +75,18 @@
75
75
  }
76
76
  }
77
77
 
78
+ .thy-badge-default {
79
+ @include mixin.set-badge-color(variables.$gray-600, variables.$gray-200);
80
+ }
81
+
82
+ .thy-badge-success {
83
+ @include mixin.set-badge-color(variables.$white, variables.$success);
84
+ &.thy-badge-hollow {
85
+ background-color: transparent;
86
+ }
87
+ }
88
+
89
+ // 使用 thy-badge-default,暂时没有去除
78
90
  .thy-badge-secondary {
79
91
  @include mixin.set-badge-color(variables.$gray-600, variables.$gray-200);
80
92
  &.thy-badge-dot {
@@ -88,12 +100,14 @@
88
100
 
89
101
  // #endregion
90
102
  // #region
91
- .thy-badge-sup {
92
- position: absolute;
93
- top: 0px;
94
- right: 0;
95
- transform: translateY(-50%) translateX(50%);
96
- z-index: 1;
103
+ .thy-badge-wrapper {
104
+ .thy-badge {
105
+ position: absolute;
106
+ top: 0px;
107
+ right: 0;
108
+ transform: translateY(-50%) translateX(50%);
109
+ z-index: 1;
110
+ }
97
111
  }
98
112
 
99
113
  .thy-badge-lg {
@@ -1,10 +1,10 @@
1
+ import { SelectionModel } from '@angular/cdk/collections';
1
2
  import { CdkConnectedOverlay, ConnectedOverlayPositionChange, ConnectionPositionPair, ViewportRuler } from '@angular/cdk/overlay';
2
3
  import { ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList, TemplateRef } from '@angular/core';
3
4
  import { ControlValueAccessor } from '@angular/forms';
4
5
  import { UpdateHostClassService } from 'ngx-tethys/core';
5
- import { CascaderOption } from './types';
6
6
  import { SelectControlSize, SelectOptionBase } from 'ngx-tethys/shared';
7
- import { SelectionModel } from '@angular/cdk/collections';
7
+ import { CascaderOption } from './types';
8
8
  import * as i0 from "@angular/core";
9
9
  export declare type ThyCascaderTriggerType = 'click' | 'hover';
10
10
  export declare type ThyCascaderExpandTrigger = 'click' | 'hover';
@@ -1,6 +1,6 @@
1
1
  export declare const presetThemeColors: readonly ["primary", "success", "info", "warning", "danger", "default", "light"];
2
2
  export declare type ThyThemeColor = typeof presetThemeColors[number];
3
3
  export declare function isThemeColor(color: ThyThemeColor | string): boolean;
4
- export declare const presetTextColors: readonly ["secondary", "muted", "desc", "placeholder"];
4
+ export declare const presetTextColors: readonly ["primary", "success", "info", "warning", "danger", "default", "light", "secondary", "muted", "desc", "placeholder", "white", "body"];
5
5
  export declare type ThyTextColor = typeof presetTextColors[number];
6
6
  export declare function isTextColor(color: ThyTextColor | string): boolean;
@@ -1,96 +1,58 @@
1
- import { Component, ElementRef, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';
2
- import { UpdateHostClassService } from 'ngx-tethys/core';
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { InputBoolean, isTextColor, UpdateHostClassService } from 'ngx-tethys/core';
3
3
  import { coerceBooleanProperty } from 'ngx-tethys/util';
4
+ import { ChangeDetectionStrategy, Component, ElementRef, Input } from '@angular/core';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
6
- const badgeMutexTypes = ['thy-badge-count', 'thy-badge-dot', 'thy-badge-hollow'];
7
- const BadgeMutexTheme = ['thy-badge-primary', 'thy-badge-warning', 'thy-badge-danger', 'thy-badge-secondary'];
8
- const BadgeMutexSize = ['thy-badge-lg', 'thy-badge-sm'];
9
7
  /**
10
8
  * 徽标组件,支持组件`thy-badge`和`thyBadge`指令两种使用方式
9
+ * @name thy-badge,[thyBadge]
11
10
  */
12
11
  export class ThyBadgeComponent {
13
12
  constructor(elementRef) {
14
13
  this.elementRef = elementRef;
15
14
  this.displayContent = '';
16
15
  this.badgeClassName = '';
17
- this._initialized = false;
18
- this.badgeClassNameMap = {
19
- 'thy-badge-count': true,
20
- 'thy-badge-dot': false,
21
- 'thy-badge-hollow': false,
22
- 'thy-badge-lg': false,
23
- 'thy-badge-sm': false,
24
- 'thy-badge-danger': true,
25
- 'thy-badge-primary': false,
26
- 'thy-badge-warning': false,
27
- 'thy-badge-secondary': false,
28
- 'thy-badge-sup': true
29
- };
30
- this.st = {
31
- value: '',
32
- isValueOfString: false,
33
- isSetValue: false,
34
- isValueKeepShow: false,
35
- max: {
36
- is: false,
37
- value: null
38
- },
39
- isElement: false,
40
- isSup: false,
41
- isShowBadge: true
42
- };
43
- this.containerClassName = true;
16
+ this.initialized = false;
17
+ // 是否包裹在元素上
18
+ this.isWrapper = false;
19
+ this.isShowBadge = true;
20
+ this.keepShowValue = false;
21
+ this.value = '';
22
+ this.valueHasBeenSet = false;
23
+ this.supClasses = [];
44
24
  this.nativeElement = this.elementRef.nativeElement;
45
- this.st.isElement = this.nativeElement.localName === 'thy-badge';
46
25
  }
47
26
  /**
48
- * 徽标类型, 类型为 'primary' | 'danger' | 'warning' | 'secondary'
27
+ * 徽标类型, 类型为 'default' | 'primary' | 'danger' | 'warning' | 'success'
28
+ * @default danger
49
29
  */
50
30
  set thyType(value) {
51
- this.resetBadgeClassNameMap(BadgeMutexTheme);
52
- switch (value) {
53
- case 'danger':
54
- this.badgeClassNameMap['thy-badge-danger'] = true;
55
- break;
56
- case 'primary':
57
- this.badgeClassNameMap['thy-badge-primary'] = true;
58
- break;
59
- case 'warning':
60
- this.badgeClassNameMap['thy-badge-warning'] = true;
61
- break;
62
- case 'secondary':
63
- this.badgeClassNameMap['thy-badge-secondary'] = true;
64
- break;
65
- default:
66
- this.badgeClassNameMap['thy-badge-danger'] = true;
67
- break;
68
- }
69
- if (this._initialized) {
70
- this.combineBadgeClassName();
31
+ this.type = value;
32
+ if (this.initialized) {
33
+ this.combineBadgeClasses();
71
34
  }
72
35
  }
73
36
  /**
74
37
  * 徽标内容数字
75
38
  */
76
39
  set thyCount(value) {
77
- this.st.value = value;
78
- this.st.isSetValue = true;
79
- if (this._initialized) {
40
+ this.value = value;
41
+ this.valueHasBeenSet = true;
42
+ if (this.initialized) {
80
43
  this.combineBadgeDisplayContent();
81
- this.combineBadgeClassName();
44
+ this.combineBadgeClasses();
82
45
  }
83
46
  }
84
47
  /**
85
48
  * 徽标内容文本
86
49
  */
87
50
  set thyContent(value) {
88
- this.st.value = value;
89
- this.st.isValueOfString = true;
90
- this.st.isSetValue = true;
91
- if (this._initialized) {
51
+ this.value = value;
52
+ this.valueHasBeenSet = true;
53
+ if (this.initialized) {
92
54
  this.combineBadgeDisplayContent();
93
- this.combineBadgeClassName();
55
+ this.combineBadgeClasses();
94
56
  }
95
57
  }
96
58
  /**
@@ -104,73 +66,80 @@ export class ThyBadgeComponent {
104
66
  * 徽标显示的最大值, 与 thyCount 一起使用,thyCount 超过了 thyMaxCount 设置的值时,徽标内容为 thyMaxCount+
105
67
  */
106
68
  set thyMaxCount(value) {
107
- this.st.max.is = true;
108
- this.st.max.value = value;
109
- if (this._initialized) {
69
+ this.maxCount = value;
70
+ if (this.initialized) {
110
71
  this.combineBadgeDisplayContent();
111
- this.combineBadgeClassName();
72
+ this.combineBadgeClasses();
112
73
  }
113
74
  }
114
75
  /**
115
- * 徽标显示的大小,分别为 `sm` | `md` | `lg`
76
+ * 徽标显示的大小,分别为 'sm' | 'md' | 'lg'
116
77
  * @default md
117
78
  */
118
79
  set thySize(value) {
119
- this.resetBadgeClassNameMap(BadgeMutexSize);
120
- switch (value) {
121
- case 'lg':
122
- this.badgeClassNameMap['thy-badge-lg'] = true;
123
- break;
124
- case 'sm':
125
- this.badgeClassNameMap['thy-badge-sm'] = true;
126
- break;
127
- }
128
- if (this._initialized) {
129
- this.combineBadgeClassName();
80
+ this.size = value;
81
+ if (this.initialized) {
82
+ this.combineBadgeClasses();
130
83
  }
131
84
  }
132
85
  /**
133
86
  * 已废弃,徽标是一个实心点,已经被废弃
134
- * @default md
135
87
  */
136
88
  set thyIsDot(value) {
137
- this.resetBadgeClassNameMap(badgeMutexTypes);
138
- this.badgeClassNameMap['thy-badge-dot'] = coerceBooleanProperty(value);
139
- if (this._initialized) {
140
- this.combineBadgeClassName();
89
+ this.isDot = value;
90
+ if (this.initialized) {
91
+ this.combineBadgeClasses();
141
92
  }
142
93
  }
143
94
  /**
144
95
  * 已废弃,徽标是一个空心点,
145
96
  */
146
97
  set thyIsHollow(value) {
147
- this.resetBadgeClassNameMap(badgeMutexTypes);
148
- this.badgeClassNameMap['thy-badge-hollow'] = coerceBooleanProperty(value);
149
- if (this._initialized) {
150
- this.combineBadgeClassName();
98
+ this.isHollow = value;
99
+ if (this.initialized) {
100
+ this.combineBadgeClasses();
151
101
  }
152
102
  }
153
103
  /**
154
104
  * thyCount 为 0 时,强制显示数字 0,默认不显示
155
105
  */
156
106
  set thyKeepShow(value) {
157
- this.st.isValueKeepShow = coerceBooleanProperty(value);
158
- if (this._initialized) {
107
+ this.keepShowValue = coerceBooleanProperty(value);
108
+ if (this.initialized) {
159
109
  this.combineBadgeDisplayContent();
160
110
  }
161
111
  }
162
112
  /**
163
- * 设置徽标字体的颜色
113
+ * 设置徽标字体的颜色,支持内置颜色和自定义颜色 'primary' | '#87d068' | ...
164
114
  */
165
115
  set thyTextColor(value) {
166
- this.textColor = value;
116
+ if (isTextColor(value)) {
117
+ this.builtInTextColorClass = `text-${value}`;
118
+ this.textColor = null;
119
+ }
120
+ else {
121
+ this.textColor = value;
122
+ this.builtInTextColorClass = null;
123
+ }
124
+ if (this.initialized) {
125
+ this.combineBadgeClasses();
126
+ }
167
127
  }
168
128
  /**
169
- * 设置徽标的背景颜色
129
+ * 设置徽标的背景颜色,支持内置颜色和自定义颜色 'primary' | '#87d068' | ...
170
130
  */
171
131
  set thyBackgroundColor(value) {
172
- this.backgroundColor = value;
173
- this.resetBadgeClassNameMap(BadgeMutexTheme);
132
+ if (isTextColor(value)) {
133
+ this.builtInBackgroundColorClass = `bg-${value}`;
134
+ this.backgroundColor = null;
135
+ }
136
+ else {
137
+ this.backgroundColor = value;
138
+ this.builtInBackgroundColorClass = null;
139
+ }
140
+ if (this.initialized) {
141
+ this.combineBadgeClasses();
142
+ }
174
143
  }
175
144
  ngOnInit() {
176
145
  let childNodeCount = 0;
@@ -179,56 +148,68 @@ export class ThyBadgeComponent {
179
148
  childNodeCount++;
180
149
  }
181
150
  });
182
- this.st.isSup = childNodeCount > 0;
183
- this.combineBadgeClassName();
184
- if (this.st.isSetValue) {
151
+ this.isWrapper = childNodeCount > 0;
152
+ this.combineBadgeClasses();
153
+ if (this.valueHasBeenSet) {
185
154
  this.combineBadgeDisplayContent();
186
155
  }
187
- this._initialized = true;
156
+ this.initialized = true;
188
157
  }
189
- combineBadgeClassName() {
190
- this.badgeClassNameMap['thy-badge-sup'] = this.st.isSup;
191
- const _badgeClassNames = [];
192
- for (const key in this.badgeClassNameMap) {
193
- if (this.badgeClassNameMap.hasOwnProperty(key)) {
194
- if (this.badgeClassNameMap[key]) {
195
- _badgeClassNames.push(key);
196
- }
197
- }
158
+ combineBadgeClasses() {
159
+ const classes = [];
160
+ classes.push(`thy-badge-${this.type || 'danger'}`);
161
+ if (this.size) {
162
+ classes.push(`thy-badge-${this.size}`);
198
163
  }
199
- this.badgeClassName = _badgeClassNames.join(' ');
200
- }
201
- combineBadgeDisplayContent() {
202
- this.displayContent = this.st.value;
203
- if (this.st.value && this.st.max.is && this.st.value > this.st.max.value) {
204
- this.displayContent = `${this.st.max.value}+`;
164
+ if (this.isDot) {
165
+ classes.push(`thy-badge-dot`);
205
166
  }
206
- if (!this.st.value && !this.st.isValueKeepShow) {
207
- this.st.isShowBadge = false;
167
+ else if (this.isHollow) {
168
+ classes.push(`thy-badge-hollow`);
208
169
  }
209
170
  else {
210
- this.st.isShowBadge = true;
171
+ classes.push(`thy-badge-count`);
172
+ }
173
+ if (this.builtInTextColorClass) {
174
+ classes.push(this.builtInTextColorClass);
211
175
  }
176
+ if (this.builtInBackgroundColorClass) {
177
+ classes.push(this.builtInBackgroundColorClass);
178
+ }
179
+ this.badgeClassName = classes.join(' ');
212
180
  }
213
- resetBadgeClassNameMap(mutexArray) {
214
- for (const key in this.badgeClassNameMap) {
215
- if (this.badgeClassNameMap.hasOwnProperty(key)) {
216
- if (mutexArray.includes(key)) {
217
- this.badgeClassNameMap[key] = false;
218
- }
219
- }
181
+ combineBadgeDisplayContent() {
182
+ this.displayContent = this.value;
183
+ if (this.value && this.maxCount != undefined && this.value > this.maxCount) {
184
+ this.displayContent = `${this.maxCount}+`;
185
+ }
186
+ if (!this.value && !this.keepShowValue) {
187
+ this.isShowBadge = false;
188
+ }
189
+ else {
190
+ this.isShowBadge = true;
220
191
  }
221
192
  }
222
193
  }
223
194
  ThyBadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ThyBadgeComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
224
- ThyBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ThyBadgeComponent, selector: "thy-badge,[thyBadge]", inputs: { thyType: "thyType", thyCount: "thyCount", thyContent: "thyContent", thyContext: "thyContext", thyMaxCount: "thyMaxCount", thySize: "thySize", thyIsDot: "thyIsDot", thyIsHollow: "thyIsHollow", thyKeepShow: "thyKeepShow", thyTextColor: "thyTextColor", thyBackgroundColor: "thyBackgroundColor" }, host: { properties: { "class.thy-badge-container": "this.containerClassName" } }, providers: [UpdateHostClassService], ngImport: i0, template: "<ng-container>\n <div *ngIf=\"st.isShowBadge\" class=\"thy-badge {{ badgeClassName }}\" [style.color]=\"textColor\" [style.backgroundColor]=\"backgroundColor\">\n <span>{{ displayContent }}</span>\n </div>\n</ng-container>\n<ng-content></ng-content>\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
195
+ ThyBadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ThyBadgeComponent, selector: "thy-badge,[thyBadge]", inputs: { thyType: "thyType", thyCount: "thyCount", thyContent: "thyContent", thyContext: "thyContext", thyMaxCount: "thyMaxCount", thySize: "thySize", thyIsDot: "thyIsDot", thyIsHollow: "thyIsHollow", thyKeepShow: "thyKeepShow", thyTextColor: "thyTextColor", thyBackgroundColor: "thyBackgroundColor" }, host: { properties: { "class.thy-badge-wrapper": "isWrapper" }, classAttribute: "thy-badge-container" }, providers: [UpdateHostClassService], ngImport: i0, template: "<div *ngIf=\"isShowBadge\" class=\"thy-badge {{ badgeClassName }}\" [style.color]=\"textColor\" [style.backgroundColor]=\"backgroundColor\">\n <span>{{ displayContent }}</span>\n</div>\n<ng-content></ng-content>\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
196
+ __decorate([
197
+ InputBoolean(),
198
+ __metadata("design:type", Boolean),
199
+ __metadata("design:paramtypes", [Boolean])
200
+ ], ThyBadgeComponent.prototype, "thyIsDot", null);
201
+ __decorate([
202
+ InputBoolean(),
203
+ __metadata("design:type", Boolean),
204
+ __metadata("design:paramtypes", [Boolean])
205
+ ], ThyBadgeComponent.prototype, "thyIsHollow", null);
225
206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ThyBadgeComponent, decorators: [{
226
207
  type: Component,
227
- args: [{ selector: 'thy-badge,[thyBadge]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UpdateHostClassService], template: "<ng-container>\n <div *ngIf=\"st.isShowBadge\" class=\"thy-badge {{ badgeClassName }}\" [style.color]=\"textColor\" [style.backgroundColor]=\"backgroundColor\">\n <span>{{ displayContent }}</span>\n </div>\n</ng-container>\n<ng-content></ng-content>\n" }]
228
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { containerClassName: [{
229
- type: HostBinding,
230
- args: ['class.thy-badge-container']
231
- }], thyType: [{
208
+ args: [{ selector: 'thy-badge,[thyBadge]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UpdateHostClassService], host: {
209
+ class: 'thy-badge-container',
210
+ '[class.thy-badge-wrapper]': 'isWrapper'
211
+ }, template: "<div *ngIf=\"isShowBadge\" class=\"thy-badge {{ badgeClassName }}\" [style.color]=\"textColor\" [style.backgroundColor]=\"backgroundColor\">\n <span>{{ displayContent }}</span>\n</div>\n<ng-content></ng-content>\n" }]
212
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { thyType: [{
232
213
  type: Input
233
214
  }], thyCount: [{
234
215
  type: Input
@@ -251,4 +232,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
251
232
  }], thyBackgroundColor: [{
252
233
  type: Input
253
234
  }] } });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JhZGdlL2JhZGdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9iYWRnZS9iYWRnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNHLE9BQU8sRUFBZ0Isc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRXhELE1BQU0sZUFBZSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDakYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQzlHLE1BQU0sY0FBYyxHQUFHLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBRXhEOztHQUVHO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQW9EMUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQW5EMUMsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFFcEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFJWixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQixzQkFBaUIsR0FBRztZQUN4QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsY0FBYyxFQUFFLEtBQUs7WUFDckIsY0FBYyxFQUFFLEtBQUs7WUFDckIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLG1CQUFtQixFQUFF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TUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3RDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUN2QzthQUNKO1NBQ0o7SUFDTCxDQUFDOzs4R0F0UVEsaUJBQWlCO2tHQUFqQixpQkFBaUIsaWJBRmYsQ0FBQyxzQkFBc0IsQ0FBQywwQkNoQnZDLGtRQU1BOzJGRFlhLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDSSxzQkFBc0IsbUJBRWYsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLHNCQUFzQixDQUFDO2lHQTJETyxrQkFBa0I7c0JBQTNELFdBQVc7dUJBQUMsMkJBQTJCO2dCQU1wQyxPQUFPO3NCQURWLEtBQUs7Z0JBNkJGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixVQUFVO3NCQURiLEtBQUs7Z0JBZ0JGLFVBQVU7c0JBRGIsS0FBSztnQkFTRixXQUFXO3NCQURkLEtBQUs7Z0JBZUYsT0FBTztzQkFEVixLQUFLO2dCQXFCRixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsV0FBVztzQkFEZCxLQUFLO2dCQWFGLFdBQVc7c0JBRGQsS0FBSztnQkFZRixZQUFZO3NCQURmLEtBQUs7Z0JBU0Ysa0JBQWtCO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5cbmNvbnN0IGJhZGdlTXV0ZXhUeXBlcyA9IFsndGh5LWJhZGdlLWNvdW50JywgJ3RoeS1iYWRnZS1kb3QnLCAndGh5LWJhZGdlLWhvbGxvdyddO1xuY29uc3QgQmFkZ2VNdXRleFRoZW1lID0gWyd0aHktYmFkZ2UtcHJpbWFyeScsICd0aHktYmFkZ2Utd2FybmluZycsICd0aHktYmFkZ2UtZGFuZ2VyJywgJ3RoeS1iYWRnZS1zZWNvbmRhcnknXTtcbmNvbnN0IEJhZGdlTXV0ZXhTaXplID0gWyd0aHktYmFkZ2UtbGcnLCAndGh5LWJhZGdlLXNtJ107XG5cbi8qKlxuICog5b695qCH57uE5Lu277yM5pSv5oyB57uE5Lu2YHRoeS1iYWRnZWDlkoxgdGh5QmFkZ2Vg5oyH5Luk5Lik56eN5L2/55So5pa55byPXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWJhZGdlLFt0aHlCYWRnZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYWRnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbVXBkYXRlSG9zdENsYXNzU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5QmFkZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGRpc3BsYXlDb250ZW50ID0gJyc7XG5cbiAgICBiYWRnZUNsYXNzTmFtZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBuYXRpdmVFbGVtZW50OiBhbnk7XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBiYWRnZUNsYXNzTmFtZU1hcCA9IHtcbiAgICAgICAgJ3RoeS1iYWRnZS1jb3VudCc6IHRydWUsXG4gICAgICAgICd0aHktYmFkZ2UtZG90JzogZmFsc2UsXG4gICAgICAgICd0aHktYmFkZ2UtaG9sbG93JzogZmFsc2UsXG4gICAgICAgICd0aHktYmFkZ2UtbGcnOiBmYWxzZSxcbiAgICAgICAgJ3RoeS1iYWRnZS1zbSc6IGZhbHNlLFxuICAgICAgICAndGh5LWJhZGdlLWRhbmdlcic6IHRydWUsXG4gICAgICAgICd0aHktYmFkZ2UtcHJpbWFyeSc6IGZhbHNlLFxuICAgICAgICAndGh5LWJhZGdlLXdhcm5pbmcnOiBmYWxzZSxcbiAgICAgICAgJ3RoeS1iYWRnZS1zZWNvbmRhcnknOiBmYWxzZSxcbiAgICAgICAgJ3RoeS1iYWRnZS1zdXAnOiB0cnVlXG4gICAgfTtcblxuICAgIHN0OiB7XG4gICAgICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgICAgIGlzVmFsdWVPZlN0cmluZzogYm9vbGVhbjtcbiAgICAgICAgaXNTZXRWYWx1ZTogYm9vbGVhbjtcbiAgICAgICAgaXNWYWx1ZUtlZXBTaG93OiBib29sZWFuO1xuICAgICAgICBtYXg6IHtcbiAgICAgICAgICAgIGlzOiBib29sZWFuO1xuICAgICAgICAgICAgdmFsdWU6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgICAgaXNFbGVtZW50OiBib29sZWFuO1xuICAgICAgICBpc1N1cDogYm9vbGVhbjtcbiAgICAgICAgaXNTaG93QmFkZ2U6IGJvb2xlYW47XG4gICAgfSA9IHtcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBpc1ZhbHVlT2ZTdHJpbmc6IGZhbHNlLFxuICAgICAgICBpc1NldFZhbHVlOiBmYWxzZSxcbiAgICAgICAgaXNWYWx1ZUtlZXBTaG93OiBmYWxzZSxcbiAgICAgICAgbWF4OiB7XG4gICAgICAgICAgICBpczogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBpc0VsZW1lbnQ6IGZhbHNlLFxuICAgICAgICBpc1N1cDogZmFsc2UsXG4gICAgICAgIGlzU2hvd0JhZGdlOiB0cnVlXG4gICAgfTtcblxuICAgIHB1YmxpYyB0ZXh0Q29sb3I6IHN0cmluZztcblxuICAgIHB1YmxpYyBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5zdC5pc0VsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQubG9jYWxOYW1lID09PSAndGh5LWJhZGdlJztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1iYWRnZS1jb250YWluZXInKSBjb250YWluZXJDbGFzc05hbWUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog5b695qCH57G75Z6LLCDnsbvlnovkuLogJ3ByaW1hcnknIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnc2Vjb25kYXJ5J1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVR5cGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlc2V0QmFkZ2VDbGFzc05hbWVNYXAoQmFkZ2VNdXRleFRoZW1lKTtcbiAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAnZGFuZ2VyJzpcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlQ2xhc3NOYW1lTWFwWyd0aHktYmFkZ2UtZGFuZ2VyJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncHJpbWFyeSc6XG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZUNsYXNzTmFtZU1hcFsndGh5LWJhZGdlLXByaW1hcnknXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlQ2xhc3NOYW1lTWFwWyd0aHktYmFkZ2Utd2FybmluZyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZGFyeSc6XG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZUNsYXNzTmFtZU1hcFsndGh5LWJhZGdlLXNlY29uZGFyeSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5iYWRnZUNsYXNzTmFtZU1hcFsndGh5LWJhZGdlLWRhbmdlciddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlQ2xhc3NOYW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvr3moIflhoXlrrnmlbDlrZdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc3QudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zdC5pc1NldFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZURpc3BsYXlDb250ZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzTmFtZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b695qCH5YaF5a655paH5pysXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Q29udGVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3QudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zdC5pc1ZhbHVlT2ZTdHJpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0LmlzU2V0VmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlRGlzcGxheUNvbnRlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlQ2xhc3NOYW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlt7Llup/lvIPvvIzlvr3moIflhoXlrrnmlofmnKzvvIzlkb3lkI3plJnor6/vvIzor7fkvb/nlKggdGh5Q29udGVudFxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5Q29udGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudGh5Q29udGVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW+veagh+aYvuekuueahOacgOWkp+WAvCwg5LiOIHRoeUNvdW50IOS4gOi1t+S9v+eUqCx0aHlDb3VudCDotoXov4fkuoYgdGh5TWF4Q291bnQg6K6+572u55qE5YC85pe277yM5b695qCH5YaF5a655Li6IHRoeU1heENvdW50K1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1heENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zdC5tYXguaXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0Lm1heC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlRGlzcGxheUNvbnRlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlQ2xhc3NOYW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvr3moIfmmL7npLrnmoTlpKflsI/vvIzliIbliKvkuLogYHNtYCB8IGBtZGAgfCBgbGdgXG4gICAgICogQGRlZmF1bHQgbWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlTaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZXNldEJhZGdlQ2xhc3NOYW1lTWFwKEJhZGdlTXV0ZXhTaXplKTtcbiAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAnbGcnOlxuICAgICAgICAgICAgICAgIHRoaXMuYmFkZ2VDbGFzc05hbWVNYXBbJ3RoeS1iYWRnZS1sZyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgICAgICB0aGlzLmJhZGdlQ2xhc3NOYW1lTWFwWyd0aHktYmFkZ2Utc20nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzTmFtZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bey5bqf5byD77yM5b695qCH5piv5LiA5Liq5a6e5b+D54K577yM5bey57uP6KKr5bqf5byDXG4gICAgICogQGRlZmF1bHQgbWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlJc0RvdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnJlc2V0QmFkZ2VDbGFzc05hbWVNYXAoYmFkZ2VNdXRleFR5cGVzKTtcbiAgICAgICAgdGhpcy5iYWRnZUNsYXNzTmFtZU1hcFsndGh5LWJhZGdlLWRvdCddID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzTmFtZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bey5bqf5byD77yM5b695qCH5piv5LiA5Liq56m65b+D54K577yMXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5SXNIb2xsb3codmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5yZXNldEJhZGdlQ2xhc3NOYW1lTWFwKGJhZGdlTXV0ZXhUeXBlcyk7XG4gICAgICAgIHRoaXMuYmFkZ2VDbGFzc05hbWVNYXBbJ3RoeS1iYWRnZS1ob2xsb3cnXSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5jb21iaW5lQmFkZ2VDbGFzc05hbWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoeUNvdW50IOS4uiAwIOaXtu+8jOW8uuWItuaYvuekuuaVsOWtlyAw77yM6buY6K6k5LiN5pi+56S6XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5S2VlcFNob3codmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zdC5pc1ZhbHVlS2VlcFNob3cgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlRGlzcGxheUNvbnRlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW+veagh+Wtl+S9k+eahOminOiJslxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVRleHRDb2xvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudGV4dENvbG9yID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b695qCH55qE6IOM5pmv6aKc6ImyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5QmFja2dyb3VuZENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5yZXNldEJhZGdlQ2xhc3NOYW1lTWFwKEJhZGdlTXV0ZXhUaGVtZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGxldCBjaGlsZE5vZGVDb3VudCA9IDA7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzLmZvckVhY2goKG46IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoWycjY29tbWVudCddLmluZGV4T2Yobi5ub2RlTmFtZSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgY2hpbGROb2RlQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3QuaXNTdXAgPSBjaGlsZE5vZGVDb3VudCA+IDA7XG5cbiAgICAgICAgdGhpcy5jb21iaW5lQmFkZ2VDbGFzc05hbWUoKTtcblxuICAgICAgICBpZiAodGhpcy5zdC5pc1NldFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZURpc3BsYXlDb250ZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21iaW5lQmFkZ2VDbGFzc05hbWUoKSB7XG4gICAgICAgIHRoaXMuYmFkZ2VDbGFzc05hbWVNYXBbJ3RoeS1iYWRnZS1zdXAnXSA9IHRoaXMuc3QuaXNTdXA7XG5cbiAgICAgICAgY29uc3QgX2JhZGdlQ2xhc3NOYW1lcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmJhZGdlQ2xhc3NOYW1lTWFwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5iYWRnZUNsYXNzTmFtZU1hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFkZ2VDbGFzc05hbWVNYXBba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBfYmFkZ2VDbGFzc05hbWVzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYWRnZUNsYXNzTmFtZSA9IF9iYWRnZUNsYXNzTmFtZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tYmluZUJhZGdlRGlzcGxheUNvbnRlbnQoKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbnRlbnQgPSB0aGlzLnN0LnZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgaWYgKHRoaXMuc3QudmFsdWUgJiYgdGhpcy5zdC5tYXguaXMgJiYgdGhpcy5zdC52YWx1ZSA+IHRoaXMuc3QubWF4LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb250ZW50ID0gYCR7dGhpcy5zdC5tYXgudmFsdWV9K2A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3QudmFsdWUgJiYgIXRoaXMuc3QuaXNWYWx1ZUtlZXBTaG93KSB7XG4gICAgICAgICAgICB0aGlzLnN0LmlzU2hvd0JhZGdlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0LmlzU2hvd0JhZGdlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRCYWRnZUNsYXNzTmFtZU1hcChtdXRleEFycmF5OiBhbnkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5iYWRnZUNsYXNzTmFtZU1hcCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFkZ2VDbGFzc05hbWVNYXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChtdXRleEFycmF5LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWRnZUNsYXNzTmFtZU1hcFtrZXldID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPGRpdiAqbmdJZj1cInN0LmlzU2hvd0JhZGdlXCIgY2xhc3M9XCJ0aHktYmFkZ2Uge3sgYmFkZ2VDbGFzc05hbWUgfX1cIiBbc3R5bGUuY29sb3JdPVwidGV4dENvbG9yXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIj5cbiAgICA8c3Bhbj57eyBkaXNwbGF5Q29udGVudCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JhZGdlL2JhZGdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9iYWRnZS9iYWRnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQUk5Rjs7O0dBR0c7QUFXSCxNQUFNLE9BQU8saUJBQWlCO0lBd0MxQixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBdkMxQyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVwQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUlaLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRTVCLFdBQVc7UUFDRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRWxCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBRTVCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBb0J0QixlQUFVLEdBQWEsRUFBRSxDQUFDO1FBR2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ0ksT0FBTyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFD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QU1kOzJGQTFJUSxpQkFBaUI7a0JBVjdCLFNBQVM7K0JBQ0ksc0JBQXNCLG1CQUVmLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxzQkFBc0IsQ0FBQyxRQUM3Qjt3QkFDRixLQUFLLEVBQUUscUJBQXFCO3dCQUM1QiwyQkFBMkIsRUFBRSxXQUFXO3FCQUMzQztpR0FtREcsT0FBTztzQkFEVixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixVQUFVO3NCQURiLEtBQUs7Z0JBZUYsVUFBVTtzQkFEYixLQUFLO2dCQVNGLFdBQVc7c0JBRGQsS0FBSztnQkFjRixPQUFPO3NCQURWLEtBQUs7Z0JBY0YsUUFBUTtzQkFGWCxLQUFLO2dCQWNGLFdBQVc7c0JBRmQsS0FBSztnQkFhRixXQUFXO3NCQURkLEtBQUs7Z0JBWUYsWUFBWTtzQkFEZixLQUFLO2dCQWtCRixrQkFBa0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dEJvb2xlYW4sIGlzVGV4dENvbG9yLCBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgVGh5QmFkZ2VTaXplID0gJ21kJyB8ICdzbScgfCAnbGcnO1xuXG4vKipcbiAqIOW+veagh+e7hOS7tu+8jOaUr+aMgee7hOS7tmB0aHktYmFkZ2Vg5ZKMYHRoeUJhZGdlYOaMh+S7pOS4pOenjeS9v+eUqOaWueW8j1xuICogQG5hbWUgdGh5LWJhZGdlLFt0aHlCYWRnZV1cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktYmFkZ2UsW3RoeUJhZGdlXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhZGdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LWJhZGdlLWNvbnRhaW5lcicsXG4gICAgICAgICdbY2xhc3MudGh5LWJhZGdlLXdyYXBwZXJdJzogJ2lzV3JhcHBlcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRoeUJhZGdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBkaXNwbGF5Q29udGVudCA9ICcnO1xuXG4gICAgYmFkZ2VDbGFzc05hbWUgPSAnJztcblxuICAgIHByaXZhdGUgbmF0aXZlRWxlbWVudDogYW55O1xuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgLy8g5piv5ZCm5YyF6KO55Zyo5YWD57Sg5LiKXG4gICAgcHJvdGVjdGVkIGlzV3JhcHBlciA9IGZhbHNlO1xuXG4gICAgcHVibGljIGlzU2hvd0JhZGdlID0gdHJ1ZTtcblxuICAgIHByaXZhdGUga2VlcFNob3dWYWx1ZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nID0gJyc7XG5cbiAgICBwcml2YXRlIHZhbHVlSGFzQmVlblNldCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBtYXhDb3VudDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSB0eXBlOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIHNpemU6IFRoeUJhZGdlU2l6ZTtcblxuICAgIHByaXZhdGUgaXNEb3Q6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGlzSG9sbG93OiBib29sZWFuO1xuXG4gICAgcHJvdGVjdGVkIHRleHRDb2xvcjogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGJ1aWx0SW5UZXh0Q29sb3JDbGFzczogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGJ1aWx0SW5CYWNrZ3JvdW5kQ29sb3JDbGFzczogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIHN1cENsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b695qCH57G75Z6LLCDnsbvlnovkuLogJ2RlZmF1bHQnIHwgJ3ByaW1hcnknIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnc3VjY2VzcydcbiAgICAgKiBAZGVmYXVsdCBkYW5nZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50eXBlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW+veagh+WGheWuueaVsOWtl1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlSGFzQmVlblNldCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZURpc3BsYXlDb250ZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW+veagh+WGheWuueaWh+acrFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNvbnRlbnQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVIYXNCZWVuU2V0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlRGlzcGxheUNvbnRlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlQ2xhc3NlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bey5bqf5byD77yM5b695qCH5YaF5a655paH5pys77yM5ZG95ZCN6ZSZ6K+v77yM6K+35L2/55SoIHRoeUNvbnRlbnRcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNvbnRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRoeUNvbnRlbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvr3moIfmmL7npLrnmoTmnIDlpKflgLwsIOS4jiB0aHlDb3VudCDkuIDotbfkvb/nlKgsdGh5Q291bnQg6LaF6L+H5LqGIHRoeU1heENvdW50IOiuvue9rueahOWAvOaXtu+8jOW+veagh+WGheWuueS4uiB0aHlNYXhDb3VudCtcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNYXhDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubWF4Q291bnQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlRGlzcGxheUNvbnRlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlQ2xhc3NlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b695qCH5pi+56S655qE5aSn5bCP77yM5YiG5Yir5Li6ICdzbScgfCAnbWQnIHwgJ2xnJ1xuICAgICAqIEBkZWZhdWx0IG1kXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZSh2YWx1ZTogVGh5QmFkZ2VTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW3suW6n+W8g++8jOW+veagh+aYr+S4gOS4quWunuW/g+eCue+8jOW3sue7j+iiq+W6n+W8g1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgc2V0IHRoeUlzRG90KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNEb3QgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlQ2xhc3NlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bey5bqf5byD77yM5b695qCH5piv5LiA5Liq56m65b+D54K577yMXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBzZXQgdGh5SXNIb2xsb3codmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0hvbGxvdyA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5jb21iaW5lQmFkZ2VDbGFzc2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlDb3VudCDkuLogMCDml7bvvIzlvLrliLbmmL7npLrmlbDlrZcgMO+8jOm7mOiupOS4jeaYvuekulxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUtlZXBTaG93KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMua2VlcFNob3dWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZURpc3BsYXlDb250ZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvr3moIflrZfkvZPnmoTpopzoibLvvIzmlK/mjIHlhoXnva7popzoibLlkozoh6rlrprkuYnpopzoibIgJ3ByaW1hcnknIHwgJyM4N2QwNjgnIHwgLi4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VGV4dENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGlzVGV4dENvbG9yKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5idWlsdEluVGV4dENvbG9yQ2xhc3MgPSBgdGV4dC0ke3ZhbHVlfWA7XG4gICAgICAgICAgICB0aGlzLnRleHRDb2xvciA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRleHRDb2xvciA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5idWlsdEluVGV4dENvbG9yQ2xhc3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW+veagh+eahOiDjOaZr+minOiJsu+8jOaUr+aMgeWGhee9ruminOiJsuWSjOiHquWumuS5ieminOiJsiAncHJpbWFyeScgfCAnIzg3ZDA2OCcgfCAuLi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlCYWNrZ3JvdW5kQ29sb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoaXNUZXh0Q29sb3IodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWx0SW5CYWNrZ3JvdW5kQ29sb3JDbGFzcyA9IGBiZy0ke3ZhbHVlfWA7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5idWlsdEluQmFja2dyb3VuZENvbG9yQ2xhc3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBsZXQgY2hpbGROb2RlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChuOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKFsnI2NvbW1lbnQnXS5pbmRleE9mKG4ubm9kZU5hbWUpIDwgMCkge1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZUNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzV3JhcHBlciA9IGNoaWxkTm9kZUNvdW50ID4gMDtcblxuICAgICAgICB0aGlzLmNvbWJpbmVCYWRnZUNsYXNzZXMoKTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZUhhc0JlZW5TZXQpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZUJhZGdlRGlzcGxheUNvbnRlbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tYmluZUJhZGdlQ2xhc3NlcygpIHtcbiAgICAgICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGB0aHktYmFkZ2UtJHt0aGlzLnR5cGUgfHwgJ2Rhbmdlcid9YCk7XG4gICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaChgdGh5LWJhZGdlLSR7dGhpcy5zaXplfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRG90KSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goYHRoeS1iYWRnZS1kb3RgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSG9sbG93KSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goYHRoeS1iYWRnZS1ob2xsb3dgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaChgdGh5LWJhZGdlLWNvdW50YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5idWlsdEluVGV4dENvbG9yQ2xhc3MpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmJ1aWx0SW5UZXh0Q29sb3JDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnVpbHRJbkJhY2tncm91bmRDb2xvckNsYXNzKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2godGhpcy5idWlsdEluQmFja2dyb3VuZENvbG9yQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFkZ2VDbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbWJpbmVCYWRnZURpc3BsYXlDb250ZW50KCkge1xuICAgICAgICB0aGlzLmRpc3BsYXlDb250ZW50ID0gdGhpcy52YWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMubWF4Q291bnQgIT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgPiB0aGlzLm1heENvdW50KSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb250ZW50ID0gYCR7dGhpcy5tYXhDb3VudH0rYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy52YWx1ZSAmJiAhdGhpcy5rZWVwU2hvd1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd0JhZGdlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd0JhZGdlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJpc1Nob3dCYWRnZVwiIGNsYXNzPVwidGh5LWJhZGdlIHt7IGJhZGdlQ2xhc3NOYW1lIH19XCIgW3N0eWxlLmNvbG9yXT1cInRleHRDb2xvclwiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCI+XG4gIDxzcGFuPnt7IGRpc3BsYXlDb250ZW50IH19PC9zcGFuPlxuPC9kaXY+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=