@ptsecurity/mosaic 13.1.1 → 13.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/_theming.scss +464 -165
  2. package/_visual.scss +419 -239
  3. package/button/button.component.d.ts +1 -1
  4. package/core/option/option.d.ts +1 -0
  5. package/core/validation/validation.d.ts +3 -3
  6. package/design-tokens/legacy-2017/tokens/components/alert.json5 +30 -30
  7. package/design-tokens/legacy-2017/tokens/components/badge.json5 +91 -101
  8. package/design-tokens/legacy-2017/tokens/components/button.json5 +53 -54
  9. package/design-tokens/legacy-2017/tokens/components/card.json5 +24 -24
  10. package/design-tokens/legacy-2017/tokens/components/checkbox.json5 +10 -10
  11. package/design-tokens/legacy-2017/tokens/components/datepicker.json5 +4 -4
  12. package/design-tokens/legacy-2017/tokens/components/dl.json5 +38 -0
  13. package/design-tokens/legacy-2017/tokens/components/dropdown.json5 +2 -1
  14. package/design-tokens/legacy-2017/tokens/components/form-field.json5 +48 -8
  15. package/design-tokens/legacy-2017/tokens/components/forms.json5 +4 -4
  16. package/design-tokens/legacy-2017/tokens/components/input.json5 +2 -3
  17. package/design-tokens/legacy-2017/tokens/components/link.json5 +13 -19
  18. package/design-tokens/legacy-2017/tokens/components/list.json5 +3 -5
  19. package/design-tokens/legacy-2017/tokens/components/modal.json5 +10 -8
  20. package/design-tokens/legacy-2017/tokens/components/navbar.json5 +12 -11
  21. package/design-tokens/legacy-2017/tokens/components/popover.json5 +18 -18
  22. package/design-tokens/legacy-2017/tokens/components/popup.json5 +8 -8
  23. package/design-tokens/legacy-2017/tokens/components/progress-bar.json5 +2 -2
  24. package/design-tokens/legacy-2017/tokens/components/radio.json5 +12 -12
  25. package/design-tokens/legacy-2017/tokens/components/select.json5 +0 -1
  26. package/design-tokens/legacy-2017/tokens/components/sidepanel.json5 +6 -4
  27. package/design-tokens/legacy-2017/tokens/components/table.json5 +1 -1
  28. package/design-tokens/legacy-2017/tokens/components/tabs.json5 +82 -6
  29. package/design-tokens/legacy-2017/tokens/components/tags.json5 +49 -50
  30. package/design-tokens/legacy-2017/tokens/components/toggle.json5 +17 -17
  31. package/design-tokens/legacy-2017/tokens/components/tooltip.json5 +21 -21
  32. package/design-tokens/legacy-2017/tokens/components/tree.json5 +5 -2
  33. package/design-tokens/legacy-2017/tokens/properties/colors.json5 +35 -31
  34. package/design-tokens/legacy-2017/tokens/properties/globals.json5 +20 -1
  35. package/design-tokens/legacy-2017/tokens/properties/typography.json5 +70 -35
  36. package/design-tokens/legacy-2017/tokens.d.ts +155 -56
  37. package/design-tokens/pt-2022/tokens/components/alert.json5 +30 -30
  38. package/design-tokens/pt-2022/tokens/components/badge.json5 +92 -102
  39. package/design-tokens/pt-2022/tokens/components/button.json5 +54 -55
  40. package/design-tokens/pt-2022/tokens/components/card.json5 +24 -24
  41. package/design-tokens/pt-2022/tokens/components/checkbox.json5 +10 -10
  42. package/design-tokens/pt-2022/tokens/components/datepicker.json5 +4 -4
  43. package/design-tokens/pt-2022/tokens/components/dl.json5 +38 -0
  44. package/design-tokens/pt-2022/tokens/components/dropdown.json5 +2 -1
  45. package/design-tokens/pt-2022/tokens/components/form-field.json5 +48 -8
  46. package/design-tokens/pt-2022/tokens/components/forms.json5 +4 -4
  47. package/design-tokens/pt-2022/tokens/components/input.json5 +2 -3
  48. package/design-tokens/pt-2022/tokens/components/link.json5 +17 -23
  49. package/design-tokens/pt-2022/tokens/components/list.json5 +2 -4
  50. package/design-tokens/pt-2022/tokens/components/modal.json5 +10 -8
  51. package/design-tokens/pt-2022/tokens/components/navbar.json5 +14 -13
  52. package/design-tokens/pt-2022/tokens/components/popover.json5 +21 -21
  53. package/design-tokens/pt-2022/tokens/components/popup.json5 +8 -8
  54. package/design-tokens/pt-2022/tokens/components/progress-bar.json5 +1 -1
  55. package/design-tokens/pt-2022/tokens/components/radio.json5 +12 -12
  56. package/design-tokens/pt-2022/tokens/components/select.json5 +0 -1
  57. package/design-tokens/pt-2022/tokens/components/sidepanel.json5 +7 -5
  58. package/design-tokens/pt-2022/tokens/components/table.json5 +1 -1
  59. package/design-tokens/pt-2022/tokens/components/tabs.json5 +82 -6
  60. package/design-tokens/pt-2022/tokens/components/tags.json5 +49 -50
  61. package/design-tokens/pt-2022/tokens/components/toggle.json5 +18 -18
  62. package/design-tokens/pt-2022/tokens/components/tooltip.json5 +23 -23
  63. package/design-tokens/pt-2022/tokens/components/tree.json5 +5 -2
  64. package/design-tokens/pt-2022/tokens/properties/colors.json5 +37 -33
  65. package/design-tokens/pt-2022/tokens/properties/globals.json5 +20 -1
  66. package/design-tokens/pt-2022/tokens/properties/typography.json5 +69 -34
  67. package/design-tokens/pt-2022/tokens.d.ts +151 -52
  68. package/dl/README.md +0 -0
  69. package/dl/dl.component.d.ts +26 -0
  70. package/dl/dl.module.d.ts +10 -0
  71. package/dl/index.d.ts +1 -0
  72. package/dl/package.json +10 -0
  73. package/dl/ptsecurity-mosaic-dl.d.ts +5 -0
  74. package/dl/public-api.d.ts +2 -0
  75. package/esm2020/autocomplete/autocomplete-origin.directive.mjs +3 -3
  76. package/esm2020/autocomplete/autocomplete-trigger.directive.mjs +3 -3
  77. package/esm2020/autocomplete/autocomplete.component.mjs +3 -3
  78. package/esm2020/autocomplete/autocomplete.module.mjs +4 -4
  79. package/esm2020/button/button.component.mjs +29 -21
  80. package/esm2020/button/button.module.mjs +4 -4
  81. package/esm2020/button-toggle/button-toggle.component.mjs +6 -6
  82. package/esm2020/button-toggle/button-toggle.module.mjs +4 -4
  83. package/esm2020/card/card.component.mjs +3 -3
  84. package/esm2020/card/card.module.mjs +4 -4
  85. package/esm2020/checkbox/checkbox-module.mjs +4 -4
  86. package/esm2020/checkbox/checkbox-required-validator.mjs +3 -3
  87. package/esm2020/checkbox/checkbox.mjs +3 -3
  88. package/esm2020/core/common-behaviors/common-module.mjs +4 -4
  89. package/esm2020/core/error/error-options.mjs +6 -6
  90. package/esm2020/core/formatters/date/formatter.mjs +3 -3
  91. package/esm2020/core/formatters/index.mjs +4 -4
  92. package/esm2020/core/formatters/number/formatter.mjs +4 -4
  93. package/esm2020/core/forms/forms-module.mjs +4 -4
  94. package/esm2020/core/forms/forms.directive.mjs +6 -6
  95. package/esm2020/core/highlight/highlight.pipe.mjs +3 -3
  96. package/esm2020/core/highlight/index.mjs +4 -4
  97. package/esm2020/core/line/line.mjs +7 -7
  98. package/esm2020/core/option/action.mjs +3 -3
  99. package/esm2020/core/option/optgroup.mjs +3 -3
  100. package/esm2020/core/option/option-module.mjs +4 -4
  101. package/esm2020/core/option/option.mjs +10 -7
  102. package/esm2020/core/pop-up/pop-up-trigger.mjs +3 -3
  103. package/esm2020/core/pop-up/pop-up.mjs +3 -3
  104. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +3 -3
  105. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +4 -4
  106. package/esm2020/core/services/measure-scrollbar.service.mjs +3 -3
  107. package/esm2020/core/validation/validation.mjs +10 -5
  108. package/esm2020/datepicker/calendar-body.component.mjs +3 -3
  109. package/esm2020/datepicker/calendar.component.mjs +6 -6
  110. package/esm2020/datepicker/datepicker-input.directive.mjs +3 -3
  111. package/esm2020/datepicker/datepicker-intl.mjs +3 -3
  112. package/esm2020/datepicker/datepicker-module.mjs +4 -4
  113. package/esm2020/datepicker/datepicker-toggle.component.mjs +6 -6
  114. package/esm2020/datepicker/datepicker.component.mjs +6 -6
  115. package/esm2020/datepicker/month-view.component.mjs +3 -3
  116. package/esm2020/datepicker/multi-year-view.component.mjs +3 -3
  117. package/esm2020/datepicker/year-view.component.mjs +3 -3
  118. package/esm2020/design-tokens/legacy-2017/tokens.mjs +156 -57
  119. package/esm2020/design-tokens/pt-2022/tokens.mjs +152 -53
  120. package/esm2020/divider/divider.component.mjs +3 -3
  121. package/esm2020/divider/divider.module.mjs +4 -4
  122. package/esm2020/dl/dl.component.mjs +78 -0
  123. package/esm2020/dl/dl.module.mjs +42 -0
  124. package/esm2020/dl/index.mjs +2 -0
  125. package/esm2020/dl/ptsecurity-mosaic-dl.mjs +5 -0
  126. package/esm2020/dl/public-api.mjs +3 -0
  127. package/esm2020/dropdown/dropdown-content.directive.mjs +3 -3
  128. package/esm2020/dropdown/dropdown-item.component.mjs +5 -5
  129. package/esm2020/dropdown/dropdown-trigger.directive.mjs +3 -3
  130. package/esm2020/dropdown/dropdown.component.mjs +6 -6
  131. package/esm2020/dropdown/dropdown.module.mjs +4 -4
  132. package/esm2020/form-field/cleaner.mjs +3 -3
  133. package/esm2020/form-field/form-field.mjs +48 -28
  134. package/esm2020/form-field/form-field.module.mjs +10 -5
  135. package/esm2020/form-field/hint.mjs +6 -6
  136. package/esm2020/form-field/password-hint.mjs +134 -0
  137. package/esm2020/form-field/prefix.mjs +3 -3
  138. package/esm2020/form-field/public-api.mjs +2 -1
  139. package/esm2020/form-field/stepper.mjs +3 -3
  140. package/esm2020/form-field/suffix.mjs +3 -3
  141. package/esm2020/icon/icon.component.mjs +6 -6
  142. package/esm2020/icon/icon.module.mjs +4 -4
  143. package/esm2020/input/input-number-validators.mjs +6 -6
  144. package/esm2020/input/input-number.mjs +3 -3
  145. package/esm2020/input/input-password.mjs +368 -0
  146. package/esm2020/input/input.mjs +12 -11
  147. package/esm2020/input/input.module.mjs +50 -8
  148. package/esm2020/input/public-api.mjs +2 -1
  149. package/esm2020/link/link.component.mjs +3 -3
  150. package/esm2020/link/link.module.mjs +4 -4
  151. package/esm2020/list/list-selection.component.mjs +11 -11
  152. package/esm2020/list/list.component.mjs +7 -7
  153. package/esm2020/list/list.module.mjs +4 -4
  154. package/esm2020/modal/css-unit.pipe.mjs +3 -3
  155. package/esm2020/modal/modal-control.service.mjs +3 -3
  156. package/esm2020/modal/modal.component.mjs +4 -4
  157. package/esm2020/modal/modal.directive.mjs +12 -12
  158. package/esm2020/modal/modal.module.mjs +4 -4
  159. package/esm2020/modal/modal.service.mjs +3 -3
  160. package/esm2020/navbar/navbar-item.component.mjs +80 -79
  161. package/esm2020/navbar/navbar.component.mjs +10 -10
  162. package/esm2020/navbar/navbar.module.mjs +4 -4
  163. package/esm2020/navbar/vertical-navbar.component.mjs +6 -6
  164. package/esm2020/popover/popover-confirm.component.mjs +8 -8
  165. package/esm2020/popover/popover.component.mjs +8 -8
  166. package/esm2020/popover/popover.module.mjs +4 -4
  167. package/esm2020/progress-bar/progress-bar.component.mjs +3 -3
  168. package/esm2020/progress-bar/progress-bar.module.mjs +4 -4
  169. package/esm2020/progress-spinner/progress-spinner.component.mjs +3 -3
  170. package/esm2020/progress-spinner/progress-spinner.module.mjs +4 -4
  171. package/esm2020/radio/radio.component.mjs +6 -6
  172. package/esm2020/radio/radio.module.mjs +4 -4
  173. package/esm2020/select/public-api.mjs +2 -1
  174. package/esm2020/select/select-option.directive.mjs +65 -0
  175. package/esm2020/select/select.component.mjs +16 -16
  176. package/esm2020/select/select.module.mjs +19 -10
  177. package/esm2020/sidebar/sidebar.component.mjs +9 -9
  178. package/esm2020/sidebar/sidebar.module.mjs +4 -4
  179. package/esm2020/sidepanel/sidepanel-container.component.mjs +5 -5
  180. package/esm2020/sidepanel/sidepanel-directives.mjs +18 -18
  181. package/esm2020/sidepanel/sidepanel.module.mjs +4 -4
  182. package/esm2020/sidepanel/sidepanel.service.mjs +3 -3
  183. package/esm2020/splitter/splitter.component.mjs +12 -12
  184. package/esm2020/splitter/splitter.module.mjs +4 -4
  185. package/esm2020/table/table.component.mjs +3 -3
  186. package/esm2020/table/table.module.mjs +4 -4
  187. package/esm2020/tabs/paginated-tab-header.mjs +3 -3
  188. package/esm2020/tabs/tab-body.component.mjs +6 -6
  189. package/esm2020/tabs/tab-content.directive.mjs +3 -3
  190. package/esm2020/tabs/tab-group.component.mjs +20 -20
  191. package/esm2020/tabs/tab-header.component.mjs +4 -4
  192. package/esm2020/tabs/tab-label-wrapper.directive.mjs +3 -3
  193. package/esm2020/tabs/tab-label.directive.mjs +3 -3
  194. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +9 -9
  195. package/esm2020/tabs/tab.component.mjs +3 -3
  196. package/esm2020/tabs/tabs.module.mjs +4 -4
  197. package/esm2020/tags/tag-input.mjs +3 -3
  198. package/esm2020/tags/tag-list.component.mjs +6 -6
  199. package/esm2020/tags/tag.component.mjs +60 -60
  200. package/esm2020/tags/tag.module.mjs +4 -4
  201. package/esm2020/textarea/textarea.component.mjs +9 -8
  202. package/esm2020/textarea/textarea.module.mjs +4 -4
  203. package/esm2020/timepicker/timepicker.directive.mjs +3 -3
  204. package/esm2020/timepicker/timepicker.module.mjs +4 -4
  205. package/esm2020/toggle/toggle.component.mjs +3 -3
  206. package/esm2020/toggle/toggle.module.mjs +4 -4
  207. package/esm2020/tooltip/tooltip.component.mjs +14 -13
  208. package/esm2020/tooltip/tooltip.module.mjs +4 -4
  209. package/esm2020/tree/node.mjs +3 -3
  210. package/esm2020/tree/outlet.mjs +3 -3
  211. package/esm2020/tree/padding.directive.mjs +12 -9
  212. package/esm2020/tree/toggle.mjs +10 -10
  213. package/esm2020/tree/tree-base.mjs +6 -6
  214. package/esm2020/tree/tree-option.component.mjs +9 -9
  215. package/esm2020/tree/tree-selection.component.mjs +8 -6
  216. package/esm2020/tree/tree.mjs +3 -3
  217. package/esm2020/tree/tree.module.mjs +4 -4
  218. package/esm2020/tree-select/tree-select.component.mjs +14 -14
  219. package/esm2020/tree-select/tree-select.module.mjs +4 -4
  220. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +13 -13
  221. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +10 -10
  222. package/fesm2015/ptsecurity-mosaic-button.mjs +32 -24
  223. package/fesm2015/ptsecurity-mosaic-button.mjs.map +1 -1
  224. package/fesm2015/ptsecurity-mosaic-card.mjs +7 -7
  225. package/fesm2015/ptsecurity-mosaic-checkbox.mjs +10 -10
  226. package/fesm2015/ptsecurity-mosaic-core.mjs +89 -81
  227. package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -1
  228. package/fesm2015/ptsecurity-mosaic-datepicker.mjs +40 -40
  229. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs +443 -146
  230. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
  231. package/fesm2015/ptsecurity-mosaic-divider.mjs +7 -7
  232. package/fesm2015/ptsecurity-mosaic-dl.mjs +124 -0
  233. package/fesm2015/ptsecurity-mosaic-dl.mjs.map +1 -0
  234. package/fesm2015/ptsecurity-mosaic-dropdown.mjs +19 -19
  235. package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  236. package/fesm2015/ptsecurity-mosaic-form-field.mjs +214 -50
  237. package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +1 -1
  238. package/fesm2015/ptsecurity-mosaic-icon.mjs +10 -10
  239. package/fesm2015/ptsecurity-mosaic-input.mjs +434 -31
  240. package/fesm2015/ptsecurity-mosaic-input.mjs.map +1 -1
  241. package/fesm2015/ptsecurity-mosaic-link.mjs +7 -7
  242. package/fesm2015/ptsecurity-mosaic-list.mjs +21 -21
  243. package/fesm2015/ptsecurity-mosaic-list.mjs.map +1 -1
  244. package/fesm2015/ptsecurity-mosaic-modal.mjs +29 -29
  245. package/fesm2015/ptsecurity-mosaic-modal.mjs.map +1 -1
  246. package/fesm2015/ptsecurity-mosaic-navbar.mjs +97 -96
  247. package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +1 -1
  248. package/fesm2015/ptsecurity-mosaic-popover.mjs +18 -18
  249. package/fesm2015/ptsecurity-mosaic-popover.mjs.map +1 -1
  250. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +7 -7
  251. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +7 -7
  252. package/fesm2015/ptsecurity-mosaic-radio.mjs +10 -10
  253. package/fesm2015/ptsecurity-mosaic-select.mjs +99 -33
  254. package/fesm2015/ptsecurity-mosaic-select.mjs.map +1 -1
  255. package/fesm2015/ptsecurity-mosaic-sidebar.mjs +13 -13
  256. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +28 -28
  257. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  258. package/fesm2015/ptsecurity-mosaic-splitter.mjs +16 -16
  259. package/fesm2015/ptsecurity-mosaic-table.mjs +7 -7
  260. package/fesm2015/ptsecurity-mosaic-tabs.mjs +56 -56
  261. package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +1 -1
  262. package/fesm2015/ptsecurity-mosaic-tags.mjs +74 -74
  263. package/fesm2015/ptsecurity-mosaic-tags.mjs.map +1 -1
  264. package/fesm2015/ptsecurity-mosaic-textarea.mjs +11 -10
  265. package/fesm2015/ptsecurity-mosaic-textarea.mjs.map +1 -1
  266. package/fesm2015/ptsecurity-mosaic-timepicker.mjs +7 -7
  267. package/fesm2015/ptsecurity-mosaic-toggle.mjs +7 -7
  268. package/fesm2015/ptsecurity-mosaic-tooltip.mjs +17 -16
  269. package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  270. package/fesm2015/ptsecurity-mosaic-tree-select.mjs +17 -17
  271. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  272. package/fesm2015/ptsecurity-mosaic-tree.mjs +158 -155
  273. package/fesm2015/ptsecurity-mosaic-tree.mjs.map +1 -1
  274. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs +13 -13
  275. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs +10 -10
  276. package/fesm2020/ptsecurity-mosaic-button.mjs +32 -24
  277. package/fesm2020/ptsecurity-mosaic-button.mjs.map +1 -1
  278. package/fesm2020/ptsecurity-mosaic-card.mjs +7 -7
  279. package/fesm2020/ptsecurity-mosaic-checkbox.mjs +10 -10
  280. package/fesm2020/ptsecurity-mosaic-core.mjs +89 -81
  281. package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -1
  282. package/fesm2020/ptsecurity-mosaic-datepicker.mjs +40 -40
  283. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs +443 -146
  284. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
  285. package/fesm2020/ptsecurity-mosaic-divider.mjs +7 -7
  286. package/fesm2020/ptsecurity-mosaic-dl.mjs +124 -0
  287. package/fesm2020/ptsecurity-mosaic-dl.mjs.map +1 -0
  288. package/fesm2020/ptsecurity-mosaic-dropdown.mjs +19 -19
  289. package/fesm2020/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  290. package/fesm2020/ptsecurity-mosaic-form-field.mjs +200 -50
  291. package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +1 -1
  292. package/fesm2020/ptsecurity-mosaic-icon.mjs +10 -10
  293. package/fesm2020/ptsecurity-mosaic-input.mjs +427 -31
  294. package/fesm2020/ptsecurity-mosaic-input.mjs.map +1 -1
  295. package/fesm2020/ptsecurity-mosaic-link.mjs +7 -7
  296. package/fesm2020/ptsecurity-mosaic-list.mjs +21 -21
  297. package/fesm2020/ptsecurity-mosaic-list.mjs.map +1 -1
  298. package/fesm2020/ptsecurity-mosaic-modal.mjs +29 -29
  299. package/fesm2020/ptsecurity-mosaic-modal.mjs.map +1 -1
  300. package/fesm2020/ptsecurity-mosaic-navbar.mjs +97 -96
  301. package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +1 -1
  302. package/fesm2020/ptsecurity-mosaic-popover.mjs +18 -18
  303. package/fesm2020/ptsecurity-mosaic-popover.mjs.map +1 -1
  304. package/fesm2020/ptsecurity-mosaic-progress-bar.mjs +7 -7
  305. package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs +7 -7
  306. package/fesm2020/ptsecurity-mosaic-radio.mjs +10 -10
  307. package/fesm2020/ptsecurity-mosaic-select.mjs +96 -32
  308. package/fesm2020/ptsecurity-mosaic-select.mjs.map +1 -1
  309. package/fesm2020/ptsecurity-mosaic-sidebar.mjs +13 -13
  310. package/fesm2020/ptsecurity-mosaic-sidepanel.mjs +28 -28
  311. package/fesm2020/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  312. package/fesm2020/ptsecurity-mosaic-splitter.mjs +16 -16
  313. package/fesm2020/ptsecurity-mosaic-table.mjs +7 -7
  314. package/fesm2020/ptsecurity-mosaic-tabs.mjs +56 -56
  315. package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +1 -1
  316. package/fesm2020/ptsecurity-mosaic-tags.mjs +72 -72
  317. package/fesm2020/ptsecurity-mosaic-tags.mjs.map +1 -1
  318. package/fesm2020/ptsecurity-mosaic-textarea.mjs +11 -10
  319. package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +1 -1
  320. package/fesm2020/ptsecurity-mosaic-timepicker.mjs +7 -7
  321. package/fesm2020/ptsecurity-mosaic-toggle.mjs +7 -7
  322. package/fesm2020/ptsecurity-mosaic-tooltip.mjs +17 -16
  323. package/fesm2020/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  324. package/fesm2020/ptsecurity-mosaic-tree-select.mjs +17 -17
  325. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  326. package/fesm2020/ptsecurity-mosaic-tree.mjs +155 -152
  327. package/fesm2020/ptsecurity-mosaic-tree.mjs.map +1 -1
  328. package/form-field/form-field.d.ts +9 -2
  329. package/form-field/form-field.module.d.ts +8 -7
  330. package/form-field/password-hint.d.ts +40 -0
  331. package/form-field/public-api.d.ts +1 -0
  332. package/input/input-password.d.ts +121 -0
  333. package/input/input.d.ts +4 -3
  334. package/input/input.module.d.ts +7 -6
  335. package/input/public-api.d.ts +1 -0
  336. package/list/list-selection.component.d.ts +1 -1
  337. package/navbar/navbar-item.component.d.ts +18 -18
  338. package/package.json +12 -4
  339. package/prebuilt-themes/dark-theme.css +1 -1
  340. package/prebuilt-themes/default-theme.css +1 -1
  341. package/prebuilt-visual/default-visual.css +1 -1
  342. package/select/public-api.d.ts +1 -0
  343. package/select/select-option.directive.d.ts +20 -0
  344. package/select/select.module.d.ts +9 -7
  345. package/tags/tag.component.d.ts +20 -20
  346. package/textarea/textarea.component.d.ts +4 -3
  347. package/toggle/README.md +0 -0
  348. package/tree/padding.directive.d.ts +7 -5
  349. package/tree/tree-option.component.d.ts +2 -2
