@impartner/design-components 1.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 (315) hide show
  1. package/LICENSE.txt +11 -0
  2. package/README.md +22 -0
  3. package/constants/fontawesome-icons.d.ts +6 -0
  4. package/constants/index.d.ts +1 -0
  5. package/esm2020/constants/fontawesome-icons.mjs +3012 -0
  6. package/esm2020/constants/index.mjs +2 -0
  7. package/esm2020/impartner-design-components.mjs +5 -0
  8. package/esm2020/lib/alert/alert.component.mjs +57 -0
  9. package/esm2020/lib/alert/alert.module.mjs +18 -0
  10. package/esm2020/lib/alert/index.mjs +4 -0
  11. package/esm2020/lib/alert/theme/alert-theme.mjs +2 -0
  12. package/esm2020/lib/alert/theme/index.mjs +2 -0
  13. package/esm2020/lib/avatar/avatar.component.mjs +47 -0
  14. package/esm2020/lib/avatar/avatar.module.mjs +18 -0
  15. package/esm2020/lib/avatar/index.mjs +3 -0
  16. package/esm2020/lib/avatar-group/avatar-group.component.mjs +16 -0
  17. package/esm2020/lib/avatar-group/avatar-group.module.mjs +19 -0
  18. package/esm2020/lib/avatar-group/index.mjs +3 -0
  19. package/esm2020/lib/backdrop/backdrop.component.mjs +34 -0
  20. package/esm2020/lib/backdrop/backdrop.module.mjs +19 -0
  21. package/esm2020/lib/backdrop/index.mjs +3 -0
  22. package/esm2020/lib/badge/badge.component.mjs +98 -0
  23. package/esm2020/lib/badge/badge.module.mjs +19 -0
  24. package/esm2020/lib/badge/index.mjs +4 -0
  25. package/esm2020/lib/badge/types/badge-icon.mjs +2 -0
  26. package/esm2020/lib/badge/types/badge-size.mjs +7 -0
  27. package/esm2020/lib/badge/types/index.mjs +2 -0
  28. package/esm2020/lib/branding/branded.directive.mjs +19 -0
  29. package/esm2020/lib/branding/branding.module.mjs +19 -0
  30. package/esm2020/lib/branding/index.mjs +3 -0
  31. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +25 -0
  32. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +33 -0
  33. package/esm2020/lib/breadcrumb/breadcrumb.module.mjs +19 -0
  34. package/esm2020/lib/breadcrumb/index.mjs +4 -0
  35. package/esm2020/lib/button/button.component.mjs +116 -0
  36. package/esm2020/lib/button/button.module.mjs +21 -0
  37. package/esm2020/lib/button/index.mjs +4 -0
  38. package/esm2020/lib/button/themes/button-theme.mjs +2 -0
  39. package/esm2020/lib/button/themes/index.mjs +2 -0
  40. package/esm2020/lib/button-group/button-group.component.mjs +52 -0
  41. package/esm2020/lib/button-group/button-group.module.mjs +20 -0
  42. package/esm2020/lib/button-group/index.mjs +3 -0
  43. package/esm2020/lib/card-heading/card-heading.component.mjs +30 -0
  44. package/esm2020/lib/card-heading/card-heading.module.mjs +19 -0
  45. package/esm2020/lib/card-heading/index.mjs +3 -0
  46. package/esm2020/lib/design-components.module.mjs +119 -0
  47. package/esm2020/lib/dropdown/components/dropdown-item/dropdown-item.component.mjs +22 -0
  48. package/esm2020/lib/dropdown/components/index.mjs +2 -0
  49. package/esm2020/lib/dropdown/dropdown.component.mjs +140 -0
  50. package/esm2020/lib/dropdown/dropdown.module.mjs +21 -0
  51. package/esm2020/lib/dropdown/index.mjs +5 -0
  52. package/esm2020/lib/dropdown/types/dropdown-position.mjs +2 -0
  53. package/esm2020/lib/dropdown/types/index.mjs +2 -0
  54. package/esm2020/lib/file-upload/directives/file-drop.directive.mjs +50 -0
  55. package/esm2020/lib/file-upload/directives/index.mjs +2 -0
  56. package/esm2020/lib/file-upload/file-upload.component.mjs +334 -0
  57. package/esm2020/lib/file-upload/file-upload.module.mjs +29 -0
  58. package/esm2020/lib/file-upload/index.mjs +5 -0
  59. package/esm2020/lib/file-upload/pipes/human-readable-byte-size.pipe.mjs +23 -0
  60. package/esm2020/lib/file-upload/pipes/index.mjs +2 -0
  61. package/esm2020/lib/form-field/controls/checkbox/checkbox.component.mjs +337 -0
  62. package/esm2020/lib/form-field/controls/checkbox/checkbox.module.mjs +19 -0
  63. package/esm2020/lib/form-field/controls/checkbox/index.mjs +3 -0
  64. package/esm2020/lib/form-field/controls/index.mjs +5 -0
  65. package/esm2020/lib/form-field/controls/input/index.mjs +2 -0
  66. package/esm2020/lib/form-field/controls/input/input.directive.mjs +233 -0
  67. package/esm2020/lib/form-field/controls/radio/index.mjs +6 -0
  68. package/esm2020/lib/form-field/controls/radio/injection-tokens.mjs +4 -0
  69. package/esm2020/lib/form-field/controls/radio/interfaces/index.mjs +4 -0
  70. package/esm2020/lib/form-field/controls/radio/interfaces/radio-button.interface.mjs +2 -0
  71. package/esm2020/lib/form-field/controls/radio/interfaces/radio-change-event.interface.mjs +11 -0
  72. package/esm2020/lib/form-field/controls/radio/interfaces/radio-group.interface.mjs +2 -0
  73. package/esm2020/lib/form-field/controls/radio/radio-button/radio-button.component.mjs +260 -0
  74. package/esm2020/lib/form-field/controls/radio/radio-group/radio-group.directive.mjs +288 -0
  75. package/esm2020/lib/form-field/controls/radio/radio.module.mjs +20 -0
  76. package/esm2020/lib/form-field/controls/select/index.mjs +6 -0
  77. package/esm2020/lib/form-field/controls/select/option/index.mjs +2 -0
  78. package/esm2020/lib/form-field/controls/select/option/select-option.component.mjs +138 -0
  79. package/esm2020/lib/form-field/controls/select/option-parent.mjs +3 -0
  80. package/esm2020/lib/form-field/controls/select/select-model.mjs +149 -0
  81. package/esm2020/lib/form-field/controls/select/select.component.mjs +522 -0
  82. package/esm2020/lib/form-field/controls/select/select.module.mjs +20 -0
  83. package/esm2020/lib/form-field/controls/shared/index.mjs +2 -0
  84. package/esm2020/lib/form-field/controls/shared/toggle/components/index.mjs +2 -0
  85. package/esm2020/lib/form-field/controls/shared/toggle/components/toggle-input/toggle-input.component.mjs +17 -0
  86. package/esm2020/lib/form-field/controls/shared/toggle/index.mjs +4 -0
  87. package/esm2020/lib/form-field/controls/shared/toggle/toggle.component.mjs +96 -0
  88. package/esm2020/lib/form-field/controls/shared/toggle/toggle.module.mjs +20 -0
  89. package/esm2020/lib/form-field/directives/corner-hint.directive.mjs +14 -0
  90. package/esm2020/lib/form-field/directives/error.directive.mjs +26 -0
  91. package/esm2020/lib/form-field/directives/form-root.directive.mjs +91 -0
  92. package/esm2020/lib/form-field/directives/hint.directive.mjs +24 -0
  93. package/esm2020/lib/form-field/directives/index.mjs +8 -0
  94. package/esm2020/lib/form-field/directives/label.directive.mjs +14 -0
  95. package/esm2020/lib/form-field/directives/prefix.directive.mjs +24 -0
  96. package/esm2020/lib/form-field/directives/suffix.directive.mjs +24 -0
  97. package/esm2020/lib/form-field/form-field-errors.mjs +5 -0
  98. package/esm2020/lib/form-field/form-field.component.mjs +132 -0
  99. package/esm2020/lib/form-field/impdc-forms.mjs +8 -0
  100. package/esm2020/lib/form-field/impdc-forms.module.mjs +68 -0
  101. package/esm2020/lib/form-field/index.mjs +2 -0
  102. package/esm2020/lib/form-field/services/error-state-matcher.service.mjs +28 -0
  103. package/esm2020/lib/form-field/services/index.mjs +3 -0
  104. package/esm2020/lib/form-field/services/unique-selection-dispatcher.service.mjs +48 -0
  105. package/esm2020/lib/form-field/shared/constructors.type.mjs +2 -0
  106. package/esm2020/lib/form-field/shared/disabled.mixin.mjs +15 -0
  107. package/esm2020/lib/form-field/shared/error-state.mixin.mjs +24 -0
  108. package/esm2020/lib/form-field/shared/form-field-control.mjs +10 -0
  109. package/esm2020/lib/form-field/shared/index.mjs +5 -0
  110. package/esm2020/lib/form-field/shared/tab-index.mixin.mjs +19 -0
  111. package/esm2020/lib/icon/icon.component.mjs +70 -0
  112. package/esm2020/lib/icon/icon.module.mjs +19 -0
  113. package/esm2020/lib/icon/index.mjs +3 -0
  114. package/esm2020/lib/index.mjs +26 -0
  115. package/esm2020/lib/modal/index.mjs +4 -0
  116. package/esm2020/lib/modal/modal.component.mjs +141 -0
  117. package/esm2020/lib/modal/modal.module.mjs +37 -0
  118. package/esm2020/lib/modal/types/index.mjs +3 -0
  119. package/esm2020/lib/modal/types/modal-component-sizes.mjs +9 -0
  120. package/esm2020/lib/modal/types/modal-theme.mjs +12 -0
  121. package/esm2020/lib/pagination/index.mjs +3 -0
  122. package/esm2020/lib/pagination/pagination.component.mjs +134 -0
  123. package/esm2020/lib/pagination/pagination.module.mjs +21 -0
  124. package/esm2020/lib/progress-bar/index.mjs +3 -0
  125. package/esm2020/lib/progress-bar/progress-bar.component.mjs +35 -0
  126. package/esm2020/lib/progress-bar/progress-bar.module.mjs +18 -0
  127. package/esm2020/lib/scrollable/index.mjs +3 -0
  128. package/esm2020/lib/scrollable/scrollable.component.mjs +193 -0
  129. package/esm2020/lib/scrollable/scrollable.module.mjs +21 -0
  130. package/esm2020/lib/select-icon/index.mjs +3 -0
  131. package/esm2020/lib/select-icon/select-icon.component.mjs +307 -0
  132. package/esm2020/lib/select-icon/select-icon.module.mjs +35 -0
  133. package/esm2020/lib/size-detection/directive/element-size.interface.mjs +2 -0
  134. package/esm2020/lib/size-detection/directive/index.mjs +3 -0
  135. package/esm2020/lib/size-detection/directive/size-detector.directive.mjs +43 -0
  136. package/esm2020/lib/size-detection/index.mjs +3 -0
  137. package/esm2020/lib/size-detection/size-detection.module.mjs +18 -0
  138. package/esm2020/lib/spinner/index.mjs +3 -0
  139. package/esm2020/lib/spinner/spinner.component.mjs +24 -0
  140. package/esm2020/lib/spinner/spinner.module.mjs +18 -0
  141. package/esm2020/lib/table/index.mjs +3 -0
  142. package/esm2020/lib/table/table.component.mjs +33 -0
  143. package/esm2020/lib/table/table.module.mjs +19 -0
  144. package/esm2020/lib/text-highlight/index.mjs +3 -0
  145. package/esm2020/lib/text-highlight/text-highlight.component.mjs +81 -0
  146. package/esm2020/lib/text-highlight/text-highlight.module.mjs +19 -0
  147. package/esm2020/public-api.mjs +9 -0
  148. package/esm2020/services/index.mjs +2 -0
  149. package/esm2020/services/interaction.service.mjs +54 -0
  150. package/esm2020/types/component-size.mjs +12 -0
  151. package/esm2020/types/component-theme.mjs +22 -0
  152. package/esm2020/types/index.mjs +3 -0
  153. package/esm2020/utilities/boolean-props.mjs +7 -0
  154. package/esm2020/utilities/dc.mjs +9 -0
  155. package/esm2020/utilities/index.mjs +6 -0
  156. package/esm2020/utilities/lc.mjs +9 -0
  157. package/esm2020/utilities/number-props.mjs +18 -0
  158. package/esm2020/utilities/sanitize.mjs +7 -0
  159. package/fesm2015/impartner-design-components.mjs +8295 -0
  160. package/fesm2015/impartner-design-components.mjs.map +1 -0
  161. package/fesm2020/impartner-design-components.mjs +8264 -0
  162. package/fesm2020/impartner-design-components.mjs.map +1 -0
  163. package/index.d.ts +5 -0
  164. package/lib/alert/alert.component.d.ts +29 -0
  165. package/lib/alert/alert.module.d.ts +8 -0
  166. package/lib/alert/index.d.ts +3 -0
  167. package/lib/alert/theme/alert-theme.d.ts +1 -0
  168. package/lib/alert/theme/index.d.ts +1 -0
  169. package/lib/avatar/avatar.component.d.ts +28 -0
  170. package/lib/avatar/avatar.module.d.ts +8 -0
  171. package/lib/avatar/index.d.ts +2 -0
  172. package/lib/avatar-group/avatar-group.component.d.ts +10 -0
  173. package/lib/avatar-group/avatar-group.module.d.ts +9 -0
  174. package/lib/avatar-group/index.d.ts +2 -0
  175. package/lib/backdrop/backdrop.component.d.ts +19 -0
  176. package/lib/backdrop/backdrop.module.d.ts +9 -0
  177. package/lib/backdrop/index.d.ts +2 -0
  178. package/lib/badge/badge.component.d.ts +48 -0
  179. package/lib/badge/badge.module.d.ts +9 -0
  180. package/lib/badge/index.d.ts +3 -0
  181. package/lib/badge/types/badge-icon.d.ts +1 -0
  182. package/lib/badge/types/badge-size.d.ts +6 -0
  183. package/lib/badge/types/index.d.ts +2 -0
  184. package/lib/branding/branded.directive.d.ts +6 -0
  185. package/lib/branding/branding.module.d.ts +9 -0
  186. package/lib/branding/index.d.ts +2 -0
  187. package/lib/breadcrumb/breadcrumb-item.component.d.ts +7 -0
  188. package/lib/breadcrumb/breadcrumb.component.d.ts +18 -0
  189. package/lib/breadcrumb/breadcrumb.module.d.ts +9 -0
  190. package/lib/breadcrumb/index.d.ts +3 -0
  191. package/lib/button/button.component.d.ts +47 -0
  192. package/lib/button/button.module.d.ts +11 -0
  193. package/lib/button/index.d.ts +3 -0
  194. package/lib/button/themes/button-theme.d.ts +1 -0
  195. package/lib/button/themes/index.d.ts +1 -0
  196. package/lib/button-group/button-group.component.d.ts +22 -0
  197. package/lib/button-group/button-group.module.d.ts +10 -0
  198. package/lib/button-group/index.d.ts +2 -0
  199. package/lib/card-heading/card-heading.component.d.ts +18 -0
  200. package/lib/card-heading/card-heading.module.d.ts +9 -0
  201. package/lib/card-heading/index.d.ts +2 -0
  202. package/lib/design-components.module.d.ts +22 -0
  203. package/lib/dropdown/components/dropdown-item/dropdown-item.component.d.ts +11 -0
  204. package/lib/dropdown/components/index.d.ts +1 -0
  205. package/lib/dropdown/dropdown.component.d.ts +65 -0
  206. package/lib/dropdown/dropdown.module.d.ts +11 -0
  207. package/lib/dropdown/index.d.ts +4 -0
  208. package/lib/dropdown/types/dropdown-position.d.ts +1 -0
  209. package/lib/dropdown/types/index.d.ts +1 -0
  210. package/lib/file-upload/directives/file-drop.directive.d.ts +11 -0
  211. package/lib/file-upload/directives/index.d.ts +1 -0
  212. package/lib/file-upload/file-upload.component.d.ts +105 -0
  213. package/lib/file-upload/file-upload.module.d.ts +13 -0
  214. package/lib/file-upload/index.d.ts +4 -0
  215. package/lib/file-upload/pipes/human-readable-byte-size.pipe.d.ts +7 -0
  216. package/lib/file-upload/pipes/index.d.ts +1 -0
  217. package/lib/form-field/controls/checkbox/checkbox.component.d.ts +133 -0
  218. package/lib/form-field/controls/checkbox/checkbox.module.d.ts +9 -0
  219. package/lib/form-field/controls/checkbox/index.d.ts +2 -0
  220. package/lib/form-field/controls/index.d.ts +4 -0
  221. package/lib/form-field/controls/input/index.d.ts +1 -0
  222. package/lib/form-field/controls/input/input.directive.d.ts +84 -0
  223. package/lib/form-field/controls/radio/index.d.ts +5 -0
  224. package/lib/form-field/controls/radio/injection-tokens.d.ts +4 -0
  225. package/lib/form-field/controls/radio/interfaces/index.d.ts +3 -0
  226. package/lib/form-field/controls/radio/interfaces/radio-button.interface.d.ts +6 -0
  227. package/lib/form-field/controls/radio/interfaces/radio-change-event.interface.d.ts +12 -0
  228. package/lib/form-field/controls/radio/interfaces/radio-group.interface.d.ts +13 -0
  229. package/lib/form-field/controls/radio/radio-button/radio-button.component.d.ts +98 -0
  230. package/lib/form-field/controls/radio/radio-group/radio-group.directive.d.ts +104 -0
  231. package/lib/form-field/controls/radio/radio.module.d.ts +10 -0
  232. package/lib/form-field/controls/select/index.d.ts +5 -0
  233. package/lib/form-field/controls/select/option/index.d.ts +1 -0
  234. package/lib/form-field/controls/select/option/select-option.component.d.ts +60 -0
  235. package/lib/form-field/controls/select/option-parent.d.ts +5 -0
  236. package/lib/form-field/controls/select/select-model.d.ts +36 -0
  237. package/lib/form-field/controls/select/select.component.d.ts +170 -0
  238. package/lib/form-field/controls/select/select.module.d.ts +10 -0
  239. package/lib/form-field/controls/shared/index.d.ts +1 -0
  240. package/lib/form-field/controls/shared/toggle/components/index.d.ts +1 -0
  241. package/lib/form-field/controls/shared/toggle/components/toggle-input/toggle-input.component.d.ts +6 -0
  242. package/lib/form-field/controls/shared/toggle/index.d.ts +3 -0
  243. package/lib/form-field/controls/shared/toggle/toggle.component.d.ts +26 -0
  244. package/lib/form-field/controls/shared/toggle/toggle.module.d.ts +10 -0
  245. package/lib/form-field/directives/corner-hint.directive.d.ts +5 -0
  246. package/lib/form-field/directives/error.directive.d.ts +8 -0
  247. package/lib/form-field/directives/form-root.directive.d.ts +26 -0
  248. package/lib/form-field/directives/hint.directive.d.ts +6 -0
  249. package/lib/form-field/directives/index.d.ts +7 -0
  250. package/lib/form-field/directives/label.directive.d.ts +5 -0
  251. package/lib/form-field/directives/prefix.directive.d.ts +9 -0
  252. package/lib/form-field/directives/suffix.directive.d.ts +9 -0
  253. package/lib/form-field/form-field-errors.d.ts +2 -0
  254. package/lib/form-field/form-field.component.d.ts +39 -0
  255. package/lib/form-field/impdc-forms.d.ts +7 -0
  256. package/lib/form-field/impdc-forms.module.d.ts +19 -0
  257. package/lib/form-field/index.d.ts +1 -0
  258. package/lib/form-field/services/error-state-matcher.service.d.ts +12 -0
  259. package/lib/form-field/services/index.d.ts +2 -0
  260. package/lib/form-field/services/unique-selection-dispatcher.service.d.ts +29 -0
  261. package/lib/form-field/shared/constructors.type.d.ts +7 -0
  262. package/lib/form-field/shared/disabled.mixin.d.ts +10 -0
  263. package/lib/form-field/shared/error-state.mixin.d.ts +31 -0
  264. package/lib/form-field/shared/form-field-control.d.ts +24 -0
  265. package/lib/form-field/shared/index.d.ts +5 -0
  266. package/lib/form-field/shared/tab-index.mixin.d.ts +13 -0
  267. package/lib/icon/icon.component.d.ts +30 -0
  268. package/lib/icon/icon.module.d.ts +9 -0
  269. package/lib/icon/index.d.ts +2 -0
  270. package/lib/index.d.ts +25 -0
  271. package/lib/modal/index.d.ts +3 -0
  272. package/lib/modal/modal.component.d.ts +80 -0
  273. package/lib/modal/modal.module.d.ts +13 -0
  274. package/lib/modal/types/index.d.ts +2 -0
  275. package/lib/modal/types/modal-component-sizes.d.ts +3 -0
  276. package/lib/modal/types/modal-theme.d.ts +7 -0
  277. package/lib/pagination/index.d.ts +2 -0
  278. package/lib/pagination/pagination.component.d.ts +41 -0
  279. package/lib/pagination/pagination.module.d.ts +11 -0
  280. package/lib/progress-bar/index.d.ts +2 -0
  281. package/lib/progress-bar/progress-bar.component.d.ts +22 -0
  282. package/lib/progress-bar/progress-bar.module.d.ts +8 -0
  283. package/lib/scrollable/index.d.ts +2 -0
  284. package/lib/scrollable/scrollable.component.d.ts +39 -0
  285. package/lib/scrollable/scrollable.module.d.ts +11 -0
  286. package/lib/select-icon/index.d.ts +2 -0
  287. package/lib/select-icon/select-icon.component.d.ts +123 -0
  288. package/lib/select-icon/select-icon.module.d.ts +11 -0
  289. package/lib/size-detection/directive/element-size.interface.d.ts +4 -0
  290. package/lib/size-detection/directive/index.d.ts +2 -0
  291. package/lib/size-detection/directive/size-detector.directive.d.ts +14 -0
  292. package/lib/size-detection/index.d.ts +3 -0
  293. package/lib/size-detection/size-detection.module.d.ts +8 -0
  294. package/lib/spinner/index.d.ts +2 -0
  295. package/lib/spinner/spinner.component.d.ts +13 -0
  296. package/lib/spinner/spinner.module.d.ts +8 -0
  297. package/lib/table/index.d.ts +2 -0
  298. package/lib/table/table.component.d.ts +15 -0
  299. package/lib/table/table.module.d.ts +9 -0
  300. package/lib/text-highlight/index.d.ts +2 -0
  301. package/lib/text-highlight/text-highlight.component.d.ts +31 -0
  302. package/lib/text-highlight/text-highlight.module.d.ts +9 -0
  303. package/package.json +51 -0
  304. package/public-api.d.ts +4 -0
  305. package/services/index.d.ts +1 -0
  306. package/services/interaction.service.d.ts +14 -0
  307. package/types/component-size.d.ts +12 -0
  308. package/types/component-theme.d.ts +12 -0
  309. package/types/index.d.ts +2 -0
  310. package/utilities/boolean-props.d.ts +8 -0
  311. package/utilities/dc.d.ts +6 -0
  312. package/utilities/index.d.ts +5 -0
  313. package/utilities/lc.d.ts +6 -0
  314. package/utilities/number-props.d.ts +15 -0
  315. package/utilities/sanitize.d.ts +1 -0
