design-angular-kit 0.13.0 → 1.0.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +61 -31
  2. package/esm2020/design-angular-kit.mjs +5 -0
  3. package/esm2020/lib/badge/badge.directive.mjs +83 -0
  4. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +66 -0
  5. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +89 -0
  6. package/esm2020/lib/button/button.directive.mjs +185 -0
  7. package/esm2020/lib/button/button.module.mjs +18 -0
  8. package/esm2020/lib/checkbox/checkbox.component.mjs +138 -0
  9. package/esm2020/lib/collapse/collapse-group.component.mjs +57 -0
  10. package/esm2020/lib/collapse/collapse-item.component.mjs +79 -0
  11. package/esm2020/lib/collapse/collapse.config.mjs +12 -0
  12. package/esm2020/lib/collapse/collapse.directive.mjs +55 -0
  13. package/esm2020/lib/collapse/collapse.module.mjs +22 -0
  14. package/esm2020/lib/design-angular-kit.module.mjs +142 -0
  15. package/esm2020/lib/dropdown/dropdown-divider.component.mjs +11 -0
  16. package/esm2020/lib/dropdown/dropdown-item.component.mjs +97 -0
  17. package/esm2020/lib/dropdown/dropdown.component.mjs +143 -0
  18. package/esm2020/lib/dropdown/dropdown.config.mjs +12 -0
  19. package/esm2020/lib/dropdown/dropdown.directive.mjs +156 -0
  20. package/esm2020/lib/dropdown/dropdown.module.mjs +25 -0
  21. package/esm2020/lib/enums/icons.enum.mjs +27 -0
  22. package/esm2020/lib/form-input/form-input-password.utils.mjs +154 -0
  23. package/esm2020/lib/form-input/form-input.component.mjs +495 -0
  24. package/esm2020/lib/form-input/it-prefix.directive.mjs +13 -0
  25. package/esm2020/lib/form-input/it-suffix.directive.mjs +13 -0
  26. package/esm2020/lib/form-input/it-text-prefix.directive.mjs +13 -0
  27. package/esm2020/lib/form-input/it-text-suffix.directive.mjs +13 -0
  28. package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +36 -0
  29. package/esm2020/lib/icon/icon.component.mjs +87 -0
  30. package/esm2020/lib/icon/icon.module.mjs +18 -0
  31. package/esm2020/lib/models/Alignment.mjs +15 -0
  32. package/esm2020/lib/models/ButtonSize.mjs +15 -0
  33. package/esm2020/lib/models/InputType.mjs +44 -0
  34. package/esm2020/lib/models/ThemeColor.mjs +30 -0
  35. package/esm2020/lib/popover/popover.config.mjs +17 -0
  36. package/esm2020/lib/popover/popover.directive.mjs +33 -0
  37. package/esm2020/lib/popover/popover.module.mjs +19 -0
  38. package/esm2020/lib/progress-bar/progress-bar.component.mjs +98 -0
  39. package/esm2020/lib/radio/radio.component.mjs +287 -0
  40. package/esm2020/lib/radio/unique-selection-dispatcher.mjs +55 -0
  41. package/esm2020/lib/tabs/tab-group.component.mjs +177 -0
  42. package/esm2020/lib/tabs/tab.component.mjs +73 -0
  43. package/esm2020/lib/tabs/tabs.module.mjs +20 -0
  44. package/esm2020/lib/toggle/toggle.component.mjs +86 -0
  45. package/esm2020/lib/tooltip/tooltip.config.mjs +17 -0
  46. package/esm2020/lib/tooltip/tooltip.directive.mjs +43 -0
  47. package/esm2020/lib/tooltip/tooltip.module.mjs +19 -0
  48. package/esm2020/lib/util/focus-mouse.directive.mjs +32 -0
  49. package/esm2020/lib/util/util.mjs +12 -0
  50. package/esm2020/lib/util/utils.module.mjs +16 -0
  51. package/esm2020/public_api.mjs +40 -0
  52. package/fesm2015/design-angular-kit.mjs +3181 -0
  53. package/fesm2015/design-angular-kit.mjs.map +1 -0
  54. package/fesm2020/design-angular-kit.mjs +3160 -0
  55. package/fesm2020/design-angular-kit.mjs.map +1 -0
  56. package/index.d.ts +5 -0
  57. package/lib/badge/badge.directive.d.ts +11 -5
  58. package/lib/breadcrumb/breadcrumb-item.component.d.ts +16 -5
  59. package/lib/breadcrumb/breadcrumb.component.d.ts +12 -5
  60. package/lib/button/button.directive.d.ts +72 -0
  61. package/lib/button/button.module.d.ts +8 -0
  62. package/lib/checkbox/checkbox.component.d.ts +25 -5
  63. package/lib/collapse/collapse-group.component.d.ts +6 -2
  64. package/lib/collapse/collapse-item.component.d.ts +16 -8
  65. package/lib/collapse/collapse.config.d.ts +6 -0
  66. package/lib/collapse/collapse.directive.d.ts +13 -28
  67. package/lib/collapse/collapse.module.d.ts +12 -0
  68. package/lib/design-angular-kit.module.d.ts +27 -0
  69. package/lib/dropdown/dropdown-divider.component.d.ts +3 -0
  70. package/lib/dropdown/dropdown-item.component.d.ts +22 -8
  71. package/lib/dropdown/dropdown.component.d.ts +34 -26
  72. package/lib/dropdown/dropdown.config.d.ts +6 -0
  73. package/lib/dropdown/dropdown.directive.d.ts +77 -0
  74. package/lib/dropdown/dropdown.module.d.ts +15 -0
  75. package/lib/enums/icons.enum.d.ts +23 -0
  76. package/lib/form-input/form-input-password.utils.d.ts +45 -0
  77. package/lib/form-input/form-input.component.d.ts +202 -20
  78. package/lib/form-input/it-prefix.directive.d.ts +5 -0
  79. package/lib/form-input/it-suffix.directive.d.ts +5 -0
  80. package/lib/form-input/it-text-prefix.directive.d.ts +5 -0
  81. package/lib/form-input/it-text-suffix.directive.d.ts +5 -0
  82. package/lib/form-input/mark-matching-text.pipe.d.ts +10 -0
  83. package/lib/icon/icon.component.d.ts +34 -0
  84. package/lib/icon/icon.module.d.ts +8 -0
  85. package/lib/models/Alignment.d.ts +12 -0
  86. package/lib/models/ButtonSize.d.ts +1 -1
  87. package/lib/models/InputType.d.ts +22 -1
  88. package/lib/models/ThemeColor.d.ts +1 -1
  89. package/lib/popover/popover.config.d.ts +5 -6
  90. package/lib/popover/popover.directive.d.ts +13 -108
  91. package/lib/popover/popover.module.d.ts +9 -0
  92. package/lib/progress-bar/progress-bar.component.d.ts +25 -19
  93. package/lib/radio/radio.component.d.ts +22 -10
  94. package/lib/radio/unique-selection-dispatcher.d.ts +3 -0
  95. package/lib/tabs/tab-group.component.d.ts +17 -11
  96. package/lib/tabs/tab.component.d.ts +6 -2
  97. package/lib/tabs/tabs.module.d.ts +10 -0
  98. package/lib/toggle/toggle.component.d.ts +9 -4
  99. package/lib/tooltip/tooltip.config.d.ts +7 -7
  100. package/lib/tooltip/tooltip.directive.d.ts +12 -92
  101. package/lib/tooltip/tooltip.module.d.ts +9 -0
  102. package/lib/util/focus-mouse.directive.d.ts +13 -0
  103. package/lib/util/utils.module.d.ts +7 -0
  104. package/package.json +34 -20
  105. package/public_api.d.ts +16 -2
  106. package/bundles/design-angular-kit.umd.js +0 -6258
  107. package/bundles/design-angular-kit.umd.js.map +0 -1
  108. package/bundles/design-angular-kit.umd.min.js +0 -31
  109. package/bundles/design-angular-kit.umd.min.js.map +0 -1
  110. package/design-angular-kit.d.ts +0 -8
  111. package/design-angular-kit.metadata.json +0 -1
  112. package/esm2015/design-angular-kit.js +0 -14
  113. package/esm2015/lib/badge/badge.directive.js +0 -116
  114. package/esm2015/lib/breadcrumb/breadcrumb-item.component.js +0 -117
  115. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -128
  116. package/esm2015/lib/button/button.component.js +0 -165
  117. package/esm2015/lib/checkbox/checkbox.component.js +0 -170
  118. package/esm2015/lib/collapse/collapse-group.component.js +0 -87
  119. package/esm2015/lib/collapse/collapse-item.component.js +0 -148
  120. package/esm2015/lib/collapse/collapse.directive.js +0 -153
  121. package/esm2015/lib/design-angular-kit.module.js +0 -90
  122. package/esm2015/lib/dropdown/dropdown-divider.component.js +0 -18
  123. package/esm2015/lib/dropdown/dropdown-header.component.js +0 -29
  124. package/esm2015/lib/dropdown/dropdown-item.component.js +0 -157
  125. package/esm2015/lib/dropdown/dropdown.component.js +0 -248
  126. package/esm2015/lib/form-input/form-input.component.js +0 -489
  127. package/esm2015/lib/models/ButtonSize.js +0 -25
  128. package/esm2015/lib/models/IconPosition.js +0 -21
  129. package/esm2015/lib/models/InputType.js +0 -33
  130. package/esm2015/lib/models/InteractionTrigger.js +0 -35
  131. package/esm2015/lib/models/ThemeColor.js +0 -45
  132. package/esm2015/lib/popover/popover.component.js +0 -134
  133. package/esm2015/lib/popover/popover.config.js +0 -35
  134. package/esm2015/lib/popover/popover.directive.js +0 -433
  135. package/esm2015/lib/popover/popup.js +0 -105
  136. package/esm2015/lib/popover/positioning.js +0 -349
  137. package/esm2015/lib/popover/triggers.js +0 -99
  138. package/esm2015/lib/progress-bar/progress-bar.component.js +0 -170
  139. package/esm2015/lib/radio/radio.component.js +0 -526
  140. package/esm2015/lib/radio/unique-selection-dispatcher.js +0 -70
  141. package/esm2015/lib/tabs/tab-group.component.js +0 -339
  142. package/esm2015/lib/tabs/tab.component.js +0 -143
  143. package/esm2015/lib/toggle/toggle.component.js +0 -173
  144. package/esm2015/lib/tooltip/popup.js +0 -105
  145. package/esm2015/lib/tooltip/positioning.js +0 -349
  146. package/esm2015/lib/tooltip/tooltip.component.js +0 -77
  147. package/esm2015/lib/tooltip/tooltip.config.js +0 -31
  148. package/esm2015/lib/tooltip/tooltip.directive.js +0 -384
  149. package/esm2015/lib/tooltip/triggers.js +0 -99
  150. package/esm2015/lib/util/util.js +0 -30
  151. package/esm2015/public_api.js +0 -31
  152. package/esm5/design-angular-kit.js +0 -14
  153. package/esm5/lib/badge/badge.directive.js +0 -145
  154. package/esm5/lib/breadcrumb/breadcrumb-item.component.js +0 -135
  155. package/esm5/lib/breadcrumb/breadcrumb.component.js +0 -164
  156. package/esm5/lib/button/button.component.js +0 -221
  157. package/esm5/lib/checkbox/checkbox.component.js +0 -200
  158. package/esm5/lib/collapse/collapse-group.component.js +0 -102
  159. package/esm5/lib/collapse/collapse-item.component.js +0 -183
  160. package/esm5/lib/collapse/collapse.directive.js +0 -210
  161. package/esm5/lib/design-angular-kit.module.js +0 -94
  162. package/esm5/lib/dropdown/dropdown-divider.component.js +0 -20
  163. package/esm5/lib/dropdown/dropdown-header.component.js +0 -27
  164. package/esm5/lib/dropdown/dropdown-item.component.js +0 -197
  165. package/esm5/lib/dropdown/dropdown.component.js +0 -309
  166. package/esm5/lib/form-input/form-input.component.js +0 -582
  167. package/esm5/lib/models/ButtonSize.js +0 -25
  168. package/esm5/lib/models/IconPosition.js +0 -21
  169. package/esm5/lib/models/InputType.js +0 -33
  170. package/esm5/lib/models/InteractionTrigger.js +0 -35
  171. package/esm5/lib/models/ThemeColor.js +0 -45
  172. package/esm5/lib/popover/popover.component.js +0 -144
  173. package/esm5/lib/popover/popover.config.js +0 -37
  174. package/esm5/lib/popover/popover.directive.js +0 -573
  175. package/esm5/lib/popover/popup.js +0 -116
  176. package/esm5/lib/popover/positioning.js +0 -446
  177. package/esm5/lib/popover/triggers.js +0 -115
  178. package/esm5/lib/progress-bar/progress-bar.component.js +0 -218
  179. package/esm5/lib/radio/radio.component.js +0 -610
  180. package/esm5/lib/radio/unique-selection-dispatcher.js +0 -108
  181. package/esm5/lib/tabs/tab-group.component.js +0 -401
  182. package/esm5/lib/tabs/tab.component.js +0 -156
  183. package/esm5/lib/toggle/toggle.component.js +0 -200
  184. package/esm5/lib/tooltip/popup.js +0 -116
  185. package/esm5/lib/tooltip/positioning.js +0 -446
  186. package/esm5/lib/tooltip/tooltip.component.js +0 -80
  187. package/esm5/lib/tooltip/tooltip.config.js +0 -33
  188. package/esm5/lib/tooltip/tooltip.directive.js +0 -516
  189. package/esm5/lib/tooltip/triggers.js +0 -115
  190. package/esm5/lib/util/util.js +0 -48
  191. package/esm5/public_api.js +0 -31
  192. package/fesm2015/design-angular-kit.js +0 -5094
  193. package/fesm2015/design-angular-kit.js.map +0 -1
  194. package/fesm5/design-angular-kit.js +0 -6314
  195. package/fesm5/design-angular-kit.js.map +0 -1
  196. package/lib/button/button.component.d.ts +0 -50
  197. package/lib/dropdown/dropdown-header.component.d.ts +0 -3
  198. package/lib/models/IconPosition.d.ts +0 -9
  199. package/lib/models/InteractionTrigger.d.ts +0 -19
  200. package/lib/popover/popover.component.d.ts +0 -25
  201. package/lib/popover/popup.d.ts +0 -27
  202. package/lib/popover/positioning.d.ts +0 -32
  203. package/lib/popover/triggers.d.ts +0 -18
  204. package/lib/tooltip/popup.d.ts +0 -27
  205. package/lib/tooltip/positioning.d.ts +0 -32
  206. package/lib/tooltip/tooltip.component.d.ts +0 -20
  207. package/lib/tooltip/triggers.d.ts +0 -18