@@ -3,8 +3,9 @@ export * from './form-field';
3
3
  export * from './form-field-control';
4
4
  export * from './form-field-errors';
5
5
  export * from './hint';
6
+ export * from './password-hint';
6
7
  export * from './suffix';
7
8
  export * from './prefix';
8
9
  export * from './cleaner';
9
10
  export * from './stepper';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9mb3JtLWZpZWxkL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGQtY29udHJvbCc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGQtZXJyb3JzJztcbmV4cG9ydCAqIGZyb20gJy4vaGludCc7XG5leHBvcnQgKiBmcm9tICcuL3N1ZmZpeCc7XG5leHBvcnQgKiBmcm9tICcuL3ByZWZpeCc7XG5leHBvcnQgKiBmcm9tICcuL2NsZWFuZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGVwcGVyJztcbiJdfQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9mb3JtLWZpZWxkL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLWZpZWxkJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZC1jb250cm9sJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZC1lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9oaW50JztcbmV4cG9ydCAqIGZyb20gJy4vcGFzc3dvcmQtaGludCc7XG5leHBvcnQgKiBmcm9tICcuL3N1ZmZpeCc7XG5leHBvcnQgKiBmcm9tICcuL3ByZWZpeCc7XG5leHBvcnQgKiBmcm9tICcuL2NsZWFuZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGVwcGVyJztcbiJdfQ==
@@ -25,8 +25,8 @@ export class McStepper {
25
25
  $event.preventDefault();
26
26
  }
27
27
  }
28
- /** @nocollapse */ /** @nocollapse */ McStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McStepper, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
- /** @nocollapse */ /** @nocollapse */ McStepper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: McStepper, selector: "mc-stepper", outputs: { stepUp: "stepUp", stepDown: "stepDown" }, ngImport: i0, template: `
28
+ /** @nocollapse */ /** @nocollapse */ McStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McStepper, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
+ /** @nocollapse */ /** @nocollapse */ McStepper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: McStepper, selector: "mc-stepper", outputs: { stepUp: "stepUp", stepDown: "stepDown" }, ngImport: i0, template: `
30
30
  <i class="mc mc-icon mc-icon_light mc-second mc-stepper-step-up mc-angle-down-L_16"
31
31
  (mousedown)="onStepUp($event)">
32
32
  </i>
@@ -34,7 +34,7 @@ export class McStepper {
34
34
  (mousedown)="onStepDown($event)">
35
35
  </i>
36
36
  `, isInline: true });
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McStepper, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McStepper, decorators: [{
38
38
  type: Component,
39
39
  args: [{
40
40
  selector: 'mc-stepper',
@@ -2,9 +2,9 @@ import { Directive } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class McSuffix {
4
4
  }
5
- /** @nocollapse */ /** @nocollapse */ McSuffix.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McSuffix, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
- /** @nocollapse */ /** @nocollapse */ McSuffix.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: McSuffix, selector: "[mcSuffix]", ngImport: i0 });
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McSuffix, decorators: [{
5
+ /** @nocollapse */ /** @nocollapse */ McSuffix.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSuffix, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
+ /** @nocollapse */ /** @nocollapse */ McSuffix.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McSuffix, selector: "[mcSuffix]", ngImport: i0 });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSuffix, decorators: [{
8
8
  type: Directive,
9
9
  args: [{
10
10
  selector: '[mcSuffix]'
@@ -4,9 +4,9 @@ import * as i0 from "@angular/core";
4
4
  // tslint:disable-next-line:naming-convention
5
5
  export class McIconCSSStyler {
6
6
  }
7
- /** @nocollapse */ /** @nocollapse */ McIconCSSStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIconCSSStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8
- /** @nocollapse */ /** @nocollapse */ McIconCSSStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: McIconCSSStyler, selector: "[mc-icon]", host: { classAttribute: "mc mc-icon" }, ngImport: i0 });
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIconCSSStyler, decorators: [{
7
+ /** @nocollapse */ /** @nocollapse */ McIconCSSStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIconCSSStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8
+ /** @nocollapse */ /** @nocollapse */ McIconCSSStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McIconCSSStyler, selector: "[mc-icon]", host: { classAttribute: "mc mc-icon" }, ngImport: i0 });
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIconCSSStyler, decorators: [{
10
10
  type: Directive,
11
11
  args: [{
12
12
  selector: '[mc-icon]',
@@ -32,9 +32,9 @@ export class McIcon extends McIconMixinBase {
32
32
  return this._elementRef.nativeElement;
33
33
  }
34
34
  }
35
- /** @nocollapse */ /** @nocollapse */ McIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIcon, deps: [{ token: i0.ElementRef }, { token: 'mc-icon', attribute: true }], target: i0.ɵɵFactoryTarget.Component });
36
- /** @nocollapse */ /** @nocollapse */ McIcon.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: McIcon, selector: "[mc-icon]", inputs: { color: "color" }, usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".mc-icon-rotate_90{transform:rotate(90deg)}.mc-icon-rotate_180{transform:rotate(180deg)}.mc-icon-rotate_270{transform:rotate(270deg)}.mc-icon-flip-h{transform:scaleY(-1)}.mc-icon-flip-v{transform:scaleX(-1)}.mc-icon-flip-vh{transform:scale(-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIcon, decorators: [{
35
+ /** @nocollapse */ /** @nocollapse */ McIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIcon, deps: [{ token: i0.ElementRef }, { token: 'mc-icon', attribute: true }], target: i0.ɵɵFactoryTarget.Component });
36
+ /** @nocollapse */ /** @nocollapse */ McIcon.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: McIcon, selector: "[mc-icon]", inputs: { color: "color" }, usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".mc-icon-rotate_90{transform:rotate(90deg)}.mc-icon-rotate_180{transform:rotate(180deg)}.mc-icon-rotate_270{transform:rotate(270deg)}.mc-icon-flip-h{transform:scaleY(-1)}.mc-icon-flip-v{transform:scaleX(-1)}.mc-icon-flip-vh{transform:scale(-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIcon, decorators: [{
38
38
  type: Component,
39
39
  args: [{ selector: `[mc-icon]`, template: '<ng-content></ng-content>', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: ['color'], styles: [".mc-icon-rotate_90{transform:rotate(90deg)}.mc-icon-rotate_180{transform:rotate(180deg)}.mc-icon-rotate_270{transform:rotate(270deg)}.mc-icon-flip-h{transform:scaleY(-1)}.mc-icon-flip-v{transform:scaleX(-1)}.mc-icon-flip-vh{transform:scale(-1)}\n"] }]
40
40
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
@@ -6,18 +6,18 @@ import { McIcon, McIconCSSStyler } from './icon.component';
6
6
  import * as i0 from "@angular/core";
7
7
  export class McIconModule {
8
8
  }
9
- /** @nocollapse */ /** @nocollapse */ McIconModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- /** @nocollapse */ /** @nocollapse */ McIconModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIconModule, declarations: [McIcon,
9
+ /** @nocollapse */ /** @nocollapse */ McIconModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ /** @nocollapse */ /** @nocollapse */ McIconModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIconModule, declarations: [McIcon,
11
11
  McIconCSSStyler], imports: [CommonModule,
12
12
  A11yModule,
13
13
  PlatformModule], exports: [McIcon,
14
14
  McIconCSSStyler] });
15
- /** @nocollapse */ /** @nocollapse */ McIconModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIconModule, imports: [[
15
+ /** @nocollapse */ /** @nocollapse */ McIconModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIconModule, imports: [[
16
16
  CommonModule,
17
17
  A11yModule,
18
18
  PlatformModule
19
19
  ]] });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McIconModule, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McIconModule, decorators: [{
21
21
  type: NgModule,
22
22
  args: [{
23
23
  imports: [
@@ -31,9 +31,9 @@ export class MinValidator {
31
31
  this.validator = Validators.min(parseInt(this.min, 10));
32
32
  }
33
33
  }
34
- /** @nocollapse */ /** @nocollapse */ MinValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MinValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
35
- /** @nocollapse */ /** @nocollapse */ MinValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: MinValidator, selector: "[min][formControlName],[min][formControl],[min][ngModel]", inputs: { min: "min" }, host: { properties: { "attr.min": "min ? min : null" } }, providers: [MIN_VALIDATOR], usesOnChanges: true, ngImport: i0 });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MinValidator, decorators: [{
34
+ /** @nocollapse */ /** @nocollapse */ MinValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: MinValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
35
+ /** @nocollapse */ /** @nocollapse */ MinValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: MinValidator, selector: "[min][formControlName],[min][formControl],[min][ngModel]", inputs: { min: "min" }, host: { properties: { "attr.min": "min ? min : null" } }, providers: [MIN_VALIDATOR], usesOnChanges: true, ngImport: i0 });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: MinValidator, decorators: [{
37
37
  type: Directive,
38
38
  args: [{
39
39
  selector: '[min][formControlName],[min][formControl],[min][ngModel]',
@@ -75,9 +75,9 @@ export class MaxValidator {
75
75
  this.validator = Validators.max(parseInt(this.max, 10));
76
76
  }
77
77
  }
78
- /** @nocollapse */ /** @nocollapse */ MaxValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaxValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
79
- /** @nocollapse */ /** @nocollapse */ MaxValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: MaxValidator, selector: "[max][formControlName],[max][formControl],[max][ngModel]", inputs: { max: "max" }, host: { properties: { "attr.max": "max ? max : null" } }, providers: [MAX_VALIDATOR], usesOnChanges: true, ngImport: i0 });
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaxValidator, decorators: [{
78
+ /** @nocollapse */ /** @nocollapse */ MaxValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: MaxValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
79
+ /** @nocollapse */ /** @nocollapse */ MaxValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: MaxValidator, selector: "[max][formControlName],[max][formControl],[max][ngModel]", inputs: { max: "max" }, host: { properties: { "attr.max": "max ? max : null" } }, providers: [MAX_VALIDATOR], usesOnChanges: true, ngImport: i0 });
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: MaxValidator, decorators: [{
81
81
  type: Directive,
82
82
  args: [{
83
83
  selector: '[max][formControlName],[max][formControl],[max][ngModel]',
@@ -121,9 +121,9 @@ export class McNumberInput {
121
121
  }
122
122
  }
123
123
  }
124
- /** @nocollapse */ /** @nocollapse */ McNumberInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McNumberInput, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: 'step', attribute: true }, { token: 'big-step', attribute: true }, { token: 'min', attribute: true }, { token: 'max', attribute: true }], target: i0.ɵɵFactoryTarget.Directive });
125
- /** @nocollapse */ /** @nocollapse */ McNumberInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: McNumberInput, selector: "input[mcInput][type=\"number\"]", inputs: { bigStep: "bigStep", step: "step", min: "min", max: "max" }, host: { listeners: { "blur": "focusChanged(false)", "focus": "focusChanged(true)", "paste": "onPaste($event)", "keydown": "onKeyDown($event)" } }, exportAs: ["mcNumericalInput"], ngImport: i0 });
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: McNumberInput, decorators: [{
124
+ /** @nocollapse */ /** @nocollapse */ McNumberInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McNumberInput, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: 'step', attribute: true }, { token: 'big-step', attribute: true }, { token: 'min', attribute: true }, { token: 'max', attribute: true }], target: i0.ɵɵFactoryTarget.Directive });
125
+ /** @nocollapse */ /** @nocollapse */ McNumberInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McNumberInput, selector: "input[mcInput][type=\"number\"]", inputs: { bigStep: "bigStep", step: "step", min: "min", max: "max" }, host: { listeners: { "blur": "focusChanged(false)", "focus": "focusChanged(true)", "paste": "onPaste($event)", "keydown": "onKeyDown($event)" } }, exportAs: ["mcNumericalInput"], ngImport: i0 });
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McNumberInput, decorators: [{
127
127
  type: Directive,
128
128
  args: [{
129
129
  selector: `input[mcInput][type="number"]`,
@@ -0,0 +1,368 @@
1
+ import { FocusMonitor } from '@angular/cdk/a11y';
2
+ import { Directionality } from '@angular/cdk/bidi';
3
+ import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
4
+ import { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';
5
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, Inject, Input, NgZone, Optional, Self, ViewContainerRef, ViewEncapsulation } from '@angular/core';
6
+ import { FormControlName, FormGroupDirective, NG_VALIDATORS, NgControl, NgForm, NgModel } from '@angular/forms';
7
+ import { ErrorStateMatcher, MC_VALIDATION, PopUpTriggers, setMosaicValidation } from '@ptsecurity/mosaic/core';
8
+ import { McFormField, McFormFieldControl } from '@ptsecurity/mosaic/form-field';
9
+ import { MC_TOOLTIP_SCROLL_STRATEGY, McTooltipTrigger } from '@ptsecurity/mosaic/tooltip';
10
+ import { Subject } from 'rxjs';
11
+ import { McInputMixinBase } from './input';
12
+ import { MC_INPUT_VALUE_ACCESSOR } from './input-value-accessor';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/cdk/overlay";
15
+ import * as i2 from "@angular/cdk/bidi";
16
+ import * as i3 from "@angular/cdk/a11y";
17
+ import * as i4 from "@ptsecurity/mosaic/form-field";
18
+ import * as i5 from "@angular/forms";
19
+ import * as i6 from "@ptsecurity/mosaic/core";
20
+ let nextUniqueId = 0;
21
+ export class McPasswordToggle extends McTooltipTrigger {
22
+ constructor(overlay, elementRef, ngZone, scrollDispatcher, hostView, scrollStrategy, direction, focusMonitor, formField) {
23
+ super(overlay, elementRef, ngZone, scrollDispatcher, hostView, scrollStrategy, direction);
24
+ this.focusMonitor = focusMonitor;
25
+ this.formField = formField;
26
+ this._tabIndex = 0;
27
+ this.trigger = `${PopUpTriggers.Hover}`;
28
+ this.runFocusMonitor();
29
+ }
30
+ get content() {
31
+ return this.formField.control.elementType === 'password' ?
32
+ this.mcTooltipHidden :
33
+ this._content;
34
+ }
35
+ set content(content) {
36
+ this._content = content;
37
+ this.updateData();
38
+ }
39
+ get disabled() {
40
+ return this._disabled === undefined ? this.formField.disabled : this._disabled;
41
+ }
42
+ set disabled(value) {
43
+ this._disabled = coerceBooleanProperty(value);
44
+ this._disabled ? this.stopFocusMonitor() : this.runFocusMonitor();
45
+ }
46
+ get tabIndex() {
47
+ return this.disabled ? -1 : this._tabIndex;
48
+ }
49
+ set tabIndex(value) {
50
+ // If the specified tabIndex value is null or undefined, fall back to the default value.
51
+ this._tabIndex = value != null ? coerceNumberProperty(value) : 0;
52
+ }
53
+ get hidden() {
54
+ return this.formField.control.elementType === 'password';
55
+ }
56
+ ngOnDestroy() {
57
+ this.stopFocusMonitor();
58
+ }
59
+ toggle() {
60
+ if (this.disabled) {
61
+ return;
62
+ }
63
+ this.hide();
64
+ const input = this.formField.control;
65
+ input.toggleType();
66
+ this.updateData();
67
+ }
68
+ runFocusMonitor() {
69
+ this.focusMonitor.monitor(this.elementRef)
70
+ .subscribe((origin) => {
71
+ if (origin === 'keyboard') {
72
+ this.show();
73
+ }
74
+ else if (origin === null) {
75
+ this.hide();
76
+ }
77
+ });
78
+ }
79
+ stopFocusMonitor() {
80
+ this.focusMonitor.stopMonitoring(this.elementRef);
81
+ }
82
+ }
83
+ /** @nocollapse */ /** @nocollapse */ McPasswordToggle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McPasswordToggle, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.ScrollDispatcher }, { token: i0.ViewContainerRef }, { token: MC_TOOLTIP_SCROLL_STRATEGY }, { token: i2.Directionality, optional: true }, { token: i3.FocusMonitor }, { token: i4.McFormField }], target: i0.ɵɵFactoryTarget.Component });
84
+ /** @nocollapse */ /** @nocollapse */ McPasswordToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: McPasswordToggle, selector: "mc-password-toggle", inputs: { content: ["mcTooltipNotHidden", "content"], mcTooltipHidden: "mcTooltipHidden", disabled: "disabled", tabIndex: "tabIndex" }, host: { listeners: { "click": "toggle()", "keydown.ENTER": "toggle()", "keydown.SPACE": "toggle()" }, properties: { "class.mc-eye_16": "hidden", "class.mc-eye-crossed_16": "!hidden", "attr.tabindex": "disabled ? null : tabIndex", "attr.disabled": "disabled || null" }, classAttribute: "mc-password-toggle mc" }, exportAs: ["mcPasswordToggle"], usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McPasswordToggle, decorators: [{
86
+ type: Component,
87
+ args: [{
88
+ selector: `mc-password-toggle`,
89
+ exportAs: 'mcPasswordToggle',
90
+ template: '<ng-content></ng-content>',
91
+ host: {
92
+ class: 'mc-password-toggle mc',
93
+ '[class.mc-eye_16]': 'hidden',
94
+ '[class.mc-eye-crossed_16]': '!hidden',
95
+ '[attr.tabindex]': 'disabled ? null : tabIndex',
96
+ '[attr.disabled]': 'disabled || null',
97
+ '(click)': 'toggle()',
98
+ '(keydown.ENTER)': 'toggle()',
99
+ '(keydown.SPACE)': 'toggle()'
100
+ },
101
+ changeDetection: ChangeDetectionStrategy.OnPush,
102
+ encapsulation: ViewEncapsulation.None
103
+ }]
104
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
105
+ type: Inject,
106
+ args: [MC_TOOLTIP_SCROLL_STRATEGY]
107
+ }] }, { type: i2.Directionality, decorators: [{
108
+ type: Optional
109
+ }] }, { type: i3.FocusMonitor }, { type: i4.McFormField }]; }, propDecorators: { content: [{
110
+ type: Input,
111
+ args: ['mcTooltipNotHidden']
112
+ }], mcTooltipHidden: [{
113
+ type: Input
114
+ }], disabled: [{
115
+ type: Input
116
+ }], tabIndex: [{
117
+ type: Input
118
+ }] } });
119
+ export class McInputPassword extends McInputMixinBase {
120
+ // tslint:disable-next-line: naming-convention
121
+ constructor(elementRef, rawValidators, mcValidation, ngControl, ngModel, formControlName, parentForm, parentFormGroup, defaultErrorStateMatcher, inputValueAccessor, changeDetectorRef) {
122
+ super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
123
+ this.elementRef = elementRef;
124
+ this.rawValidators = rawValidators;
125
+ this.mcValidation = mcValidation;
126
+ this.ngModel = ngModel;
127
+ this.formControlName = formControlName;
128
+ this.changeDetectorRef = changeDetectorRef;
129
+ /**
130
+ * Implemented as part of McFormFieldControl.
131
+ * @docs-private
132
+ */
133
+ this.focused = false;
134
+ /**
135
+ * Implemented as part of McFormFieldControl.
136
+ * @docs-private
137
+ */
138
+ this.stateChanges = new Subject();
139
+ /**
140
+ * Implemented as part of McFormFieldControl.
141
+ * @docs-private
142
+ */
143
+ this.controlType = 'input-password';
144
+ this.elementType = 'password';
145
+ this.uid = `mc-input-${nextUniqueId++}`;
146
+ this._disabled = false;
147
+ this._required = false;
148
+ // If no input value accessor was explicitly specified, use the element as the input value
149
+ // accessor.
150
+ this._inputValueAccessor = inputValueAccessor || this.elementRef.nativeElement;
151
+ this.previousNativeValue = this.value;
152
+ // Force setter to be called in case id was not specified.
153
+ this.id = this.id;
154
+ }
155
+ /**
156
+ * Implemented as part of McFormFieldControl.
157
+ * @docs-private
158
+ */
159
+ get disabled() {
160
+ if (this.ngControl?.disabled !== null) {
161
+ return this.ngControl.disabled;
162
+ }
163
+ return this._disabled;
164
+ }
165
+ set disabled(value) {
166
+ this._disabled = coerceBooleanProperty(value);
167
+ // Browsers may not fire the blur event if the input is disabled too quickly.
168
+ // Reset from here to ensure that the element doesn't become stuck.
169
+ if (this.focused) {
170
+ this.focused = false;
171
+ this.stateChanges.next();
172
+ }
173
+ }
174
+ /**
175
+ * Implemented as part of McFormFieldControl.
176
+ * @docs-private
177
+ */
178
+ get id() {
179
+ return this._id;
180
+ }
181
+ set id(value) {
182
+ this._id = value || this.uid;
183
+ }
184
+ /**
185
+ * Implemented as part of McFormFieldControl.
186
+ * @docs-private
187
+ */
188
+ get required() {
189
+ return this._required;
190
+ }
191
+ set required(value) {
192
+ this._required = coerceBooleanProperty(value);
193
+ }
194
+ // this.elementRef.nativeElement.type = this._type;
195
+ /**
196
+ * Implemented as part of McFormFieldControl.
197
+ * @docs-private
198
+ */
199
+ get value() {
200
+ return this._inputValueAccessor.value;
201
+ }
202
+ set value(value) {
203
+ if (value === this.value) {
204
+ return;
205
+ }
206
+ this._inputValueAccessor.value = value;
207
+ this.stateChanges.next();
208
+ }
209
+ ngAfterContentInit() {
210
+ if (!this.ngControl) {
211
+ return;
212
+ }
213
+ if (this.mcValidation.useValidation) {
214
+ setMosaicValidation(this, this.changeDetectorRef);
215
+ }
216
+ }
217
+ ngOnChanges() {
218
+ this.stateChanges.next();
219
+ }
220
+ ngOnDestroy() {
221
+ this.stateChanges.complete();
222
+ }
223
+ ngDoCheck() {
224
+ if (this.ngControl) {
225
+ // We need to re-evaluate this on every change detection cycle, because there are some
226
+ // error triggers that we can't subscribe to (e.g. parent form submissions). This means
227
+ // that whatever logic is in here has to be super lean or we risk destroying the performance.
228
+ this.updateErrorState();
229
+ }
230
+ // We need to dirty-check the native element's value, because there are some cases where
231
+ // we won't be notified when it changes (e.g. the consumer isn't using forms or they're
232
+ // updating the value using `emitEvent: false`).
233
+ this.dirtyCheckNativeValue();
234
+ }
235
+ toggleType() {
236
+ this.elementType = this.elementType === 'password' ? 'text' : 'password';
237
+ }
238
+ /** Focuses the input. */
239
+ focus() {
240
+ this.elementRef.nativeElement.focus();
241
+ }
242
+ onBlur() {
243
+ if (this.ngControl?.control) {
244
+ const control = this.ngControl.control;
245
+ control.updateValueAndValidity({ emitEvent: false });
246
+ control.statusChanges.emit(control.status);
247
+ }
248
+ this.focusChanged(false);
249
+ }
250
+ /** Callback for the cases where the focused state of the input changes. */
251
+ focusChanged(isFocused) {
252
+ if (isFocused === this.focused) {
253
+ return;
254
+ }
255
+ this.focused = isFocused;
256
+ this.stateChanges.next({ focused: this.focused });
257
+ }
258
+ onInput() {
259
+ // This is a noop function and is used to let Angular know whenever the value changes.
260
+ // Angular will run a new change detection each time the `input` event has been dispatched.
261
+ // It's necessary that Angular recognizes the value change, because when floatingLabel
262
+ // is set to false and Angular forms aren't used, the placeholder won't recognize the
263
+ // value changes and will not disappear.
264
+ // Listening to the input event wouldn't be necessary when the input is using the
265
+ // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.
266
+ }
267
+ /**
268
+ * Implemented as part of McFormFieldControl.
269
+ * @docs-private
270
+ */
271
+ get empty() {
272
+ return !this.elementRef.nativeElement.value && !this.isBadInput();
273
+ }
274
+ /**
275
+ * Implemented as part of McFormFieldControl.
276
+ * @docs-private
277
+ */
278
+ onContainerClick() {
279
+ this.focus();
280
+ }
281
+ /** Does some manual dirty checking on the native input `value` property. */
282
+ dirtyCheckNativeValue() {
283
+ if (this.previousNativeValue !== this.value) {
284
+ this.previousNativeValue = this.value;
285
+ this.stateChanges.next();
286
+ }
287
+ }
288
+ /** Checks whether the input is invalid based on the native validation. */
289
+ isBadInput() {
290
+ // The `validity` property won't be present on platform-server.
291
+ return this.elementRef.nativeElement.validity?.badInput;
292
+ }
293
+ }
294
+ /** @nocollapse */ /** @nocollapse */ McInputPassword.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McInputPassword, deps: [{ token: i0.ElementRef }, { token: NG_VALIDATORS, optional: true, self: true }, { token: MC_VALIDATION, optional: true }, { token: i5.NgControl, optional: true, self: true }, { token: i5.NgModel, optional: true, self: true }, { token: i5.FormControlName, optional: true, self: true }, { token: i5.NgForm, optional: true }, { token: i5.FormGroupDirective, optional: true }, { token: i6.ErrorStateMatcher }, { token: MC_INPUT_VALUE_ACCESSOR, optional: true, self: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
295
+ /** @nocollapse */ /** @nocollapse */ McInputPassword.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McInputPassword, selector: "input[mcInputPassword]", inputs: { errorStateMatcher: "errorStateMatcher", placeholder: "placeholder", disabled: "disabled", id: "id", required: "required", value: "value" }, host: { listeners: { "blur": "onBlur()", "focus": "focusChanged(true)", "input": "onInput()" }, properties: { "attr.id": "id", "attr.type": "elementType", "attr.placeholder": "placeholder", "attr.disabled": "disabled || null", "required": "required" }, classAttribute: "mc-input mc-input-password" }, providers: [{
296
+ provide: McFormFieldControl, useExisting: McInputPassword
297
+ }], exportAs: ["mcInputPassword"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McInputPassword, decorators: [{
299
+ type: Directive,
300
+ args: [{
301
+ selector: `input[mcInputPassword]`,
302
+ exportAs: 'mcInputPassword',
303
+ host: {
304
+ class: 'mc-input mc-input-password',
305
+ // Native input properties that are overwritten by Angular inputs need to be synced with
306
+ // the native input element. Otherwise property bindings for those don't work.
307
+ '[attr.id]': 'id',
308
+ '[attr.type]': 'elementType',
309
+ '[attr.placeholder]': 'placeholder',
310
+ '[attr.disabled]': 'disabled || null',
311
+ '[required]': 'required',
312
+ '(blur)': 'onBlur()',
313
+ '(focus)': 'focusChanged(true)',
314
+ '(input)': 'onInput()'
315
+ },
316
+ providers: [{
317
+ provide: McFormFieldControl, useExisting: McInputPassword
318
+ }]
319
+ }]
320
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
321
+ type: Optional
322
+ }, {
323
+ type: Self
324
+ }, {
325
+ type: Inject,
326
+ args: [NG_VALIDATORS]
327
+ }] }, { type: undefined, decorators: [{
328
+ type: Optional
329
+ }, {
330
+ type: Inject,
331
+ args: [MC_VALIDATION]
332
+ }] }, { type: i5.NgControl, decorators: [{
333
+ type: Optional
334
+ }, {
335
+ type: Self
336
+ }] }, { type: i5.NgModel, decorators: [{
337
+ type: Optional
338
+ }, {
339
+ type: Self
340
+ }] }, { type: i5.FormControlName, decorators: [{
341
+ type: Optional
342
+ }, {
343
+ type: Self
344
+ }] }, { type: i5.NgForm, decorators: [{
345
+ type: Optional
346
+ }] }, { type: i5.FormGroupDirective, decorators: [{
347
+ type: Optional
348
+ }] }, { type: i6.ErrorStateMatcher }, { type: undefined, decorators: [{
349
+ type: Optional
350
+ }, {
351
+ type: Self
352
+ }, {
353
+ type: Inject,
354
+ args: [MC_INPUT_VALUE_ACCESSOR]
355
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { errorStateMatcher: [{
356
+ type: Input
357
+ }], placeholder: [{
358
+ type: Input
359
+ }], disabled: [{
360
+ type: Input
361
+ }], id: [{
362
+ type: Input
363
+ }], required: [{
364
+ type: Input
365
+ }], value: [{
366
+ type: Input
367
+ }] } });
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGFzc3dvcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvaW5wdXQvaW5wdXQtcGFzc3dvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFNBQVMsRUFFVCxVQUFVLEVBRVYsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLElBQUksRUFFSixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sRUFFVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsYUFBYSxFQUViLGFBQWEsRUFDYixtQkFBbUIsRUFDdEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixF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b250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBPdmVybGF5LCBTY3JvbGxEaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBGb3JtQ29udHJvbE5hbWUsXG4gICAgRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTmdDb250cm9sLFxuICAgIE5nRm9ybSxcbiAgICBOZ01vZGVsLFxuICAgIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIENhblVwZGF0ZUVycm9yU3RhdGUsXG4gICAgRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgTUNfVkFMSURBVElPTixcbiAgICBNY1ZhbGlkYXRpb25PcHRpb25zLFxuICAgIFBvcFVwVHJpZ2dlcnMsXG4gICAgc2V0TW9zYWljVmFsaWRhdGlvblxufSBmcm9tICdAcHRzZWN1cml0eS9tb3NhaWMvY29yZSc7XG5pbXBvcnQgeyBNY0Zvcm1GaWVsZCwgTWNGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQHB0c2VjdXJpdHkvbW9zYWljL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTUNfVE9PTFRJUF9TQ1JPTExfU1RSQVRFR1ksIE1jVG9vbHRpcFRyaWdnZXIgfSBmcm9tICdAcHRzZWN1cml0eS9tb3NhaWMvdG9vbHRpcCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE1jSW5wdXRNaXhpbkJhc2UgfSBmcm9tICcuL2lucHV0JztcbmltcG9ydCB7IE1DX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnLi9pbnB1dC12YWx1ZS1hY2Nlc3Nvcic7XG5cblxubGV0IG5leHRVbmlxdWVJZCA9IDA7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IGBtYy1wYXNzd29yZC10b2dnbGVgLFxuICAgIGV4cG9ydEFzOiAnbWNQYXNzd29yZFRvZ2dsZScsXG4gICAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnbWMtcGFzc3dvcmQtdG9nZ2xlIG1jJyxcbiAgICAgICAgJ1tjbGFzcy5tYy1leWVfMTZdJzogJ2hpZGRlbicsXG4gICAgICAgICdbY2xhc3MubWMtZXllLWNyb3NzZWRfMTZdJzogJyFoaWRkZW4nLFxuXG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAnZGlzYWJsZWQgPyBudWxsIDogdGFiSW5kZXgnLFxuICAgICAgICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkIHx8IG51bGwnLFxuXG4gICAgICAgICcoY2xpY2spJzogJ3RvZ2dsZSgpJyxcbiAgICAgICAgJyhrZXlkb3duLkVOVEVSKSc6ICd0b2dnbGUoKScsXG4gICAgICAgICcoa2V5ZG93bi5TUEFDRSknOiAndG9nZ2xlKCknXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIE1jUGFzc3dvcmRUb2dnbGUgZXh0ZW5kcyBNY1Rvb2x0aXBUcmlnZ2VyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoJ21jVG9vbHRpcE5vdEhpZGRlbicpXG4gICAgZ2V0IGNvbnRlbnQoKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtRmllbGQuY29udHJvbCBhcyBNY0lucHV0UGFzc3dvcmQpLmVsZW1lbnRUeXBlID09PSAncGFzc3dvcmQnID9cbiAgICAgICAgICAgIHRoaXMubWNUb29sdGlwSGlkZGVuIDpcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnQ7XG4gICAgfVxuXG4gICAgc2V0IGNvbnRlbnQoY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDtcblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBtY1Rvb2x0aXBIaWRkZW46IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkID09PSB1bmRlZmluZWQgPyB0aGlzLmZvcm1GaWVsZC5kaXNhYmxlZCA6IHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgICAgICB0aGlzLl9kaXNhYmxlZCA/IHRoaXMuc3RvcEZvY3VzTW9uaXRvcigpIDogdGhpcy5ydW5Gb2N1c01vbml0b3IoKTtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bmFtaW5nLWNvbnZlbnRpb25cbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMuX3RhYkluZGV4O1xuICAgIH1cblxuICAgIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIElmIHRoZSBzcGVjaWZpZWQgdGFiSW5kZXggdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgICAgICAgdGhpcy5fdGFiSW5kZXggPSB2YWx1ZSAhPSBudWxsID8gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIDogMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90YWJJbmRleDogbnVtYmVyID0gMDtcblxuICAgIGdldCBoaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtRmllbGQuY29udHJvbCBhcyBNY0lucHV0UGFzc3dvcmQpLmVsZW1lbnRUeXBlID09PSAncGFzc3dvcmQnO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBvdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICAgICAgaG9zdFZpZXc6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIEBJbmplY3QoTUNfVE9PTFRJUF9TQ1JPTExfU1RSQVRFR1kpIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICBAT3B0aW9uYWwoKSBkaXJlY3Rpb246IERpcmVjdGlvbmFsaXR5LFxuXG4gICAgICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgICAgIHByaXZhdGUgZm9ybUZpZWxkOiBNY0Zvcm1GaWVsZFxuICAgICkge1xuICAgICAgICBzdXBlcihvdmVybGF5LCBlbGVtZW50UmVmLCBuZ1pvbmUsIHNjcm9sbERpc3BhdGNoZXIsIGhvc3RWaWV3LCBzY3JvbGxTdHJhdGVneSwgZGlyZWN0aW9uKTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIgPSBgJHtQb3BVcFRyaWdnZXJzLkhvdmVyfWA7XG5cbiAgICAgICAgdGhpcy5ydW5Gb2N1c01vbml0b3IoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdG9wRm9jdXNNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLmhpZGUoKTtcblxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZm9ybUZpZWxkLmNvbnRyb2wgYXMgTWNJbnB1dFBhc3N3b3JkO1xuXG4gICAgICAgIGlucHV0LnRvZ2dsZVR5cGUoKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1bkZvY3VzTW9uaXRvcigpIHtcbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3JpZ2luID09PSAna2V5Ym9hcmQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZ2luID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcEZvY3VzTW9uaXRvcigpIHtcbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmKTtcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBgaW5wdXRbbWNJbnB1dFBhc3N3b3JkXWAsXG4gICAgZXhwb3J0QXM6ICdtY0lucHV0UGFzc3dvcmQnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdtYy1pbnB1dCBtYy1pbnB1dC1wYXNzd29yZCcsXG4gICAgICAgIC8vIE5hdGl2ZSBpbnB1dCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG92ZXJ3cml0dGVuIGJ5IEFuZ3VsYXIgaW5wdXRzIG5lZWQgdG8gYmUgc3luY2VkIHdpdGhcbiAgICAgICAgLy8gdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50LiBPdGhlcndpc2UgcHJvcGVydHkgYmluZGluZ3MgZm9yIHRob3NlIGRvbid0IHdvcmsuXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICAgICAnW2F0dHIudHlwZV0nOiAnZWxlbWVudFR5cGUnLFxuICAgICAgICAnW2F0dHIucGxhY2Vob2xkZXJdJzogJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgICAgICAgJ1tyZXF1aXJlZF0nOiAncmVxdWlyZWQnLFxuXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCknLFxuICAgICAgICAnKGZvY3VzKSc6ICdmb2N1c0NoYW5nZWQodHJ1ZSknLFxuICAgICAgICAnKGlucHV0KSc6ICdvbklucHV0KCknXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFt7XG4gICAgICAgIHByb3ZpZGU6IE1jRm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IE1jSW5wdXRQYXNzd29yZFxuICAgIH1dXG59KVxuZXhwb3J0IGNsYXNzIE1jSW5wdXRQYXNzd29yZCBleHRlbmRzIE1jSW5wdXRNaXhpbkJhc2UgaW1wbGVtZW50cyBNY0Zvcm1GaWVsZENvbnRyb2w8YW55PiwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssXG4gICAgQ2FuVXBkYXRlRXJyb3JTdGF0ZSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcblxuICAgIC8qKiBBbiBvYmplY3QgdXNlZCB0byBjb250cm9sIHdoZW4gZXJyb3IgbWVzc2FnZXMgYXJlIHNob3duLiAqL1xuICAgIEBJbnB1dCgpIGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcjtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWNGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1jRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1jRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgY29udHJvbFR5cGU6IHN0cmluZyA9ICdpbnB1dC1wYXNzd29yZCc7XG5cbiAgICBlbGVtZW50VHlwZTogc3RyaW5nID0gJ3Bhc3N3b3JkJztcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWNGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIHVpZCA9IGBtYy1pbnB1dC0ke25leHRVbmlxdWVJZCsrfWA7XG4gICAgcHJvdGVjdGVkIHByZXZpb3VzTmF0aXZlVmFsdWU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWNGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sPy5kaXNhYmxlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQnJvd3NlcnMgbWF5IG5vdCBmaXJlIHRoZSBibHVyIGV2ZW50IGlmIHRoZSBpbnB1dCBpcyBkaXNhYmxlZCB0b28gcXVpY2tseS5cbiAgICAgICAgLy8gUmVzZXQgZnJvbSBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSBlbGVtZW50IGRvZXNuJ3QgYmVjb21lIHN0dWNrLlxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1jRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdGhpcy51aWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWNGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8vIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGUgPSB0aGlzLl90eXBlO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNY0Zvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzLnZhbHVlKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBvcnRob2RveC1nZXR0ZXItYW5kLXNldHRlclxuICAgIHByaXZhdGUgX2lucHV0VmFsdWVBY2Nlc3NvcjogeyB2YWx1ZTogYW55IH07XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5hbWluZy1jb252ZW50aW9uXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgcHVibGljIHJhd1ZhbGlkYXRvcnM6IFZhbGlkYXRvcltdLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1DX1ZBTElEQVRJT04pIHByaXZhdGUgbWNWYWxpZGF0aW9uOiBNY1ZhbGlkYXRpb25PcHRpb25zLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ01vZGVsOiBOZ01vZGVsLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBmb3JtQ29udHJvbE5hbWU6IEZvcm1Db250cm9sTmFtZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICAgICAgZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBASW5qZWN0KE1DX0lOUFVUX1ZBTFVFX0FDQ0VTU09SKSBpbnB1dFZhbHVlQWNjZXNzb3I6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLCBwYXJlbnRGb3JtLCBwYXJlbnRGb3JtR3JvdXAsIG5nQ29udHJvbCk7XG5cbiAgICAgICAgLy8gSWYgbm8gaW5wdXQgdmFsdWUgYWNjZXNzb3Igd2FzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCB1c2UgdGhlIGVsZW1lbnQgYXMgdGhlIGlucHV0IHZhbHVlXG4gICAgICAgIC8vIGFjY2Vzc29yLlxuICAgICAgICB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IgPSBpbnB1dFZhbHVlQWNjZXNzb3IgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgICAgICAvLyBGb3JjZSBzZXR0ZXIgdG8gYmUgY2FsbGVkIGluIGNhc2UgaWQgd2FzIG5vdCBzcGVjaWZpZWQuXG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAodGhpcy5tY1ZhbGlkYXRpb24udXNlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgc2V0TW9zYWljVmFsaWRhdGlvbih0aGlzLCB0aGlzLmNoYW5nZURldGVjdG9yUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhpcyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lXG4gICAgICAgICAgICAvLyBlcnJvciB0cmlnZ2VycyB0aGF0IHdlIGNhbid0IHN1YnNjcmliZSB0byAoZS5nLiBwYXJlbnQgZm9ybSBzdWJtaXNzaW9ucykuIFRoaXMgbWVhbnNcbiAgICAgICAgICAgIC8vIHRoYXQgd2hhdGV2ZXIgbG9naWMgaXMgaW4gaGVyZSBoYXMgdG8gYmUgc3VwZXIgbGVhbiBvciB3ZSByaXNrIGRlc3Ryb3lpbmcgdGhlIHBlcmZvcm1hbmNlLlxuICAgICAgICAgICAgdGhpcy51cGRhdGVFcnJvclN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGRpcnR5LWNoZWNrIHRoZSBuYXRpdmUgZWxlbWVudCdzIHZhbHVlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlXG4gICAgICAgIC8vIHdlIHdvbid0IGJlIG5vdGlmaWVkIHdoZW4gaXQgY2hhbmdlcyAoZS5nLiB0aGUgY29uc3VtZXIgaXNuJ3QgdXNpbmcgZm9ybXMgb3IgdGhleSdyZVxuICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgdXNpbmcgYGVtaXRFdmVudDogZmFsc2VgKS5cbiAgICAgICAgdGhpcy5kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKTtcbiAgICB9XG5cbiAgICB0b2dnbGVUeXBlKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRUeXBlID0gdGhpcy5lbGVtZW50VHlwZSA9PT0gJ3Bhc3N3b3JkJyA/ICd0ZXh0JyA6ICdwYXNzd29yZCc7XG4gICAgfVxuXG4gICAgLyoqIEZvY3VzZXMgdGhlIGlucHV0LiAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIChjb250cm9sLnN0YXR1c0NoYW5nZXMgYXMgRXZlbnRFbWl0dGVyPHN0cmluZz4pLmVtaXQoY29udHJvbC5zdGF0dXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c0NoYW5nZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBDYWxsYmFjayBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBpbnB1dCBjaGFuZ2VzLiAqL1xuICAgIGZvY3VzQ2hhbmdlZChpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGlzRm9jdXNlZCA9PT0gdGhpcy5mb2N1c2VkKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh7IGZvY3VzZWQ6IHRoaXMuZm9jdXNlZCB9KTtcbiAgICB9XG5cbiAgICBvbklucHV0KCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbm9vcCBmdW5jdGlvbiBhbmQgaXMgdXNlZCB0byBsZXQgQW5ndWxhciBrbm93IHdoZW5ldmVyIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAvLyBBbmd1bGFyIHdpbGwgcnVuIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gZWFjaCB0aW1lIHRoZSBgaW5wdXRgIGV2ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQuXG4gICAgICAgIC8vIEl0J3MgbmVjZXNzYXJ5IHRoYXQgQW5ndWxhciByZWNvZ25pemVzIHRoZSB2YWx1ZSBjaGFuZ2UsIGJlY2F1c2Ugd2hlbiBmbG9hdGluZ0xhYmVsXG4gICAgICAgIC8vIGlzIHNldCB0byBmYWxzZSBhbmQgQW5ndWxhciBmb3JtcyBhcmVuJ3QgdXNlZCwgdGhlIHBsYWNlaG9sZGVyIHdvbid0IHJlY29nbml6ZSB0aGVcbiAgICAgICAgLy8gdmFsdWUgY2hhbmdlcyBhbmQgd2lsbCBub3QgZGlzYXBwZWFyLlxuICAgICAgICAvLyBMaXN0ZW5pbmcgdG8gdGhlIGlucHV0IGV2ZW50IHdvdWxkbid0IGJlIG5lY2Vzc2FyeSB3aGVuIHRoZSBpbnB1dCBpcyB1c2luZyB0aGVcbiAgICAgICAgLy8gRm9ybXNNb2R1bGUgb3IgUmVhY3RpdmVGb3Jtc01vZHVsZSwgYmVjYXVzZSBBbmd1bGFyIGZvcm1zIGFsc28gbGlzdGVucyB0byBpbnB1dCBldmVudHMuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNY0Zvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSAmJiAhdGhpcy5pc0JhZElucHV0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNY0Zvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogRG9lcyBzb21lIG1hbnVhbCBkaXJ0eSBjaGVja2luZyBvbiB0aGUgbmF0aXZlIGlucHV0IGB2YWx1ZWAgcHJvcGVydHkuICovXG4gICAgcHJvdGVjdGVkIGRpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNOYXRpdmVWYWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgaW5wdXQgaXMgaW52YWxpZCBiYXNlZCBvbiB0aGUgbmF0aXZlIHZhbGlkYXRpb24uICovXG4gICAgcHJvdGVjdGVkIGlzQmFkSW5wdXQoKSB7XG4gICAgICAgIC8vIFRoZSBgdmFsaWRpdHlgIHByb3BlcnR5IHdvbid0IGJlIHByZXNlbnQgb24gcGxhdGZvcm0tc2VydmVyLlxuICAgICAgICByZXR1cm4gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbGlkaXR5Py5iYWRJbnB1dDtcbiAgICB9XG59XG4iXX0=