@@ -0,0 +1,233 @@
1
+ /* eslint-disable @angular-eslint/no-conflicting-lifecycle */
2
+ import { Directive, Inject, Input, Optional, Self } from '@angular/core';
3
+ import { Validators } from '@angular/forms';
4
+ import { nanoid } from 'nanoid';
5
+ import { Subject } from 'rxjs';
6
+ import { coerceBooleanPropertyValue } from '../../../../utilities';
7
+ import { IMPDC_FORM_ROOT } from '../../directives';
8
+ import { mixinErrorState } from '../../shared';
9
+ import { ImpdcFormFieldControl } from '../../shared/form-field-control';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/forms";
12
+ import * as i2 from "../../services";
13
+ const IMPDC_INPUT_INVALID_TYPES = [
14
+ 'button',
15
+ 'checkbox',
16
+ 'file',
17
+ 'hidden',
18
+ 'image',
19
+ 'radio',
20
+ 'range',
21
+ 'reset',
22
+ 'submit'
23
+ ];
24
+ /** @docs-private */
25
+ export function getInputUnsupportedTypeError(type) {
26
+ return Error(`Input type "${type}" isn't supported by impdcInput.`);
27
+ }
28
+ const _InputDirectiveBase = mixinErrorState(class {
29
+ constructor(_defaultErrorStateMatcher, _formRoot, _parentForm, _parentFormGroup, ngControl) {
30
+ this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
31
+ this._formRoot = _formRoot;
32
+ this._parentForm = _parentForm;
33
+ this._parentFormGroup = _parentFormGroup;
34
+ this.ngControl = ngControl;
35
+ this.stateChanges = new Subject();
36
+ }
37
+ });
38
+ /**
39
+ * The `InputDirective` (`<input impdcInput`, `<textarea impdcInput` or `<select impdcInput`) is a directive for text inputs.
40
+ * With this directive, the input, textarea, and select can be used within a `FormFieldComponent` (`<impdc-form-field`).
41
+ * To use, import `ImpdcFormsModule` or another module that imports and exports that module from `@impartner/design-components`.
42
+ */
43
+ export class InputDirective extends _InputDirectiveBase {
44
+ constructor(_elementRef, ngControl, _formRoot, _parentForm, _parentFormGroup, _defaultErrorStateMatcher) {
45
+ super(_defaultErrorStateMatcher, _formRoot, _parentForm, _parentFormGroup, ngControl);
46
+ this._elementRef = _elementRef;
47
+ this._uid = `impdc-input-${nanoid()}`;
48
+ this.focused = false;
49
+ this.controlType = 'impdc-input';
50
+ this.supportsAffixes = true;
51
+ this._disabled = false;
52
+ this._type = 'text';
53
+ this._readonly = false;
54
+ const { nativeElement } = this._elementRef;
55
+ const nodeName = nativeElement.nodeName.toLowerCase();
56
+ this._inputValueAccessor = nativeElement;
57
+ this.id = this.id;
58
+ this._isSelect = nodeName === 'select';
59
+ this._isTextarea = nodeName === 'textarea';
60
+ if (this._isSelect) {
61
+ this.controlType = nativeElement.multiple
62
+ ? 'impdc-native-select-multiple'
63
+ : 'impdc-native-select';
64
+ }
65
+ }
66
+ get disabled() {
67
+ return this._disabled;
68
+ }
69
+ set disabled(value) {
70
+ this._disabled = coerceBooleanPropertyValue(value);
71
+ if (this.focused) {
72
+ this.focused = false;
73
+ this.stateChanges.next();
74
+ }
75
+ }
76
+ get id() {
77
+ return this._id;
78
+ }
79
+ set id(value) {
80
+ this._id = value || this._uid;
81
+ }
82
+ /**
83
+ * Supports most standard `<input [type]>` attribute values. Does not support `button`, `checkbox`,
84
+ * `file`, `hidden`, `image`, `radio`, `range`, `reset`, or `button`, and does not apply to
85
+ * `<textarea>` or `<select>` elements.
86
+ *
87
+ * @default text
88
+ */
89
+ get type() {
90
+ return this._type;
91
+ }
92
+ set type(value) {
93
+ if (!this._typeIsValid(value)) {
94
+ throw getInputUnsupportedTypeError(value);
95
+ }
96
+ this._type = value || 'text';
97
+ // Sync with native input element.
98
+ if (!this._isTextarea) {
99
+ this._elementRef.nativeElement.type = this._type;
100
+ }
101
+ }
102
+ /**
103
+ * Used to set requiredness of control in a template-based manner;
104
+ * not necessary when using the Angular reactive forms API and `required` validator.
105
+ */
106
+ get required() {
107
+ return (this._required ??
108
+ this.ngControl?.control?.hasValidator(Validators.required) ??
109
+ false);
110
+ }
111
+ set required(value) {
112
+ this._required = coerceBooleanPropertyValue(value);
113
+ this.stateChanges.next();
114
+ }
115
+ /**
116
+ * Used to put the control in a non-interactive readonly state; only supports `<input>` and
117
+ * `<textarea>` elements.
118
+ *
119
+ * To see the difference between `readonly` and `disabled`, refer to [MDN's documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/readonly).
120
+ */
121
+ get readonly() {
122
+ return this._readonly;
123
+ }
124
+ set readonly(value) {
125
+ this._readonly = coerceBooleanPropertyValue(value);
126
+ }
127
+ get value() {
128
+ return this._inputValueAccessor.value;
129
+ }
130
+ set value(value) {
131
+ if (value !== this.value) {
132
+ this._inputValueAccessor.value = value;
133
+ this.stateChanges.next();
134
+ }
135
+ }
136
+ /** @ignore */
137
+ ngDoCheck() {
138
+ if (this.ngControl) {
139
+ this.updateErrorState();
140
+ if (this.ngControl.disabled !== null &&
141
+ this.ngControl.disabled !== this.disabled) {
142
+ this.disabled = this.ngControl.disabled;
143
+ this.stateChanges.next();
144
+ }
145
+ }
146
+ }
147
+ /** @ignore */
148
+ ngOnChanges() {
149
+ this.stateChanges.next();
150
+ }
151
+ /** @ignore */
152
+ ngOnDestroy() {
153
+ this.stateChanges.complete();
154
+ }
155
+ _focusChanged(isFocused) {
156
+ if (isFocused !== this.focused) {
157
+ this.focused = isFocused;
158
+ this.stateChanges.next();
159
+ }
160
+ }
161
+ _typeIsValid(inputType) {
162
+ return IMPDC_INPUT_INVALID_TYPES.indexOf(inputType) === -1;
163
+ }
164
+ _onInput() {
165
+ // This is a noop function and is used to let Angular know whenever the value changes.
166
+ // Angular will run a new change detection each time the `input` event has been dispatched.
167
+ // It's necessary that Angular recognizes the value change, because when Angular forms
168
+ // aren't used, the placeholder won't recognize the value changes and will not disappear.
169
+ // Listening to the input event wouldn't be necessary when the input is using the
170
+ // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.
171
+ }
172
+ }
173
+ InputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InputDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: IMPDC_FORM_ROOT, optional: true }, { token: i1.NgForm, optional: true }, { token: i1.FormGroupDirective, optional: true }, { token: i2.ErrorStateMatcher }], target: i0.ɵɵFactoryTarget.Directive });
174
+ InputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: InputDirective, selector: "input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]", inputs: { disabled: "disabled", id: "id", type: "type", required: "required", readonly: "readonly", errorStateMatcher: "errorStateMatcher", value: "value" }, host: { listeners: { "focus": "_focusChanged(true)", "blur": "_focusChanged(false)", "input": "_onInput()" }, properties: { "id": "id", "disabled": "disabled", "required": "required", "attr.id": "id", "attr.readonly": "readonly && !_isSelect || null", "attr.aria-required": "required.toString()", "attr.aria-disabled": "disabled.toString()", "attr.aria-invalid": "errorState", "class.form-control": "!_isSelect", "class.form-control-color": "type === \"color\"", "class.form-select": "_isSelect", "class.impdc-form-field-control": "true", "class.is-invalid": "errorState", "class.impdc-input--invalid": "errorState", "class.impdc-input--disabled": "disabled", "class.impdc-input--required": "required" }, classAttribute: "impdc-input" }, providers: [{ provide: ImpdcFormFieldControl, useExisting: InputDirective }], exportAs: ["impdcInput"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InputDirective, decorators: [{
176
+ type: Directive,
177
+ args: [{
178
+ selector: 'input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]',
179
+ exportAs: 'impdcInput',
180
+ // eslint-disable-next-line @angular-eslint/no-host-metadata-property
181
+ host: {
182
+ class: 'impdc-input',
183
+ '[id]': 'id',
184
+ '[disabled]': 'disabled',
185
+ '[required]': 'required',
186
+ '[attr.id]': 'id',
187
+ '[attr.readonly]': 'readonly && !_isSelect || null',
188
+ '[attr.aria-required]': 'required.toString()',
189
+ '[attr.aria-disabled]': 'disabled.toString()',
190
+ '[attr.aria-invalid]': 'errorState',
191
+ '[class.form-control]': '!_isSelect',
192
+ '[class.form-control-color]': 'type === "color"',
193
+ '[class.form-select]': '_isSelect',
194
+ '[class.impdc-form-field-control]': 'true',
195
+ '[class.is-invalid]': 'errorState',
196
+ '[class.impdc-input--invalid]': 'errorState',
197
+ '[class.impdc-input--disabled]': 'disabled',
198
+ '[class.impdc-input--required]': 'required',
199
+ '(focus)': '_focusChanged(true)',
200
+ '(blur)': '_focusChanged(false)',
201
+ '(input)': '_onInput()'
202
+ },
203
+ providers: [{ provide: ImpdcFormFieldControl, useExisting: InputDirective }]
204
+ }]
205
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
206
+ type: Optional
207
+ }, {
208
+ type: Self
209
+ }] }, { type: undefined, decorators: [{
210
+ type: Optional
211
+ }, {
212
+ type: Inject,
213
+ args: [IMPDC_FORM_ROOT]
214
+ }] }, { type: i1.NgForm, decorators: [{
215
+ type: Optional
216
+ }] }, { type: i1.FormGroupDirective, decorators: [{
217
+ type: Optional
218
+ }] }, { type: i2.ErrorStateMatcher }]; }, propDecorators: { disabled: [{
219
+ type: Input
220
+ }], id: [{
221
+ type: Input
222
+ }], type: [{
223
+ type: Input
224
+ }], required: [{
225
+ type: Input
226
+ }], readonly: [{
227
+ type: Input
228
+ }], errorStateMatcher: [{
229
+ type: Input
230
+ }], value: [{
231
+ type: Input
232
+ }] } });
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWZpZWxkL2NvbnRyb2xzL2lucHV0L2lucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2REFBNkQ7QUFDN0QsT0FBTyxFQUNMLFNBQVMsRUFHVCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBRUwsMEJBQTBCLEVBQzNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFpQixlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRSxPQUFPLEVBR0wsZUFBZSxFQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQUV4RSxNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLFFBQVE7SUFDUixVQUFVO0lBQ1YsTUFBTTtJQUNOLFFBQVE7SUFDUixPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsUUFBUTtDQUNULENBQUM7QUFFRixvQkFBb0I7QUFDcEIsTUFBTSxVQUFVLDRCQUE0QixDQUFDLElBQVk7SUFDdkQsT0FBTyxLQUFLLENBQUMsZUFBZSxJQUFJLGtDQUFrQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUN6QztJQUdFLFlBQ1MseUJBQTRDLEVBQzVDLFNBQXdCLEVBQ3hCLFdBQW1CLEVB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QUNaLFlBQVksRUFBRSxVQUFVO3dCQUN4QixZQUFZLEVBQUUsVUFBVTt3QkFDeEIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLGlCQUFpQixFQUFFLGdDQUFnQzt3QkFDbkQsc0JBQXNCLEVBQUUscUJBQXFCO3dCQUM3QyxzQkFBc0IsRUFBRSxxQkFBcUI7d0JBQzdDLHFCQUFxQixFQUFFLFlBQVk7d0JBQ25DLHNCQUFzQixFQUFFLFlBQVk7d0JBQ3BDLDRCQUE0QixFQUFFLGtCQUFrQjt3QkFDaEQscUJBQXFCLEVBQUUsV0FBVzt3QkFDbEMsa0NBQWtDLEVBQUUsTUFBTTt3QkFDMUMsb0JBQW9CLEVBQUUsWUFBWTt3QkFDbEMsOEJBQThCLEVBQUUsWUFBWTt3QkFDNUMsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0MsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0MsU0FBUyxFQUFFLHFCQUFxQjt3QkFDaEMsUUFBUSxFQUFFLHNCQUFzQjt3QkFDaEMsU0FBUyxFQUFFLFlBQVk7cUJBQ3hCO29CQUNELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDN0U7OzBCQXlISSxRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzswQkFDbEMsUUFBUTs7MEJBQ1IsUUFBUTs0RUFyR1AsUUFBUTtzQkFEWCxLQUFLO2dCQWVGLEVBQUU7c0JBREwsS0FBSztnQkFpQkYsSUFBSTtzQkFEUCxLQUFLO2dCQXVCSyxRQUFRO3NCQURsQixLQUFLO2dCQXFCSyxRQUFRO3NCQURsQixLQUFLO2dCQVVVLGlCQUFpQjtzQkFEaEMsS0FBSztnQkFJRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgTmdDb250cm9sLFxuICBOZ0Zvcm0sXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEltcGRjRm9ybVJvb3QsIElNUERDX0ZPUk1fUk9PVCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBJQ2FuVXBkYXRlRXJyb3JTdGF0ZSxcbiAgSUhhc0Vycm9yU3RhdGUsXG4gIG1peGluRXJyb3JTdGF0ZVxufSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgSW1wZGNGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0tZmllbGQtY29udHJvbCc7XG5cbmNvbnN0IElNUERDX0lOUFVUX0lOVkFMSURfVFlQRVMgPSBbXG4gICdidXR0b24nLFxuICAnY2hlY2tib3gnLFxuICAnZmlsZScsXG4gICdoaWRkZW4nLFxuICAnaW1hZ2UnLFxuICAncmFkaW8nLFxuICAncmFuZ2UnLFxuICAncmVzZXQnLFxuICAnc3VibWl0J1xuXTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFVuc3VwcG9ydGVkVHlwZUVycm9yKHR5cGU6IHN0cmluZyk6IEVycm9yIHtcbiAgcmV0dXJuIEVycm9yKGBJbnB1dCB0eXBlIFwiJHt0eXBlfVwiIGlzbid0IHN1cHBvcnRlZCBieSBpbXBkY0lucHV0LmApO1xufVxuXG5jb25zdCBfSW5wdXREaXJlY3RpdmVCYXNlID0gbWl4aW5FcnJvclN0YXRlKFxuICBjbGFzcyB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICAgIHB1YmxpYyBfZm9ybVJvb3Q6IEltcGRjRm9ybVJvb3QsXG4gICAgICBwdWJsaWMgX3BhcmVudEZvcm06IE5nRm9ybSxcbiAgICAgIHB1YmxpYyBfcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgICBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsXG4gICAgKSB7fVxuICB9XG4pO1xuXG4vKipcbiAqIFRoZSBgSW5wdXREaXJlY3RpdmVgIChgPGlucHV0IGltcGRjSW5wdXRgLCBgPHRleHRhcmVhIGltcGRjSW5wdXRgIG9yIGA8c2VsZWN0IGltcGRjSW5wdXRgKSBpcyBhIGRpcmVjdGl2ZSBmb3IgdGV4dCBpbnB1dHMuXG4gKiBXaXRoIHRoaXMgZGlyZWN0aXZlLCB0aGUgaW5wdXQsIHRleHRhcmVhLCBhbmQgc2VsZWN0IGNhbiBiZSB1c2VkIHdpdGhpbiBhIGBGb3JtRmllbGRDb21wb25lbnRgIChgPGltcGRjLWZvcm0tZmllbGRgKS5cbiAqIFRvIHVzZSwgaW1wb3J0IGBJbXBkY0Zvcm1zTW9kdWxlYCBvciBhbm90aGVyIG1vZHVsZSB0aGF0IGltcG9ydHMgYW5kIGV4cG9ydHMgdGhhdCBtb2R1bGUgZnJvbSBgQGltcGFydG5lci9kZXNpZ24tY29tcG9uZW50c2AuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjpcbiAgICAnaW5wdXRbaW1wZGNJbnB1dF0sIHRleHRhcmVhW2ltcGRjSW5wdXRdLCBzZWxlY3RbaW1wZGNOYXRpdmVTZWxlY3RdJyxcbiAgZXhwb3J0QXM6ICdpbXBkY0lucHV0JyxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2ltcGRjLWlucHV0JyxcbiAgICAnW2lkXSc6ICdpZCcsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5ICYmICFfaXNTZWxlY3QgfHwgbnVsbCcsXG4gICAgJ1thdHRyLmFyaWEtcmVxdWlyZWRdJzogJ3JlcXVpcmVkLnRvU3RyaW5nKCknLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZC50b1N0cmluZygpJyxcbiAgICAnW2F0dHIuYXJpYS1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLmZvcm0tY29udHJvbF0nOiAnIV9pc1NlbGVjdCcsXG4gICAgJ1tjbGFzcy5mb3JtLWNvbnRyb2wtY29sb3JdJzogJ3R5cGUgPT09IFwiY29sb3JcIicsXG4gICAgJ1tjbGFzcy5mb3JtLXNlbGVjdF0nOiAnX2lzU2VsZWN0JyxcbiAgICAnW2NsYXNzLmltcGRjLWZvcm0tZmllbGQtY29udHJvbF0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5pcy1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLmltcGRjLWlucHV0LS1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLmltcGRjLWlucHV0LS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuaW1wZGMtaW5wdXQtLXJlcXVpcmVkXSc6ICdyZXF1aXJlZCcsXG4gICAgJyhmb2N1cyknOiAnX2ZvY3VzQ2hhbmdlZCh0cnVlKScsXG4gICAgJyhibHVyKSc6ICdfZm9jdXNDaGFuZ2VkKGZhbHNlKScsXG4gICAgJyhpbnB1dCknOiAnX29uSW5wdXQoKSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJbXBkY0Zvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBJbnB1dERpcmVjdGl2ZSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dERpcmVjdGl2ZVxuICBleHRlbmRzIF9JbnB1dERpcmVjdGl2ZUJhc2VcbiAgaW1wbGVtZW50c1xuICAgIEltcGRjRm9ybUZpZWxkQ29udHJvbDxhbnk+LFxuICAgIElDYW5VcGRhdGVFcnJvclN0YXRlLFxuICAgIElIYXNFcnJvclN0YXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRG9DaGVja1xue1xuICBwcml2YXRlIF9pbnB1dFZhbHVlQWNjZXNzb3I6IHsgdmFsdWU6IGFueSB9O1xuXG4gIHByb3RlY3RlZCBfdWlkID0gYGltcGRjLWlucHV0LSR7bmFub2lkKCl9YDtcbiAgcHJvdGVjdGVkIF9pc1NlbGVjdDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9pc1RleHRhcmVhOiBib29sZWFuO1xuXG4gIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xUeXBlPzogc3RyaW5nID0gJ2ltcGRjLWlucHV0JztcbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzQWZmaXhlczogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHRoaXMuX3VpZDtcbiAgfVxuICBwcm90ZWN0ZWQgX2lkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBtb3N0IHN0YW5kYXJkIGA8aW5wdXQgW3R5cGVdPmAgYXR0cmlidXRlIHZhbHVlcy4gRG9lcyBub3Qgc3VwcG9ydCBgYnV0dG9uYCwgYGNoZWNrYm94YCxcbiAgICogYGZpbGVgLCBgaGlkZGVuYCwgYGltYWdlYCwgYHJhZGlvYCwgYHJhbmdlYCwgYHJlc2V0YCwgb3IgYGJ1dHRvbmAsIGFuZCBkb2VzIG5vdCBhcHBseSB0b1xuICAgKiBgPHRleHRhcmVhPmAgb3IgYDxzZWxlY3Q+YCBlbGVtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGV4dFxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLl90eXBlSXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IGdldElucHV0VW5zdXBwb3J0ZWRUeXBlRXJyb3IodmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX3R5cGUgPSB2YWx1ZSB8fCAndGV4dCc7XG5cbiAgICAvLyBTeW5jIHdpdGggbmF0aXZlIGlucHV0IGVsZW1lbnQuXG4gICAgaWYgKCF0aGlzLl9pc1RleHRhcmVhKSB7XG4gICAgICAodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPSB0aGlzLl90eXBlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgX3R5cGUgPSAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHJlcXVpcmVkbmVzcyBvZiBjb250cm9sIGluIGEgdGVtcGxhdGUtYmFzZWQgbWFubmVyO1xuICAgKiBub3QgbmVjZXNzYXJ5IHdoZW4gdXNpbmcgdGhlIEFuZ3VsYXIgcmVhY3RpdmUgZm9ybXMgQVBJIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRvci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3JlcXVpcmVkID8/XG4gICAgICB0aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8/XG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHlWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHB1dCB0aGUgY29udHJvbCBpbiBhIG5vbi1pbnRlcmFjdGl2ZSByZWFkb25seSBzdGF0ZTsgb25seSBzdXBwb3J0cyBgPGlucHV0PmAgYW5kXG4gICAqIGA8dGV4dGFyZWE+YCBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gc2VlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCwgcmVmZXIgdG8gW01ETidzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQXR0cmlidXRlcy9yZWFkb25seSkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlYWRvbmx5KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9yZWFkb25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBlcnJvclN0YXRlTWF0Y2hlciE6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxcbiAgICAgIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnRcbiAgICA+LFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChJTVBEQ19GT1JNX1JPT1QpIF9mb3JtUm9vdDogSW1wZGNGb3JtUm9vdCxcbiAgICBAT3B0aW9uYWwoKSBfcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgIEBPcHRpb25hbCgpIF9wYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlclxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgICBfZm9ybVJvb3QsXG4gICAgICBfcGFyZW50Rm9ybSxcbiAgICAgIF9wYXJlbnRGb3JtR3JvdXAsXG4gICAgICBuZ0NvbnRyb2xcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSB0aGlzLl9lbGVtZW50UmVmO1xuICAgIGNvbnN0IG5vZGVOYW1lID0gbmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yID0gbmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLmlkID0gdGhpcy5pZDtcbiAgICB0aGlzLl9pc1NlbGVjdCA9IG5vZGVOYW1lID09PSAnc2VsZWN0JztcbiAgICB0aGlzLl9pc1RleHRhcmVhID0gbm9kZU5hbWUgPT09ICd0ZXh0YXJlYSc7XG5cbiAgICBpZiAodGhpcy5faXNTZWxlY3QpIHtcbiAgICAgIHRoaXMuY29udHJvbFR5cGUgPSAobmF0aXZlRWxlbWVudCBhcyBIVE1MU2VsZWN0RWxlbWVudCkubXVsdGlwbGVcbiAgICAgICAgPyAnaW1wZGMtbmF0aXZlLXNlbGVjdC1tdWx0aXBsZSdcbiAgICAgICAgOiAnaW1wZGMtbmF0aXZlLXNlbGVjdCc7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSBudWxsICYmXG4gICAgICAgIHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSB0aGlzLmRpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9mb2N1c0NoYW5nZWQoaXNGb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRm9jdXNlZCAhPT0gdGhpcy5mb2N1c2VkKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF90eXBlSXNWYWxpZChpbnB1dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJTVBEQ19JTlBVVF9JTlZBTElEX1RZUEVTLmluZGV4T2YoaW5wdXRUeXBlKSA9PT0gLTE7XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uSW5wdXQoKSB7XG4gICAgLy8gVGhpcyBpcyBhIG5vb3AgZnVuY3Rpb24gYW5kIGlzIHVzZWQgdG8gbGV0IEFuZ3VsYXIga25vdyB3aGVuZXZlciB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICAvLyBBbmd1bGFyIHdpbGwgcnVuIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gZWFjaCB0aW1lIHRoZSBgaW5wdXRgIGV2ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQuXG4gICAgLy8gSXQncyBuZWNlc3NhcnkgdGhhdCBBbmd1bGFyIHJlY29nbml6ZXMgdGhlIHZhbHVlIGNoYW5nZSwgYmVjYXVzZSB3aGVuIEFuZ3VsYXIgZm9ybXNcbiAgICAvLyBhcmVuJ3QgdXNlZCwgdGhlIHBsYWNlaG9sZGVyIHdvbid0IHJlY29nbml6ZSB0aGUgdmFsdWUgY2hhbmdlcyBhbmQgd2lsbCBub3QgZGlzYXBwZWFyLlxuICAgIC8vIExpc3RlbmluZyB0byB0aGUgaW5wdXQgZXZlbnQgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IHdoZW4gdGhlIGlucHV0IGlzIHVzaW5nIHRoZVxuICAgIC8vIEZvcm1zTW9kdWxlIG9yIFJlYWN0aXZlRm9ybXNNb2R1bGUsIGJlY2F1c2UgQW5ndWxhciBmb3JtcyBhbHNvIGxpc3RlbnMgdG8gaW5wdXQgZXZlbnRzLlxuICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export { RadioChangeEvent } from './interfaces';
2
+ export { RadioButtonComponent } from './radio-button/radio-button.component';
3
+ export { RadioGroupDirective } from './radio-group/radio-group.directive';
4
+ export { IMPDC_RADIO_GROUP, IMPDC_RADIO_BUTTON } from './injection-tokens';
5
+ export { RadioModule } from './radio.module';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL2Zvcm0tZmllbGQvY29udHJvbHMvcmFkaW8vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUE2QixNQUFNLGNBQWMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBSYWRpb0NoYW5nZUV2ZW50LCBJUmFkaW9CdXR0b24sIElSYWRpb0dyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCB7IFJhZGlvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgeyBSYWRpb0dyb3VwRGlyZWN0aXZlIH0gZnJvbSAnLi9yYWRpby1ncm91cC9yYWRpby1ncm91cC5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgSU1QRENfUkFESU9fR1JPVVAsIElNUERDX1JBRElPX0JVVFRPTiB9IGZyb20gJy4vaW5qZWN0aW9uLXRva2Vucyc7XG5leHBvcnQgeyBSYWRpb01vZHVsZSB9IGZyb20gJy4vcmFkaW8ubW9kdWxlJztcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const IMPDC_RADIO_GROUP = new InjectionToken('ImpdcRadioGroup');
3
+ export const IMPDC_RADIO_BUTTON = new InjectionToken('ImpdcRadioButton');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0aW9uLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvZm9ybS1maWVsZC9jb250cm9scy9yYWRpby9pbmplY3Rpb24tdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQ2pELGlCQUFpQixDQUNsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQ2xELGtCQUFrQixDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSYWRpb0J1dHRvbiwgSVJhZGlvR3JvdXAgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3QgSU1QRENfUkFESU9fR1JPVVAgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVJhZGlvR3JvdXA+KFxuICAnSW1wZGNSYWRpb0dyb3VwJ1xuKTtcblxuZXhwb3J0IGNvbnN0IElNUERDX1JBRElPX0JVVFRPTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJUmFkaW9CdXR0b24+KFxuICAnSW1wZGNSYWRpb0J1dHRvbidcbik7XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './radio-change-event.interface';
2
+ export * from './radio-button.interface';
3
+ export * from './radio-group.interface';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL2Zvcm0tZmllbGQvY29udHJvbHMvcmFkaW8vaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcmFkaW8tY2hhbmdlLWV2ZW50LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3JhZGlvLWJ1dHRvbi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yYWRpby1ncm91cC5pbnRlcmZhY2UnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvZm9ybS1maWVsZC9jb250cm9scy9yYWRpby9pbnRlcmZhY2VzL3JhZGlvLWJ1dHRvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVJhZGlvQnV0dG9uIHtcbiAgY2hlY2tlZDogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuXG4gIG1hcmtGb3JDaGVjaygpOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,11 @@
1
+ export class RadioChangeEvent {
2
+ constructor(
3
+ /** The specific radio button that changed. */
4
+ source,
5
+ /** The selected value. */
6
+ value) {
7
+ this.source = source;
8
+ this.value = value;
9
+ }
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tY2hhbmdlLWV2ZW50LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvZm9ybS1maWVsZC9jb250cm9scy9yYWRpby9pbnRlcmZhY2VzL3JhZGlvLWNoYW5nZS1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjtJQUNFLDhDQUE4QztJQUM5QixNQUFvQjtJQUNwQywwQkFBMEI7SUFDVixLQUFVO1FBRlYsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUVwQixVQUFLLEdBQUwsS0FBSyxDQUFLO0lBQ3pCLENBQUM7Q0FDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSYWRpb0J1dHRvbiB9IGZyb20gJy4vcmFkaW8tYnV0dG9uLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0NoYW5nZUV2ZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgLyoqIFRoZSBzcGVjaWZpYyByYWRpbyBidXR0b24gdGhhdCBjaGFuZ2VkLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzb3VyY2U6IElSYWRpb0J1dHRvbixcbiAgICAvKiogVGhlIHNlbGVjdGVkIHZhbHVlLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogYW55XG4gICkge31cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWZpZWxkL2NvbnRyb2xzL3JhZGlvL2ludGVyZmFjZXMvcmFkaW8tZ3JvdXAuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmFkaW9CdXR0b24gfSBmcm9tICcuL3JhZGlvLWJ1dHRvbi5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSYWRpb0dyb3VwIHtcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW47XG4gIGdldCBlcnJvclN0YXRlKCk6IGJvb2xlYW47XG4gIGdldCBpbmxpbmUoKTogYm9vbGVhbjtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbjtcbiAgZ2V0IHZhbHVlKCk6IGFueTtcbiAgc2VsZWN0ZWQ6IElSYWRpb0J1dHRvbiB8IG51bGw7XG5cbiAgZW1pdENoYW5nZXNFdmVudCgpOiB2b2lkO1xuICBvbkNoYW5nZUZuKHZhbHVlOiBhbnkpOiB2b2lkO1xuICB0b3VjaCgpOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,260 @@
1
+ import { Attribute, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
2
+ import { nanoid } from 'nanoid';
3
+ import { coerceBooleanPropertyValue, coerceNumberPropertyValue } from '../../../../../utilities';
4
+ import { mixinTabIndex } from '../../../shared/tab-index.mixin';
5
+ import { IMPDC_RADIO_BUTTON, IMPDC_RADIO_GROUP } from '../injection-tokens';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../../services/unique-selection-dispatcher.service";
8
+ import * as i2 from "../../shared/toggle/toggle.component";
9
+ import * as i3 from "../../shared/toggle/components/toggle-input/toggle-input.component";
10
+ class RadioButtonComponentBase {
11
+ constructor() { }
12
+ }
13
+ const _RadioButtonComponentMixinBase = mixinTabIndex(RadioButtonComponentBase);
14
+ export class RadioButtonComponent extends _RadioButtonComponentMixinBase {
15
+ constructor(_changeDetector, _radioDispatcher, tabIndex, _radioGroup) {
16
+ super();
17
+ this._changeDetector = _changeDetector;
18
+ this._radioDispatcher = _radioDispatcher;
19
+ this._radioGroup = _radioGroup;
20
+ this._uid = `impdc-radio-button-${nanoid()}`;
21
+ this._removeUniqueSelectionListener = () => { };
22
+ this.id = this._uid;
23
+ this._checked = false;
24
+ this._value = null;
25
+ this._disabled = false;
26
+ this._required = false;
27
+ /**
28
+ * The primary label text for the radio button.
29
+ */
30
+ this.label = '';
31
+ /**
32
+ * Text to provide additional description or context for the radio button. Does
33
+ * not display if `inline` is `true`.
34
+ */
35
+ this.description = '';
36
+ /**
37
+ * Event emitted when the radio button becomes selected/checked.
38
+ */
39
+ this.change = new EventEmitter();
40
+ if (tabIndex) {
41
+ this.tabIndex = coerceNumberPropertyValue(tabIndex, 0);
42
+ }
43
+ }
44
+ /**
45
+ * Whether or not the radio input is checked/selected.
46
+ */
47
+ get checked() {
48
+ return this._checked;
49
+ }
50
+ set checked(value) {
51
+ const newCheckedValue = coerceBooleanPropertyValue(value);
52
+ if (this._checked !== newCheckedValue) {
53
+ this._checked = newCheckedValue;
54
+ if (newCheckedValue &&
55
+ this._radioGroup &&
56
+ this._radioGroup.value !== this.value) {
57
+ this._radioGroup.selected = this;
58
+ }
59
+ else if (!newCheckedValue &&
60
+ this._radioGroup &&
61
+ this._radioGroup.value === this.value) {
62
+ this._radioGroup.selected = null;
63
+ }
64
+ if (newCheckedValue) {
65
+ this._radioDispatcher.notify(this.id, this.name);
66
+ }
67
+ this._changeDetector.markForCheck();
68
+ }
69
+ }
70
+ /**
71
+ * The specific value represented by the radio button.
72
+ */
73
+ get value() {
74
+ return this._value;
75
+ }
76
+ set value(value) {
77
+ if (this._value !== value) {
78
+ this._value = value;
79
+ if (this._radioGroup) {
80
+ if (!this.checked) {
81
+ this.checked = this._radioGroup.value === value;
82
+ }
83
+ if (this.checked) {
84
+ this._radioGroup.selected = this;
85
+ }
86
+ }
87
+ }
88
+ }
89
+ /**
90
+ * Whether or not the radio button displays inline; Inherited from the parent `RadioGroupDirective` when available.
91
+ */
92
+ get inline() {
93
+ return (this._inline || (this._radioGroup && this._radioGroup.inline) || false);
94
+ }
95
+ set inline(value) {
96
+ this._inline = coerceBooleanPropertyValue(value);
97
+ }
98
+ /**
99
+ * Used to enable or disable the radio button, but will always return `true` when the parent
100
+ * `RadioGroupDirective` is already disabled.
101
+ */
102
+ get disabled() {
103
+ return (this._disabled || (this._radioGroup != null && this._radioGroup.disabled));
104
+ }
105
+ set disabled(value) {
106
+ const newDisabledState = coerceBooleanPropertyValue(value);
107
+ if (this._disabled !== newDisabledState) {
108
+ this._disabled = newDisabledState;
109
+ this._changeDetector.markForCheck();
110
+ }
111
+ }
112
+ /** @ignore */
113
+ get required() {
114
+ return (this._required || (this._radioGroup != null && this._radioGroup.required));
115
+ }
116
+ set required(value) {
117
+ this._required = coerceBooleanPropertyValue(value);
118
+ }
119
+ get _errorState() {
120
+ return this._radioGroup ? this._radioGroup.errorState : false;
121
+ }
122
+ /** @ignore */
123
+ ngOnInit() {
124
+ if (this._radioGroup) {
125
+ this.checked = this._radioGroup.value === this._value;
126
+ if (this.checked) {
127
+ this._radioGroup.selected = this;
128
+ }
129
+ this.name = this._radioGroup.name;
130
+ }
131
+ this._removeUniqueSelectionListener = this._radioDispatcher.listen((id, name) => {
132
+ if (id !== this.id && name === this.name) {
133
+ this.checked = false;
134
+ }
135
+ });
136
+ }
137
+ /** @ignore */
138
+ ngDoCheck() {
139
+ this._updateTabIndex();
140
+ }
141
+ /** @ignore */
142
+ ngAfterViewInit() {
143
+ this._updateTabIndex();
144
+ }
145
+ /** @ignore */
146
+ ngOnDestroy() {
147
+ this._removeUniqueSelectionListener();
148
+ }
149
+ /** @ignore */
150
+ markForCheck() {
151
+ this._changeDetector.markForCheck();
152
+ }
153
+ _emitChangesEvent() {
154
+ this.change.emit({ source: this, value: this._value });
155
+ }
156
+ _onBlur() {
157
+ if (this._radioGroup) {
158
+ this._radioGroup.touch();
159
+ }
160
+ }
161
+ _onInputChange(event) {
162
+ event.stopPropagation();
163
+ if (!this.checked && !this.disabled) {
164
+ const groupValueChanged = this._radioGroup && this.value !== this._radioGroup.value;
165
+ this.checked = true;
166
+ this._emitChangesEvent();
167
+ if (this._radioGroup) {
168
+ this._radioGroup.onChangeFn(this.value);
169
+ if (groupValueChanged) {
170
+ this._radioGroup.emitChangesEvent();
171
+ }
172
+ }
173
+ }
174
+ }
175
+ _updateTabIndex() {
176
+ const radioGroup = this._radioGroup;
177
+ let tabIndexValue;
178
+ if (!radioGroup || !radioGroup.selected || this.disabled) {
179
+ tabIndexValue = this.tabIndex;
180
+ }
181
+ else {
182
+ tabIndexValue = radioGroup.selected === this ? this.tabIndex : -1;
183
+ }
184
+ if (tabIndexValue !== this._previousTabIndex) {
185
+ const inputElt = this._inputElement?.nativeElement;
186
+ if (inputElt) {
187
+ inputElt.setAttribute('tabindex', tabIndexValue + '');
188
+ this._previousTabIndex = tabIndexValue;
189
+ }
190
+ }
191
+ }
192
+ }
193
+ RadioButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RadioButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UniqueSelectionDispatcher }, { token: 'tabindex', attribute: true }, { token: IMPDC_RADIO_GROUP, optional: true }], target: i0.ɵɵFactoryTarget.Component });
194
+ RadioButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RadioButtonComponent, selector: "impdc-radio-button", inputs: { tabIndex: "tabIndex", id: "id", name: "name", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], checked: "checked", value: "value", inline: "inline", disabled: "disabled", required: "required", label: "label", description: "description" }, outputs: { change: "change" }, host: { properties: { "attr.id": "id", "attr.tabindex": "null", "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null", "class.impdc-radio-button--required": "required", "class.impdc-radio-button--invalid": "_errorState", "class.impdc-radio-button--disabled": "disabled", "class.impdc-radio-button--inline": "inline" }, classAttribute: "impdc-radio-button" }, providers: [
195
+ {
196
+ provide: IMPDC_RADIO_BUTTON,
197
+ useExisting: RadioButtonComponent
198
+ }
199
+ ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["nativeInput"], descendants: true, read: ElementRef }], exportAs: ["impdcRadioButton"], usesInheritance: true, ngImport: i0, template: "<impdc-toggle [label]=\"label\" [description]=\"description\" [inline]=\"inline\">\n <input\n #nativeInput\n impdc-toggle-input\n type=\"radio\"\n class=\"impdc-radio-button__native-control\"\n [class.is-invalid]=\"_errorState\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [required]=\"required\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n (change)=\"_onInputChange($event)\"\n (blur)=\"_onBlur()\" />\n</impdc-toggle>\n", styles: [":host{display:block;opacity:var(--impartner-hex-input-opacity, 1)}:host.impdc-radio-button--inline{display:inline-block}:host.impdc-radio-button--inline:not(:last-of-type){margin-right:4rem}:host:not(.impdc-radio-button--inline):not(:last-of-type){margin-bottom:1.6rem}:host.impdc-radio-button--disabled{--impartner-hex-input-opacity: .5}:host.impdc-radio-button--invalid ::ng-deep .form-check-label{color:var(--impd-color-red-600)}\n"], dependencies: [{ kind: "component", type: i2.ToggleComponent, selector: "impdc-toggle", inputs: ["isSwitch", "label", "description", "inline", "switchIcons"] }, { kind: "component", type: i3.ToggleInputComponent, selector: "input[impdc-toggle-input]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RadioButtonComponent, decorators: [{
201
+ type: Component,
202
+ args: [{ selector: 'impdc-radio-button', host: {
203
+ class: 'impdc-radio-button',
204
+ '[attr.id]': 'id',
205
+ '[attr.tabindex]': 'null',
206
+ '[attr.aria-label]': 'null',
207
+ '[attr.aria-labelledby]': 'null',
208
+ '[attr.aria-describedby]': 'null',
209
+ '[class.impdc-radio-button--required]': 'required',
210
+ '[class.impdc-radio-button--invalid]': '_errorState',
211
+ '[class.impdc-radio-button--disabled]': 'disabled',
212
+ '[class.impdc-radio-button--inline]': 'inline'
213
+ }, inputs: ['tabIndex'], exportAs: 'impdcRadioButton', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
214
+ {
215
+ provide: IMPDC_RADIO_BUTTON,
216
+ useExisting: RadioButtonComponent
217
+ }
218
+ ], template: "<impdc-toggle [label]=\"label\" [description]=\"description\" [inline]=\"inline\">\n <input\n #nativeInput\n impdc-toggle-input\n type=\"radio\"\n class=\"impdc-radio-button__native-control\"\n [class.is-invalid]=\"_errorState\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [required]=\"required\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n (change)=\"_onInputChange($event)\"\n (blur)=\"_onBlur()\" />\n</impdc-toggle>\n", styles: [":host{display:block;opacity:var(--impartner-hex-input-opacity, 1)}:host.impdc-radio-button--inline{display:inline-block}:host.impdc-radio-button--inline:not(:last-of-type){margin-right:4rem}:host:not(.impdc-radio-button--inline):not(:last-of-type){margin-bottom:1.6rem}:host.impdc-radio-button--disabled{--impartner-hex-input-opacity: .5}:host.impdc-radio-button--invalid ::ng-deep .form-check-label{color:var(--impd-color-red-600)}\n"] }]
219
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UniqueSelectionDispatcher }, { type: undefined, decorators: [{
220
+ type: Attribute,
221
+ args: ['tabindex']
222
+ }] }, { type: undefined, decorators: [{
223
+ type: Inject,
224
+ args: [IMPDC_RADIO_GROUP]
225
+ }, {
226
+ type: Optional
227
+ }] }]; }, propDecorators: { _inputElement: [{
228
+ type: ViewChild,
229
+ args: ['nativeInput', { read: ElementRef }]
230
+ }], id: [{
231
+ type: Input
232
+ }], name: [{
233
+ type: Input
234
+ }], ariaLabel: [{
235
+ type: Input,
236
+ args: ['aria-label']
237
+ }], ariaLabelledby: [{
238
+ type: Input,
239
+ args: ['aria-labelledby']
240
+ }], ariaDescribedby: [{
241
+ type: Input,
242
+ args: ['aria-describedby']
243
+ }], checked: [{
244
+ type: Input
245
+ }], value: [{
246
+ type: Input
247
+ }], inline: [{
248
+ type: Input
249
+ }], disabled: [{
250
+ type: Input
251
+ }], required: [{
252
+ type: Input
253
+ }], label: [{
254
+ type: Input
255
+ }], description: [{
256
+ type: Input
257
+ }], change: [{
258
+ type: Output
259
+ }] } });
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvZm9ybS1maWVsZC9jb250cm9scy9yYWRpby9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvZm9ybS1maWVsZC9jb250cm9scy9yYWRpby9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBRUwsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUMxQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFBZSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHNUUsTUFBZSx3QkFBd0I7SUFFckMsZ0JBQWUsQ0FBQztDQUNqQjtBQUVELE1BQU0sOEJBQThCLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUE4Qi9FLE1BQU0sT0FBTyxvQkFDWCxTQUFRLDhCQUE4QjtJQTZLdEMsWUFDbUIsZUFBa0MsRUFDM0MsZ0JBQTJDLEVBQzVCLFFBQWlCLEVBQ1EsV0FBeUI7UUFFekUsS0FBSyxFQUFFLENBQUM7UUFM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QUs7dUJBQUMsa0JBQWtCO2dCQU9kLE9BQU87c0JBRGpCLEtBQUs7Z0JBcUNLLEtBQUs7c0JBRGYsS0FBSztnQkF5QkssTUFBTTtzQkFEaEIsS0FBSztnQkFnQkssUUFBUTtzQkFEbEIsS0FBSztnQkFrQkssUUFBUTtzQkFEbEIsS0FBSztnQkFlQyxLQUFLO3NCQURYLEtBQUs7Z0JBUUMsV0FBVztzQkFEakIsS0FBSztnQkFRVSxNQUFNO3NCQUZyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUsXG4gIGNvZXJjZU51bWJlclByb3BlcnR5VmFsdWVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IFVuaXF1ZVNlbGVjdGlvbkRpc3BhdGNoZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91bmlxdWUtc2VsZWN0aW9uLWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBIYXNUYWJJbmRleCwgbWl4aW5UYWJJbmRleCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90YWItaW5kZXgubWl4aW4nO1xuaW1wb3J0IHsgSU1QRENfUkFESU9fQlVUVE9OLCBJTVBEQ19SQURJT19HUk9VUCB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbnMnO1xuaW1wb3J0IHsgUmFkaW9DaGFuZ2VFdmVudCwgSVJhZGlvQnV0dG9uLCBJUmFkaW9Hcm91cCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5hYnN0cmFjdCBjbGFzcyBSYWRpb0J1dHRvbkNvbXBvbmVudEJhc2Uge1xuICBhYnN0cmFjdCBkaXNhYmxlZDogYm9vbGVhbjtcbiAgY29uc3RydWN0b3IoKSB7fVxufVxuXG5jb25zdCBfUmFkaW9CdXR0b25Db21wb25lbnRNaXhpbkJhc2UgPSBtaXhpblRhYkluZGV4KFJhZGlvQnV0dG9uQ29tcG9uZW50QmFzZSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ltcGRjLXJhZGlvLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYWRpby1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2ltcGRjLXJhZGlvLWJ1dHRvbicsXG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICdudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAnbnVsbCcsXG4gICAgJ1thdHRyLmFyaWEtbGFiZWxsZWRieV0nOiAnbnVsbCcsXG4gICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ251bGwnLFxuICAgICdbY2xhc3MuaW1wZGMtcmFkaW8tYnV0dG9uLS1yZXF1aXJlZF0nOiAncmVxdWlyZWQnLFxuICAgICdbY2xhc3MuaW1wZGMtcmFkaW8tYnV0dG9uLS1pbnZhbGlkXSc6ICdfZXJyb3JTdGF0ZScsXG4gICAgJ1tjbGFzcy5pbXBkYy1yYWRpby1idXR0b24tLWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5pbXBkYy1yYWRpby1idXR0b24tLWlubGluZV0nOiAnaW5saW5lJ1xuICB9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICBpbnB1dHM6IFsndGFiSW5kZXgnXSxcbiAgZXhwb3J0QXM6ICdpbXBkY1JhZGlvQnV0dG9uJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IElNUERDX1JBRElPX0JVVFRPTixcbiAgICAgIHVzZUV4aXN0aW5nOiBSYWRpb0J1dHRvbkNvbXBvbmVudFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbkNvbXBvbmVudFxuICBleHRlbmRzIF9SYWRpb0J1dHRvbkNvbXBvbmVudE1peGluQmFzZVxuICBpbXBsZW1lbnRzXG4gICAgSVJhZGlvQnV0dG9uLFxuICAgIEhhc1RhYkluZGV4LFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRG9DaGVjayxcbiAgICBBZnRlclZpZXdJbml0XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VpZDogc3RyaW5nID0gYGltcGRjLXJhZGlvLWJ1dHRvbi0ke25hbm9pZCgpfWA7XG4gIHByaXZhdGUgX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX3ByZXZpb3VzVGFiSW5kZXg/OiBudW1iZXI7XG5cbiAgQFZpZXdDaGlsZCgnbmF0aXZlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaWQ6IHN0cmluZyA9IHRoaXMuX3VpZDtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBuYW1lIGZvciBhIGdyb3VwIG9mIHJhZGlvIG9wdGlvbnM7IEluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgYFJhZGlvR3JvdXBEaXJlY3RpdmVgIHdoZW4gYXZhaWxhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG5hbWUhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3BlcnR5IGZvciBzZXR0aW5nIEFSSUEgXCJsYWJlbFwiIGF0dHJpYnV0ZS5cbiAgICovXG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpXG4gIHB1YmxpYyBhcmlhTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3BlcnR5IGZvciBzZXR0aW5nIEFSSUEgXCJsYWJlbGxlZCBieVwiIGF0dHJpYnV0ZS5cbiAgICovXG4gIEBJbnB1dCgnYXJpYS1sYWJlbGxlZGJ5JylcbiAgcHVibGljIGFyaWFMYWJlbGxlZGJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0eSBmb3Igc2V0dGluZyBBUklBIFwiZGVzY3JpYmVkIGJ5XCIgYXR0cmlidXRlLlxuICAgKi9cbiAgQElucHV0KCdhcmlhLWRlc2NyaWJlZGJ5JylcbiAgcHVibGljIGFyaWFEZXNjcmliZWRieT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHJhZGlvIGlucHV0IGlzIGNoZWNrZWQvc2VsZWN0ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gIH1cbiAgcHVibGljIHNldCBjaGVja2VkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICBjb25zdCBuZXdDaGVja2VkVmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHlWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5fY2hlY2tlZCAhPT0gbmV3Q2hlY2tlZFZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGVja2VkID0gbmV3Q2hlY2tlZFZhbHVlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG5ld0NoZWNrZWRWYWx1ZSAmJlxuICAgICAgICB0aGlzLl9yYWRpb0dyb3VwICYmXG4gICAgICAgIHRoaXMuX3JhZGlvR3JvdXAudmFsdWUgIT09IHRoaXMudmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9yYWRpb0dyb3VwLnNlbGVjdGVkID0gdGhpcztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICFuZXdDaGVja2VkVmFsdWUgJiZcbiAgICAgICAgdGhpcy5fcmFkaW9Hcm91cCAmJlxuICAgICAgICB0aGlzLl9yYWRpb0dyb3VwLnZhbHVlID09PSB0aGlzLnZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fcmFkaW9Hcm91cC5zZWxlY3RlZCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdDaGVja2VkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcmFkaW9EaXNwYXRjaGVyLm5vdGlmeSh0aGlzLmlkLCB0aGlzLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIF9jaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBzcGVjaWZpYyB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgcmFkaW8gYnV0dG9uLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgICBpZiAodGhpcy5fcmFkaW9Hcm91cCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tlZCkge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuX3JhZGlvR3JvdXAudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tlZCkge1xuICAgICAgICAgIHRoaXMuX3JhZGlvR3JvdXAuc2VsZWN0ZWQgPSB0aGlzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBfdmFsdWU6IGFueSA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSByYWRpbyBidXR0b24gZGlzcGxheXMgaW5saW5lOyBJbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IGBSYWRpb0dyb3VwRGlyZWN0aXZlYCB3aGVuIGF2YWlsYWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgaW5saW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9pbmxpbmUgfHwgKHRoaXMuX3JhZGlvR3JvdXAgJiYgdGhpcy5fcmFkaW9Hcm91cC5pbmxpbmUpIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubGluZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5faW5saW5lID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBfaW5saW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcmFkaW8gYnV0dG9uLCBidXQgd2lsbCBhbHdheXMgcmV0dXJuIGB0cnVlYCB3aGVuIHRoZSBwYXJlbnRcbiAgICogYFJhZGlvR3JvdXBEaXJlY3RpdmVgIGlzIGFscmVhZHkgZGlzYWJsZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9kaXNhYmxlZCB8fCAodGhpcy5fcmFkaW9Hcm91cCAhPSBudWxsICYmIHRoaXMuX3JhZGlvR3JvdXAuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICBjb25zdCBuZXdEaXNhYmxlZFN0YXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkICE9PSBuZXdEaXNhYmxlZFN0YXRlKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IG5ld0Rpc2FibGVkU3RhdGU7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3JlcXVpcmVkIHx8ICh0aGlzLl9yYWRpb0dyb3VwICE9IG51bGwgJiYgdGhpcy5fcmFkaW9Hcm91cC5yZXF1aXJlZClcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgbGFiZWwgdGV4dCBmb3IgdGhlIHJhZGlvIGJ1dHRvbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRleHQgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIG9yIGNvbnRleHQgZm9yIHRoZSByYWRpbyBidXR0b24uIERvZXNcbiAgICogbm90IGRpc3BsYXkgaWYgYGlubGluZWAgaXMgYHRydWVgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSByYWRpbyBidXR0b24gYmVjb21lcyBzZWxlY3RlZC9jaGVja2VkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSYWRpb0NoYW5nZUV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBnZXQgX2Vycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JhZGlvR3JvdXAgPyB0aGlzLl9yYWRpb0dyb3VwLmVycm9yU3RhdGUgOiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9yYWRpb0Rpc3BhdGNoZXI6IFVuaXF1ZVNlbGVjdGlvbkRpc3BhdGNoZXIsXG4gICAgQEF0dHJpYnV0ZSgndGFiaW5kZXgnKSB0YWJJbmRleD86IHN0cmluZyxcbiAgICBASW5qZWN0KElNUERDX1JBRElPX0dST1VQKSBAT3B0aW9uYWwoKSByZWFkb25seSBfcmFkaW9Hcm91cD86IElSYWRpb0dyb3VwXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAodGFiSW5kZXgpIHtcbiAgICAgIHRoaXMudGFiSW5kZXggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eVZhbHVlKHRhYkluZGV4LCAwKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JhZGlvR3JvdXApIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuX3JhZGlvR3JvdXAudmFsdWUgPT09IHRoaXMuX3ZhbHVlO1xuXG4gICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMuX3JhZGlvR3JvdXAuc2VsZWN0ZWQgPSB0aGlzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLl9yYWRpb0dyb3VwLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXIgPSB0aGlzLl9yYWRpb0Rpc3BhdGNoZXIubGlzdGVuKFxuICAgICAgKGlkLCBuYW1lKSA9PiB7XG4gICAgICAgIGlmIChpZCAhPT0gdGhpcy5pZCAmJiBuYW1lID09PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIHRoaXMuX3VwZGF0ZVRhYkluZGV4KCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3VwZGF0ZVRhYkluZGV4KCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBtYXJrRm9yQ2hlY2soKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2VtaXRDaGFuZ2VzRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh7IHNvdXJjZTogdGhpcywgdmFsdWU6IHRoaXMuX3ZhbHVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkJsdXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JhZGlvR3JvdXApIHtcbiAgICAgIHRoaXMuX3JhZGlvR3JvdXAudG91Y2goKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uSW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIXRoaXMuY2hlY2tlZCAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgY29uc3QgZ3JvdXBWYWx1ZUNoYW5nZWQgPVxuICAgICAgICB0aGlzLl9yYWRpb0dyb3VwICYmIHRoaXMudmFsdWUgIT09IHRoaXMuX3JhZGlvR3JvdXAudmFsdWU7XG4gICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fZW1pdENoYW5nZXNFdmVudCgpO1xuXG4gICAgICBpZiAodGhpcy5fcmFkaW9Hcm91cCkge1xuICAgICAgICB0aGlzLl9yYWRpb0dyb3VwLm9uQ2hhbmdlRm4odGhpcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKGdyb3VwVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5fcmFkaW9Hcm91cC5lbWl0Q2hhbmdlc0V2ZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZVRhYkluZGV4KCk6IHZvaWQge1xuICAgIGNvbnN0IHJhZGlvR3JvdXAgPSB0aGlzLl9yYWRpb0dyb3VwO1xuICAgIGxldCB0YWJJbmRleFZhbHVlOiBudW1iZXI7XG5cbiAgICBpZiAoIXJhZGlvR3JvdXAgfHwgIXJhZGlvR3JvdXAuc2VsZWN0ZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGFiSW5kZXhWYWx1ZSA9IHRoaXMudGFiSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYkluZGV4VmFsdWUgPSByYWRpb0dyb3VwLnNlbGVjdGVkID09PSB0aGlzID8gdGhpcy50YWJJbmRleCA6IC0xO1xuICAgIH1cblxuICAgIGlmICh0YWJJbmRleFZhbHVlICE9PSB0aGlzLl9wcmV2aW91c1RhYkluZGV4KSB7XG4gICAgICBjb25zdCBpbnB1dEVsdDogSFRNTElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgaWYgKGlucHV0RWx0KSB7XG4gICAgICAgIGlucHV0RWx0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0YWJJbmRleFZhbHVlICsgJycpO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1RhYkluZGV4ID0gdGFiSW5kZXhWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxpbXBkYy10b2dnbGUgW2xhYmVsXT1cImxhYmVsXCIgW2Rlc2NyaXB0aW9uXT1cImRlc2NyaXB0aW9uXCIgW2lubGluZV09XCJpbmxpbmVcIj5cbiAgPGlucHV0XG4gICAgI25hdGl2ZUlucHV0XG4gICAgaW1wZGMtdG9nZ2xlLWlucHV0XG4gICAgdHlwZT1cInJhZGlvXCJcbiAgICBjbGFzcz1cImltcGRjLXJhZGlvLWJ1dHRvbl9fbmF0aXZlLWNvbnRyb2xcIlxuICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cIl9lcnJvclN0YXRlXCJcbiAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRieVwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkYnlcIlxuICAgIChjaGFuZ2UpPVwiX29uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGJsdXIpPVwiX29uQmx1cigpXCIgLz5cbjwvaW1wZGMtdG9nZ2xlPlxuIl19