@@ -1,610 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
4
- */
5
- import { Component, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, ChangeDetectionStrategy, Directive, ContentChildren, QueryList, Optional, HostBinding } from '@angular/core';
6
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
- import { UniqueSelectionDispatcher } from './unique-selection-dispatcher';
8
- /** @type {?} */
9
- var identifier = 0;
10
- /**
11
- * @param {?} value
12
- * @return {?}
13
- */
14
- function _coerceBooleanProperty(value) {
15
- return value != null && "" + value !== 'false';
16
- }
17
- var RadioChange = /** @class */ (function () {
18
- function RadioChange(source, value) {
19
- this.source = source;
20
- this.value = value;
21
- }
22
- return RadioChange;
23
- }());
24
- export { RadioChange };
25
- if (false) {
26
- /** @type {?} */
27
- RadioChange.prototype.source;
28
- /** @type {?} */
29
- RadioChange.prototype.value;
30
- }
31
- var RadioGroupDirective = /** @class */ (function () {
32
- function RadioGroupDirective(_changeDetector) {
33
- this._changeDetector = _changeDetector;
34
- this.role = 'radiogroup';
35
- /**
36
- * Il valore selezionato per il gruppo. Dovrebbe essere uguale al valore del radio button selezionato se
37
- * *esiste* un radio button con un valore corrispondente. Se *non esiste* un radio button corrispondente
38
- * questo valore persiste ed è applicato nel caso in cui un nuovo radio button viene aggiunto con il valore
39
- * corrispondente.
40
- */
41
- this._value = null;
42
- /**
43
- * L'attributo HTML name da applicare ai radio button in questo gruppo
44
- */
45
- this._name = "it-radio-group-" + identifier++;
46
- /**
47
- * Il radio button attualmente selezionato.
48
- */
49
- this._selected = null;
50
- /**
51
- * se `value` è stato settato al suo valore iniziale.
52
- */
53
- this._isInitialized = false;
54
- /**
55
- * Se il radio group è disabilitato.
56
- */
57
- this._disabled = false;
58
- /**
59
- * Evento emesso quando il valore del gruppo cambia.
60
- * Gli eventi di change sono emessi soltanto quando il valore cambia a causa dell'interazione dell'utente
61
- * con il radio button (stesso comportamento di `<input type-"radio">`).
62
- */
63
- this.change = new EventEmitter();
64
- /**
65
- * Il metodo da chiamare per aggiornare ngModel
66
- */
67
- this._controlValueAccessorChangeFn = function () { };
68
- this.onTouched = function () { };
69
- }
70
- Object.defineProperty(RadioGroupDirective.prototype, "name", {
71
- /** Nome del gruppo di radio button. Tutti i radio button all'interno del gruppo avranno questo nome. */
72
- get: /**
73
- * Nome del gruppo di radio button. Tutti i radio button all'interno del gruppo avranno questo nome.
74
- * @return {?}
75
- */
76
- function () { return this._name; },
77
- set: /**
78
- * @param {?} value
79
- * @return {?}
80
- */
81
- function (value) {
82
- this._name = value;
83
- this._updateRadioButtonNames();
84
- },
85
- enumerable: true,
86
- configurable: true
87
- });
88
- Object.defineProperty(RadioGroupDirective.prototype, "value", {
89
- /** Valore del radio button. */
90
- get: /**
91
- * Valore del radio button.
92
- * @return {?}
93
- */
94
- function () { return this._value; },
95
- set: /**
96
- * @param {?} newValue
97
- * @return {?}
98
- */
99
- function (newValue) {
100
- if (this._value !== newValue) {
101
- this._value = newValue;
102
- this._updateSelectedRadioFromValue();
103
- this._checkSelectedRadioButton();
104
- }
105
- },
106
- enumerable: true,
107
- configurable: true
108
- });
109
- /**
110
- * @return {?}
111
- */
112
- RadioGroupDirective.prototype._checkSelectedRadioButton = /**
113
- * @return {?}
114
- */
115
- function () {
116
- if (this._selected && !this._selected.checked) {
117
- this._selected.checked = true;
118
- }
119
- };
120
- Object.defineProperty(RadioGroupDirective.prototype, "selected", {
121
- /** Il radio button selezionato. */
122
- get: /**
123
- * Il radio button selezionato.
124
- * @return {?}
125
- */
126
- function () { return this._selected; },
127
- set: /**
128
- * @param {?} selected
129
- * @return {?}
130
- */
131
- function (selected) {
132
- this._selected = selected;
133
- this.value = selected ? selected.value : null;
134
- this._checkSelectedRadioButton();
135
- },
136
- enumerable: true,
137
- configurable: true
138
- });
139
- Object.defineProperty(RadioGroupDirective.prototype, "disabled", {
140
- /** Se il gruppo è disabled */
141
- get: /**
142
- * Se il gruppo è disabled
143
- * @return {?}
144
- */
145
- function () { return this._disabled; },
146
- set: /**
147
- * @param {?} value
148
- * @return {?}
149
- */
150
- function (value) {
151
- this._disabled = _coerceBooleanProperty(value);
152
- this._markRadiosForCheck();
153
- },
154
- enumerable: true,
155
- configurable: true
156
- });
157
- /**
158
- * Inizializza le proprietà quando il contenuto dei figliè disponibile.
159
- * Questo permette di propagare gli attributi rilevanti ai radio buttons associati.
160
- */
161
- /**
162
- * Inizializza le proprietà quando il contenuto dei figliè disponibile.
163
- * Questo permette di propagare gli attributi rilevanti ai radio buttons associati.
164
- * @return {?}
165
- */
166
- RadioGroupDirective.prototype.ngAfterContentInit = /**
167
- * Inizializza le proprietà quando il contenuto dei figliè disponibile.
168
- * Questo permette di propagare gli attributi rilevanti ai radio buttons associati.
169
- * @return {?}
170
- */
171
- function () {
172
- this._isInitialized = true;
173
- };
174
- /**
175
- * @return {?}
176
- */
177
- RadioGroupDirective.prototype._touch = /**
178
- * @return {?}
179
- */
180
- function () {
181
- if (this.onTouched) {
182
- this.onTouched();
183
- }
184
- };
185
- /**
186
- * @return {?}
187
- */
188
- RadioGroupDirective.prototype._updateRadioButtonNames = /**
189
- * @return {?}
190
- */
191
- function () {
192
- var _this = this;
193
- if (this._radios) {
194
- this._radios.forEach(function (radio) {
195
- radio.name = _this.name;
196
- });
197
- }
198
- };
199
- /**
200
- * Aggiorna il radio button `selected` a seconda del suo _value.
201
- * @return {?}
202
- */
203
- RadioGroupDirective.prototype._updateSelectedRadioFromValue = /**
204
- * Aggiorna il radio button `selected` a seconda del suo _value.
205
- * @return {?}
206
- */
207
- function () {
208
- var _this = this;
209
- this._selected = null;
210
- this._radios.forEach(function (radio) {
211
- radio.checked = _this.value === radio.value;
212
- if (radio.checked) {
213
- _this._selected = radio;
214
- }
215
- });
216
- };
217
- /** Invia l'evento change con la selezione corrente e il valore del gruppo. */
218
- /**
219
- * Invia l'evento change con la selezione corrente e il valore del gruppo.
220
- * @return {?}
221
- */
222
- RadioGroupDirective.prototype._emitChangeEvent = /**
223
- * Invia l'evento change con la selezione corrente e il valore del gruppo.
224
- * @return {?}
225
- */
226
- function () {
227
- if (this._isInitialized) {
228
- this.change.emit(new RadioChange(this._selected, this._value));
229
- }
230
- };
231
- /**
232
- * @return {?}
233
- */
234
- RadioGroupDirective.prototype._markRadiosForCheck = /**
235
- * @return {?}
236
- */
237
- function () {
238
- if (this._radios) {
239
- this._radios.forEach(function (radio) { return radio._markForCheck(); });
240
- }
241
- };
242
- /**
243
- * @param {?} value
244
- * @return {?}
245
- */
246
- RadioGroupDirective.prototype.writeValue = /**
247
- * @param {?} value
248
- * @return {?}
249
- */
250
- function (value) {
251
- this.value = value;
252
- this._changeDetector.markForCheck();
253
- };
254
- /**
255
- * @param {?} fn
256
- * @return {?}
257
- */
258
- RadioGroupDirective.prototype.registerOnChange = /**
259
- * @param {?} fn
260
- * @return {?}
261
- */
262
- function (fn) {
263
- this._controlValueAccessorChangeFn = fn;
264
- };
265
- /**
266
- * @param {?} fn
267
- * @return {?}
268
- */
269
- RadioGroupDirective.prototype.registerOnTouched = /**
270
- * @param {?} fn
271
- * @return {?}
272
- */
273
- function (fn) {
274
- this.onTouched = fn;
275
- };
276
- RadioGroupDirective.decorators = [
277
- { type: Directive, args: [{
278
- selector: 'it-radio-group',
279
- // tslint:disable-line
280
- exportAs: 'itRadioGroup',
281
- providers: [{
282
- provide: NG_VALUE_ACCESSOR,
283
- useExisting: forwardRef(function () { return RadioGroupDirective; }),
284
- multi: true
285
- }]
286
- },] },
287
- ];
288
- /** @nocollapse */
289
- RadioGroupDirective.ctorParameters = function () { return [
290
- { type: ChangeDetectorRef }
291
- ]; };
292
- RadioGroupDirective.propDecorators = {
293
- role: [{ type: HostBinding, args: ['attr.role',] }],
294
- change: [{ type: Output }],
295
- _radios: [{ type: ContentChildren, args: [forwardRef(function () { return RadioButtonComponent; }), { descendants: true },] }],
296
- name: [{ type: Input }],
297
- value: [{ type: Input }],
298
- selected: [{ type: Input }],
299
- disabled: [{ type: Input }]
300
- };
301
- return RadioGroupDirective;
302
- }());
303
- export { RadioGroupDirective };
304
- if (false) {
305
- /** @type {?} */
306
- RadioGroupDirective.prototype.role;
307
- /**
308
- * Il valore selezionato per il gruppo. Dovrebbe essere uguale al valore del radio button selezionato se
309
- * *esiste* un radio button con un valore corrispondente. Se *non esiste* un radio button corrispondente
310
- * questo valore persiste ed è applicato nel caso in cui un nuovo radio button viene aggiunto con il valore
311
- * corrispondente.
312
- * @type {?}
313
- */
314
- RadioGroupDirective.prototype._value;
315
- /**
316
- * L'attributo HTML name da applicare ai radio button in questo gruppo
317
- * @type {?}
318
- */
319
- RadioGroupDirective.prototype._name;
320
- /**
321
- * Il radio button attualmente selezionato.
322
- * @type {?}
323
- */
324
- RadioGroupDirective.prototype._selected;
325
- /**
326
- * se `value` è stato settato al suo valore iniziale.
327
- * @type {?}
328
- */
329
- RadioGroupDirective.prototype._isInitialized;
330
- /**
331
- * Se il radio group è disabilitato.
332
- * @type {?}
333
- */
334
- RadioGroupDirective.prototype._disabled;
335
- /**
336
- * Evento emesso quando il valore del gruppo cambia.
337
- * Gli eventi di change sono emessi soltanto quando il valore cambia a causa dell'interazione dell'utente
338
- * con il radio button (stesso comportamento di `<input type-"radio">`).
339
- * @type {?}
340
- */
341
- RadioGroupDirective.prototype.change;
342
- /**
343
- * radio buttons figli.
344
- * @type {?}
345
- */
346
- RadioGroupDirective.prototype._radios;
347
- /**
348
- * Il metodo da chiamare per aggiornare ngModel
349
- * @type {?}
350
- */
351
- RadioGroupDirective.prototype._controlValueAccessorChangeFn;
352
- /** @type {?} */
353
- RadioGroupDirective.prototype.onTouched;
354
- /** @type {?} */
355
- RadioGroupDirective.prototype._changeDetector;
356
- }
357
- /**
358
- * Un radio button con design bootstrap italia. Supporta tutte le funzionalità di una radio HTML5,
359
- * ed espone una API simile. Una `<it-radio-button>` può essere checked, unchecked, o disabled.
360
- */
361
- var RadioButtonComponent = /** @class */ (function () {
362
- function RadioButtonComponent(radioGroup, _changeDetector, _radioDispatcher) {
363
- var _this = this;
364
- this._changeDetector = _changeDetector;
365
- this._radioDispatcher = _radioDispatcher;
366
- this.id = "radio-" + identifier++;
367
- /**
368
- * Evento emesso quando il valore `checked` del radio button cambia.
369
- */
370
- this.change = new EventEmitter();
371
- /**
372
- * Se il radio button è checked.
373
- */
374
- this._checked = false;
375
- /**
376
- * il valore assegnato al radio button.
377
- */
378
- this._value = null;
379
- this._removeUniqueSelectionListener = function () { };
380
- this.radioGroup = radioGroup;
381
- this._removeUniqueSelectionListener =
382
- _radioDispatcher.listen(function (id, name) {
383
- if (id !== _this.id && name === _this.name) {
384
- _this.checked = false;
385
- }
386
- });
387
- }
388
- Object.defineProperty(RadioButtonComponent.prototype, "checked", {
389
- /** se il radio button è checked. */
390
- get: /**
391
- * se il radio button è checked.
392
- * @return {?}
393
- */
394
- function () { return this._checked; },
395
- set: /**
396
- * @param {?} value
397
- * @return {?}
398
- */
399
- function (value) {
400
- /** @type {?} */
401
- var newCheckedState = _coerceBooleanProperty(value);
402
- if (this._checked !== newCheckedState) {
403
- this._checked = newCheckedState;
404
- if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {
405
- this.radioGroup.selected = this;
406
- }
407
- else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {
408
- this.radioGroup.selected = null;
409
- }
410
- if (newCheckedState) {
411
- this._radioDispatcher.notify(this.id, this.name);
412
- }
413
- this._changeDetector.markForCheck();
414
- }
415
- },
416
- enumerable: true,
417
- configurable: true
418
- });
419
- Object.defineProperty(RadioButtonComponent.prototype, "value", {
420
- /** Il valore di questo radio button. */
421
- get: /**
422
- * Il valore di questo radio button.
423
- * @return {?}
424
- */
425
- function () { return this._value; },
426
- set: /**
427
- * @param {?} value
428
- * @return {?}
429
- */
430
- function (value) {
431
- if (this._value !== value) {
432
- this._value = value;
433
- if (this.radioGroup !== null) {
434
- if (!this.checked) {
435
- this.checked = this.radioGroup.value === value;
436
- }
437
- if (this.checked) {
438
- this.radioGroup.selected = this;
439
- }
440
- }
441
- }
442
- },
443
- enumerable: true,
444
- configurable: true
445
- });
446
- Object.defineProperty(RadioButtonComponent.prototype, "disabled", {
447
- /** Se il radio button è disabled. */
448
- get: /**
449
- * Se il radio button è disabled.
450
- * @return {?}
451
- */
452
- function () {
453
- return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);
454
- },
455
- set: /**
456
- * @param {?} value
457
- * @return {?}
458
- */
459
- function (value) {
460
- /** @type {?} */
461
- var newDisabledState = !!value;
462
- if (this._disabled !== newDisabledState) {
463
- this._disabled = newDisabledState;
464
- this._changeDetector.markForCheck();
465
- }
466
- },
467
- enumerable: true,
468
- configurable: true
469
- });
470
- /**
471
- * Segna il radio button come da controllare per la change detection.
472
- */
473
- /**
474
- * Segna il radio button come da controllare per la change detection.
475
- * @return {?}
476
- */
477
- RadioButtonComponent.prototype._markForCheck = /**
478
- * Segna il radio button come da controllare per la change detection.
479
- * @return {?}
480
- */
481
- function () {
482
- this._changeDetector.markForCheck();
483
- };
484
- /**
485
- * @return {?}
486
- */
487
- RadioButtonComponent.prototype.ngOnInit = /**
488
- * @return {?}
489
- */
490
- function () {
491
- if (this.radioGroup) {
492
- // Se il radio button è all'interno di un gruppo, determina se deve essere selezionato
493
- this.checked = this.radioGroup.value === this._value;
494
- // Copia il `name` del radio group
495
- this.name = this.radioGroup.name;
496
- }
497
- };
498
- /**
499
- * @return {?}
500
- */
501
- RadioButtonComponent.prototype.ngOnDestroy = /**
502
- * @return {?}
503
- */
504
- function () {
505
- this._removeUniqueSelectionListener();
506
- };
507
- /**
508
- * @return {?}
509
- */
510
- RadioButtonComponent.prototype._emitChangeEvent = /**
511
- * @return {?}
512
- */
513
- function () {
514
- this.change.emit(new RadioChange(this, this._value));
515
- };
516
- /**
517
- * @param {?} event
518
- * @return {?}
519
- */
520
- RadioButtonComponent.prototype._onInputChange = /**
521
- * @param {?} event
522
- * @return {?}
523
- */
524
- function (event) {
525
- event.stopPropagation();
526
- /** @type {?} */
527
- var groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;
528
- this.checked = true;
529
- this._emitChangeEvent();
530
- if (this.radioGroup) {
531
- this.radioGroup._controlValueAccessorChangeFn(this.value);
532
- this.radioGroup._touch();
533
- if (groupValueChanged) {
534
- this.radioGroup._emitChangeEvent();
535
- }
536
- }
537
- };
538
- RadioButtonComponent.decorators = [
539
- { type: Component, args: [{
540
- selector: 'it-radio-button',
541
- template: "<div class=\"form-check\">\n <input type=\"radio\"\n [id]=\"id\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n (change)=\"_onInputChange($event)\">\n <label\n [attr.for]=\"id\">{{label}}</label>\n</div>\n",
542
- styles: [""],
543
- exportAs: 'itRadioButton',
544
- changeDetection: ChangeDetectionStrategy.OnPush
545
- },] },
546
- ];
547
- /** @nocollapse */
548
- RadioButtonComponent.ctorParameters = function () { return [
549
- { type: RadioGroupDirective, decorators: [{ type: Optional }] },
550
- { type: ChangeDetectorRef },
551
- { type: UniqueSelectionDispatcher }
552
- ]; };
553
- RadioButtonComponent.propDecorators = {
554
- name: [{ type: Input }],
555
- label: [{ type: Input }],
556
- checked: [{ type: Input }],
557
- value: [{ type: Input }],
558
- disabled: [{ type: Input }],
559
- change: [{ type: Output }]
560
- };
561
- return RadioButtonComponent;
562
- }());
563
- export { RadioButtonComponent };
564
- if (false) {
565
- /** @type {?} */
566
- RadioButtonComponent.prototype.id;
567
- /**
568
- * Attributo 'name' usato per raggruppare i radio button per un'unica selezione.
569
- * @type {?}
570
- */
571
- RadioButtonComponent.prototype.name;
572
- /**
573
- * L'etichetta delradio button.
574
- * @type {?}
575
- */
576
- RadioButtonComponent.prototype.label;
577
- /**
578
- * Evento emesso quando il valore `checked` del radio button cambia.
579
- * @type {?}
580
- */
581
- RadioButtonComponent.prototype.change;
582
- /**
583
- * Il radio group padre. Può essere presente o meno.
584
- * @type {?}
585
- */
586
- RadioButtonComponent.prototype.radioGroup;
587
- /**
588
- * Se il radio button è checked.
589
- * @type {?}
590
- */
591
- RadioButtonComponent.prototype._checked;
592
- /**
593
- * Se il radio button è disabled.
594
- * @type {?}
595
- */
596
- RadioButtonComponent.prototype._disabled;
597
- /**
598
- * il valore assegnato al radio button.
599
- * @type {?}
600
- */
601
- RadioButtonComponent.prototype._value;
602
- /** @type {?} */
603
- RadioButtonComponent.prototype._removeUniqueSelectionListener;
604
- /** @type {?} */
605
- RadioButtonComponent.prototype._changeDetector;
606
- /** @type {?} */
607
- RadioButtonComponent.prototype._radioDispatcher;
608
- }
609
-
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGVzaWduLWFuZ3VsYXIta2l0LyIsInNvdXJjZXMiOlsibGliL3JhZGlvL3JhZGlvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFHVCxRQUFRLEVBQ1IsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFMUUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDOzs7OztBQUVuQixnQ0FBZ0MsS0FBVTtJQUN4QyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFHLEtBQU8sS0FBSyxPQUFPLENBQUM7Q0FDaEQ7QUFFRCxJQUFBO0lBQ0UscUJBQ1MsUUFDQTtRQURBLFdBQU0sR0FBTixNQUFNO1FBQ04sVUFBSyxHQUFMLEtBQUs7S0FDVDtzQkE5QlA7SUErQkMsQ0FBQTtBQUxELHVCQUtDOzs7Ozs7OztJQStGQyw2QkFDVTtRQUFBLG9CQUFlLEdBQWYsZUFBZTtvQkFuRlEsWUFBWTs7Ozs7OztzQkFRdkIsSUFBSTs7OztxQkFHVixvQkFBa0IsVUFBVSxFQUFJOzs7O3lCQUdDLElBQUk7Ozs7OEJBRzVCLEtBQUs7Ozs7eUJBR1YsS0FBSzs7Ozs7O3NCQVM4QixJQUFJLFlBQVksRUFBZTs7Ozs2Q0FNaEMsZUFBUzt5QkFFeEMsZUFBUztLQStDM0I7SUE1Q0wsc0JBQ0kscUNBQUk7UUFGUix3R0FBd0c7Ozs7O1FBQ3hHLGNBQ3FCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7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QUMsQ0FBQyxDQUFDOzs7Ozs7SUFHdkQsNkNBQWM7Ozs7SUFBZCxVQUFlLEtBQVk7UUFDekIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDOztRQUV4QixJQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNsRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3BDO1NBQ0Y7S0FDRjs7Z0JBdkpGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsK1BBVVg7b0JBQ0MsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxlQUFlO29CQUN6QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7Ozs7Z0JBbUYyQixtQkFBbUIsdUJBQTFDLFFBQVE7Z0JBaFNYLGlCQUFpQjtnQkFhVix5QkFBeUI7Ozt1QkFzTS9CLEtBQUs7d0JBR0wsS0FBSzswQkFJTCxLQUFLO3dCQXFCTCxLQUFLOzJCQWlCTCxLQUFLO3lCQWVMLE1BQU07OytCQXBSVDs7U0FtTmEsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBmb3J3YXJkUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBIb3N0QmluZGluZ1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFVuaXF1ZVNlbGVjdGlvbkRpc3BhdGNoZXIgfSBmcm9tICcuL3VuaXF1ZS1zZWxlY3Rpb24tZGlzcGF0Y2hlcic7XG5cbmxldCBpZGVudGlmaWVyID0gMDtcblxuZnVuY3Rpb24gX2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGAke3ZhbHVlfWAgIT09ICdmYWxzZSc7XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0NoYW5nZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzb3VyY2U6IFJhZGlvQnV0dG9uQ29tcG9uZW50LFxuICAgIHB1YmxpYyB2YWx1ZTogYW55XG4gICkgeyB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2l0LXJhZGlvLWdyb3VwJywgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuICBleHBvcnRBczogJ2l0UmFkaW9Hcm91cCcsXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYWRpb0dyb3VwRGlyZWN0aXZlKSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0dyb3VwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdyYWRpb2dyb3VwJztcblxuICAvKipcbiAgICogSWwgdmFsb3JlIHNlbGV6aW9uYXRvIHBlciBpbCBncnVwcG8uIERvdnJlYmJlIGVzc2VyZSB1Z3VhbGUgYWwgdmFsb3JlIGRlbCByYWRpbyBidXR0b24gc2VsZXppb25hdG8gc2VcbiAgICogKmVzaXN0ZSogdW4gcmFkaW8gYnV0dG9uIGNvbiB1biB2YWxvcmUgY29ycmlzcG9uZGVudGUuIFNlICpub24gZXNpc3RlKiB1biByYWRpbyBidXR0b24gY29ycmlzcG9uZGVudGVcbiAgICogcXVlc3RvIHZhbG9yZSBwZXJzaXN0ZSBlZCDDqCBhcHBsaWNhdG8gbmVsIGNhc28gaW4gY3VpIHVuIG51b3ZvIHJhZGlvIGJ1dHRvbiB2aWVuZSBhZ2dpdW50byBjb24gaWwgdmFsb3JlXG4gICAqIGNvcnJpc3BvbmRlbnRlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IG51bGw7XG5cbiAgLyoqIEwnYXR0cmlidXRvIEhUTUwgbmFtZSBkYSBhcHBsaWNhcmUgYWkgcmFkaW8gYnV0dG9uIGluIHF1ZXN0byBncnVwcG8gKi9cbiAgcHJpdmF0ZSBfbmFtZSA9IGBpdC1yYWRpby1ncm91cC0ke2lkZW50aWZpZXIrK31gO1xuXG4gIC8qKiBJbCByYWRpbyBidXR0b24gYXR0dWFsbWVudGUgc2VsZXppb25hdG8uICovXG4gIHByaXZhdGUgX3NlbGVjdGVkOiBSYWRpb0J1dHRvbkNvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBzZSBgdmFsdWVgIMOoIHN0YXRvIHNldHRhdG8gYWwgc3VvIHZhbG9yZSBpbml6aWFsZS4gKi9cbiAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8qKiBTZSBpbCByYWRpbyBncm91cCDDqCBkaXNhYmlsaXRhdG8uICovXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cblxuXG4gIC8qKlxuICAgKiBFdmVudG8gZW1lc3NvIHF1YW5kbyBpbCB2YWxvcmUgZGVsIGdydXBwbyBjYW1iaWEuXG4gICAqIEdsaSBldmVudGkgZGkgY2hhbmdlIHNvbm8gZW1lc3NpIHNvbHRhbnRvIHF1YW5kbyBpbCB2YWxvcmUgY2FtYmlhIGEgY2F1c2EgZGVsbCdpbnRlcmF6aW9uZSBkZWxsJ3V0ZW50ZVxuICAgKiBjb24gaWwgcmFkaW8gYnV0dG9uIChzdGVzc28gY29tcG9ydGFtZW50byBkaSBgPGlucHV0IHR5cGUtXCJyYWRpb1wiPmApLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNoYW5nZTogRXZlbnRFbWl0dGVyPFJhZGlvQ2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmFkaW9DaGFuZ2U+KCk7XG5cbiAgLyoqIHJhZGlvIGJ1dHRvbnMgZmlnbGkuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBSYWRpb0J1dHRvbkNvbXBvbmVudCksIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgX3JhZGlvczogUXVlcnlMaXN0PFJhZGlvQnV0dG9uQ29tcG9uZW50PjsgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuXG4gIC8qKiBJbCBtZXRvZG8gZGEgY2hpYW1hcmUgcGVyIGFnZ2lvcm5hcmUgbmdNb2RlbCAqL1xuICBfY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbjogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgLyoqIE5vbWUgZGVsIGdydXBwbyBkaSByYWRpbyBidXR0b24uIFR1dHRpIGkgcmFkaW8gYnV0dG9uIGFsbCdpbnRlcm5vIGRlbCBncnVwcG8gYXZyYW5ubyBxdWVzdG8gbm9tZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX25hbWU7IH1cbiAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVSYWRpb0J1dHRvbk5hbWVzKCk7XG4gIH1cblxuICAvKiogVmFsb3JlIGRlbCByYWRpbyBidXR0b24uICovXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZFJhZGlvRnJvbVZhbHVlKCk7XG4gICAgICB0aGlzLl9jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKTtcbiAgICB9XG4gIH1cblxuICBfY2hlY2tTZWxlY3RlZFJhZGlvQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLl9zZWxlY3RlZCAmJiAhdGhpcy5fc2VsZWN0ZWQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQuY2hlY2tlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqIElsIHJhZGlvIGJ1dHRvbiBzZWxlemlvbmF0by4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7IH1cbiAgc2V0IHNlbGVjdGVkKHNlbGVjdGVkOiBSYWRpb0J1dHRvbkNvbXBvbmVudCB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZCA/IHNlbGVjdGVkLnZhbHVlIDogbnVsbDtcbiAgICB0aGlzLl9jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKTtcbiAgfVxuXG4gIC8qKiBTZSBpbCBncnVwcG8gw6ggZGlzYWJsZWQgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7IH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBfY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9tYXJrUmFkaW9zRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBJbml6aWFsaXp6YSBsZSBwcm9wcmlldMOgIHF1YW5kbyBpbCBjb250ZW51dG8gZGVpIGZpZ2xpw6ggZGlzcG9uaWJpbGUuXG4gICAqIFF1ZXN0byBwZXJtZXR0ZSBkaSBwcm9wYWdhcmUgZ2xpIGF0dHJpYnV0aSByaWxldmFudGkgYWkgcmFkaW8gYnV0dG9ucyBhc3NvY2lhdGkuXG4gICAqL1xuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBfdG91Y2goKSB7XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVJhZGlvQnV0dG9uTmFtZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JhZGlvcykge1xuICAgICAgdGhpcy5fcmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xuICAgICAgICByYWRpby5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFnZ2lvcm5hIGlsIHJhZGlvIGJ1dHRvbiBgc2VsZWN0ZWRgIGEgc2Vjb25kYSBkZWwgc3VvIF92YWx1ZS4gKi9cbiAgcHJpdmF0ZSBfdXBkYXRlU2VsZWN0ZWRSYWRpb0Zyb21WYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IG51bGw7XG4gICAgdGhpcy5fcmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xuICAgICAgcmFkaW8uY2hlY2tlZCA9IHRoaXMudmFsdWUgPT09IHJhZGlvLnZhbHVlO1xuICAgICAgaWYgKHJhZGlvLmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSByYWRpbztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBJbnZpYSBsJ2V2ZW50byBjaGFuZ2UgY29uIGxhIHNlbGV6aW9uZSBjb3JyZW50ZSBlIGlsIHZhbG9yZSBkZWwgZ3J1cHBvLiAqL1xuICBfZW1pdENoYW5nZUV2ZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KG5ldyBSYWRpb0NoYW5nZSh0aGlzLl9zZWxlY3RlZCwgdGhpcy5fdmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBfbWFya1JhZGlvc0ZvckNoZWNrKCkge1xuICAgIGlmICh0aGlzLl9yYWRpb3MpIHtcbiAgICAgIHRoaXMuX3JhZGlvcy5mb3JFYWNoKHJhZGlvID0+IHJhZGlvLl9tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxufVxuXG4vKipcbiAqIFVuIHJhZGlvIGJ1dHRvbiBjb24gZGVzaWduIGJvb3RzdHJhcCBpdGFsaWEuIFN1cHBvcnRhIHR1dHRlIGxlIGZ1bnppb25hbGl0w6AgZGkgdW5hIHJhZGlvIEhUTUw1LFxuICogZWQgZXNwb25lIHVuYSBBUEkgc2ltaWxlLiBVbmEgYDxpdC1yYWRpby1idXR0b24+YCBwdcOyIGVzc2VyZSBjaGVja2VkLCB1bmNoZWNrZWQsIG8gZGlzYWJsZWQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXJhZGlvLWJ1dHRvbicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgPGlucHV0IHR5cGU9XCJyYWRpb1wiXG4gICAgW2lkXT1cImlkXCJcbiAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgKGNoYW5nZSk9XCJfb25JbnB1dENoYW5nZSgkZXZlbnQpXCI+XG4gIDxsYWJlbFxuICAgIFthdHRyLmZvcl09XCJpZFwiPnt7bGFiZWx9fTwvbGFiZWw+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2BgXSxcbiAgZXhwb3J0QXM6ICdpdFJhZGlvQnV0dG9uJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUmFkaW9CdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgaWQgPSBgcmFkaW8tJHtpZGVudGlmaWVyKyt9YDtcblxuICAvKiogQXR0cmlidXRvICduYW1lJyB1c2F0byBwZXIgcmFnZ3J1cHBhcmUgaSByYWRpbyBidXR0b24gcGVyIHVuJ3VuaWNhIHNlbGV6aW9uZS4gKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBMJ2V0aWNoZXR0YSBkZWxyYWRpbyBidXR0b24uICovXG4gIEBJbnB1dCgpXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIHNlIGlsIHJhZGlvIGJ1dHRvbiDDqCBjaGVja2VkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7IH1cbiAgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBuZXdDaGVja2VkU3RhdGUgPSBfY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodGhpcy5fY2hlY2tlZCAhPT0gbmV3Q2hlY2tlZFN0YXRlKSB7XG4gICAgICB0aGlzLl9jaGVja2VkID0gbmV3Q2hlY2tlZFN0YXRlO1xuICAgICAgaWYgKG5ld0NoZWNrZWRTdGF0ZSAmJiB0aGlzLnJhZGlvR3JvdXAgJiYgdGhpcy5yYWRpb0dyb3VwLnZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucmFkaW9Hcm91cC5zZWxlY3RlZCA9IHRoaXM7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdDaGVja2VkU3RhdGUgJiYgdGhpcy5yYWRpb0dyb3VwICYmIHRoaXMucmFkaW9Hcm91cC52YWx1ZSA9PT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0ZWQgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3Q2hlY2tlZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JhZGlvRGlzcGF0Y2hlci5ub3RpZnkodGhpcy5pZCwgdGhpcy5uYW1lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIElsIHZhbG9yZSBkaSBxdWVzdG8gcmFkaW8gYnV0dG9uLiAqL1xuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogYW55IHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9XG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnJhZGlvR3JvdXAgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0aGlzLnJhZGlvR3JvdXAudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0ZWQgPSB0aGlzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlIGlsIHJhZGlvIGJ1dHRvbiDDqCBkaXNhYmxlZC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCAodGhpcy5yYWRpb0dyb3VwICE9PSBudWxsICYmIHRoaXMucmFkaW9Hcm91cC5kaXNhYmxlZCk7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgbmV3RGlzYWJsZWRTdGF0ZSA9ICEhdmFsdWU7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkICE9PSBuZXdEaXNhYmxlZFN0YXRlKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IG5ld0Rpc2FibGVkU3RhdGU7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZlbnRvIGVtZXNzbyBxdWFuZG8gaWwgdmFsb3JlIGBjaGVja2VkYCBkZWwgcmFkaW8gYnV0dG9uIGNhbWJpYS5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxSYWRpb0NoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFJhZGlvQ2hhbmdlPigpO1xuXG4gIC8qKiBJbCByYWRpbyBncm91cCBwYWRyZS4gUHXDsiBlc3NlcmUgcHJlc2VudGUgbyBtZW5vLiAqL1xuICByYWRpb0dyb3VwOiBSYWRpb0dyb3VwRGlyZWN0aXZlO1xuXG4gIC8qKiBTZSBpbCByYWRpbyBidXR0b24gw6ggY2hlY2tlZC4gKi9cbiAgcHJpdmF0ZSBfY2hlY2tlZCA9IGZhbHNlO1xuXG4gIC8qKiBTZSBpbCByYWRpbyBidXR0b24gw6ggZGlzYWJsZWQuICovXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKiBpbCB2YWxvcmUgYXNzZWduYXRvIGFsIHJhZGlvIGJ1dHRvbi4gKi9cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXI6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcmFkaW9Hcm91cDogUmFkaW9Hcm91cERpcmVjdGl2ZSxcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfcmFkaW9EaXNwYXRjaGVyOiBVbmlxdWVTZWxlY3Rpb25EaXNwYXRjaGVyXG4gICkge1xuICAgIHRoaXMucmFkaW9Hcm91cCA9IHJhZGlvR3JvdXA7XG5cbiAgICB0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lciA9XG4gICAgICBfcmFkaW9EaXNwYXRjaGVyLmxpc3RlbigoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChpZCAhPT0gdGhpcy5pZCAmJiBuYW1lID09PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VnbmEgaWwgcmFkaW8gYnV0dG9uIGNvbWUgZGEgY29udHJvbGxhcmUgcGVyIGxhIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqL1xuICBfbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmFkaW9Hcm91cCkge1xuICAgICAgLy8gU2UgaWwgcmFkaW8gYnV0dG9uIMOoIGFsbCdpbnRlcm5vIGRpIHVuIGdydXBwbywgZGV0ZXJtaW5hIHNlIGRldmUgZXNzZXJlIHNlbGV6aW9uYXRvXG4gICAgICB0aGlzLmNoZWNrZWQgPSB0aGlzLnJhZGlvR3JvdXAudmFsdWUgPT09IHRoaXMuX3ZhbHVlO1xuICAgICAgLy8gQ29waWEgaWwgYG5hbWVgIGRlbCByYWRpbyBncm91cFxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5yYWRpb0dyb3VwLm5hbWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRDaGFuZ2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KG5ldyBSYWRpb0NoYW5nZSh0aGlzLCB0aGlzLl92YWx1ZSkpO1xuICB9XG5cbiAgX29uSW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBncm91cFZhbHVlQ2hhbmdlZCA9IHRoaXMucmFkaW9Hcm91cCAmJiB0aGlzLnZhbHVlICE9PSB0aGlzLnJhZGlvR3JvdXAudmFsdWU7XG4gICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcblxuICAgIGlmICh0aGlzLnJhZGlvR3JvdXApIHtcbiAgICAgIHRoaXMucmFkaW9Hcm91cC5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMucmFkaW9Hcm91cC5fdG91Y2goKTtcbiAgICAgIGlmIChncm91cFZhbHVlQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJhZGlvR3JvdXAuX2VtaXRDaGFuZ2VFdmVudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19